javascript - 为什么 "for-in"循环不遍历原型(prototype)属性?

标签 javascript

让我们创建一个新对象:

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/

相关文章:

javascript - 使用 Observable 检测变量的变化

javascript - 无法使用 Ant 在 Javascript 或 Jython 中创建 XSLT 扩展

javascript - 如何使用 redux 替换数组中的值?

javascript - 带有文件索引的 Node.js 文件服务器

Javascript:根据对象内部的值从数组中删除对象

javascript - 使用 underscore.js 转换数组

javascript - SQL 查询错误 - 修复建议?

javascript - Google Apps 脚本重命名事件文档

javascript - 如何为 Jquery 函数设置数据选择

javascript - video.js 的回调函数?