74

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

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

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

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

उत्तर

71

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

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

+5

यह [1 999 से इस तरह की पार्टीिंग] रहा है [http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition, % 20 दिसंबर% 201999.pdf) (पृष्ठ 68, एस 12.11, केसब्लॉक # 3) – Walf

25

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

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

+0

https://jsfiddle.net/to469fLm/4/, आप कर सकते थे अपनी जरूरतों को प्राप्त करने के लिए कॉरर्सिंग फ़ंक्शन को सामान्यीकृत करें – darethas

33

यह प्रयास करें:

switch(1) { 
    case '1': 
    alert('Switch comparison is NOT strict.'); 
    break; 
    case 1: 
    alert('Switch comparison is strict.'); 
    break; 
    default: 
    alert('Huh?'); 
} 
+6

श्वास, मैं कभी भी डाउनवॉट्स के लिए उपयोग नहीं करूंगा। –

+15

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

+1

मैंने आपकी दूसरी टिप्पणी को ऊपर उठाया, क्योंकि आप सही परीक्षण कर रहे हैं। और एक डेवलपर के रूप में, मैं ब्राउज़रों के एक निश्चित समूह पर काम करने के लिए कोड की ज़िम्मेदारी लेगा-जो मुझे पता है परीक्षण किया गया है। ओटीओएच, अगर हम आधिकारिक दस्तावेज पर भरोसा नहीं कर सकते हैं, तो stackoverflow.com का क्या मतलब है? (और भले ही यह आपको क्रेडिट नहीं कमाता है, उम्मीद है कि एक और अपवित्र आपका दिन बनायेगा।) (आप किसी भी तरह से मुझसे थोड़ा अधिक क्रेडिट प्राप्त कर चुके हैं।) –

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