यह भ्रमित नियमों के कारण है, जावास्क्रिप्ट कैसे दबाव टाइप करता है। आप इस बारे में EcmaScript 5 spec के §11.9.3 में पढ़ सकते हैं।
दो ऑब्जेक्ट (जो सरणी भी कर रहे हैं) समान कभी नहीं कर रहे हैं, इस प्रकार पहले खंड उपज झूठी (§11.9.3.1.c.vi) में सभी अपने तुलना
दूसरे खंड और अधिक कठिन है:
पता करने वाली पहली बात यह है कि ==
ऑपरेंड की तुलना करने के लिए टाइप जबरन का उपयोग करता है।
जब तुलना में एक बूलियन शामिल होता है, तो यह पहले नंबर पर ले जाता है।
[]==false
[]==0
के बाद कि वस्तुओं Object.prototype.toString
"" == 0
फिर स्ट्रिंग एक नंबर करने के लिए coereced है फोन करके उनके आदिम मूल्यों के लिए मजबूर कर रहे हैं (""
0
हो जाता है)
0 == 0
सच उपज। एक ही नियम लागू करके, आप देख सकते हैं कि आपके अन्य उदाहरण भी सही क्यों साबित होते हैं।
ध्यान दें कि ===
कभी भी प्रकार का दबाव नहीं पैदा करता है, लेकिन पहले सही प्रकार के लिए जांच करता है और यदि वे बराबर नहीं होते हैं तो झूठी पैदा होती है! केवल अगर प्रकार बराबर हैं, तो यह वास्तविक मानों की तुलना करता है। तो तुलना की यह विधि ==
से कहीं अधिक विश्वसनीय है।
सबसे अच्छी तरह से समझाया गया उत्तर, धन्यवाद – rickyduck