Sam*_*elN 6 javascript node.js
我很好奇Node.js通过console.log(对象)打印对象的方式.
我在文件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
Run Code Online (Sandbox Code Playgroud)
运行该代码并>node constructor.js打印一个空对象.然而,如果我在HTML文件中运行代码,Chrome会打印出我所期望的内容.
console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false}
Run Code Online (Sandbox Code Playgroud)
注意:我仍然可以console.log(person.car)在Node下打印属性(例如),而不是对象本身(例如console.log(person))
为什么是这样?Chrome和Node是否为控制台对象使用单独的原型,即使它们共享相同的JavaScript引擎?
console.log()在节点中使用util.inspect(),它在对象上使用,它Object.keys()仅返回自己的可枚举属性。另外,默认情况下,如果您没有明确将其设置为 ,则设置Object.defineProperty()为。enumerable: falsetrue