使用文字语法创建对象时,将对象打印到控制台会显示对象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
?
答案 0 :(得分:2)
我猜你正在使用NodeJS进行这些测试。
原因是在第二个示例中(使用Object.create
),p
属性不可枚举。当我在NodeJS上运行你的例子时,我在第二个例子中没有看到p
,因为它是不可枚举的,因为通过属性描述符创建的属性,例如你Object.create
的第二个参数中的属性描述符默认为除非您包含enumerable: true
,否则不可枚举。如果我向其添加enumerable: true
,我也会在第二个示例中看到p
。
您看到的内容会因您使用的环境而异。例如,在Chrome的devtools中,即使p
不可枚举,我也会在两个示例中看到p
。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举的属性。
答案 1 :(得分:0)