==
इतना अप्रत्याशित क्यों है?
जब आप खाली स्ट्रिंग ""
की संख्या शून्य से तुलना करते हैं तो आपको क्या मिलता है 0
?
true
हां, यह ==
एक खाली स्ट्रिंग के अनुसार सही है और संख्या शून्य एक ही समय है।
और यह वहाँ समाप्त नहीं होता है, यहाँ एक और एक है:
'0' == false // true
सरणियों के साथ चीजें वास्तव में अजीब हो जाती हैं।
[1] == true // true
[] == false // true
[[]] == false // true
[0] == false // true
फिर तार के साथ निराई
[1,2,3] == '1,2,3' // true - REALLY?!
'\r\n\t' == 0 // true - Come on!
ये और ख़राब हो जाता है:
कब बराबर नहीं के बराबर है?
let A = '' // empty string
let B = 0 // zero
let C = '0' // zero string
A == B // true - ok...
B == C // true - so far so good...
A == C // **FALSE** - Plot twist!
मुझे फिर वही बात कहना है:
(A == B) && (B == C) // true
(A == C) // **FALSE**
और यह सिर्फ पागल सामान है जो आपको आदिम के साथ मिलता है।
जब आप ==
वस्तुओं का उपयोग करते हैं तो यह पागल का एक नया स्तर होता है।
इस बिंदु पर आपकी सोच ...
ऐसा क्यों होता है?
ठीक है क्योंकि यह "ट्रिपल बराबर" ( ===
) के विपरीत है जो सिर्फ यह जांचता है कि क्या दो मान समान हैं।
==
अन्य सामान की एक पूरी गुच्छा करता है ।
यह फ़ंक्शन के लिए विशेष हैंडलिंग है, नल, अपरिभाषित, तार के लिए विशेष हैंडलिंग, आप इसे नाम देते हैं।
यह बहुत निराला है।
वास्तव में, यदि आप एक फ़ंक्शन लिखने की कोशिश करते हैं जो ऐसा ==
करता है तो यह कुछ इस तरह दिखाई देगा:
function isEqual(x, y) { // if `==` were a function
if(typeof y === typeof x) return y === x;
// treat null and undefined the same
var xIsNothing = (y === undefined) || (y === null);
var yIsNothing = (x === undefined) || (x === null);
if(xIsNothing || yIsNothing) return (xIsNothing && yIsNothing);
if(typeof y === "function" || typeof x === "function") {
// if either value is a string
// convert the function into a string and compare
if(typeof x === "string") {
return x === y.toString();
} else if(typeof y === "string") {
return x.toString() === y;
}
return false;
}
if(typeof x === "object") x = toPrimitive(x);
if(typeof y === "object") y = toPrimitive(y);
if(typeof y === typeof x) return y === x;
// convert x and y into numbers if they are not already use the "+" trick
if(typeof x !== "number") x = +x;
if(typeof y !== "number") y = +y;
// actually the real `==` is even more complicated than this, especially in ES6
return x === y;
}
function toPrimitive(obj) {
var value = obj.valueOf();
if(obj !== value) return value;
return obj.toString();
}
अच्छा तो इसका क्या मतलब है?
इसका मतलब ==
जटिल है।
क्योंकि यह जटिल है यह जानना मुश्किल है कि जब आप इसका उपयोग करते हैं तो क्या होने वाला है।
जिसका मतलब है कि आप बग को खत्म कर सकते हैं।
तो कहानी का नैतिक है ...
अपने जीवन को कम जटिल बनाओ।
के ===
बजाय का उपयोग करें ==
।
समाप्त।
=== vs ==
, लेकिन PHP में, यहां पढ़ सकते हैं: stackoverflow.com/questions/2401478/why-is-faster-than-in-php/…