让我们创建一个新对象:
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;