🦾
Falsy Value 〜暗黙的なタイプ変換〜
です!
最近よく使うようになってきたJSについて新しい発見。
Javascriptではあるバイナリー(Boolean)型が必要な文脈においては、データ型がバイナリー型に変換されるようです。
値がfalse(0)となるように変換される場合、この値をFalsy Valueと呼びます。
Falsy Value
例)if 条件式
if (null)
if (undefined)
if (0)
if (-0)
if (0n)
if (NaN)
if ("")
このようなコンテキストでは全てが`false`となるよう。
他にも論理演算子(&& ||)やループの条件式でもFalsyになりますね。
Falsy Value の種類
JavascriptにおけるFalsy Valueには8種類。
Type | Detail |
---|---|
false | ボス |
0, -0 | 整数の0 |
0n, -0n | BigInt*の0 |
"", '', `` | 空のString |
null | 値なし |
undefined | メソッドを持たず変更不可 |
NaN | "Not a Number" |
document.all | having [[IsHTMLDDA]] internal slot(これ何?) |
コンソールで試してみた
>0 == false
<< true
>0n == false
<< true
>"" == false
<< true
>null == false
<< false
>undefined == false
<< false
>NaN == false
<< false
null
,undefined
,NaN
は変換がされていない。なんで?
不規則な変換ルール
こちらの記事にあるテーブルが非常に参考になりました。
True/Falseテーブルによると、
"null == undefined"はtrue
を返してくれます。
ただこのルールによって起こり得るエラーを避けるためには、厳密等価演算子(===)を使用できます。
>0 == false
<< true
>0 === false
<< false
>null == undefined
<< true
>null === undefined
<< false
型変換は無視して実際の型で比較してくれます。
SOTD
頻繁に使用しているデータ型なので、"falsy value"の概念は知らなくともなんとなく使っていました。"falsy value"には型変換をされた後に、一致するのもとしないものとでまた別れているという点が気になりますね。
Discussion