2012-02-03 19 views
14

मुझे लगता है कि मुझे यहां कुछ बुनियादी याद आ रही है। तीसरी आईएफ शर्त क्यों सच है? क्या स्थिति गलत होने का मूल्यांकन नहीं करनी चाहिए? मैं कुछ करना चाहता हूँ जहाँ आईडी नहीं है 1, 2 या 3.जावास्क्रिप्ट एकाधिक या शर्तों IF कथन

var id = 1; 
if(id == 1) //true  
if(id != 1) //false 
if(id != 1 || id != 2 || id != 3) //this returns true. why? 

धन्यवाद।

+5

क्योंकि 'id' बराबर नहीं' 2' या '3' करता है? 'झूठा || सच || सच == सच' –

+3

1! = 2 .. यह स्पष्ट रूप से सच है .. lollzzz –

+1

क्योंकि id> 3, imo। – ddacot

उत्तर

28

OR (||) ऑपरेशन के साथ, यदि कोई भी स्थिति सत्य है, तो परिणाम सत्य है।

मुझे लगता है कि आप AND (& &) ऑपरेशन चाहते हैं।

+1

धन्यवाद। अब मैं इस सवाल पूछने के लिए बेवकूफ महसूस करता हूं :(मुझे उलझन में मिला। – tempid

+14

हा। हम सब वहाँ रहे हैं, मेरा विश्वास करो। – Gabe

1

क्योंकि यदि कोई भी स्थिति सत्य है तो OR ऑपरेटर सत्य वापस आ जाएगा, और आपके कोड में दो स्थितियां सत्य हैं।

3

तीन शर्तों से प्रत्येक स्वतंत्र रूप से मूल्यांकन किया जाता है [1]:

id != 1 // false 
id != 2 // true 
id != 3 // true 

तो यह false || true || true का मूल्यांकन करता है, जो सच है (a || b सच है अगर या तो a या b सच है)। मुझे लगता है कि आप चाहते हैं

id != 1 && id != 2 && id != 3 

जो केवल सच है अगर आईडी 1 नहीं है और यह 2 नहीं है और यह नहीं है 3.

[1]: यह पूर्णतया सत्य नहीं, short-circuit evaluation देखो है। हकीकत में, केवल पहले दो खंडों का मूल्यांकन किया जाता है क्योंकि अभिव्यक्ति के सत्य मूल्य को निर्धारित करने के लिए यह आवश्यक है।

1

यह आईडी की जांच करता है जब! = 2 यह सच वापस आती है और आगे

+1

यह भी ध्यान रखना महत्वपूर्ण है; यदि आपको पैरामीटर की जांच करने से पहले कोई वस्तु मौजूद है या नहीं, तो यह आसान है। 'अगर (obj! = null && obj.field == 2)' –

+0

-1 - एक दिलचस्प पक्ष बिंदु, लेकिन मूल समस्या नहीं है। नीचे निर्माण के लिए – user66001

16

जाँच जहां आईडी नहीं है आप कोड निष्पादित करने के लिए चाहते हैं (1 या 2 या 3), लेकिन OR ऑपरेटर आईडी से अधिक वितरित नहीं करता है बंद हो जाता है। एक ही तरीका है कि आप क्या चाहते कहने के लिए कहने के लिए

आईडी 1 नहीं है, और आईडी 2 नहीं है, और आईडी 3.

जो

if (id !== 1 && id !== 2 && id !== 3) 
करने के लिए अनुवाद नहीं है

या वैकल्पिक रूप से कुछ अधिक pythonesque के लिए:

if (!(id in [,1,2,3])) 
+7

+1। – user66001

+0

सूचकांक के लिए वैकल्पिक जांच। यदि मान सरणी में नहीं है। पायथन के विपरीत जहां यह मूल्य के लिए जाँच करता है। 'array.indexOf (id) == -1' का अर्थ है कि आईडी सरणी में नहीं है। विपरीत के लिए '! =' का उपयोग करें। – Neil

+0

@NeilDesh, शुरुआत में ',' ध्यान दें। वे समकक्ष –

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