はじめに
JavaScriptのtruthyな値とfalsyな値について曖昧な部分があったのでまとめます。
truthyな値とfalsyな値
JavaScriptには値そのものが真偽値に変換されるルールがあります。
具体的には、if文などの条件式で「false(偽)」と判定されるのがfalsyな値で「true(真)」と判定されるのがtruthyな値です。
| 値 | 説明 |
|---|---|
| false | 論理値のfalse |
| 0 | 数値の0 |
| -0 | 数値のマイナス0 |
| 0n | BigInt |
| ""(空文字) | 空の文字列 |
| null | 存在しない値 |
| undefined | 未定義 |
| NaN | 数値ではない値 |
もっと詳しく知りたい方は以下参照。
間違いやすいパターン
負の値の真偽値
// -0はfalseになる
if(-0) {
console.log("true");
} else {
console.log("false");
}
// -1はtrueになる
if(-1) {
console.log("true");
} else {
console.log("false");
}
負の値は0かそれ以外でtrue/falseが変わります。
-1はtrueですが-0はfalseになります。0だけ扱いが違います。
負の値と聞くとfalseになりそうですが惑わされてはいけません。
文字列"0"の真偽値
// 文字列"0"はtrueになる
if("0") {
console.log("true");
} else {
console.log("false");
}
falseになるのは数値の0であって、文字列"0"は空の文字列ではないのでtrueになります。
「0だからfalseになる」という覚え方をしているとハマるので注意。
空の配列/オブジェクトの真偽値
// 空の配列はtrueになる
if([]) {
console.log("true");
} else {
console.log("false");
}
// 空のオブジェクトはtrueになる
if({}) {
console.log("true");
} else {
console.log("false");
}
空だとfalseになると思いがちですが、空の配列と空のオブジェクトはtrueになります。
おわりに
基本的には8つしかないfalsyな値を覚えてしまえば問題無さそう。
