Nega ==
oldindan aytib bo'lmaydi?
Bo'sh ""
qatorni nol 0
raqami bilan solishtirganda nimaga erishasiz?
true
Ha, bu ==
ga ko'ra to'g'ri bo'sh satr va nol soni bir vaqtning o'zida.
Va bu bilan tugamaydi, mana yana bir:
'0' == false // true
Masivlar bilan juda g'alati bo'ladi.
[1] == true // true
[] == false // true
[[]] == false // true
[0] == false // true
Keyin torlar bilan g'alatiroq
[1,2,3] == '1,2,3' // true - REALLY?!
'\r\n\t' == 0 // true - Come on!
Bu yomonlashadi:
Qachon tenglik teng emas?
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!
Yana shuni aytaman:
(A == B) && (B == C) // true
(A == C) // **FALSE**
Va bu shunchaki ibtidoiy narsalarga ega bo'lgan aqldan ozgan narsalar.
Ob'ektlar bilan ==
dan foydalansangiz, bu butunlay yangi darajadagi aqldan ozishdir.
Shu nuqtada, ehtimol siz hayron bo'lasiz ...
Nega bu sodir bo'ldi?
Buning sababi, "uch barobar" (===
) dan farqli o'laroq, ikkita qiymat bir xil yoki yo'qligini tekshiradi.
==
to'liq boshqa narsalarni qiladi.
Unda funksiyalar uchun maxsus ishlov berish, nulllar, aniqlanmagan, satrlar uchun maxsus ishlov berish mavjud.
Bu juda g'alati bo'lib qoladi.
Aslida, agar siz ==
bajaradigan funksiyani yozishga harakat qilsangiz, u quyidagicha ko'rinadi:
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();
}
Xo'sh, bu nimani anglatadi?
Bu ==
murakkab ekanligini anglatadi.
Bu murakkab bo'lgani uchun uni ishlatganingizda nima bo'lishini bilish qiyin.
Bu degani, siz xatolarga duch kelishingiz mumkin.
Demak, hikoyaning axloqi...
Hayotingizni kamroq murakkablashtiring.
==
oʻrniga ===
dan foydalaning.
Yakun.
person
Luis Perez
schedule
09.08.2016