使用Object.create()和console.log()时为什么不显示属性?

时间:2016-03-20 17:21:18

标签: javascript node.js console.log

使用文字语法创建对象时,将对象打印到控制台会显示对象foop属性。

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

2 个答案:

答案 0 :(得分:2)

我猜你正在使用NodeJS进行这些测试。

原因是在第二个示例中(使用Object.create),p属性不可枚举。当我在NodeJS上运行你的例子时,我在第二个例子中没有看到p,因为它是不可枚举的,因为通过属性描述符创建的属性,例如你Object.create的第二个参数中的属性描述符默认为除非您包含enumerable: true,否则不可枚举。如果我向其添加enumerable: true,我也会在第二个示例中看到p

您看到的内容会因您使用的环境而异。例如,在Chrome的devtools中,即使p不可枚举,我也会在两个示例中看到p。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举的属性。

答案 1 :(得分:0)

我在控制台中尝试了它并且工作正常。

enter image description here