2011-03-22 9 views
6

document.writeln("a" || "b")true के बजाय क्यों?दस्तावेज़। राइटेलन ("ए" || "बी") "सत्य" का "ए" इंटीड क्यों प्रिंट करता है?

document.writeln("a" && "b") प्रिंट b

document.writeln(1==1 && 1!=1) प्रिंट false

document.writeln(1!=1 && 'b') प्रिंट false

document.writeln(1==1 && 'b') प्रिंट b

यह भीतरी हिस्से का मूल्यांकन करें और && के लिए पिछले मान है, और पहली सचके लिए मूल्य?

+0

यह सच क्यों प्रिंट करेगा? "ए" एक गैर खाली, परिभाषित स्ट्रिंग है इसलिए यह सत्य है और इसलिए इसे विधि में वापस कर दिया जाता है। इसके अलावा 1 == 1 का मूल्यांकन किया जाएगा, 1 === 1 का उपयोग करने के लिए बेहतर है जो इन्ट्स को स्ट्रिंग्स – mplungjan

+2

पर नहीं डालेगा, मुझे यह व्यवहार पसंद है, और ईमानदार होने के लिए, इसे पहले भी नहीं माना गया था। –

उत्तर

9

|| और && हमेशा बूलियन वापस नहीं करते हैं। || पहले तर्क का मूल्यांकन करता है। यदि यह सत्य का मूल्यांकन करेगा, तो वह उस तर्क को वापस कर देगा। अन्यथा, यह दूसरा तर्क (बिना शर्त) देता है।

&& पहले तर्क का मूल्यांकन करता है। यदि यह सत्य का मूल्यांकन करेगा, तो यह दूसरा तर्क (बिना शर्त) देता है। अन्यथा यह पहला तर्क देता है।

यह आप की तरह कुछ साफ काम करने की अनुमति देता है:

function foo(optionalVar) { 
    var x = optionalVar || 4; 
} 
foo(10); //uses 10, since it is passed in; 
foo(); //uses 4, the default value, since optionalVar=undefined, which is false 
+0

मैंने इसे पहले आपके द्वारा प्रदान किए गए उदाहरण जैसे कोड में थोड़ा सा देखा। – Shawn

2

संचालन और सच्चाई टेबल के अपने आदेश।

If(a OR b) : if a is true than the whole statement is true 
If(a AND b): if a is true, doesnt mean that the statement is true, 
      but if b is true as well than the statement is true 
|| is the same as OR 
&& is the same as AND 

अद्यतन
तो कार्यात्मक प्रोग्रामिंग में यह true मान देता है। एक स्ट्रिंग को true माना जाता है इसलिए यह स्ट्रिंग वापस कर देगा।

Pointy ने कहा:
रिक्त स्ट्रिंग है, यह ध्यान दिया जाना चाहिए, नहींtrue है। (जो कहना है, निश्चित रूप से, यह false है)

+1

खाली स्ट्रिंग, यह ध्यान दिया जाना चाहिए, ** ** ** सत्य नहीं है। (जो कहना है, ज़ाहिर है कि यह 'झूठा' है।) – Pointy

+0

ने मेरा जवाब बेहतर प्रतिबिंबित करने के लिए बदल दिया – Neal

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