我知道for in
循环可以帮助遍历对象、原型和集合的属性。
事实是,我需要迭代String.prototype
,虽然console.log(String.prototype)
显示完整的原型,但当我这样做时
for (var prop in String.prototype) {
console.log(prop);
}
要显示原型中元素的名称,它什么也不显示,就好像它是空的一样。
JavaScript 引擎是否隐藏了基本的原型方法,还是我做错了什么?
我知道for in
循环可以帮助遍历对象、原型和集合的属性。
事实是,我需要迭代String.prototype
,虽然console.log(String.prototype)
显示完整的原型,但当我这样做时
for (var prop in String.prototype) {
console.log(prop);
}
要显示原型中元素的名称,它什么也不显示,就好像它是空的一样。
JavaScript 引擎是否隐藏了基本的原型方法,还是我做错了什么?
规范说:
如果本规范没有为命名属性明确指定属性的值,则使用表 7 中定义的默认值。
表 7 - 默认属性值
...
[[可枚举]] 假
所以它是不可枚举的(与所有内置属性一样)。
正如其他人所说,String.prototype 中的所有属性都是不可枚举的。要获取所有属性的列表,包括不可枚举的,请使用 Object.getOwnPropertyNames()(仅限较新的浏览器)
for(prop in obj)
本机方法在迭代中不可见。
循环访问内置对象时可以找到属性。在这种情况下,页面使用自定义方法扩展了原型。框架(例如 jQuery)经常以这种方式修改内置对象。