2013-01-21 4 views
8
var @foo = 'bar'; 
// SyntaxError: missing variable name. 

{ '@foo' : 'bar' }; 
// SyntaxError: invalid label. 

var obj = { '@foo' : 'bar' }; 
[email protected]; 
// TypeError: can't convert AttributeName to string 

var obj = { '@foo' : 'bar' }; 
obj['@foo']; 
// "bar" 

क्या कोई मुझे बता सकता है कि '@' प्रतीक को परिवर्तनीय नामों में उपयोग करने की अनुमति क्यों नहीं है और मैं का उपयोग कर रहा हूं?जावास्क्रिप्ट में '@' प्रतीक आरक्षित क्यों है और इसका उद्देश्य क्या है?

+0

के रूप में आप '#' उपयोग नहीं कर सकते यह वाक्य रचना के कुछ विशेष प्रकार का E4X में प्रयोग किया जाता है एक्सएमएल – philipp

+0

पार करने के लिए साथ ही, ' '' या '" '। यह चर नाम के लिए अमान्य वाक्य रचना है। के – VisioN

+0

संभव डुप्लिकेट [ जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी नाम के बारे में एक सवाल] (http://stackoverflow.com/questions/5006049/a-question-about-javascript-object-property-name) – jbabey

उत्तर

7

यह आरक्षित या विशेष नहीं है, यह सिर्फ वैध जावास्क्रिप्ट पहचानकर्ता चरित्र नहीं है। इसी कारण से इस काम करता है:

var obj = { 'foo-baz' : 'bar' }; 
obj['foo-baz']; 

और यह नहीं करता है:

var obj = { 'foo-baz' : 'bar' }; 
obj.foo-baz; 

मान्य जावास्क्रिप्ट पहचानकर्ता एक पत्र या $ के साथ शुरू करना चाहिए, और केवल अक्षर, संख्या, $, और _ हो सकती है। संपत्ति नाम में और कुछ भी आपको ब्रैकेट नोटेशन का उपयोग करने के लिए मजबूर करेगा।

Related question

+0

ठीक है, यह समझ में आता है। हालांकि, मुझे पता है कि '- 'प्रतीक subtracts।' @ 'क्या करते हैं? – idbehold

+1

@ आईडीबीहोल्ड के पास इसका क्या संबंध है (प्रतीक का जावास्क्रिप्ट में कोई विशेष अर्थ नहीं है, यदि आप उत्सुक हैं) - [spec] (http के अनुसार) : //ecma262-5.com/ELS5_HTML.htm#Section_11.1.5), ऑब्जेक्ट कुंजी या तो स्ट्रिंग अक्षर, संख्यात्मक अक्षर, या पहचानकर्ता नाम होना चाहिए। चूंकि पहचानकर्ता नामों में '@', '-', आदि की अनुमति नहीं है , उन्हें स्ट्रिंग लाइट बनने के लिए उद्धरणों में लपेटा जाना चाहिए rals। – jbabey

+0

धन्यवाद, महोदय। बिल्कुल सही स्पष्टीकरण। – idbehold

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