javascript – 为什么“for-in”循环不会遍历原型属性?

让我们创建一个新对象:

var dict = {};

已知的事实是,在创建新对象之后,此新对象将继承Object.prototype.因此,当我尝试检查原型的属性是否被继承时,我在obj中执行“toString”,我得到了它.但是当我想将新创建的对象的所有属性放入一个数组中时,我会看到在完成填充后数组是空的.看看下面的代码:

var names = [];

for (var name in dict) {
  names.push(name);
}; 
names.length;

不明白为什么会这样.

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

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

var dict = {};
var objPrototype = Object.getPrototypeOf(dict);

var propertyNames = Object.getOwnPropertyNames(objPrototype);

propertyNames.length;
点赞