JavaScript には、Null と Unknown の 2 つのプリミティブ型があります。これら 2 つのタイプは、JavaScript 開発者をしばしば混乱させます。いつが Null で、いつが Unknown なのでしょうか?
未定義型には、未定義の値が 1 つだけあります。宣言された変数が初期化されていない場合、変数のデフォルト値は未定義です。
Null 型にも、null という値が 1 つだけあります。 Null は、まだ存在しないオブジェクトを表すために使用され、関数が存在しないオブジェクトを返そうとすることを示すためによく使用されます。
変数値
alert(oValue == 未定義); //「true」を出力
このコードは true として表示されます。これは、oVlaue の値が初期化されていないため未定義であることを意味します。
alert(null == document.getElementById('notExistElement'));
ID が「notExistElement」の DOM ノードがページ上に存在しない場合、存在しないオブジェクトを取得しようとしているため、このコードは「true」を表示します。
alert(typeof unknown); //「未定義」を出力します
alert(typeof null); //「オブジェクト」を出力します
コードの最初の行は理解しやすいですが、未定義の型は Unknown ですが、コードの 2 行目は人々を混乱させます。なぜまた null の型が Object なのでしょうか?実際、これは JavaScript の初期実装における間違いであり、後に ECMAScript に採用されました。これで、null が存在しないオブジェクトのプレースホルダーであることは説明できましたが、実際にコーディングする際には、この機能に注意を払う必要があります。
alert(null == 未定義); //「true」を出力
ECMAScript は、unknown が null から派生したものと見なすため、それらを等しいものとして定義します。しかし、場合によってはこれら 2 つの値を区別しなければならない場合、どうすればよいでしょうか?以下の2つの方法が考えられます。
alert(null === 未定義); //「false」を出力
alert(typeof null == typeof unknown) //出力 "false"
typeofメソッドの使用については前述しましたが、nullとunknownの型が異なるため、「false」が出力されます。そして、=== は絶対的な等価性を表し、ここで null === unknown は false を出力します。