2015-10-05 14 views
5

प्रिंट करता है मैं Node.js को console.log (ऑब्जेक्ट) के माध्यम से ऑब्जेक्ट प्रिंट करने के तरीके के बारे में उत्सुक हूं।Node.js console.log (ऑब्जेक्ट) खाली ऑब्जेक्ट

मैं (लर्निंग जावास्क्रिप्ट डिजाइन पैटर्न पुस्तक से) निम्नलिखित कोड एक फ़ाइल के तहत

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 

constructor.js >node constructor.js प्रिंट एक खाली वस्तु के साथ कि कोड के साथ चल रहा है है। क्रोम हालांकि, प्रिंट करता है कि अगर मैं एक HTML फ़ाइल के अंदर कोड चलाता हूं तो मैं क्या उम्मीद करूंगा।

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

नोट: मैं अभी भी (जैसे console.log(person.car) के रूप में) गुण नोड के अंतर्गत, बस वस्तु नहीं ही (जैसे console.log(person) के रूप में)

ऐसा क्यों है मुद्रित कर सकते हैं? क्या क्रोम और नोड कंसोल ऑब्जेक्ट के लिए अलग प्रोटोटाइप का उपयोग करते हैं, भले ही वे एक ही जावास्क्रिप्ट इंजन साझा करते हैं?

+4

यह सुनिश्चित नहीं है कि वे अलग क्यों हैं, लेकिन यदि आप 'कॉन्फ़िगरेशन' ऑब्जेक्ट में 'संख्यात्मक: सत्य 'जोड़ते हैं तो गुण node.js. में प्रिंट होंगे। – JohnnyHK

+0

संभावित डुप्लिकेट [नोड.जेएस स्ट्रिंग.प्रोटोटाइप के दृश्य विधियां?] (Http://stackoverflow.com/questions/12536510/view-methods-of-node-js-string-prototype) –

+2

डिफ़ॉल्ट रूप से, गुणों के साथ बनाया गया 'defineProperty()' गणना योग्य नहीं हैं। तो, शायद node.js केवल आपको समेकित गुण दिखा रहा है और क्रोम गैर-संख्यात्मक गुण दिखाता है। 'console.log()' मानक में निर्दिष्ट कुछ नहीं है और यह एक होस्ट ऑब्जेक्ट है, जावास्क्रिप्ट भाषा का आधिकारिक हिस्सा नहीं है, इसलिए विभिन्न वातावरणों में अलग-अलग व्यवहार हो सकते हैं। – jfriend00

उत्तर

3

console.log() नोड में util.inspect() का उपयोग करता है, जो uses Object.keys() ऑब्जेक्ट्स पर returns only own enumerable properties पर उपयोग करता है। इसके अलावा, by default, Object.defineProperty()enumerable: false सेट करता है यदि आप इसे स्पष्ट रूप से true पर सेट नहीं करते हैं।

संबंधित मुद्दे