基本上我想打印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(...)
并使用Console 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回答中提取的