javascript questions जावास्क्रिप्ट ब्राउजर Quirks-सरणी। लांघ




javascript programs (6)

एक्का 262 संस्करण 5.1 अनुभाग 11.1.4 सरणी प्रारंभिक बताते हैं कि अंत में एक अल्पविराम अगर सरणी यदि सरणी के लिए लंबाई में योगदान नहीं करता है। "यदि कोई तत्व सरणी के अंत में समाप्त हो जाता है तो यह सरणी की लंबाई में योगदान नहीं देता"

इसका अर्थ है ["x",] बिल्कुल कानूनी जावास्क्रिप्ट है और लंबाई 1 की एक सरणी वापस करनी चाहिए

कोड:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Unusual Array Lengths!</title>

    <script type="text/javascript">
        var arrayList = new Array();
        arrayList = [1, 2, 3, 4, 5, ];
        alert(arrayList.length);
    </script>

</head>
<body>
</body>
</html>

सरणी घोषणा में अतिरिक्त अल्पविराम की सूचना दें। उपरोक्त कोड विभिन्न ब्राउज़रों के लिए विभिन्न आउटपुट देता है:

सफारी: 5

फ़ायरफ़ॉक्स: 5

IE: 6

सरणी में अतिरिक्त अल्पविराम सफारी और एफएफ द्वारा अनदेखा किया जा रहा है, जबकि आईई इसे सरणी में एक अन्य वस्तु के रूप में मानता है।

कुछ खोज पर, मुझे मिश्रित राय मिली है कि किसके उत्तर सही हैं अधिकांश लोग कहते हैं कि IE सही है, लेकिन फिर भी सफारी फ़ायरफ़ॉक्स के समान ही काम कर रहा है। मैंने ओपेरा जैसे अन्य ब्राउज़रों पर इसका परीक्षण नहीं किया है लेकिन मुझे लगता है कि अंतर है।

मेरे सवाल:

मैं। इनमें से कौन सा सही है?

संपादित करें: सामान्य सहमति (और ECMAScript दिशानिर्देशों के अनुसार) हम मानते हैं कि IE फिर गलती पर है

ii। क्या कोई ऐसा अन्य जावास्क्रिप्ट ब्राउजर क्वार्क है जो मुझे सचेत होना चाहिए?

संपादित करें: हां, जावास्क्रिप्ट क्वार्क्स का भार है www.quirksmode.org उसी के लिए एक अच्छा स्रोत है

iii। मैं इनकी त्रुटियों से कैसे बचूं?

संपादित करें: अपने जावास्क्रिप्ट को मान्य करने के लिए JSLint का उपयोग करें या, कुछ बाहरी पुस्तकालयों का उपयोग करें या, अपने कोड को साफ करें

उनके इनपुट के लिए डेमियन बी , जेसनबुनटिंग , जॉन और कोनराड रूडोल्फ के लिए धन्यवाद


सबसे पहले, कोनराड कल्पना का हवाला देना सही है, जैसा कि वह है जो भाषा को परिभाषित करता है और आपके पहले प्रश्न का उत्तर देता है।

अपने अन्य सवालों का जवाब देने के लिए:

क्या कोई ऐसा अन्य जावास्क्रिप्ट ब्राउजर क्वार्क है जो मुझे सचेत होना चाहिए?

ओह, बहुत सारे यहाँ सूची! QuirksMode वेबसाइट को एक अच्छी जगह के लिए लगभग सब कुछ ज्ञात करने का प्रयास करें

मैं इनकी त्रुटियों से कैसे बचूं?

सबसे अच्छा तरीका एक लाइब्रेरी का उपयोग करना है जो इन समस्याओं को आपके लिए निकाला गया ताकि आप आवेदन के तर्क के बारे में चिंतित हो सकें। हालांकि थोड़ा गूढ़, मैं पसंद करता हूं और मोचीकीट का सुझाव देता हूं


मुझे इस बात का भंडाफोड़ किया गया था कि मैंने इसे ईसीएमएस्क्रिप्ट 262 एड की परिभाषा में देखा 3 जो जावास्क्रिप्ट 1.8 का आधार है प्रासंगिक परिभाषा खंड 11.1.4 में पाया गया है और दुर्भाग्यवश बहुत स्पष्ट नहीं है। यह अनुभाग स्पष्ट रूप से बताता है कि शुरुआत में या मध्य में elisions (= चूक) एक तत्व को परिभाषित नहीं करते हैं, लेकिन समग्र लंबाई में योगदान करते हैं

प्रारंभकर्ता के अंत में अनावश्यक अल्पविराम के बारे में कोई स्पष्ट बयान नहीं है, लेकिन चूक से मैं यह निष्कर्ष निकालना चाहता हूं कि उपरोक्त कथन का अर्थ है कि वे समग्र लंबाई में योगदान नहीं करते हैं, इसलिए मैंने निष्कर्ष निकाला है कि MSIE गलत है

प्रासंगिक अनुच्छेद निम्नानुसार पढ़ता है:

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


उन मामलों के लिए "3", मैं आमतौर पर मेरी स्क्रिप्ट में डाल दिया

if(!arrayList[arrayList.length -1]) arrayList.pop();

आप उस से एक उपयोगिता कार्य कर सकते हैं


इनमें से कौन सा सही है?

ओपेरा भी 5 देता है। इसका अर्थ है कि आईई कितनी दूर है और आप जितना अपेक्षा करनी चाहिए, उसके बहुमत।


मुझे लगता है कि फ़ायरफ़ॉक्स व्यवहार सही है IE में 6 वें मान का मान क्या है (माफ करना, मुझे परीक्षण के लिए यह आसान नहीं है) चूंकि कोई वास्तविक मूल्य उपलब्ध नहीं है, मुझे लगता है कि यह 'नल' जैसी कुछ चीज़ों के साथ भर रहा है जो निश्चित रूप से ऐसा प्रतीत नहीं होता है कि आपने क्या किया है जब आपने सरणी बनाई थी।

हालांकि दिन के अंत में, वास्तव में कोई फर्क नहीं पड़ता है जो "सही" है क्योंकि वास्तविकता यह है कि या तो आप केवल एक ब्राउज़र को लक्षित कर रहे हैं, इस मामले में आप दूसरों को क्या अनदेखा कर सकते हैं, या आप कई ब्राउज़रों को लक्षित कर रहे हैं जो आपके कोड को उन सभी पर काम करने की जरूरत है इस मामले में स्पष्ट समाधान एक सरणी initializer में झूलने अल्पविराम शामिल कभी नहीं है।

यदि आपको इसे से बचने में समस्याएं हैं (जैसे कि किसी कारण के लिए आपने इसे शामिल करने की एक आदत (खराब, इम्हो) विकसित की है) और इस तरह की अन्य समस्याएं हैं, तो जेएसएलआईआईटी की तरह कुछ मदद कर सकता है





javascript