2010-12-03 9 views
153

वहाँउद्धरण और उद्धरण के बिना ऑब्जेक्ट कुंजी के बीच क्या अंतर है?

obj = {'foo':'bar'} 

और

obj = {foo: 'bar'} 

मैं देखा है कि आप कुंजी में - उपयोग नहीं कर सकते आप उद्धरण का उपयोग नहीं करते जब बीच कोई अंतर है। लेकिन क्या यह वास्तव में एक फर्क पड़ता है? यदि हां, तो यह क्या है?

उत्तर

93

नहीं, उद्धरण कोई फर्क नहीं पड़ता है (जब तक कि आपने नोट किया नहीं है, आप एक कुंजी का उपयोग करना चाहते हैं जो वैध जावास्क्रिप्ट पहचानकर्ता नहीं है)।

एक तरफ ध्यान दें के रूप में, JSON data exchange formatकरता पहचानकर्ता को दोहरे उद्धरण चिह्नों की आवश्यकता है।

+62

वास्तव में, उद्धरण _can_ एक फर्क यदि आप एक संपत्ति नाम के रूप में एक अंकीय शाब्दिक का उपयोग करते हैं। उदाहरण के लिए, 'obj = {12e34: true}; '' obj = {' 12e34 ': true} जैसा नहीं है; '। पूर्व में आपको 'obj [' 1.2e + 35 ']' के माध्यम से संपत्ति तक पहुंचने की आवश्यकता होगी, जबकि बाद के लिए आप 'obj [' 12e34 '] 'का उपयोग करेंगे। [अधिक जानकारी के लिए मेरा उत्तर देखें।] (Http://stackoverflow.com/a/9568622/96656) –

+1

सच है लेकिन यह शानदार होगा अगर डबल कोट्स वैकल्पिक पहले अक्षर + अल्फा-न्यूमेरिक दिए गए थे और कुछ सफेद जगह प्रशंसकों उर्फ अदृश्य रिक्त स्थान या टैब? डेटा के लिए बहुत अच्छा गहराई से घोंसला नहीं है। –

4

यहां कोई अंतर नहीं है। बस शैली का मामला। ऐसा करने के कारणों में से एक 'सुपर' या 'क्लास' को कुंजी के रूप में उपयोग करने में सक्षम है क्योंकि वे आरक्षित कीवर्ड हैं।

कुछ लोग व्हाइटस्पेस के साथ एक स्ट्रिंग में गुजरने के लिए लुभाने वाले हो सकते हैं और फिर ['मुझे व्हाइटस्पेस मिल सकता है'] लेकिन मैं उस बुरे अभ्यास को बुलाऊंगा।

3

नहीं, जावास्क्रिप्ट नहीं। हालांकि, कुछ JSON पार्सर्स विफल हो जाएंगे जब कुंजी के चारों ओर उद्धरण मौजूद नहीं हैं।

+26

उद्धरण के बिना कुंजी JSON में अमान्य हैं। –

103

Unquoted property names/object keys in JavaScript से, इस विषय पर मेरी लेख:

उद्धरण केवल यदि संपत्ति नाम एक अंकीय शाब्दिक या a valid identifier name है छोड़ा जा सकता है।

[...]

ब्रैकेट अंकन सुरक्षित रूप से सभी प्रॉपर्टी नामों के लिए इस्तेमाल किया जा सकता।

[...]

डॉट अंकन केवल जब संपत्ति नाम एक वैध पहचानकर्ता नाम है इस्तेमाल किया जा कर सकते हैं।

ध्यान दें कि आरक्षित शब्दों को ईएस 5 में अनगिनत संपत्ति नामों के रूप में उपयोग करने की अनुमति है। हालांकि, ईएस 3 के साथ पिछड़ा संगतता के लिए, मैं उन्हें वैसे भी उद्धृत करने का सुझाव दूंगा।

मैंने एक टूल भी बनाया जो आपको बताएगा कि क्या किसी दिए गए संपत्ति का नाम उद्धरण और/या डॉट नोटेशन के बिना उपयोग किया जा सकता है। इसे mothereff.in/js-properties पर आज़माएं।

Screenshot

1

कुछ स्थितियों में, जहां वे अलग हैं कर रहे हैं। उदाहरण के लिए, यदि आप jQuery का उपयोग कर रहे हैं, और आप एक तत्व बनाने के लिए jQuery $() कमांड को कॉल करते समय पास करने के लिए पैरामीटर की एक सूची बना रहे हैं, उद्धृत शब्द पैरामीटर में बदल दिए जाते हैं, और गैर-उद्धृत शब्द फ़ंक्शंस में बदल जाते हैं। उदाहरण के लिए, "आकार" ऑब्जेक्ट का आकार विशेषता सेट करेगा, और आकार (कोई उद्धरण नहीं), ऑब्जेक्ट पर आकार() फ़ंक्शन को कॉल करेगा। , jQuery() देखें तल के पास:

जबकि दूसरा तर्क सुविधाजनक है, इसका लचीलापन अनपेक्षित परिणाम को जन्म दे सकता है (जैसे $ ("<input>", {आकार: "4"}) करार दिया।आकार विशेषता सेट करने के बजाय आकार() विधि)।

+0

मुझे नहीं लगता कि उदाहरण कहता है कि आप क्या सोचते हैं। आपके द्वारा उद्धृत किया गया मुद्दा यह है कि jQuery में आकार नामक एक विधि है, और विधि का चयन करके विधि आकार और विशेषता आकार के बीच का संघर्ष हल हो गया है। JQuery में ऐसे मामले हैं जहां एक स्ट्रिंग या किसी अन्य प्रकार के रूप में _Value_ को गुजरने से व्यवहार में बदलाव होता है, लेकिन कोट्स में बनाम कोट्स में वैध प्रॉपर्टी नाम वाले किसी संपत्ति को परिभाषित करने से कभी नहीं। –

-8

अंतर:: पिछले कोड ब्लॉक इस प्रकार के रूप में के बजाय लिखा जा सकता है

  1. नहीं बोली: यह एक वस्तु है जब वहाँ कोई उद्धरण है।

पहुँच वस्तु के सदस्य: object.member

  1. बोली है: यह एक नक्शा है जब वहाँ बोली।

पहुंच मानचित्र के सदस्य: वस्तु [सदस्य]

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