2010-11-07 3 views
7

मुझे आश्चर्य है कि एक तत्व के अंत में एक अल्पविराम डालने के लिए जावास्क्रिप्ट सरणी में कानूनी क्यों है:"," जावास्क्रिप्ट में किसी ऑब्जेक्ट में एक तत्व के अंत में अवैध है?

var array = [ 
    'foo', // no error in IDE 
] 

किसी ऑब्जेक्ट में एक तत्व के अंत में इसे डालने पर अवैध है (कम से कम मेरे आईडीई - वेबस्टॉर्म - एक त्रुटि के बारे में झंडा है):

var object = { 
    'foo': 'bar', // error in IDE 
} 

क्या यह जावास्क्रिप्ट में वास्तव में अवैध है?

उत्तर

17

ECMAScript 5 विनिर्देश में यह कानूनी है:

 
ObjectLiteral : 
    { } 
    { PropertyNameAndValueList } 
    { PropertyNameAndValueList , } 

यह ECMAScript 3.

 
ObjectLiteral : 
    { } 
    { PropertyNameAndValueList } 

में गैरकानूनी था मेरा मानना ​​है कि यह यह संभव तरह बातें करने के लिए कानूनी बनाया गया था।

function getItems() { 
    return { 
     one : 1, 
     two : 2, 
     three : 3, 
     //four : 4, 
    }; 
} 
इसके बजाय इस बात का

:

function getItems() { 
    return { 
     one : 1, 
     two : 2, 
     three : 3//, 
     //four : 4, 
    }; 
} 

प्रोग्रामर समय की कुछ सहेजा जा रहा है।

+0

+1 पर जाने के लिए +1। अब, इस निर्माण कानूनी को मुझे परेशान करने के लिए वे दूसरी पंक्ति क्यों जोड़ देंगे। – mkoistinen

+0

@mkoistinen - अपडेट देखें। – ChaosPandion

+0

ईसीएमएस्क्रिप्ट 4 के बारे में क्या? – Eric

2

फ़ायरफ़ॉक्स इसे सहन करता है, अन्य सॉने ब्राउज़र ऐसा करते हैं। क्या मुझे अभी भी आईई चोकों का जिक्र करने की ज़रूरत है?

वैसे भी, सुनिश्चित करें कि सरणी/वस्तुओं के अंत में कोई अल्पविराम नहीं है। जबकि PHP और भाषाओं जैसे कार्यान्वयन के आधार पर - जावास्क्रिप्ट इसके साथ ठीक है, यह बेहद बदसूरत है - आप फ़ाइल के अंत में एक स्ट्रिंग भी नहीं छोड़ेंगे क्योंकि पार्सर वैध स्ट्रिंग के रूप में ईओएफ पर विचार करें समाप्त।

+0

आईई 8 इसे नफरत करता है - अभी भी। –

+0

क्या आपको लगता है कि यह एक गलती है कि सी फ़ाइल की अंतिम पंक्ति पर सेमी-कोलन लागू करती है? :-) –

2

हां, यदि आप आईई का उपयोग कर रहे हैं।

+1

आईई का उपयोग करना (कम से कम आईई <9) बिल्कुल भी अवैध होना चाहिए। :> – ThiefMaster

6

कैओसपैंडियन का उल्लेख करने के अलावा, किसी ऑब्जेक्ट और सरणी के अंत में , के बीच एक महत्वपूर्ण अंतर है। एक सरणी में खाली कॉमा (तकनीकी रूप से elisions कहा जाता है) संबंधित स्थिति पर undefined तत्व डालें; इससे सरणी की लंबाई बढ़ जाती है लेकिन मान undefined हैं।

संपादित करें: त्रुटि को इंगित करने के लिए कैओसपैंडियन और सीएमएस के लिए धन्यवाद। मैं बस चश्मे को दोबारा पढ़ता हूं और वास्तव में एक एकल पीछे की कॉमा लंबाई बढ़ाता है, हालांकि किसी भी अतिरिक्त पिछला कॉमा या किसी सरणी के बीच में कोई भी कॉमा लंबाई बढ़ाएगा।

उदाहरण के लिए, [ 1,2,, ] लंबाई 3 की एक सरणी है और [ 1, 2, undefined ] के समान है। इसी तरह, [ 1,,,2 ] लंबाई 4 की एक सरणी है और [ 1, undefined, undefined, 2 ] के समान है।

जब जावास्क्रिप्ट की इस "फीचर" की बात आती है तो आश्चर्यजनक रूप से पर्याप्त है, आईई एक सरणी में एक पिछली कॉमा (यह अतिरिक्त तत्व की गणना करता है) के साथ सही तरीके से व्यवहार करता है जबकि फ़ायरफ़ॉक्स अंतिम अपरिभाषित तत्व को अनदेखा करता है।

+1

एक छोटी सी गलती, वाक्यविन्यास एक पिछली कॉमा की अनुमति देता है ताकि लंबाई तीन की सरणी बनाने के लिए आपको यह लिखना पड़ेगा: '[1,2,]' – ChaosPandion

+0

पिछली टिप्पणी देखें। लेकिन सरणी और पीछे की अल्पविरामों के बारे में बात करने के लिए +1। –

+0

उत्कृष्ट उत्तर –

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

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