क्या निम्नलिखित दो स्निपेट्स, या किसी दूसरे का उपयोग करने के किसी भी कारण के बीच कोई अंतर है?"अगर (foo) बार();" के बीच अंतर और "foo && bar();"
if (foo) {
bar();
}
foo && bar();
क्या निम्नलिखित दो स्निपेट्स, या किसी दूसरे का उपयोग करने के किसी भी कारण के बीच कोई अंतर है?"अगर (foo) बार();" के बीच अंतर और "foo && bar();"
if (foo) {
bar();
}
foo && bar();
पहले फार्म के रूप में बिल्कुल वैसा ही में परिणाम दूसरा रूप short-circuit evaluation के रूप में जाना जाता है और। हालांकि पहला फॉर्म अधिक पठनीय है और इसे बनाए रखने के लिए प्राथमिकता दी जानी चाहिए।
इस प्रकार का शॉर्ट-क्यूरिकिट मूल्यांकन अक्सर if-statement में देखा जाता है, जहां दाहिने हाथ को सशर्त रूप से मूल्यांकन किया जाता है। नीचे उदाहरण देखें; बार का मूल्यांकन केवल तभी किया जाता है जब foo सही साबित हो।
if (foo && bar()) {
// ...
}
+1 ग्रेट उत्तर। – Matt
यह व्याकरण की भावना में बिल्कुल वही नहीं है। (* अभिव्यक्ति * बनाम * कथन *) – user123444555621
संस्करण foo && bar()
एक अभिव्यक्ति है, और इस तरह एक मान है:
var result = foo && bar();
if
संस्करण का उपयोग कर रहे हैं, इसके बाद के संस्करण इस प्रकार दिखाई देंगे:
var result;
if (foo) {
result = bar();
}
जो अधिक है वर्बोज़।
असल में 'foo && bar(); 'एक कथन है, अभिव्यक्ति नहीं,' foo && bar() 'एक अभिव्यक्ति है। – zch
@zch सही। यह एक [अभिव्यक्ति कथन] है (http://es5.github.io/#x12.4)। – user123444555621
यदि-संस्करण सही नहीं है; अगर foo falsy है, तो झूठा मूल्य वापस आ गया है। इस प्रकार 'else {result = foo; } '। – bouke
शॉर्ट-कुइरकिट मूल्यांकन के साथ बुके का जवाब वास्तव में अच्छा है। लेकिन मुझे यह भी जोड़ना है कि एक अच्छी कोडिंग शैली if-statement का उपयोग है, यदि बार() के कॉल में कोई बूलियन-रिटर्न-वैल्यू नहीं है और बार() का उपयोग करके कोई और शर्त संतुष्ट नहीं होनी चाहिए।
पहला और अधिक पारंपरिक है। प्रभावी रूप से, वे वही हैं, हालांकि। –
कोई फर्क नहीं पड़ता लेकिन मैं एक पंक्ति 'if' कथन पसंद करता हूं। 'अगर (foo) बार();' – elclanrs