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

Why are properties not shown when using Object.create() and 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

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

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

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

我在控制台试了一下,运行正常。