在Javascript中,“ for ... in”不会迭代原型的属性吗?

Hanfei Sun

在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 or something else我有点困惑。我了解toString是的一个属性,Object.prototype可以通过访问此属性buz.toString

但是,当我在Chrome中运行该代码段时,我没有看到该toString属性被打印(console.log),尽管注释中说应该由属性进行迭代for..in和打印。

有谁知道为什么不能通过“ for..in”来迭代原型的属性?

jfriend00

for x in obj仅迭代对象的可枚举属性(包括原型中的那些属性)。给定的属性可以标记为可枚举或不可枚举。因此,如果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"));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Javascript中,“ for ... in”不会迭代原型的属性吗?

来自分类Dev

在构造函数中初始化的JavaScript原型属性不会用分配的新原型覆盖

来自分类Dev

Javascript中的对象原型属性

来自分类Dev

Javascript中的对象原型属性

来自分类Dev

javascript中对象的原型属性

来自分类Dev

JavaScript中的原型和属性继承

来自分类Dev

如何从javascript类中访问原型属性?

来自分类Dev

JavaScript原型属性

来自分类Dev

JavaScript原型属性

来自分类Dev

Javascript 对象的原型属性

来自分类Dev

Javascript 原型属性'

来自分类Dev

属性是Javascript中的对象吗?

来自分类Dev

Javascript原型属性:基于原型的继承

来自分类Dev

有什么类似于Java中JavaScript的“原型”吗?

来自分类Dev

有什么类似于Java中JavaScript的“原型”吗?

来自分类Dev

我们可以覆盖Javascript DOM对象原型属性吗?

来自分类Dev

实例中的Javascript原型

来自分类Dev

JavaScript中的原型问题

来自分类Dev

与JavaScript中的原型混淆

来自分类Dev

JavaScript中的原型

来自分类Dev

JavaScript中的原型问题

来自分类Dev

实例中的Javascript原型

来自分类Dev

原型中具有数字属性的Javascript对象

来自分类Dev

Javascript未设置原型对象中未定义的属性

来自分类Dev

如何在javascript中从原型访问对象属性?

来自分类Dev

Javascript不继承原型属性

来自分类Dev

在TypeScript中定义原型属性

来自分类Dev

在TypeScript中定义原型属性

来自分类Dev

如何迭代对象原型的属性