2016-07-23 5 views
9

निम्न उदाहरण से पता चलता है कि JSON.stringify() स्ट्रिंग "{}" रिटर्न SpeechSynthesisVoice वस्तुओं के लिए:JSON.stringify किसी ऑब्जेक्ट के लिए रिक्त ऑब्जेक्ट नोटेशन "{}" क्यों लौटाता है जिसमें प्रॉपर्टी होती है?

var voiceObject = window.speechSynthesis.getVoices()[0]; 
JSON.stringify(voiceObject); //returns "{}"? 

पूरा उदाहरण: JSFiddle

ऐसा क्यों है "{}" और कुछ "{voiceURI: "Google Deutsch", name: "Google Deutsch", lang: "de-DE", localService: false, default: false}" की तरह नहीं लौट रहा है?

ध्यान दें कि उपर्युक्त उदाहरण क्रोम या आईओएस के लिए काम नहीं करता है; यह मोज़िला फ़ायरफ़ॉक्स के लिए लक्षित है।

उत्तर

10

JSON.stringify, एक वस्तु के खुद, गणनीय गुण (spec) है कि मानों कार्य या undefined (JSON उन नहीं है के रूप में) नहीं हैं लोगों को यह अपने प्रोटोटाइप से विरासत, किसी भी है कि परिभाषित कर रहे हैं बाहर छोड़ने गैर-गणनाशील के रूप में, और जिसका मूल्य किसी फ़ंक्शन संदर्भ या undefined है।

तो स्पष्ट रूप से, आप जिस वस्तु को getVoices()[0] से वापस प्राप्त करते हैं, उसके पास कोई भी, समृद्ध गुण नहीं है जिसे JSON में प्रदर्शित किया जा सकता है। उनके सभी गुणों को या तो विरासत में प्राप्त किया जाना चाहिए, जिसे गैर-गणनीय के रूप में परिभाषित किया जाना चाहिए, या (हालांकि यह शायद यहां मामला नहीं है) फ़ंक्शन या undefined

+3

या वे गुण जो वैध JSON डेटा प्रकार नहीं हैं, हालांकि यह शायद प्रश्न के उदाहरण से प्रासंगिक नहीं है। –

+0

ठीक है, धन्यवाद! मैंने यह दिखाने के लिए उदाहरण अपडेट किया है कि ध्वनि ऑब्जेक्ट में सामान्य गुण जैसे कुछ गुण हैं। आप कैसे देख सकते हैं (डीबग व्यू या कंसोल आउटपुट से) कि इन गुणों को विरासत में मिला है? –

+0

@MathiasS: जब '.hasOwnProperty()' झूठी – slebetman

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