Javascript 为什么在使用Object.create()和console.log()时不显示属性?
当我使用文字语法创建对象时,将对象打印到控制台会显示对象Javascript 为什么在使用Object.create()和console.log()时不显示属性?,javascript,node.js,console.log,Javascript,Node.js,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)
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
,因为它是不可枚举的,因为属性是通过属性描述符创建的,例如通过对象的第二个参数中的属性。创建默认为不可枚举,除非包含可枚举:true
。如果我向它添加enumerable:true
,我也会在第二个示例中看到p
您看到的内容将因您使用的环境而异。例如,在Chrome的开发工具中,我在两个示例中都看到了p
,即使p
不可枚举。但当输出到非交互式控制台时,我想他们决定只显示可枚举属性。我在控制台中尝试了它,它工作正常
您使用的是哪种浏览器,在我的chrome 49中运行良好您使用的是什么环境?