जावास्क्रिप्ट में सख्त समानता बनाम ढीले समानता ऑपरेटरों के बीच अंतर के बारे में जानें, और यह क्यों मायने रखता है।
जावास्क्रिप्ट में, आप मूल्यों की तुलना करने के लिए दो समानता ऑपरेटरों का उपयोग कर सकते हैं, ढीला समानता ऑपरेटर ==
(डबल बराबर) और सख्त समानता ऑपरेटर ===
(ट्रिपल बराबर)। वे सतह पर समान दिखाई देते हैं, लेकिन वे नहीं हैं, और अंतर को समझना महत्वपूर्ण है क्योंकि यदि आप नहीं करते हैं, तो आप बग में भाग सकते हैं।
अपने कंसोल में निम्न कोड चलाने का प्रयास करें:
let a = 4 // number
let b = "4" // string
console.log(a == b) // output: true
जावास्क्रिप्ट क्यों कहता है कि उपरोक्त सत्य है जब यह नहीं है? हमारे पास संख्या . प्रकार का मान है स्ट्रिंग . प्रकार के मान से तुलना की जा रही है - तो वे समान मूल्य कैसे हो सकते हैं?
ऐसा इसलिए है क्योंकि जब आप ढीले समानता ऑपरेटर का उपयोग करते हैं ==
यह ऑपरेंड को समान . में कनवर्ट करता है टाइप करें (यदि वे पहले से नहीं हैं), और फिर उनके मूल्यों की तुलना करते हैं।
इस प्रक्रिया को टाइप ज़बरदस्ती . कहा जाता है (जब दो मानों की तुलना बाद . की जाती है उन्हें एक सामान्य प्रकार में बदलने का प्रयास)।
तो ऊपर के उदाहरण में, true
. का आउटपुट सही है, क्योंकि मानों की तुलना करने से पहले, उनके मान प्रकारों को समान रूप में परिवर्तित कर दिया जाता है।
वाह, यह बेवकूफी है!
मैं सहमत हूं, लेकिन ऐसा ही है। महत्वपूर्ण यह है कि आप जावास्क्रिप्ट के इस असुविधाजनक "क्विर्क" से अवगत हैं।
और यहीं पर सख्त समानता ऑपरेटर ===
आता है और दिन बचाता है क्योंकि यह मान प्रकार को परिवर्तित नहीं करता है, यह सख्ती से मूल्य प्रकारों की तुलना करता है और फिर समानता की जांच करता है:
let a = 4
let b = "4"
console.log(a === b)
// output: false
अब हमें false
मिलता है , क्योंकि हालांकि दोनों चर (ए और बी) में "4" मान होता है, ऑपरेंड अलग-अलग मान प्रकार होते हैं (ए एक संख्या मान है, बी एक स्ट्रिंग मान है)।
गैर-सख्त के विपरीत ==
ऑपरेटर, सख्त ===
ऑपरेटर आपको अनुमानित आउटपुट देता है, यही वजह है कि अधिकांश डेवलपर्स ==
. का उपयोग करने के खिलाफ सलाह देते हैं ।
क्या कोई अच्छा कारण है जावास्क्रिप्ट में गैर-सख्त तुलना ऑपरेटर का उपयोग करने के लिए?
शायद ही कभी, लेकिन मुझे यकीन है कि आप कुछ उदाहरण पा सकते हैं। एक नियम के रूप में, सख्त ===
. का उपयोग करने के लिए डिफ़ॉल्ट समानता ऑपरेटर, जब तक कि कोई स्पष्ट न हो गैर-सख्त ==
का उपयोग करने का कारण समानता ऑपरेटर। इस तरह आप गलत समानता ऑपरेटर का उपयोग करके अपने कोड में बग को दूर कर सकते हैं, और यह हमेशा एक बोनस होता है।