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

标签 javascript node.js 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。但是当输出到非交互式控制台时,我猜他们决定只显示可枚举属性。

关于javascript - 为什么使用 Object.create() 和 console.log() 时不显示属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116946/

相关文章:

javascript - Angular Js $httpParamSerializer 和 jQuery $.ajax

node.js - 请求中没有发送 req.params

javascript - 什么是 Service Worker 控制台? & 它在 Chrome 浏览器中的什么位置?

javascript - alert() 和 console.log() 在 Firefox 26 中不起作用

javascript - 控制台日志读取数据属性

Javascript 自定义滚动条

javascript - 如何在 javascript 中调用 Controller 而不是 html Angular JS

javascript - Google Chart - 定制 View - 列索引 0-4

javascript - 跳过在 Node.js 中进行测试所需的模块

javascript - Nodejs 使用 async/await 进行 Sequelize 事务而不回滚