for ... in循环和原型链

时间:2012-04-11 03:24:18

标签: javascript

我们知道.in循环并不关心属性是对象的原型链的属性。所以它将输出属性all。 让我们做一个测试

var o={};
for(var i in o){
    console.log(o[i]);//  output  none
}

一个对象(通过这种方式创建:{})来自Object,
但是当我们运行代码时,Object原型链方法(如toString)并没有输出 为什么Object的原型链中的方法(toString)没有输出????

1 个答案:

答案 0 :(得分:5)

toString不是enumerable

("toString" in {}) === true
({}).propertyIsEnumerable("toString") === false

您可以创建自己的非可枚举属性,如下所示:

var object = {};

Object.defineProperty(object, "property", { enumerable: false, value: 5 });

从技术上讲,您可以省略enumerable: false,因为这是默认设置。


在总括第15节条款中表示in the spec

  

在每种情况下,此子句中描述的内置Function对象的length属性都具有属性{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }除非另有说明,否则此子句中描述的所有其他属性都具有属性{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }