I'm curious about the way Node.js prints objects through console.log(object).
I have the following code (from Learning Javascript Design Patterns book) under a file constructor.js
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
Running with that code with >node constructor.js prints an empty object. Chrome however, prints what I would expect if I run the code inside an HTML file.  
console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false} 
Note: I can still print the attributes (such as console.log(person.car)) under Node, just not the object itself (such as console.log(person))
Why is this? Do Chrome and Node use separate prototypes for the console object, even though they share the same javascript engine?
console.log() in node utilizes util.inspect(), which uses Object.keys() on objects, which returns only own enumerable properties. Also, by default, Object.defineProperty() sets enumerable: false if you do not explicitly set it to true.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With