🐷

[Javascript]0/ null / undefined / NaNの区別

2024/12/12に公開

JavaScriptのFalsy値:0、null、undefined、NaNの区別

JavaScriptには0、null、undefined、NaNといったFalsy値があります。これらは条件文でFalsyとして評価されるという共通点がありますが、具体的な違いを知らない方も多いかもしれません。この機会にこれらの値を区別する方法を学んでみましょう。

Booleanコンテクスト Numberコンテクスト Stringコンテクスト
null false 0 "null"
undefined false NaN "undefined"
NaN false NaN "NaN"

1. 0

多くのプログラミング言語と同様に、整数0はfalseとして評価されます。数値タイプであるものの、内容物がないことを意味します。

let num = 0;
typeof num
//結果
'number'

2. null

nullは、エンジニアが意図的に「値がない」ことを表すために使用します。
値はありませんが、値を格納するための「器」は存在しています。
JavaScriptでは、nullを割り当てた変数のタイプを確認すると、objectであることがわかります。
値はないけれど、オブジェクト自体は定義されており、メモリ上に存在してアドレスを受け取る準備が整っています。

let a = 0;
typeof a
//結果
'object'

3. undefined

undefinedは、変数が初期化されていない、またはオブジェクトのプロパティが存在しない場合に自動で割り当てられます。
undefinedを宣言した変数のタイプを確認すると、タイプ自体もundefinedです。値もなく、値を格納する器自体もない空の状態です。

let b = 0;
typeof b
//結果
'undefined'

4. NaN

NaNは「Not a Number」の略で、数値でないことを示します。
例えば、「000-000-000」のような値は、数字と一般的な文字列が混ざった形です。この場合、数値に変換しようとすると問題が発生します。
また、数値と文字列を演算しようとする場合にもNaNエラーが発生します。
タイプ自体は数値タイプに変換されたものの、内容が数値ではないことを示すために存在します。したがって、一種のエラー値として扱われます。

let c = +'ABD';
typeof c
//結果
'number'  // typeは'number'
console.log(c)
//結果
NaN  // consoleには'NaN'

Discussion