他の言語に比べてJavaScriptは「何もない」ことの表現方法が二つ(null、undefined)あります。違いは何でどのように使い分ければ良いでしょうか?
そもそも、null、undefined、空文字の違い
null
- NULLというシンボル
- 意図的に変数にnullを代入して値がないことを示す。
- 逆に言えば、プログラマが明示的に入れなければこの値が入ることはないです。
例
1 |
var a = null; //null |
変数にnullを代入するとany型になります。
nullのみを許容するようにしたい場合は下記のように記述します。
1 |
let a: null = null; |
undefined
- 現時点では存在しない(未定義)であることを示しています。
- プログラマが明示的に代入しなくても変数を定義したらデフォルトで勝手にそういう状態になっています。なので意図的なのかそうじゃないかが伝わりづらいです。
変数を宣言して値を代入する前の状態
例
1 |
var a; //undefined |
オブジェクトや配列から存在しないキーを呼び出した時の値
例
1 2 |
var obj = {}; obj.a // undefined |
空文字("")
- 空白という値が存在していることを指す。
- string型
例
1 |
var a = ""; //"" |
プログラミングのケース1(初期値)
結論としては、初期化をundefinedにするのは避けてnullで初期化するのが一般的にはわかりやすいでしょう。
nullで初期化
メリット
意味のある値がセットされているか、そうでないか区別できる。
デメリット
オブジェクトなどを利用する場合は、nullの場合というように分岐処理を実装する必要がある。
明示的に初期化しない。(undefined)
メリット
意味のある値がセットされているか、そうでないか区別できる。(メリットはnullで初期化する場合と同じ)
デメリット
- オブジェクトなどを利用する場合は、nullの場合というように分岐処理を実装する必要がある。(nullと同じ)
- 値がundefinedの場合に本当に存在しないプロパティなのか、値が単純にセットされていないだけなのかわかりづらい。
初期値は、nullやundefined以外(空文字や配列なら[])
メリット
- nullやundefinedの場合に比べて分岐が不要になる。
デメリット
- 値がセットされていないからなのか、デフォルト値なのか判別できない。
- 数値型とか日付型では空っぽい値を表現できない。
この記事へのコメントはありません。