Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> JavaScript

JavaScript समानता ऑपरेटर्स: सख्त vs ढीली तुलना

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 में सख्त समान ऑपरेटर के साथ कुछ असामान्य तुलनाएं की जा सकती हैं। यहां कुछ हैं जो आमतौर पर इंटरव्यू स्थितियों में पूछे जाते हैं:

Operand1typeof Operand1Operand2typeof Operand2Return Value
nullobjectnullobjecttrue
undefinedundefinedundefinedundefinedtrue
nullobjectundefinedundefinedfalse
NaNnumberNaNnumberfalse
falseboolean"false"stringfalse
falsebooleanfalsebooleantrue
""string""stringtrue
""stringundefinedundefinedfalse

एक और बात ध्यान देने योग्य है कि यह डेटा संरचनाओं के साथ तुलना नहीं करेगा। सरणियों या ऑब्जेक्ट्स की तुलना करने के लिए आपको अधिक परिष्कृत स्टेटमेंट का उपयोग करने की आवश्यकता है।

यहां अधिकांश प्रविष्टियाँ उसी तरह मूल्यांकन करती हैं क्योंकि प्रकार मेल खाते हैं या नहीं। एक अपवाद 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 लौटाएगा।

!== के साथ असामान्य तुलनाएं

Operand1typeof Operand1Operand2typeof Operand2Return Value
nullobjectnullobjectfalse
undefinedundefinedundefinedundefinedfalse
nullobjectundefinedundefinedtrue
NaNnumberNaNnumbertrue
falseboolean"false"stringtrue
falsebooleanfalsebooleanfalse
""string""stringfalse
""stringundefinedundefinedtrue

सख्त समानता ऑपरेटर की तरह, ऑब्जेक्ट्स या सरणियों के बीच तुलना नहीं की जा सकती।

एक और बात...

आपके JavaScript डेवलपमेंट करियर में अधिकांश स्थितियों में, ये दो ऑपरेटर्स, === और !==, वे होंगे जिनके साथ आप अपना सशर्त लॉजिक लिखेंगे।

ढीली समानता तुलना (Loose Equality ==)

ढीली समानता ऑपरेटर को डबल इक्वल्स साइन (==) द्वारा दर्शाया जाता है। इस ऑपरेटर का उद्देश्य मूल्यांकन करने से पहले दोनों मानों को एक सामान्य प्रकार में बदलना है कि वे समान हैं या नहीं। इसे टाइप कोएरशन या टाइप कन्वर्जन कहा जाता है।

const looseComparison = (a, b) => {
  console.log(typeof a);
  console.log(typeof b);
  return a == b;
}
looseComparison(8, '8'); // true

उपरोक्त उदाहरण में looseComparison फंक्शन दो मान लेता है और लौटाता है कि क्या दो मान एक-दूसरे के ढीले रूप से समान हैं।

पहली नज़र में, मान समान नहीं दिखते क्योंकि एक संख्या है और एक स्ट्रिंग है। हालांकि, ढीली समानता ऑपरेटर प्रकार को नहीं देखता। स्टेटमेंट तुलना से पहले प्रकारों को समान बनाने का प्रयास करेगा – इसलिए उदाहरण true लौटाएगा क्योंकि दूसरा ऑपरेंड एक संख्या में परिवर्तित हो जाता है और फिर तुलना की जाती है।

== के साथ असामान्य तुलनाएं

Operand1typeof Operand1Operand2typeof Operand2Return Value
nullobjectnullobjecttrue
undefinedundefinedundefinedundefinedtrue
nullobjectundefinedundefinedtrue
NaNnumberNaNnumberfalse
falseboolean"false"stringfalse
falsebooleanfalsebooleantrue
""string""stringtrue
""stringundefinedundefinedfalse

यहां अधिकांश प्रविष्टियाँ उसी तरह मूल्यांकन करती हैं जैसे वे पहले सेक्शन में सख्त समानता पर करती थीं। उल्लेखनीय अपवाद यह है कि 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 लौटाएगा।

!= के साथ असामान्य तुलनाएं

Operand1typeof Operand1Operand2typeof Operand2Return Value
nullobjectnullobjectfalse
undefinedundefinedundefinedundefinedfalse
nullobjectundefinedundefinedfalse
NaNnumberNaNnumbertrue
falseboolean"false"stringtrue
falsebooleanfalsebooleanfalse
""string""stringfalse
""stringundefinedundefinedtrue

सख्त समानता ऑपरेटर की तरह, ऑब्जेक्ट्स या सरणियों के बीच तुलना नहीं की जा सकती।

यहां अधिकांश प्रविष्टियाँ दूसरी सेक्शन में सख्त असमानता पर किए गए मूल्यांकन के समान ही मूल्यांकन करती हैं। उल्लेखनीय अपवाद यह है कि null और undefined की ढीली तुलना false मूल्यांकन करती है।

निष्कर्ष

इस आर्टिकल ने JavaScript में समानता की तुलना करने के चार तरीकों को देखा है। याद रखने वाली मुख्य बात यह है कि ट्रिपल इक्वल्स (===) और डबल इक्वल्स (==) एक ही ऑपरेटर नहीं हैं। एक प्रकार और मान पर सख्ती से मूल्यांकन करता है और दूसरा दोनों को एक ही प्रकार का बनाने का प्रयास करने के बाद केवल मान का मूल्यांकन करता है।

  1. जावास्क्रिप्ट में स्ट्रिक्ट इक्वलिटी बनाम लूज़ इक्वलिटी जावास्क्रिप्ट में स्ट्रिक्ट इक्वलिटी बनाम लूज़ इक्वलिटी

    लूज़ इक्वलिटी ऑपरेटर '==' हमें दो या अधिक ऑपरेंड्स की तुलना करने की अनुमति देता है, पहले उनके मान को एक सामान्य प्रकार में परिवर्तित करके और फिर उनके बीच समानता की जांच करके। स्ट्रिक्ट इक्वलिटी ऑपरेटर '===' हमें दो या अधिक ऑपरेंड्स की तुलना करने की अनुमति देता है, उनके मानों के साथ-

  1. जावास्क्रिप्ट में लूज़ इक्वलिटी जावास्क्रिप्ट में लूज़ इक्वलिटी

    लूज़ इक्वलिटी ऑपरेटर '==' हमें दो या अधिक ऑपरेंड्स की तुलना करने की अनुमति देता है, पहले उनके मान को एक सामान्य प्रकार में परिवर्तित करके और फिर उनके बीच समानता की जांच करके। जावास्क्रिप्ट में लूज़ इक्वलिटी लागू करने के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang="

  1. जावास्क्रिप्ट में फाल्सी वैल्यूज की पहचान जावास्क्रिप्ट में फाल्सी वैल्यूज की पहचान

    जावास्क्रिप्ट में निम्नलिखित मान बूलियन प्रकार के रूप में मूल्यांकन करने पर false होते हैं: 0 खाली स्ट्रिंग: "" , '' , या `` null undefined NaN - नॉट अ नंबर वैल्यू जावास्क्रिप्ट में फाल्सी वैल्यूज की पहचान के लिए निम्नलिखित कोड है: उदाहरण <!DOCTYPE html> <html lang=&quo