2013-03-11 7 views
13

तो जाँच, अपनी टीम पर एक जूनियर प्रोग्रामर आज लिखा कोड का निम्न भाग:एक चर मूल्य एक OR ऑपरेटर का उपयोग कर

if(status === ("incomplete" || "unknown")) 

कौन सा जाहिर है नहीं उसका इरादा क्या करने जा रहा है, जो इस था:

if(status === "incomplete" || status === "unknown")) 

लेकिन मैं जो समझा नहीं सकता वह यह है कि कोड का पहला स्निपेट वास्तव में क्यों काम नहीं करेगा! या क्यों यह सही का आकलन 'स्थिति' 'अधूरा' के लिए लेकिन गलत पर सेट है जब यह 'अज्ञात' के लिए सेट करता है, तो ...

उत्तर

20

जावास्क्रिप्ट में || ऑपरेटर अपनी पहली संकार्य रिटर्न अगर यह true का मूल्यांकन (यानी यह false, null, undefined, "", या 0), और इसके दूसरे ऑपरेंड अन्यथा नहीं है।

पहले मामले में, ("incomplete" || "unknown") हमेशा "incomplete" का मूल्यांकन करता है, क्योंकि यह सत्य का मूल्यांकन करता है।

पूरे हालत तो हो जाता है:

if (status === "incomplete") 

कौन सा व्यवहार आप देख रहे हैं बताते हैं।

+0

+1 सहित छोटा करने के लिए। वाह। – insertusernamehere

+2

"... अगर यह 'सत्य' का मूल्यांकन करता है तो इसका पहला ऑपरेंड लौटाता है ..." मैं इसे कहने के लिए बदल दूंगा "अगर यह सच है तो इसका पहला ऑपरेंड लौटाता है", आपका मूलभूत मूल रूप से यह बताता है, लेकिन "सच्चाई" और "झूठी "इस अवधारणा को व्यक्त करने के लिए सबसे अधिक इस्तेमाल किए जाने वाले शब्द हैं। – zzzzBov

+0

मैं आमतौर पर "सत्य" और "झूठी" शब्दों का उपयोग करता हूं, हालांकि मुझे पता चला है कि वे आम तौर पर नए आने वालों को भ्रमित करते हैं। लेकिन हाँ, यह वही है जो मेरा मतलब है। –

6

("incomplete" || "unknown") लौटाएगा जो status की तुलना में है।

3

लेकिन वास्तव में status === ("incomplete" || "unknown")

क्योंकि कोष्टक में अभिव्यक्ति पहले मूल्यांकन किया जाता है है कि काम नहीं होता है कि मैं क्या व्याख्या नहीं कर सकते है। गैर-खाली स्ट्रिंग incomplete सत्य है, इसलिए OR-expression("incomplete" || "unknown")"incomplete" उत्पन्न करता है और उसके बाद केवल status चर के साथ तुलना की जाती है। आप 9 सेकंड एक पूरी तरह से बनाई जवाब के साथ तेजी से थे -

हालत, there are many ways आदि मूल्यों की सरणियों, नियमित अभिव्यक्ति परीक्षण

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