AngularJS触っていると、当たり前だけどJSも触る。んで、この辺勉強不足なので、調べたことメモ。
nullとは?
言わずともわかるプログラミング言語でみんながチェックするのに苦労する値。
動的言語は値が取れずブラウザ画面を真っ白にしたり、Javaではコンパイル後の動作確認でエラーを吐いてプロセス停止したりと散々。
これがJavaScriptにも実装されています。
Google Developer Toolのコンソールで確認するとこんな感じ。
> null null > typeof null "object"
JSのnull
は「オブジェクトが存在しない」とうことを表す特別な「オブジェクト」です。他の言語同様、単純に「値がない」という認識でもおkだと思う。
条件分岐ではnull
はfalse
に自動変換される。しかし、論理値の比較ではfalse
ではない。
> if (! null) { console.log('false!'); } false! > null == false false
また、null
をチェックするにはnull
で比較すればおk
> var test = null > test === null true
undefined
define
は「定義するという意味」。undefined
は「未定義」ということだ。
JSでは初期化されていない値、存在していないオブジェクトやプロパティ、配列の要素を読みだしたときの値が未定義にあたります。んで、エラーになると。
> test // 定義していない変数を呼び出す Uncaught ReferenceError: test is not defined(…) > new TestObject() // 定義していないクラスをインスタンス化する Uncaught ReferenceError: TestObject is not defined(…) > TestObject = function() { console.log(v); } // 関数を用意。しかし、変数`v`は未定義 > var testObj = new TestObject(); // インスタンス化 Uncaught ReferenceError: v is not defined(…)TestObject > TestObject = function(v) { console.log(v); } // 関数に引数を用意 > var testObj = new TestObject(); // インスタンス化。だけど、引数無し undefined // エラーは発生せず、`undefined`が表示される
undefined
の判定はundefined
で確認しましょう。
> undefined == undefined true > undefined === undefined true > undefined == 'undefined' false > undefined === 'undefined' false
文字列は同じじゃないようだ( ´ー`)フゥ
nullとundefinedの比較
どうやら「値がない」と「未定義」は同じっぽい。
しかし、型チェックでやると違う型と認識されるため、やっぱりそれぞれで比較したほうが良い。
> null === undefined false > null == undefined true
まとめ
undefined
は予期せぬエラーが発生したという認識を持つべき。null
はプログラムレベルで予定通りの値が入ったという認識を持ってよい。なので、関数に「値がない」という値を渡す場合はnull
を使いましょう。