让我们创建一个新对象:
var dict = {};
已知的事实是,在创建一个新对象后,这个新对象继承了 Object.prototype
。因此,当我尝试检查原型(prototype)的属性是否被继承时,我在 obj 中执行了 "toString"
,为此我得到了 true
。但是当我想将新创建的对象的所有属性放入一个数组中时,我会发现数组在填充完成后是空的。看看下面的代码:
var names = [];
for (var name in dict) {
names.push(name);
};
names.length;
不明白为什么会这样。
最佳答案
很多评论说,For-In循环只枚举原型(prototype)链中可枚举的属性,继承的toString
属性是不可枚举的。
如果您想遍历 object
原型(prototype)的不可枚举属性以查看“ToString”是否存在,那么您应该获取对象原型(prototype)并获取其可枚举和不可枚举属性,使用getOwnPropertyNames
方法:
var dict = {};
var objPrototype = Object.getPrototypeOf(dict);
var propertyNames = Object.getOwnPropertyNames(objPrototype);
propertyNames.length;
关于javascript - 为什么 "for-in"循环不遍历原型(prototype)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27093062/