[Javascript]0/ null / undefined / NaNの区別
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は、エンジニアが意図的に「値が存在ない」特別な状態を表すために扱われます。
オブジェクトのプロパティ値が存在しないときや、関数の引数を初期化するために使用されることもあります。
値はありませんが、値を格納するための「器」は存在しています。
正確に言うと、null
は参照変数に対してアドレスがないことを表現するためのキーワード値です。
メモリ上にポインターとして存在してアドレスを受け取る準備が整っています。
JavaScriptでは、nullを割り当てた変数のタイプを確認すると、objectであることがわかります。値はないけれど、オブジェクト自体は定義されております。
let a = null;
typeof a
//結果
'object'
3. undefined
undefinedは、変数が初期化されていない、またはオブジェクトのプロパティが存在しない場合に自動で割り当てられます。
undefinedを宣言した変数のタイプを確認すると、タイプ自体もundefinedです。値もなく、値を格納する器自体もない空の状態です。
let b;
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'
参考文献: Inpa Dev 👨💻
Discussion