JavaScript में समानता की तुलना करने के चार तरीके हैं। यह आर्टिकल समानता निर्धारित करने के लिए उपयोग किए जाने वाले अद्वितीय ऑपरेटर्स के बारे में बात करता है, टाइप कोएरशन क्या है, और JavaScript भाषा में ट्रुथी या फाल्सी मान का मूल्यांकन करते समय आने वाली कुछ विचित्रताओं के बारे में।
सख्त समानता तुलना (Strict Equality ===)
सख्त समानता ऑपरेटर को ट्रिपल इक्वल्स साइन (===) द्वारा दर्शाया जाता है। इस ऑपरेटर का उद्देश्य न केवल मान की तुलना करना है, बल्कि इसके प्रकार की भी तुलना करना है।
const strictComparison = (a, b) => {
console.log(typeof a);
console.log(typeof b);
return a === b;
}
strictComparison(8, '8'); // false
उपरोक्त उदाहरण में strictComparison फंक्शन दो मान लेता है और लौटाता है कि क्या दो मान एक-दूसरे के सख्ती से समान हैं।
पहली नज़र में, मान समान दिखते हैं क्योंकि वे दोनों मान 8 के हैं। हालांकि, सख्त समानता ऑपरेटर प्रकार को भी देखता है। यदि हम इस इंस्टेंस में a को देखें, और typeof a को देखें, तो यह 'number' लौटाएगा। यदि हम b के साथ भी ऐसा ही करते, typeof b के साथ, तो यह 'string' लौटाता।
क्योंकि प्रकार समान नहीं हैं, यह false लौटाएगा।
=== के साथ असामान्य तुलनाएं
JavaScript में सख्त समान ऑपरेटर के साथ कुछ असामान्य तुलनाएं की जा सकती हैं। यहां कुछ हैं जो आमतौर पर इंटरव्यू स्थितियों में पूछे जाते हैं:
| Operand1 | typeof Operand1 | Operand2 | typeof Operand2 | Return Value |
| null | object | null | object | true |
| undefined | undefined | undefined | undefined | true |
| null | object | undefined | undefined | false |
| NaN | number | NaN | number | false |
| false | boolean | "false" | string | false |
| false | boolean | false | boolean | true |
| "" | string | "" | string | true |
| "" | string | undefined | undefined | false |
एक और बात ध्यान देने योग्य है कि यह डेटा संरचनाओं के साथ तुलना नहीं करेगा। सरणियों या ऑब्जेक्ट्स की तुलना करने के लिए आपको अधिक परिष्कृत स्टेटमेंट का उपयोग करने की आवश्यकता है।
यहां अधिकांश प्रविष्टियाँ उसी तरह मूल्यांकन करती हैं क्योंकि प्रकार मेल खाते हैं या नहीं। एक अपवाद NaN है – यह false के रूप में मूल्यांकन करता है क्योंकि NaN सैद्धांतिक रूप से कुछ भी हो सकता है – इसलिए इस बात का कोई संकेत नहीं है कि यह बराबर हो सकता है या नहीं, इसलिए false मूल्यांकन करता है।
सख्त असमानता तुलना (Strict Inequality !==)
सख्त असमानता ऑपरेटर को एक विस्मयादिबोधक बिंदु और दो इक्वल्स साइन (!==) द्वारा दर्शाया जाता है। यह मूल्यांकन करेगा कि क्या दो मान मान और प्रकार में समान नहीं हैं।
const strictInequalityComparison = (a, b) => {
console.log(typeof a);
console.log(typeof b);
return a !== b;
}
strictInequalityComparison("8", 8); // true
उपरोक्त उदाहरण में strictInequalityComparison फंक्शन दो मान लेता है और लौटाता है कि क्या दो मान एक-दूसरे के सख्ती से असमान हैं।
पहली नज़र में, मान समान दिखते हैं (और असमान नहीं) क्योंकि दोनों का मान समान है। हालांकि, सख्त असमानता ऑपरेटर, सख्त समानता ऑपरेटर की तरह, प्रकार को भी देखता है।
यदि हम इस इंस्टेंस में a को देखें, और typeof a को देखें, तो यह 'string' लौटाएगा। यदि हम b के साथ भी ऐसा ही करते, typeof b के साथ, तो यह 'number' लौटाता। क्योंकि प्रकार समान नहीं हैं, यह true लौटाएगा।
!== के साथ असामान्य तुलनाएं
| Operand1 | typeof Operand1 | Operand2 | typeof Operand2 | Return Value |
| null | object | null | object | false |
| undefined | undefined | undefined | undefined | false |
| null | object | undefined | undefined | true |
| NaN | number | NaN | number | true |
| false | boolean | "false" | string | true |
| false | boolean | false | boolean | false |
| "" | string | "" | string | false |
| "" | string | undefined | undefined | true |
सख्त समानता ऑपरेटर की तरह, ऑब्जेक्ट्स या सरणियों के बीच तुलना नहीं की जा सकती।
एक और बात...
आपके JavaScript डेवलपमेंट करियर में अधिकांश स्थितियों में, ये दो ऑपरेटर्स, === और !==, वे होंगे जिनके साथ आप अपना सशर्त लॉजिक लिखेंगे।
ढीली समानता तुलना (Loose Equality ==)
ढीली समानता ऑपरेटर को डबल इक्वल्स साइन (==) द्वारा दर्शाया जाता है। इस ऑपरेटर का उद्देश्य मूल्यांकन करने से पहले दोनों मानों को एक सामान्य प्रकार में बदलना है कि वे समान हैं या नहीं। इसे टाइप कोएरशन या टाइप कन्वर्जन कहा जाता है।
const looseComparison = (a, b) => {
console.log(typeof a);
console.log(typeof b);
return a == b;
}
looseComparison(8, '8'); // true
उपरोक्त उदाहरण में looseComparison फंक्शन दो मान लेता है और लौटाता है कि क्या दो मान एक-दूसरे के ढीले रूप से समान हैं।
पहली नज़र में, मान समान नहीं दिखते क्योंकि एक संख्या है और एक स्ट्रिंग है। हालांकि, ढीली समानता ऑपरेटर प्रकार को नहीं देखता। स्टेटमेंट तुलना से पहले प्रकारों को समान बनाने का प्रयास करेगा – इसलिए उदाहरण true लौटाएगा क्योंकि दूसरा ऑपरेंड एक संख्या में परिवर्तित हो जाता है और फिर तुलना की जाती है।
== के साथ असामान्य तुलनाएं
| Operand1 | typeof Operand1 | Operand2 | typeof Operand2 | Return Value |
| null | object | null | object | true |
| undefined | undefined | undefined | undefined | true |
| null | object | undefined | undefined | true |
| NaN | number | NaN | number | false |
| false | boolean | "false" | string | false |
| false | boolean | false | boolean | true |
| "" | string | "" | string | true |
| "" | string | undefined | undefined | false |
यहां अधिकांश प्रविष्टियाँ उसी तरह मूल्यांकन करती हैं जैसे वे पहले सेक्शन में सख्त समानता पर करती थीं। उल्लेखनीय अपवाद यह है कि null और undefined की ढीली तुलना true मूल्यांकन करती है।
ढीली असमानता तुलना (Loose Inequality !=)
ढीली असमानता ऑपरेटर को एक विस्मयादिबोधक बिंदु और एक इक्वल्स साइन (!=) द्वारा दर्शाया जाता है। यह मूल्यांकन करेगा कि क्या दो मान केवल मान में समान नहीं हैं। यह दोनों आर्गुमेंट्स को एक ही प्रकार का बनाने का प्रयास करके करता है।
const looseInequalityComparison = (a, b) => {
console.log(typeof a);
console.log(typeof b);
return a != b;
}
looseInequalityComparison("8", 8); // false
उपरोक्त उदाहरण में looseInequalityComparison फंक्शन दो मान लेता है और लौटाता है कि क्या दो मान एक-दूसरे के ढीले रूप से असमान हैं।
पहली नज़र में, मान समान दिखते हैं क्योंकि उन दोनों का मान समान है। हालांकि, ढीली असमानता ऑपरेटर, ढीली समानता ऑपरेटर की तरह, तुलना से पहले दोनों ऑपरेंड्स पर प्रकार को समान बनाने के लिए मजबूर करता है। क्योंकि कोएरशन के बाद मान समान हैं, यह false लौटाएगा।
!= के साथ असामान्य तुलनाएं
| Operand1 | typeof Operand1 | Operand2 | typeof Operand2 | Return Value |
| null | object | null | object | false |
| undefined | undefined | undefined | undefined | false |
| null | object | undefined | undefined | false |
| NaN | number | NaN | number | true |
| false | boolean | "false" | string | true |
| false | boolean | false | boolean | false |
| "" | string | "" | string | false |
| "" | string | undefined | undefined | true |
सख्त समानता ऑपरेटर की तरह, ऑब्जेक्ट्स या सरणियों के बीच तुलना नहीं की जा सकती।
यहां अधिकांश प्रविष्टियाँ दूसरी सेक्शन में सख्त असमानता पर किए गए मूल्यांकन के समान ही मूल्यांकन करती हैं। उल्लेखनीय अपवाद यह है कि null और undefined की ढीली तुलना false मूल्यांकन करती है।
निष्कर्ष
इस आर्टिकल ने JavaScript में समानता की तुलना करने के चार तरीकों को देखा है। याद रखने वाली मुख्य बात यह है कि ट्रिपल इक्वल्स (===) और डबल इक्वल्स (==) एक ही ऑपरेटर नहीं हैं। एक प्रकार और मान पर सख्ती से मूल्यांकन करता है और दूसरा दोनों को एक ही प्रकार का बनाने का प्रयास करने के बाद केवल मान का मूल्यांकन करता है।