当我使用文字语法创建对象时,将该对象打印到控制台会显示对象 foo
和 p
属性。
foo = {};
foo.p = 42;
console.log(foo);
console.log(foo.p);
Outputs:
{ p: 42 }
当我使用 Object.create() 语法时,使用 console.log 打印对象会显示一个空对象。
bar = Object.create({}, { p: { value: 42 } });
console.log(bar);
console.log(bar.p);
Outputs:
{}
42
为什么使用 console.log() 时 bar
不显示属性 p
?
最佳答案
我猜您正在使用 NodeJS 进行这些测试。
原因是在您的第二个示例中(使用 Object.create
),p
属性是不可枚举。当我在 NodeJS 上运行您的示例时,我在第二个示例中没有看到 p
因为它是不可枚举的,因为通过属性描述符创建的属性(例如 Object 的第二个参数中的属性) .create
默认为不可枚举,除非您包含 enumerable: true
。如果我向其中添加 enumerable: true
,我也会在第二个示例中看到 p
。
您看到的内容会根据您使用的环境而有所不同。例如,在 Chrome 的开发工具中,即使 p
不可枚举,我也会在两个示例中看到 p
。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举属性。
关于javascript - 为什么使用 Object.create() 和 console.log() 时不显示属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116946/