===と==の違いがうろ覚えだったので、このちがいを復習。
1.==は「等価」を確認
==は「等価演算子」を表しており、2つの値が等しいかどうかを検証する。
const a = 1
const b = 1
const c = 2
const d = "1"
console.log(a == b) //true
console.log(a == c) //false
console.log(a == d ) //true
==は「値」が同じかをみます。
aとdを比べる際は、文字列を数字に置き換えるため、同じとみなされます。
2.===は「厳密」に確認
===は「厳密等価演算子」であり、2つの値に加えて、***2つの値の「データの型」***まで比較する。
const a = 1 //数字
const b = "1" //文字列
console.log(a == b) //true
console.log(a === b) //false
==の等価演算子であれば、文字列を数値に変換し「変数の値だけを比較する」ためTRUEが返る。
一方で、===の厳密等価演算子は、文字列を数値に変換することなく、それぞれの変数の「データの値と型が一致しているか」を比較する。そのために、数字と文字列をでちがうaとbはfalseになる。
Booleanは??
==を使う際にはtrueは1に、falseは0に変換されます。 ===を使う際は型も確認するため、true/false以外のものと比べると必ずfalseになります。console.log(true == 1) //true trueは1に変換される
console.log(true === 1) //false 型も見ているため違うものとみなされる
console.log(false== 0) //true falseは0に変換される
console.log(false === 0) //false 型も見ているため違うものとみなされる
Objectは??
console.log("test" == new String("test")) //true
console.log("test" === new String("test")) //false
プリミティブ型とString型の比較。
==では、String型がプリミティブ型に変換され、trueになる。
console.log(new String("test") == new String("test")) //false
上記は異なるオブジェクトの比較になるので、false
3.!=は(1)等価演算子の逆
!=は「不等価」と呼び、1の等価演算子(==)の反対。
2つの「値」を確認して等しくない場合にtrueが返る。
const a = 1
const b = 2
console.log(a != b) //true
4.!==は(2)厳密等価の逆
!==は「厳密不等価演算子」と呼び、2の厳密等価演算子(===)の反対の結果を返します。
const a = 1 //数字
const b = "1" //文字列
console.log(a != b) //false 値が一緒なので同じものとみなされてfalseとなる。
console.log(a !== b) //true 型も確認するため、違うものとみなされtrueが返る。