我知道for in
循环可以帮助迭代对象,原型和集合的属性。
事实是,我需要迭代String.prototype
,虽然console.log(String.prototype)
显示完整的原型,但是当我这样做时
for (var prop in String.prototype) {
console.log(prop);
}
显示原型中元素的名称,它不显示任何内容,就好像它是空的一样。
JavaScript引擎是否隐藏了基本的原型方法,或者我做错了什么?
答案 0 :(得分:4)
规范说:
如果此规范未明确指定属性的值,则使用表7中定义的默认值。
表7 - 默认属性值
...
[[Enumerable]] false
因此它不可枚举(与所有内置属性一样)。
答案 1 :(得分:3)
与其他人所说的一样,String.prototype中的所有属性都是不可枚举的。要获取所有属性的列表,包括不可枚举的属性,请使用Object.getOwnPropertyNames()(仅限较新的浏览器)
答案 2 :(得分:1)
通过for(prop in obj)
迭代无法看到原生方法。
循环浏览内置对象时,可以找到属性。在这种情况下,页面使用自定义方法扩展了原型。框架(例如jQuery)通常以这种方式修改内置对象。