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

当我使用文字语法创build对象时,将对象打印到控制台显示对象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()时不显示属性p

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

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

你看到的将取决于你使用的环境。 例如,在Chrome的devtools中,即使p不是可枚举的,我也可以在两个例子中看到p 。 但是,当输出到一个非交互式的控制台,我猜他们决定只显示枚举属性。

我在控制台中试过,工作正常。

在这里输入图像描述