基本上我想打印window
对象的所有属性,我正在使用:
for(var k in window){
document.write("window object = "+ Object.getOwnPropertyNames(window[k])+ "<br>");
}
我用该代码得到一个奇怪的输出。我想在新行上打印每个属性for in
,我该怎么做?谢谢!
基本上我想打印window
对象的所有属性,我正在使用:
for(var k in window){
document.write("window object = "+ Object.getOwnPropertyNames(window[k])+ "<br>");
}
我用该代码得到一个奇怪的输出。我想在新行上打印每个属性for in
,我该怎么做?谢谢!
你为什么使用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(...)。
Object.getOwnPropertyNames(window)
应该为您提供window
对象拥有的所有属性名称。然后要在控制台中打印所有名称,您可以使用forEach
数组上的方法。
Object.getOwnPropertyNames(window).forEach(function(currentValue){console.log(currentValue)});
您可以这样做,getOwnPropertyNames 返回一个数组,您可以使用 forEach 对其进行迭代。
Object.getOwnPropertyNames(window)
.forEach(function(object) {
document.writeln(object+"<br/>");
});
如果要在 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答案