我们知道.in循环并不关心属性是对象的原型链的属性.所以它将输出属性all.让我们做一个测试
var o={};
for(var i in o){
console.log(o[i]);// output none
}
Run Code Online (Sandbox Code Playgroud)
一个对象(通过这种方式创建:{})来自Object,
但是当我们运行代码时,Object原型链方法(比如toString)没有输出
为什么Object的原型链中的方法(toString)没有输出????
toString不可枚举:
("toString" in {}) === true
({}).propertyIsEnumerable("toString") === false
Run Code Online (Sandbox Code Playgroud)
您可以创建自己的非可枚举属性,如下所示:
var object = {};
Object.defineProperty(object, "property", { enumerable: false, value: 5 });
Run Code Online (Sandbox Code Playgroud)
从技术上讲,你可以省略enumerable: false,因为这是默认值.
这在毯子部分15条款的规范中表明:
在每种情况下,本节中
Function描述的内置对象的length属性都具有属性{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.除非另有说明,否则本节中描述的每个其他属性都具有属性{ [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |