我很好奇 Node.js 通过 console.log(object) 打印对象的方式。
我在文件 constructor.js 下有以下代码(来自 Learning Javascript Design Patterns 一书)
var defineProp = function(obj, key, value){
var config = {
value: value,
writable: true,
configurable: true
};
Object.defineProperty(obj, key, config );
}
var person = Object.create(Object.prototype);
defineProp(person, "car", "Delorean");
defineProp(person, "dateOfBirth", "1981");
defineProp(person, "hasBeard", false);
console.log(person); //This prints {} in Node.js
使用 >node constructor.js
运行该代码会打印一个空对象。然而,如果我在 HTML 文件中运行代码,Chrome 会打印出我期望的结果。
console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false}
注意:我仍然可以在 Node 下打印属性(例如 console.log(person.car)
),只是不能打印对象本身(例如 console.log(person)
)
这是为什么? Chrome 和 Node 是否为控制台对象使用不同的原型(prototype),即使它们共享相同的 javascript 引擎?
最佳答案
Node 中的
console.log()
使用 util.inspect()
,uses Object.keys()
在对象上,returns only own enumerable properties .另外,by default , Object.defineProperty()
设置 enumerable: false
如果您没有明确将其设置为 true
。
关于javascript - Node.js console.log(object) 打印空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32941243/