gpt4 book ai didi

javascript - 在 Javascript 中, "for...in"不会迭代原型(prototype)的属性?

转载 作者:行者123 更新时间:2023-11-29 10:38:03 24 4
gpt4 key购买 nike

在 MDN ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty) 上,我看到了这样的片段:

var buz = {
fog: 'stack'
};

for (var name in buz) {
if (buz.hasOwnProperty(name)) {
console.log('this is fog (' + name + ') for sure. Value: ' + buz[name]);
}
else {
console.log(name); // toString or something else
}
}

在片段中,console.log(name);//toString 或其他东西 让我有点困惑。我知道 toStringObject.prototype 的属性,并且可以通过 buz.toString 访问此属性。

但是,当我在 Chrome 中运行代码片段时,我没有看到 toString 属性被打印出来(console.log),尽管评论说它应该由 for 迭代。 .in 并打印..

有没有人知道为什么一个人的原型(prototype)中的属性不能被“for..in”迭代?

最佳答案

for x in obj 仅迭代对象的可枚举属性(包括原型(prototype)上的属性)。给定的属性可以标记为可枚举或不可枚举。因此,如果 for/in 正在跳过某些属性,那么这很可能是因为该属性未配置为可枚举。

在此处查看工作演示:http://jsfiddle.net/jfriend00/gyc9gnmj/这显示了如何仅使用 for x in obj 迭代可枚举属性。

而且,实际上,您可以看到 toString() 方法被标记为 enumerable: false,代码如下:

function log(x) {
document.write(JSON.stringify(x));
}

var buz = {
fog: 'stack'
};

log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(buz), "toString"));

关于javascript - 在 Javascript 中, "for...in"不会迭代原型(prototype)的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33643697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com