为什么在使用 Object.create() 和 console.log() 时不显示属性?
Why are properties not shown when using Object.create() and console.log()?
当我使用文字语法创建对象时,将对象打印到控制台会显示对象 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
不可枚举。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举的属性。
我在控制台试了一下,运行正常。
当我使用文字语法创建对象时,将对象打印到控制台会显示对象 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
不可枚举。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举的属性。
我在控制台试了一下,运行正常。