使用for循环遍历window对象

时间:2017-01-04 17:32:11

标签: javascript object for-in-loop window-object

基本上我想在window对象上打印所有属性,我正在使用:

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

我使用该代码获得了一个奇怪的输出。我想使用for in在新行上打印每个属性,我该怎么做?谢谢!

4 个答案:

答案 0 :(得分:4)

您为什么使用for/in,为什么使用document.write

第一个来自遗留的JavaScript,从我们将正确的对象密钥迭代直接融入JavaScript语言之前,并且因为它是bad idea(tm)取决于您正在迭代的内容,更合适的现代功能,不应再使用了。第二个是古代的低级函数,absolutely does not do what you think it does并且永远不会在现代代码中使用。它非常危险,任何仍然使用它的教程都会让你感到羞耻。

所以:用现代JS解决你的问题,而不是遗留甚至过时的JS。要获取对象的所有密钥,请使用Object.keys(...)并使用控制台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功能。在这种情况下,上面的代码和以下代码是等效的:

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

(如果我们使用单线箭头函数,或者箭头函数体使用this,它们等效 - 再次,非常值得快速阅读箭头函数的解释 - 通过)

这涵盖了所有可枚举的属性,这通常是您想要的。在极不可能的情况下,您需要可枚举的非可枚举属性,而是使用Object.getOwnProperties(...)

答案 1 :(得分:0)

Object.getOwnPropertyNames(window)应该为您提供window对象拥有的所有属性名称。然后,要在控制台中打印所有名称,您可以在阵列上使用forEach方法。

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

答案 2 :(得分:0)

你可以这样做,getOwnPropertyNames返回一个数组,你可以使用forEach迭代它。

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

答案 3 :(得分: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));

此代码的某些内容取自another stackoverflow answer