为什么" for-in"循环没有遍历原型属性?

时间:2014-11-23 19:06:46

标签: javascript

让我们创建一个新对象:

var dict = {};

已知事实是,在创建新对象后,此新对象将继承Object.prototype。因此,当我尝试检查原型属性是否被继承时,我会"toString" in objtrue获取var names = []; for (var name in dict) { names.push(name); }; names.length; 。但是当我想将新创建的对象的所有属性放入一个数组中时,我会看到在完成填充后数组是空的。看看下面的代码:

{{1}}

无法理解为什么会发生。

1 个答案:

答案 0 :(得分:2)

正如许多人在评论中所说,For-In循环只枚举原型链中的可枚举属性,并且继承的toString属性不可枚举。

如果要遍历object原型的非可枚举属性以查看是否存在“ToString”,那么您应该获取对象原型并使用{{获取其可枚举和不可枚举的属性1}}方法:

getOwnPropertyNames