JavaScript null と undefined

Harshit Jindal 2023年10月12日
  1. JavaScript の null
  2. JavaScript の undefined
  3. なぜ人々は nullundefined を JavaScript で同じであると混同するのですか
  4. JavaScript の nullundefined の違い
JavaScript null と undefined

JavaScript は強力な言語ですが、さまざまなデータ型を使用すると、特に初心者にとっては混乱を招く可能性があります。nullundefined のデータ型は何も表していないように見えますが、違います。

これらを区別し、実行時のバグを回避するためにどちらをいつ使用するかを知る必要があります。

この記事では、nullundefined およびそれらの違いについて説明します。

JavaScript の null

null は JavaScript のオブジェクトです。意味がない場合は、JavaScript のバグであるため、問題ありません。これはプリミティブデータ型の 1つであると想定されていますが、この変更を行うと、多くの既存のコードベースが破損します。

これはユーザーが割り当てた値です。JavaScript は、変数にそれ自体で null の値を与えることはありません。これは、空白のままになっている変数に割り当てられた値です。空の値と呼ぶことができます。

JavaScript の undefined

undefined は状態です。変数を宣言したが、値で初期化しない場合、それは undefined と呼ばれます。これは、JavaScript が変数を初期化するために使用するデフォルト値です。空の値でもあります。

なぜ人々は nullundefined を JavaScript で同じであると混同するのですか

nullundefined は、次の点で同じです。

  • どちらもプリミティブデータ型です。
  • 等式演算子 == を使用してそれらを比較すると、true が返されます。
null == undefined;  // returns true

JavaScript は両方を空の値と見なします。

  • undefinednull はどちらも、式で使用すると false を生成します。
!!undefined;  // false
!!null;       // false

JavaScript の nullundefined の違い

  • タイプの違い
console.log(typeof (null));       // object
console.log(typeof (undefined));  // undefined

上記の例では、typeof 演算子を使用してデータ型を確認しています。null データ型を object として返し、undefined データ型を undefined として返します。等式演算子 == は true を返しますが、恒等演算子 === は値が等しいがデータ型が異なるため、false を返します。

  • 算術演算

null は、算術演算を実行するときに値のない数値のように動作します。操作を実行すると、null が 0 であるかのように結果が得られます。

console.log(4 + null);  // 4
console.log(4 * null);  // 0
console.log(4 - null);  // 4
console.log(4 / null);  // Infinity

算術演算では 0 として扱われる場合がありますが、null の値は 0 ではないことに注意してください。

一方、undefined は、算術演算で使用される場合、is Not a Number を返します。

console.log(4 + undefined);  // NaN
console.log(4 * undefined);  // NaN
console.log(4 - undefined);  // NaN
console.log(4 / undefined);  // NaN
著者: Harshit Jindal
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn