2011-04-26 3 views
5

वहाँ कभी के बीच एक अंतर हो सकता है:जावास्क्रिप्ट ऑब्जेक्ट Literals: तारों के रूप में संपत्ति के नाम बनाम "कच्चे"

var x = { 
    hello: 'world' 
}; 

और

var x = { 
    'hello': 'world' 
}; 

?

क्या है, एक स्ट्रिंग के रूप में संपत्ति नाम देने वाली स्थितियों के तहत इसे "कच्चे" नाम के रूप में देने के अलग-अलग परिणाम होते हैं? उदाहरण के लिए, मुझे पता है कि var x = {}; x['@£$%'] = 'bling!'; मान्य है (क्योंकि कोई स्ट्रिंग एक संपत्ति हो सकती है), लेकिन [email protected]£$% = 'bling!' काम नहीं करेगा। न तो इच्छाशक्ति भाषा कीवर्ड या संपत्ति के नाम के रूप आरक्षित कीवर्ड (ताकि var x = {for: 'good', class: 'y'}; काम करेंगे नहीं। किसी और

कुछ?

उदाहरण के लिए, क्या

var hello = 'goodbye'; 

ऊपर के उदाहरण में परिभाषित किया गया है तो क्या होगा? या कुछ किसी और की तरह

function hello() { 
    return 'goodbye'; 
} 

?क्या मुझे सुरक्षित होने के लिए हमेशा अपनी संपत्ति के नाम तार बनाना चाहिए?

+0

[इस सवाल] (पर एक नज़र डालें http://stackoverflow.com/questions/2348867/why-are-s नहीं होना चाहिए ओमे-ऑब्जेक्ट-शाब्दिक-गुण-उद्धृत-और-अन्य-नहीं) – Flash

उत्तर

3

मैं अपनी कुंजी के रूप में a-zA-Z से परे कुछ भी निर्दिष्ट नहीं करता हूं इसलिए मुझे वास्तव में @ जैसे वर्णों की चिंता नहीं है। यदि किसी भी कारण से आपको वास्तव में इन पात्रों की आवश्यकता है, तो सुनिश्चित करें कि आगे बढ़ें और उद्धरणों का उपयोग करें।

आप यकीन हैं कुंजी शब्द एक reserved word या यहां तक ​​कि दूर से लगता है कि यह हो सकता है, बस उद्धरण में लपेट और सुरक्षित हो है .. अन्यथा सिर्फ quoteless जाने के लिए और समय टाइपिंग बचाने के।

एक ही वैरिएबल के साथ एक वैरिएबल जैसा कि आपकी कुंजी बिल्कुल असर नहीं है क्योंकि इसे सचमुच लिया जाता है।

var hello = 'god'; 
({hello:2})['hello'] // 2 
1

एक वस्तु शाब्दिक में, आप या तो एक स्ट्रिंग शाब्दिक उपयोग कर सकते हैं (उद्धृत) या एक पहचानकर्ता (गैर उद्धृत)। पहले मामले में, आप दूसरे पात्रों का उपयोग कर सकते हैं, जबकि दूसरे में, आपको ECMAScript spec में निर्धारित पहचानकर्ताओं के नियमों का पालन करना होगा। डॉट नोटेशन प्रॉपर्टी एक्सेसर का उपयोग करते समय वही पहचानकर्ता नियम लागू होते हैं। सरलीकृत सारांश:

  • पहचानकर्ता अक्षर से शुरू करना होगा, _ या $
  • पहले वर्ण के बाद (जो दोनों के भी पहचानकर्ता में कहीं भी दिखाई दे सकते हैं) और अक्षरों की अनुमति दी जाती नंबर सहित
  • पहचानकर्ता एक आरक्षित शब्द (new, var, function, delete, आदि)
+0

यह उत्तर अधिक क्यों नहीं है? –

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