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


209

क्या इसमें कोई अंतर है

obj = {'foo': 'bar'} 

तथा

obj = {foo: 'bar'}

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

जवाबों:


136

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

एक साइड नोट के रूप में, JSON डेटा विनिमय प्रारूप को पहचानकर्ताओं के आसपास दोहरे उद्धरण चिह्नों की आवश्यकता होती है (और एकल उद्धरण की अनुमति नहीं देता है)।


88
वास्तव में, यदि आप एक संख्यात्मक शाब्दिक का उपयोग एक संपत्ति के नाम के रूप में करते हैं , तो उद्धरण अंतर बना सकते हैं। उदाहरण के लिए, के obj = { 12e34: true };रूप में ही नहीं है obj = { '12e34': true };। पूर्व में आपको उस संपत्ति का उपयोग करने की आवश्यकता होगी obj['1.2e+35'], जबकि बाद के लिए आप उपयोग करेंगे obj['12e34']अधिक जानकारी के लिए मेरा जवाब देखें।
मथियास बिएनेंस

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

124

से गैर उद्धृत संपत्ति के नाम / जावास्क्रिप्ट में वस्तु चाबियाँ , मेरे लेख इस विषय पर:

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

[...]

ब्रैकेट नोटेशन का उपयोग सभी संपत्ति नामों के लिए सुरक्षित रूप से किया जा सकता है।

[...]

डॉट नोटेशन का उपयोग केवल तब किया जा सकता है जब संपत्ति का नाम मान्य पहचानकर्ता नाम हो।

ध्यान दें कि आरक्षित शब्दों को ES5 में निर्विवाद संपत्ति के नाम के रूप में उपयोग करने की अनुमति है। हालाँकि, ES3 के साथ पश्चगामी संगतता के लिए, मैं उन्हें वैसे भी उद्धृत करने का सुझाव दूंगा।

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

स्क्रीनशॉट


यह उपकरण एक जीवन रक्षक था। इसे पोस्ट करने के लिए धन्यवाद।
क्रिस क्रिस्टेंसन

मैं अपने रास्ते पर था एक चट्टान से, बहुत नीचे गिरने के बारे में, एक निश्चित, पूरी तरह से खूनी मौत की ओर दूर; लेकिन अफसोस, मैंने आपके उत्तर में एक लिंक पर क्लिक किया, जिसमें एक बहुत ही सरल जेएस टूल था, जिसने मुझे इस चट्टान से गिरने से रोक दिया। यह उपकरण एक जीवन रक्षक था।
एंड्रयू

8

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

कुछ लोगों को व्हॉट्सएप के साथ एक स्ट्रिंग में पास होने का प्रलोभन दिया जा सकता है, फिर ओ ['मैं व्हॉट्सएप कर सकता हूं'] लेकिन मैं उस बुरे व्यवहार को कहूंगा।


3

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


35
बिना उद्धरण के कुंजियाँ JSON में अमान्य हैं।
नेड बाचेल्डर

1

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

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


मुझे नहीं लगता है कि उदाहरण कहता है कि आपको लगता है कि यह क्या कहता है। आपके द्वारा उद्धृत किया गया मुद्दा है क्योंकि jQuery में आकार नामक एक विधि है, और विधि आकार और विशेषता आकार के बीच का संघर्ष विधि का चयन करके हल किया जाता है। JQuery में ऐसे मामले हैं जहां एक मान को एक स्ट्रिंग या किसी अन्य प्रकार के रूप में पारित करने से व्यवहार में बदलाव होता है, लेकिन कभी भी किसी संपत्ति को मान्य संपत्ति के नाम के साथ उद्धरण बनाम नहीं उद्धरण में परिभाषित करने से होता है।
एलेक्स वीट्ज़र
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.