2012-12-29 16 views
6

JSONजावास्क्रिप्ट में ऑब्जेक्ट्स मेमोरी में कैसे संग्रहीत हैं?

एक वस्तु की आधिकारिक दस्तावेज पर नाम/मान युग्म के एक अव्यवस्थित सेट है। एक वस्तु {{बाएं ब्रेस) के साथ शुरू होती है और} (दाएं ब्रेस) के साथ समाप्त होती है। प्रत्येक नाम है जिसके बाद: (कोलन) और नाम/मान जोड़े अलग हो जाते हैं, (अल्पविराम)।

नोट मैं जावास्क्रिप्ट नौसिखिया हूँ, और जावास्क्रिप्ट में नाम JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) से ही, मैं यह सोचते हैं हूँ वस्तुओं JSON के रूप में ही हैं। अगर मुझे यह गलत लगता है तो कृपया मुझे सही करें।

उपर्युक्त परिभाषा से ऐसा लगता है कि जावास्क्रिप्ट ऑब्जेक्ट्स को शायद हैशैप या बीएसटी या कुछ समान डेटा-स्ट्रक्चर द्वारा कार्यान्वित किया जाता है।

लेकिन जब मैं नोड खोल में महत्वपूर्ण मान जोड़े डालता हूं, तो उन्हें क्रमबद्ध तरीके से डाला जाता है। यह वही मैं नोड खोल में करने की कोशिश की

> var a = {} 
undefined 
> a['k1'] = 'a1' 
'a1' 
> a['k3'] = 'a3' 
'a3' 
> a['k2'] = 'a2' 
'a2' 
> a['k4'] = 'a4' 
'a4' 
> a['k5'] = 'a5' 
'a5' 
> a 
{ k1: 'a1', 
    k3: 'a3', 
    k2: 'a2', 
    k4: 'a4', 
    k5: 'a5' } 

अब, मुद्रण a कुंजी मान जोड़े प्रविष्टि के रूप में एक ही क्रम में लौटा दिया जाता है पर है। तो मेरे प्रश्न हैं:

  • क्या मुझे कुंजी के लिए तेज़ लुकअप मिलते हैं? मेरा मतलब ओ की जटिलता (लॉग (एन)) या बेहतर है।
  • यदि JSON एक बीएसटी, हैशमैप या कुछ समान डीएस जैसे डेटा-स्ट्रक्चर का उपयोग नहीं कर रहा है, तो स्मृति के तहत जेएसओएन ऑब्जेक्ट्स वास्तव में कैसे रखे गए हैं?

अद्यतन ठीक है, तो क्या जावास्क्रिप्ट वस्तुओं के बारे में। क्या कोई जावास्क्रिप्ट ऑब्जेक्ट्स के अंतर्निहित कार्यान्वयन पर टिप्पणी कर सकता है।

+4

JSON एक संकेत है, जैसे XML एक और है। हालांकि यह जावास्क्रिप्ट ऑब्जेक्ट्स पर आधारित है, इसलिए नाम। इसके अलावा, कोई संबंध नहीं है। –

+0

कोई "JSON ऑब्जेक्ट्स" नहीं हैं।यहां तक ​​कि नाम को यह भी कहना चाहिए कि ("ऑब्जेक्ट नोटेशन ऑब्जेक्ट"?) – JJJ

+0

@ फ़ोरियन मार्गन आपकी टिप्पणी के लिए धन्यवाद साथी। यह सहायक था। –

उत्तर

6

आप JSON, जो है भ्रमित कर रहे हैं केवल एक पाठ आधारित क्रमबद्धता प्रारूप सरल डेटा विनिमय को सक्षम करने, और सादे javascript ऑब्जेक्ट, जो गुणों की अव्यवस्थित सूची नहीं है।

रूप the MDN से कहा:

एक वस्तु गुण का एक संग्रह है, और एक संपत्ति एक नाम और एक मूल्य के बीच सहयोग है। संपत्ति का मूल्य एक फ़ंक्शन हो सकता है, जिसे तब ऑब्जेक्ट की विधि के रूप में जाना जाता है।

ऑब्जेक्ट गुणों को हैश मानचित्र के रूप में देखा जा सकता है, क्योंकि उनका आदेश नहीं दिया जाता है। लेकिन यह अक्सर थोड़ा अधिक जटिल होता है: जब ऑब्जेक्ट्स प्रोटोटाइप आधारित होते हैं, तो ऑब्जेक्ट पर पाए जाने वाले गुणों को उस प्रोटोटाइप के ऊपर की खोज नहीं की जाती है।

जावास्क्रिप्ट ऑब्जेक्ट्स के साथ आपको एक गारंटीकृत तेज़ लुक-अप मिलता है, क्योंकि यह कार्यान्वयन का एक अनिवार्य हिस्सा है। लेकिन कार्यान्वयन को मानक द्वारा परिभाषित नहीं किया गया है और प्रत्येक इंजन का अपना स्वयं का हो सकता है।

+0

आपकी व्याख्या के लिए धन्यवाद। यह वास्तव में कई गलत धारणाओं को स्पष्ट किया था। :) –

+0

क्या कोई कारण है कि मुझे पाइथन के शब्दकोश या सी ++ एसटीएल मानचित्र के विपरीत, क्रमबद्ध फैशन (सम्मिलन के क्रम के समान) में जावास्क्रिप्ट ऑब्जेक्ट मुद्रित हो रहा है। –

+0

मैंने कहा कि यह सामान्य नहीं है लेकिन अब, एक अनियंत्रित (और अनगिनत) सुविधा है। इसके बारे में इस निराशा को देखें: http://code.google.com/p/v8/issues/detail?id=164 –

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