यदि हम समस्या कथन को करीब से देखें, तो ([] ==असत्य) और ([] || सत्य) के बीच का अंतर निम्नलिखित है -
पहले मामले में, हम ढीली सशर्त जाँच का उपयोग कर रहे हैं, जिससे टाइप ज़बरदस्ती हावी हो जाती है।
जबकि दूसरे मामले में, हम [] का मूल्यांकन उसके संबंधित बूलियन (सत्य या असत्य) से कर रहे हैं, जो हुक के नीचे प्रकार के दबाव के बजाय फ़ंक्शन बूलियन () का उपयोग करता है।
आइए अब उन रूपांतरणों का अनावरण करें जो दोनों ही मामलों में पर्दे के पीछे होते हैं।
केस 1 - ([] ==असत्य)
MDN डॉक्स के अनुसार यदि दो डेटा प्रकार कहते हैं कि x और y की तुलना लूज़ इक्वलिटी ऑपरेशन ( ==) का उपयोग करके की जाती है, तो,
संख्या () फ़ंक्शन का उपयोग करके बूलियन मान को एक संख्या में बदल दिया जाएगा -
तो, अब स्थिति बन जाती है -
[] == 0// Number(false) = 0
फिर यदि वस्तु प्रकार के चर को आदिम मूल्य में परिवर्तित किया जाएगा -
"" == 0
और अंत में खाली स्ट्रिंग को एक संख्या में बदल दिया जाएगा -
0 == 0
उपरोक्त अंततः सत्य लौटाता है
केस 2 - ([] || सच)
इस मामले में [] का सत्य/झूठा मान इनबिल्ट बूलियन() फ़ंक्शन का उपयोग करके इसे बूलियन में परिवर्तित करके चेक किया जाएगा। और,
Boolean([]) = true
इसलिए, सत्य मान [] बरकरार रखा जाता है।