4

我知道for in循环可以帮助遍历对象、原型和集合的属性。

事实是,我需要迭代String.prototype,虽然console.log(String.prototype)显示完整的原型,但当我这样做时

for (var prop in String.prototype) {
    console.log(prop);
}

要显示原型中元素的名称,它什么也不显示,就好像它是空的一样。

JavaScript 引擎是否隐藏了基本的原型方法,还是我做错了什么?

4

3 回答 3

5

规范说:

如果本规范没有为命名属性明确指定属性的值,则使用表 7 中定义的默认值。

表 7 - 默认属性值

...

[[可枚举]] 假

所以它是不可枚举的(与所有内置属性一样)。

于 2011-10-14T16:52:40.400 回答
3

正如其他人所说,String.prototype 中的所有属性都是不可枚举的。要获取所有属性的列表,包括不可枚举的,请使用 Object.getOwnPropertyNames()(仅限较新的浏览器)

于 2011-10-14T16:57:13.663 回答
1

for(prop in obj)本机方法在迭代中不可见。

循环访问内置对象时可以找到属性。在这种情况下,页面使用自定义方法扩展了原型。框架(例如 jQuery)经常以这种方式修改内置对象。

于 2011-10-14T16:51:52.677 回答