2014-12-24 10 views
22

मुझे पता है कि null कोई ऑब्जेक्ट या फ़ंक्शन वाले ऑब्जेक्ट है।क्यों (शून्य == झूठा) और (शून्य == सत्य) दोनों झूठी वापसी करते हैं?

हालांकि, मुझे उलझन में है कि क्यों console.log(null == false); और console.log(null == true); दोनों झूठी वापसी करते हैं।

null और boolean के बीच रूपांतरण नियम क्या हैं?

+5

वे दोनों बराबर झूठी क्योंकि अशक्त बराबर सही या गलत नहीं है। जैसे '1'' पिज्जा "या' {} 'के बराबर नहीं है। जब की तरह में अकेले इस्तेमाल करता है, तो बयान यह मजबूर हो जाता है झूठी बूलियन है क्योंकि यह एक falsey मूल्य –

+0

अशक्त एक बूलियन शाब्दिक और गलत है है, हो सकता है दोनों uncomparable प्रकार –

+4

रहे हैं, क्योंकि जावास्क्रिप्ट –

उत्तर

32

इसका कारण यह है Abstract Equality Comparison Algorithm की आवश्यकता है कि अगर Type(x) या Type(y) तो अभिव्यक्ति x == y में एक बूलियन है बूलियन मान होना चाहिए ToNumber के माध्यम से एक संख्या के लिए coerced, जोपरिवर्तित करता हैसे 1 और false से +0 पर।

इसका मतलब है कि 1 == something या something == 1 में की true == something या something == true परिणाम किसी भी तुलना (false और false के लिए +0 साथ true और 1 की जगह)।

The Null type या तो 1 या +0 के बराबर तुलना नहीं करता है (वास्तव में, शून्य केवल एईसीए में undefined के बराबर है)।

MDN पर जावास्क्रिप्ट में विभिन्न प्रकार की समानता की विस्तृत चर्चा है जो कि आप और जानना चाहते हैं तो यह देखने लायक है।

हालांकि, अगर आप एक नंबर करने के null विवश यह coerced to +0 तो +null == false वास्तव में true देता है।

+0

बहुत बहुत धन्यवाद, मुझे एक और भ्रम है, मुझे पता है कि 'isNaN (null) '' false' के बराबर है और 'संख्या (शून्य)' '0 के बराबर है, क्यों है शून्य अपरिवर्तित 'अपरिभाषित' '0' – iatboy

+0

' शून्य 'और' अपरिभाषित 'इस मामले में समकक्ष हैं क्योंकि वे जेएस में केवल दो तत्व हैं जो किसी भी प्रकार की संपत्ति पहुंच को संभाल नहीं सकते हैं। '(0) .toString() ===" 0 "लेकिन' (शून्य)। कुछ भी 'परिणाम' TypeError' में परिणाम। –

+0

एक पूर्ण उत्तर के लिए, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness देखें – stevemao

0

मूल्य null एक जावास्क्रिप्ट शाब्दिक एक "खाली" मान या "अपरिभाषित" का प्रतिनिधित्व करता है। null जावास्क्रिप्ट के आदिम मूल्यों में से एक है। यह न तो बूलियन true के बराबर है और न ही बुलियन false के बराबर है क्योंकि इसका मान अपरिभाषित है। null का मान झूठ की ओर अधिक इच्छुक है, भले ही यह false नहीं है। यही कारण है कि इसे "झूठा" ऑपरेटर कहा जाता है और if (var) { } ब्लॉक निष्पादित नहीं होता है जब varnull है।

+0

'var' को एक चर नाम के रूप में उपयोग नहीं किया जाना चाहिए, क्योंकि यह एक आरक्षित शब्द है। उदाहरण 'var' के बजाय' कुछ वार 'कहना चाहिए। – SherylHohman

+0

'अपरिभाषित' के मूल्य के साथ "..its मान अपरिभाषित" भ्रमित न करें। "..its मान अज्ञात है" के रूप में बेहतर कहा गया है। – SherylHohman

2

उत्तर: शून्य और बुलियन के बीच कोई सापेक्ष पहलू नहीं है।

MDN स्रोत: -

मान शून्य एक शाब्दिक (एक अपरिभाषित हो सकता है की तरह वैश्विक वस्तु की संपत्ति नहीं है)। एपीआई में, नल को अक्सर उस स्थान पर पुनर्प्राप्त किया जाता है जहां ऑब्जेक्ट की अपेक्षा की जा सकती है लेकिन कोई ऑब्जेक्ट प्रासंगिक नहीं है। की जांच करते समय समान या अनिर्धारित समानता (==) और पहचान (===) ऑपरेटरों के बीच अंतरों से सावधान रहें (प्रकार-रूपांतरण पूर्व के साथ किया जाता है)। अशक्त और अपरिभाषित के बीच

// foo does not exist, it is not defined and has never been initialized: 
> foo 
"ReferenceError: foo is not defined" 

// foo is known to exist now but it has no type or value: 
> var foo = null; foo 
"null" 

अंतर

typeof null  // object (bug in ECMAScript, should be null) 
typeof undefined // undefined 
null === undefined // false 
null == undefined // true 

Javascirpt|MDN

+3

आपको शायद यह स्पष्ट करना चाहिए कि आपने इस उत्तर के कौन से हिस्सों को स्रोत से लिया था और आपने जो भागों को स्वयं लिखा था। Http://stackoverflow.com/help/referencing – BoltClock

1

वर्तमान चर्चा करने के लिए जोड़ा जा रहा है। शून्य> = झूठी रिटर्न सच है।

मेरा मानना ​​है कि यह है कि यह इसलिए है क्योंकि इस रूप में व्याख्या की है! (शून्य < गलत)

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