2

基本的に、windowオブジェクトのすべてのプロパティを印刷したいのですが、次を使用しています:

for(var k in window){
document.write("window object = "+ Object.getOwnPropertyNames(window[k])+ "<br>");
}

そのコードで奇妙な出力が得られます。 を使用して各プロパティを新しい行に出力したいのですがfor in、どうすればよいですか? ありがとう!

4

4 に答える 4

4

なぜ を使用していてfor/in、なぜ を使用しているのdocument.writeですか?

1 つ目は、適切なオブジェクト キーの繰り返しが JavaScript 言語に焼き付けられる前の時代から、レガシー JavaScript から来ています。繰り返しているものによっては、より適切な最新の関数を利用できるため、それは悪い考え(tm)であるためです。 、もう使用しないでください。2 つ目は、古い低レベル関数であり、あなたが思っていることをまったく実行せず、現代のコードでは決して使用すべきではありません。それは信じられないほど危険であり、それを使用するように指示されたにもかかわらず、まだそれを使用しているチュートリアルは、それ自体を恥じるべきです.

したがって、レガシーまたは廃止されたJSではなく、最新のJSで問題を解決してください。オブジェクトのすべてのキーを取得するには、オブジェクトの内容を確認したいだけであれば、Object.keys(...)コンソール API ( など) を使用します。console.log

Object.keys(window).forEach( key => {
  let type =  typeof window[key];
  console.log(`${key} (${type})`);
});

終わり。

すべてのウィンドウのプロパティと関数は、通常はそれについて知りたいので、タイプとともに、それぞれの行にリストされています。また、array.forEach呼び出し: JavaScript には非常に便利な配列関数が大量にあることに注意してください。最後に、このコードはアロー関数を使用しています。これは、JS 構文のかなり優れた新しい部分です。使用する必要はありませんが、読みやすさを犠牲にすることなく非常にコンパクトです。また、文字列リテラルではなくテンプレート リテラルも使用します。これは、もう 1 つの非常に便利な最新の JS 機能です。この場合、上記のコードと次のコードは同等です。

Object.keys(window).forEach( function(key) {
  var type =  typeof window[key];
  console.log(key + " (" + type + ")");
});

(ワンライナーアロー関数を使用する場合、またはアロー関数本体で使用する場合、それらは同等ではありませんthis。繰り返しますが、アロー関数の説明を簡単に読む価値があります)

これはすべての列挙可能なプロパティをカバーし、通常はこれで十分です。ごくまれに、列挙可能なプロパティと列挙できないプロパティが必要な場合は、 Object.getOwnProperties(...)を使用します。

于 2017-01-04T17:46:52.113 に答える
0

Object.getOwnPropertyNames(window)オブジェクトが所有するすべてのプロパティ名を提供する必要がありwindowます。次に、コンソールにすべての名前を出力するためにforEach、配列のメソッドを利用できます。

Object.getOwnPropertyNames(window).forEach(function(currentValue){console.log(currentValue)});

于 2017-01-04T17:41:27.120 に答える
0

getOwnPropertyNames は配列を返し、forEach を使用してそれを繰り返すことができます。

Object.getOwnPropertyNames(window)
    .forEach(function(object) {
            document.writeln(object+"<br/>");
    });

于 2017-01-04T17:41:59.030 に答える
0

HTML の div 内のすべてのプロパティを出力する場合:

var div = document.createElement("div");
document.body.appendChild(div);

var obj = window;

do Object.getOwnPropertyNames(obj).forEach(function(name) {
    div.innerHTML = div.innerHTML + name + "<br/>";
  });
while(obj = Object.getPrototypeOf(obj));

このコードの一部は、別のスタックオーバーフローの回答から取得されました

于 2017-01-04T17:50:58.123 に答える