2011-10-05 18 views
6

जेएसलिंट शिकायत कर रहा है कि (true) एक weird condition है। जो समझ में आता है अगर मैं इसे एक उल्टा स्विच स्टेटमेंट पर उपयोग नहीं कर रहा था। तो क्या JSLint गलत है या क्या मुझे उलटा स्विच स्टेटमेंट का उपयोग नहीं करना चाहिए?एक उलटा स्विच स्टेटमेंट स्वीकार्य जावास्क्रिप्ट है?

किसी भी मदद/ज्ञान के लिए धन्यवाद।

switch (true) { 
    case (menuLinksLength < 4): 
     numberOfColumns = 1; 
     break; 
    case (menuLinksLength > 3 && menuLinksLength < 7): 
     numberOfColumns = 2; 
     break; 
    case (menuLinksLength > 6 && menuLinksLength < 10): 
     numberOfColumns = 3; 
     break; 
    case (menuLinksLength > 9): 
     numberOfColumns = 4; 
     break; 
    default: 
     numberOfColumns = 0; 
} 
+0

इसके लायक होने के लिए, आप अपना उलट स्विच स्टेटमेंट रख सकते हैं और फिर भी यदि आप 'स्विच (सत्य === सत्य)' का उपयोग करते हैं तो लिटर को संतुष्ट कर सकते हैं। यह अभ्यास का समर्थन नहीं है;) –

+0

'स्विच (सत्य === सच) 'मदद नहीं करता है, क्योंकि इसके बाद यह" अजीब संबंध "के बारे में शिकायत करता है। –

+0

var theTruth = true; ----- स्विच (theTruth) {...} – dbrin

उत्तर

3

मानक ECMA-262 के तीसरे संस्करण (फ़ायरफ़ॉक्स 1.0+ द्वारा समर्थित, Google Chrome 1.0+, MSIE 5.5 + और अन्य) को परिभाषित करता है कि

switch (expression) { 
    case label1: 
     statements1 
    . 
    . 
    . 
} 

statements1(expression) अगर मैचों label1 निष्पादित करता है।

इसका मतलब है कि आपका switch कथन बिल्कुल ठीक है।

मैंने फ़ायरफ़ॉक्स, क्रोम और आईई पर इसे आज़माया। कोई भी शिकायत है ...

संपादित करें:

अब अनुमान लगा हिस्सा:

JSLint एक कोड anaylisis उपकरण है। जब यह switch (true) देखता है, तो यह मानता है कि आप नहीं जानते कि आप क्या कर रहे हैं। अजीब मतलब यह नहीं है जरूरी गलत ...

+2

कारण यह मुझे समस्या का कारण बन रहा है क्योंकि जिस कंपनी के लिए मैं अपनी बिल्ड स्क्रिप्ट में इसका उपयोग करता हूं और यह विफल रहता है जब जेएसलिंट 'अजीब' देता है। मुझे नहीं पता कि JSLint में त्रुटियों को कैसे वर्गीकृत किया जाता है लेकिन मुझे लगता है कि यह गलती नहीं हो सकती है। सहायता के लिए धन्यवाद। – moefinley

+0

फिर इस चेक को अक्षम करने का कोई तरीका नहीं है? –

+0

@ डैनी: कोई सुराग नहीं। मैंने जेएसलिंट का कभी भी उपयोग नहीं किया है। – Dennis

5

व्यक्तिगत तौर पर मैं switch एक कोड बेस में उलट देखने जैसा नहीं होता। सादे if/elseif ब्लॉक की तुलना में यह आपको कुछ भी नहीं खरीदता है, और इसकी विदेशी प्रकृति भ्रम के कारण हो सकती है।

भी है यही कारण है कि JSLint के बारे में शिकायत की है:

तुम कुछ अपरंपरागत कर रहे हैं। क्या इसके लिए कोई अच्छा कारण है? यदि नहीं है, तो मूल बातें रहना बेहतर हो सकता है।

+5

मुझे पता है कि यह सभी व्यक्तिगत प्राथमिकता है। लेकिन व्यक्तिगत रूप से मुझे लगता है कि अगर कथन बहुत गड़बड़ है। – moefinley

+0

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

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