जावास्क्रिप्ट जब गैर सख्त का उपयोग कर बूलियन मूल्यों को वस्तुओं coerces है बराबर या उससे अधिक संख्या के मूल्य समानता ऑपरेटर।
0 == []
क्योंकि जावास्क्रिप्ट मूल्यों (जो दोनों के हैं एक ही प्रकार के नहीं) बूलियन मूल्यों के दोनों coerces उनकी तुलना करने के। दूसरे शब्दों में, false == false
।
यदि आप ===
का उपयोग करते हैं, तो दूसरी ओर, आप ऑब्जेक्ट समानता की जांच कर रहे हैं।
एक दिलचस्प उपयोग के मामले इस होगा:
[] === []; // => false
इसका कारण यह है ===
वस्तुओं की स्मृति स्थान जाँच कर रहा है। दो सरणी एक ही स्मृति स्थान साझा नहीं करते हैं। हालांकि:
var arr = [];
arr === arr; // ==> true
लेकिन, यहाँ एक और दिलचस्प मोड़ है:
1 === 1; // ==> true
सरणियों और सादे वस्तुओं के मामले में, JavaScript स्मृति स्थान संदर्भ देता है। लेकिन तारों और संख्याओं जैसे मूल्यों के साथ, जावास्क्रिप्ट जांचता है कि मान ===
ऑपरेटर के बराबर बराबर हैं या नहीं।
तो बड़ा अंतर ==
और ===
में मतभेद के नीचे आता है, और कैसे जावास्क्रिप्ट प्रकार coerces।
सुझाव: यही कारण है कि यह आम तौर पर अनुशंसित है कि आप जब क्रॉस-ब्राउज़र मुद्दों के साथ काम कर रहे उदाहरण के लिए सख्त ===
ऑपरेटर का उपयोग करता है, तो आप फिर भी, कभी कभी बलात्कार अपने लाभ के लिए काम कर सकते हैं बलात्कार (को रोकने के लिए की जरूरत है, वह जगह है जहाँ एक मूल्य एक ब्राउज़र में undefined
हो सकता है लेकिन अन्य ब्राउज़र में null
हो सकता है। फिर आप !!thatStrangeValue
जैसे कुछ कह सकते हैं, और undefined
और null
दोनों को एक ही चीज़ पर ले जाया जाएगा)।
संपादित
ओपी लाया एक अच्छा बिंदु:
[] == false;
![] == false;
ऊपर बयान दोनों सही जो अजीब है कर रहे हैं। मैं कहूंगा कि पहला कथन खालीपन की जांच कर रहा है, जबकि दूसरा अस्तित्व की जांच कर रहा है। किसी को भी इस आखिरी बिंदु का जवाब पता है?
स्रोत
2015-05-21 19:28:42
'[]' एक स्ट्रिंग के रूप में है, और एक संख्या के रूप में गलत है 0 – dandavis
आपको '[] == सत्य' कहां मिल रहा है, क्योंकि यह 'false' –
@ मैट बुरलैंड होना चाहिए, कंसोल में टाइप करें "console.log (! [])", यह कंसोल पर "झूठा" –