Node.js console.log(object)打印空对象

Node.js console.log(object) prints empty object

本文关键字:打印 对象 object js console log Node      更新时间:2023-09-26

我很好奇Node.js通过console.log(object(.打印对象的方式

我在一个文件constructor.js 下有以下代码(来自《学习Javascript设计模式》一书(

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运行该代码将打印一个空对象。然而,Chrome会打印出我在HTML文件中运行代码时所期望的内容。

console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false} 

注意:我仍然可以打印Node下的属性(如console.log(person.car)(,只是不能打印对象本身(如console.log(person)(

为什么会这样?Chrome和Node是否使用单独的控制台对象原型,即使它们共享相同的javascript引擎?

节点中的console.log()使用util.inspect(),后者在对象上使用Object.keys(),后者只返回自己的可枚举属性。此外,默认情况下,如果未明确设置为true,则Object.defineProperty()会设置enumerable: false