なぜ==
そんなに予測できないのですか?
空の文字列""
を数字のゼロと比較すると何がわかり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**
そして、これはプリミティブで得られるクレイジーなものです。
==
オブジェクトで使用すると、まったく新しいレベルのクレイジーになります。
この時点でおそらくあなたは不思議に思っています...
なぜこれが起こるのですか?
まあそれ===
は、2つの値が同じかどうかをチェックするだけの「triple equals」()とは異なります。
==
ない他のものの全体の束を。
これには、関数の特別な処理、null、未定義の文字列の特別な処理があり、名前を付けます。
それはかなり風変わりです。
実際、何をする関数を書こうとすると、==
次のようになります。
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/...