==
එතරම් අනාවැකි කිව නොහැක්කේ ඇයි ?
හිස් නූලක් ""
ශුන්ය අංකය සමඟ සංසන්දනය කළ විට ඔබට ලැබෙන්නේ 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/…