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

第一个来自遗留 JavaScript,在我们将适当的对象键迭代直接融入 JavaScript 语言之前的时间,因为它是一个坏主意(tm),具体取决于您正在迭代的内容,有更合适的现代函数可用, 不应该再使用了。第二个是一个古老的低级函数,它绝对不会做你认为它做的事情,也不应该在现代代码中使用。这是非常危险的,任何仍然使用它并告诉你使用它的教程都应该为自己感到羞耻。

所以:用现代 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 语法。您不必使用它,但它非常紧凑且不牺牲可读性。它还使用模板文字而不是字符串文字,这是另一个非常方便的现代 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));

这段代码的一部分取自另一个stackoverflow答案

于 2017-01-04T17:50:58.123 回答