2014-12-31 9 views
6
deletemode = new Boolean(false); 

if(deletemode) alert("TRUE"); else alert("FALSE"); 

alert(deletemode); 

मैं गलत चेतावनी देखने की उम्मीद थी, लेकिन मुझे सही चेतावनीजावास्क्रिप्ट बूलियन चर बनाएं

देख रहा हूँ मैं MDN पढ़ सकते हैं और यह

deletemode = new Boolean(true); 

पढ़ रास्ता एक झूठी बूलियन चर बनाने के लिए है कि

लेकिन जब मैं ऊपर दिए गए बयान चलाता हूं तो मुझे "सत्य" दिखाई देता है और फिर दूसरी चेतावनी में मुझे झूठा लगता है।

मैं ऐसा करते हैं तो यह मैं इसे

if(deletemode===false) 

if(deletemode) 

एक Javascript सिंटैक्स त्रुटि है क्या करने की आशा करता है?

+0

है कि MDN के अनुसार अपेक्षित व्यवहार की तरह दिखता है। वहां पहला कोड उदाहरण देखें। https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean – Gohn67

+2

मेरे ब्राउज़र पर, 'deletemode === false'' false' का मूल्यांकन करता है, न कि सत्य '। – Alnitak

+0

@Annitak मुझे लगता है कि वह मामले के बारे में बात कर रहा है 'अगर (deletemode) '' सत्य' देता है, जो अपेक्षित व्यवहार प्रतीत होता है। – Gohn67

उत्तर

7

कारण यह अप्रत्याशित है क्योंकि new Boolean(false) कोई ऑब्जेक्ट देता है। जेएस में, सभी ऑब्जेक्ट्स एक सच्चे मूल्य का मूल्यांकन करते हैं। यही कारण है कि आपके परीक्षण ने 'सत्य' को सतर्क किया क्योंकि 'अगर' निर्माण बस जांचता है कि अभिव्यक्ति सत्य है या नहीं।

इसके अतिरिक्त, आपको बूलियन कन्स्ट्रक्टर फ़ंक्शन का उपयोग करके कभी भी बूलियन नहीं बनाना चाहिए। इसके बजाय, केवल शाब्दिक मानों का उपयोग करें, true या false

+0

सच झूठी वे स्ट्रिंग मान हैं? –

+1

नहीं, सच और झूठे शाब्दिक बुलियन मूल्य हैं। तार 'सत्य' और 'झूठी' स्ट्रिंग मान हैं। – wmock

3

=== सख्त समानता ऑपरेटर Boolean ऑब्जेक्ट के बाद वापस लौटाएगा और बूलियन शाब्दिक सख्ती से बराबर नहीं हैं। वास्तव में, यहां तक ​​कि इस अवास्तविक लौटाते हैं, क्योंकि दो नव निर्मित वस्तुओं एक ही वस्तु नहीं हैं:

new Boolean(true) === new Boolean(true) // is false 

हालांकि एक deletemode == false परीक्षण true वापस आ जाएगी, क्योंकि यह वस्तु पर .valueOf() विधि कॉल और मूल्य मिल जाएगा false , जो कि false के बराबर तुलना करता है।

alert() समारोह हमेशा अपने पैरामीटर पर .toString() कहता है, इसलिए भी डिफ़ॉल्ट [Object object] के बजाय false प्रदर्शित।

1

मुझे लगता है कि आपको निम्न लिंक में कुछ जवाब मिल सकते हैं। संक्षिप्त उत्तर: नए बूलियन() कन्स्ट्रक्टर का उपयोग करके आपके मूल्य के चारों ओर एक रैपर बनाता है ताकि चर को कॉल करना हमेशा सत्य हो। यदि आप जो करना चाहते हैं, वह स्टोर को सही/गलत स्टोर करता है, बिना किसी अतिरिक्त फ़ंक्शन या वैरिएबल पर वैल्यू पर तर्क, तो आपको शायद इसे सीधे असाइन करना चाहिए। यानी, वर deletemode = false

What is the purpose of new Boolean() in Javascript?

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