क्या एक जावास्क्रिप्ट स्विच स्टेटमेंट में सख्त तुलना करना सुरक्षित है?


105

मेरे पास एक चर है जो या तो बूलियन हो सकता है false, या एक पूर्णांक (0 सहित)। मैं इसे एक स्विच स्टेटमेंट में रखना चाहता हूं जैसे:

switch(my_var){
    case 0:
         // Do something
         break;
    case 1:
         // Do something else
         break;
    case false:
         // Some other code
}

Google Chrome में मेरे परीक्षणों में, यह पूरी तरह से काम करता है, लेकिन मैं इसका उपयोग करने के लिए थोड़ा परेशान हूं क्योंकि मुझे डर है कि कुछ ब्राउज़रों में, यदि my_varऐसा है false, तो यह पहले मामले को निष्पादित कर सकता है 0 == false

मैं सिर्फ यह सोच रहा हूं कि क्या जावास्क्रिप्ट में कुछ भी आधिकारिक है जो कहता है कि स्विच स्टेटमेंट इस तरह की सख्त तुलना का उपयोग करेगा 0 !== false, लेकिन मैं खुद कुछ भी नहीं पा सकता हूं, और मुझे यकीन नहीं है कि यह विभिन्न जावास्क्रिप्ट इंजनों में अच्छी तरह से काम करेगा। क्या किसी को पता है कि स्विच स्टेटमेंट द्वारा की गई तुलना सख्त होने की गारंटी है?

जवाबों:


103

ECMA 262, खंड 12.11 , दूसरी एल्गोरिथ्म, 4. आदि पर एक नज़र डालें

सी। यदि इनपुट क्लोसेलर के बराबर है, जैसा कि === ऑपरेटर द्वारा परिभाषित किया गया है, तो ...


11
यह उस तरह से पार्टी कर रहा है जैसे 1999 (पेज 68, एस। 12.11, केसब्लॉक # 3)
वाल्फ

फिर क्या? मुझे यकीन नहीं है कि आपने यहां बोली क्यों काट दी।
ओलेग वी। वोल्कोव

34

http://qfox.nl/notes/110 आपके प्रश्न का उत्तर देता है। (यह आदमी जावास्क्रिप्ट की किटी किरकिरा के बारे में बहुत कुछ जानता है)

जावास्क्रिप्ट में स्विच सख्त प्रकार की जाँच (===) का उपयोग करते हैं। तो आपको कभी भी ज़बरदस्ती करने की चिंता नहीं करनी चाहिए, जो कुछ wtfjs :) को रोकता है। यदि दूसरी ओर आप जबरदस्ती, कठिन भाग्य पर भरोसा कर रहे थे क्योंकि आप इसे मजबूर नहीं कर सकते।


jsfiddle.net/to469fLm/4 , आप अपनी आवश्यकताओं को प्राप्त करने के लिए
जबरदस्ती

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.