2011-02-28 14 views
29

मैं सोच रहा हूँ अगर एक अल्पविराम जावास्क्रिप्ट में एक सरणी अनुगामी मान्य है?JavaScript: एक अल्पविराम एक सरणी में मानों के अंतिम सेट के बाद हो सकता है?

var settings = { 
    'foo' : oof, 
    'bar' : rab, 
}; 

बनाम
var settings = { 
    'foo' : oof, 
    'bar' : rab 
}; 

नोट दूसरे उदाहरण पिछले कुंजी/मान के बाद एक अल्पविराम नहीं है।

+0

(1) के लिए शीर्षक परिवर्तन "... एक वस्तु या सरणी में" और शाब्दिक शृंखला में पीछे अल्पविराम के साथ (2) अतिरिक्त उदाहरण सुझाएँ। 'var array_literal = ['foo', 'bar',];' –

+0

यह प्रश्न आईई समर्थन के बारे में जानकारी प्रदान करता है: [क्या इंटरनेट एक्सप्लोरर 9 सरणी और ऑब्जेक्ट अक्षर के अंत में अतिरिक्त कॉमा पर चकित करता है?] (https: // stackoverflow .com/प्रश्न/5036618/करता-इंटरनेट-एक्सप्लोरर-9-चोक-ऑन-अतिरिक्त-अल्पविराम-पर-अंत-ऑफ-एंड-ऑब्जेक्ट-ली) - संक्षेप में, यदि आप केवल IE9 + का समर्थन करते हैं, आप पिछली कॉमा का उपयोग कर सकते हैं। –

उत्तर

51

अधिकांश ब्राउज़रों और कार्यान्वयन एक पिछली कॉमा की अनुमति देते हैं, बड़े लेकिन "इंटरनेट एक्सप्लोरर" है।

अधिकांश इंटरनेट एक्सप्लोरर संस्करणों में एक पिछला कॉमा बिग परेशानी का कारण बनता है। यह wierd, पागल, अजीब और अनुचित त्रुटियों .. आपको पता नहीं है कि आप कहां हैं! यह भयानक है, आप गहरे और गंभीर अवसाद में गिरेंगे। इस बीमारी का नाम भी है, "विनाश की बुराई अल्पविराम" इसे एक बार बुलाया गया था।

निष्कर्ष: कभी नहीं .. कभी! जावास्क्रिप्ट में एक पिछला कॉमा का उपयोग करें।

+22

नाटक और हाइपरबोले का अच्छा उपयोग +1 – meouw

+1

मैं नाटक रानी हो सकता हूं :-P – jAndy

+0

धन्यवाद jAndy, अब मैं 'ecod' के बारे में जानता हूं। क्या यह अर्थात् गलत है, या सिर्फ एक बग है? – superUntitled

31

ऐतिहासिक रूप से बोलते हुए, ES3 किसी ऑब्जेक्ट को परिभाषित करते समय पिछली कॉमा की अनुमति नहीं दी गई थी। यह एक बात थी कि आईई सही हो गया था, लेकिन अधिकांश अन्य बाउसर विक्रेता spec के खिलाफ चला गया और वैसे भी इसे अनुमति दी। तो तकनीकी रूप से यह अन्य ब्राउज़रों कि यह समर्थित में एक बग था। ES3 में, एक ObjectLiteral, के रूप में

 
ObjectLiteral 
    { } 
    { PropertyNameAndValueList } 

बाद ES5 बहुमत के साथ जा रहा है और कल्पना में इसके सामने अनुगामी अल्पविराम को वैध करने से इस समस्या का समाधान हो परिभाषित किया गया था। अब एक ObjectLiteral के रूप में,

 
ObjectLiteral 
    { } 
    { PropertyNameAndValueList } 
    { PropertyNameAndValueList , } 

सूचना अंत में अनुगामी अल्पविराम परिभाषित किया गया है। हालांकि

अनुगामी अल्पविराम एक वस्तु शाब्दिक में परिभाषित किया गया है, यह अभी भी ES5 के अनुसार JSON में अनुमति नहीं है। इसलिए जब निम्नलिखित वस्तु शाब्दिक मान्य है,

{ foo: "bar", } 

निम्नलिखित JSON नहीं है,

 
'{ "foo": "bar", }' 

एक JSONObject के लिए व्याकरण है,

 
JSONObject 
    { } 
    { JSONMemberList } 

JSONMemberList 
    JSONMember 
    JSONMemberList , JSONMember 

JSONMember 
    JSONString : JSONValue 

संक्षेप में, यदि आप डॉन ' टी spec या ब्राउज़र quirks के बारे में चिंता करना चाहते हैं, तो एक पिछला कॉमा नहीं जोड़ें।

+2

साइन .. आईई हमेशा दोषी होता है भले ही यह सही काम करता है :( – Guanlun

1

के साथ संबंध है शाब्दिक आपत्ति उठाने का कम से कम (प्रश्न के शीर्षक सरणी का उल्लेख है, लेकिन उदाहरण के एक वस्तु शाब्दिक है) पर यह जहाँ आपके js चल रहा है पर निर्भर करता है। ऑब्जेक्ट लिटल में ट्रेलिंग कॉमा ES5 में मान्य हैं। हालांकि पिछला कॉमा वेब पर समस्याएं पैदा कर सकता है (आईई में) अधिकांश मिनीफायर उन्हें वैसे भी हटा देंगे।

http://www.2ality.com/2011/06/object-literal-comma.html

http://dontkry.com/posts/code/trailing-commas.html

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