2017-01-04 6 views
2

にするために使用するウィンドウオブジェクトを反復基本的に私は私が使用しています、windowオブジェクトのすべてのプロパティを印刷したい:私はそのcode.Iと奇妙な出力を得る
ループ

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

は、各プロパティを印刷したいですfor inを使用して新しい行に、私はそれを行うことができますか?ありがとう!

+0

から撮影された、 '/ためのことに注意してくださいin 'は、保証された信頼できない値の集合を返すレガシーな構文構造です。もし必要ならば、現代のfor/ofを使ってください。実際は 'Object.keys'と' Object.getOwnProperties'を見てください。また、 'document.write'は本当に古くて非常に危険な関数であり、新しいコードでは使用すべきではありません。あなたのページに物事を注入する必要がある場合は、単に '物事を見たい '場合は' console.log'を使い、DOM APIを使う(ノードを作成して要素に追加するか、本文に追加する)。 –

答えて

3

なぜあなたはfor/inを使用していて、なぜあなたはdocument.writeを使用していますか?

最初のものは従来のJavaScriptから来ています。これは、適切なオブジェクトキーの繰り返しがJavaScript言語に焼き付けられてから、より適切なモダンな関数を使用して、反復処理の内容に応じてbad idea(tm)になるからですもはや使用すべきではありません。 2つ目は古代低レベル関数で、absolutely does not do what you think it doesであり、は決してでなければなりません。それは信じられないほど危険であり、それを使用するチュートリアルでは、それを使用するように指示したチュートリアルでは、それ自体が恥ずかしいはずです。

So:現代的なJSの問題を解決してください。旧式のJSでなくてはなりません。オブジェクトのすべてのキーを取得するには、Object.keys(...)を使用し、オブジェクトの内容を確認したい場合はConsole API(console.logなど)を使用します。

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

完了。

すべてのウィンドウのプロパティと機能は、通常、そのことを知りたいので、タイプごとにリストされています。また、array.forEachに注意してください。JavaScriptには、非常に便利な配列関数がたくさんあります。最後に、このコードではarrow functionが使用されています。これはJS構文の新機能です。あなたはそれを使用する必要はありませんが、可読性を犠牲にすることなく超コンパクトです。また、文字列リテラルではなく、template literalsを使用しています。これは、非常に便利な最新のJS機能です。上記のコードとフォローコードは、この場合には等価です:私たちはワンライナーの矢印の機能を使用するか、または矢印関数本体はthisを使用している場合

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

(彼らはない等価です - 再び、与えるだけの価値矢印の説明はすばやい読み込み機能)

これは、すべての列挙可能なプロパティをカバーします。非常にありそうもない場合、列挙型の列挙型以外の列挙型およびが必要です。Object.getOwnProperties(...)を使用します。

0

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

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

+0

上記のコードの問題点は何ですか?ダウン投票した人のコメント私は聞いてうれしいです.. – Agalo

+0

これは問題ありません、私は未知のdownvoteを補うためにupvoteします。 –

0

あなたはこのようにそれを行うことができ、getOwnPropertyNamesはあなたのforEachを使用していることを反復することができ、配列を返します。

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

+0

おかげで、とにかく 'for in'ループを使ってやっていますか? – MrShabana

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)); 

あなたは現代のJSを使用している場合、このコードの一部片がanother stackoverflow answer