2010-01-11 7 views

उत्तर

8

अभिव्यक्ति myvar का मूल्यांकन करता है, तो myvar falsey है, और foo() अगर myvar truthy है। निम्नलिखित स्निपेट लगभग समान हैं। यदि myVar falsey नहीं है

var x = (myvar && foo()); 

if(myvar){ var x = foo(); } else { var x = myvar; } 
4

यह एक अभिव्यक्ति है जो "अगर myVar गलत नहीं है, तो फ़ंक्शन foo() चलाएं"। यदि इसका उपयोग इस प्रकार किया जाता है: var x = (myVar && foo()), परिणाम होगा:

यदि मेरा वार झूठा नहीं है, तो x foo() के आउटपुट पर सेट किया जाएगा। अगर MyVar झूठा है, तो एक्स myVar के मूल्य पर सेट किया जाएगा।

+0

तो myVar truthy एक्स सच सेटअप नहीं है:

ऊपर बयान आमतौर पर निम्नलिखित तरीके से प्रयोग किया जाता है:

var x = myVar && foo(); 

इस रूप में भी लिखा जा सकता है foo() का मूल्य, जो कुछ भी हो सकता है। – brad

+0

यह बिल्कुल सही नहीं है। यदि MyVar 0 है, तो x 0 पर सेट है, झूठी नहीं। –

+0

आप दोनों सही हैं। जवाब संशोधित – glomad

1

अभिव्यक्ति बूलियन अभिव्यक्तियों में शॉर्ट सर्किटिंग का चालाक उपयोग कर रही है। foo() केवल तभी निष्पादित होगा यदि MyVar true पर मूल्यांकन करता है।

if (myVar) { 
    foo(); 
} 

बहुत स्पष्ट है। ऐसे मामले हैं जहां इस प्रकार का कोड समझ में आता है, लेकिन स्टाइल चेकर्स (यदि आप उस तरह की चीज़ में रूचि रखते हैं) तो इससे फिट होगा। http://javascript.crockford.com/code.html देखें। अर्धविराम सम्मिलन और अभिव्यक्ति बयान पर भरोसा करने से बचने के लिए यह एक अच्छा अभ्यास है।

संपादित करें: ध्यान दें कि var x = a && b(); शायद कुछ संदर्भों में इतना बुरा विचार नहीं है। हालांकि, (a && b()) स्वयं कई तरीकों से गलत है। (अर्धविराम प्रविष्टि, अभिव्यक्ति बयान, शब्दार्थ गुप्त जा रहा है के अलावा)

+2

मैंने इसे एक jquery स्क्रिप्ट (संवाद ui) पर देखा ... – Val

+2

"स्पष्टीकरण" "बेवकूफ" कुछ मजबूत शब्द हैं :) यदि आप जेएस का बहुत उपयोग करते हैं, तो यह समझ में आता है और यह स्पष्ट है। –

+3

निश्चित रूप से ऐसी परिस्थितियां हैं जहां ऐसे कोड किसी भी उचित उपाय से बेवकूफ नहीं हैं। जैसे कि 'if (सक्षम && isVisible()) ... या कुछ ऐसी स्थिति के संदर्भ में। – Grumdrig

3

foo() फ़ंक्शन केवल बुलाया जाएगा: जिसका अर्थ यह झूठा नहीं हो सकता, "", 0, अशक्त, या अपरिभाषित। (कोई भी दूसरों?)

यह इस तरह एक उदाहरण देखने के लिए और अधिक विशिष्ट है:

window.console && console.log("some helpful debug info"); 

यह इस प्रकार व्याख्या की है ...

" 'विंडो' चर एक सदस्य है, तो कहा जाता है ' सांत्वना '... "

(यह उपसर्ग के लिए महत्वपूर्ण है' विंडो 'के साथ' सांत्वना। ', क्योंकि अगर सांत्वना अपरिभाषित है, आप के बजाय झूठे की JavaScript त्रुटि प्राप्त होगा।)

" ... में 'कंसोल' ऑब्जेक्ट पर 'लॉग' विधि को दबाएं। "

+1

* "कोई अन्य?" * बस -0 और NaN, मुझे लगता है। –

+1

@ जेसन: '0',' NaN', शून्य-लंबाई वाली स्ट्रिंग, 'अपरिभाषित', 'शून्य' और निश्चित रूप से 'झूठी' * झूठी * हैं ... – CMS

+0

आह, जैसा कि मैं लिख रहा था, NaN के बारे में सोचा, लेकिन इसे टाइप करना भूल गया। धन्यवाद! –

0

जब & & बाएं हाथ मूल्यांकन किया जाता है पहले मूल्यांकन किया जाता है अर्थात myVar, अगर यह सच है तो केवल दाहिने हाथ की ओर मूल्यांकन किया जाता है अर्थात foo()। ऐसा इसलिए है क्योंकि एक कथन में & & बी अगर ए झूठा है तो अभिव्यक्ति ए & & बी हमेशा झूठी मूल्यांकन करेगा।, अपने सेट करने के लिए

if myVar is truee x = foo(), else x = false