questions - javascript programs




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

कोड:

<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 का उपयोग करें या, कुछ बाहरी पुस्तकालयों का उपयोग करें या, अपने कोड को साफ करें

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


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

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


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

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

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


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

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

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


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

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


@जॉन : सरणीसूची का मान [5] 'अपरिभाषित' होने के लिए बाहर आता है

हां, घोषणाओं में कोई झुकाव वाला अल्पविराम कभी नहीं होना चाहिए असल में, मैं किसी और के लंबे लंबे जावास्क्रिप्ट कोड के माध्यम से जा रहा था, जो किसी तरह अलग-अलग ब्रोवरों में ठीक से काम नहीं कर रहा था। पता चला कि लटकती अल्पविराम अपराधी है जो दुर्घटना में टाइप किया गया था! :)








javascript