nullとundefinedについて
javascriptの予約語である
null
は値が存在しないことを表す値です。
nullの実行について
次のようなコードを書いて実行してみた結果、
コンソールに出力しても当然、nullが返ります。
var test = null; console.log(test);
これをtypeof演算子を通して出力してみます。
console.log(typeof(test));
するとobjectという出力結果になります。
undefinedの実行について
このnullとは対照的にundefinedという予約語もあります。
意味としては「値が存在しない」というnullと同じですが、初期化されていない変数の値、オブジェクトのプロパティが存在しない、配列の要素が存在しない場合の、未定義の値を指すときを表します。
nullは予約語ですが、undefinedは予約語ではないです。
undefinedに対してtypeof演算子を使ってみます。
console.log(typeof(undefined));
実行するとそのままundefinedが出力されます。
また、一度変数に入れて実行すると、下記の例では同様にundefinedが出力されます。
var test2 = undefined; console.log(test2); console.log(typeof(test2));
nullとundefinedの比較
nullとundefinedを比較してみます。
以下のコードを書いて実行結果をみてみます。
var test_null = null; var test_undefined = undefined; if (test_null == test_undefined) { console.log("一致する"); } else { console.log("一致しない"); } if (test_null === test_undefined) { console.log("一致する"); } else { console.log("一致しない"); }
上記の実行結果はともに「一致する」という出力結果になります。
一度変数に入れた両者の値として解釈されるので、等値(==)と同値(===)の判定条件でも同じになりました。
この記事を書いている段階では、変数に代入した後にどう解釈されているのか、もう少し深く理解する必要があります。
では、次のような直接的に書いて両者を比較する場合はどうなるか、試してみます。
if (null == undefined) { console.log("一致する"); } else { console.log("一致しない"); } if (null === undefined) { console.log("一致する"); } else { console.log("一致しない"); }
この場合は、等値(==)の場合は「一致する」として、同値(===)の場合は「一致しない」という結果になりました。
nullとundefinedのオブジェクトについて
nullをtypeof演算子でみるとobjectという出力結果になります。
objectという結果になりますが、nullにはプロパティやメソッドもありません。
次のようなコードを書いて実行してみました。
//何も表示されない null //存在しないメソッドを呼ぶ null.test();
結果、nullに対して存在しないメソッドを呼んでも
TypeError: null has no properties
という出力結果になります。
ここでは存在しないメソッドを呼びましたが、そもそもnullに対してはメソッドを追加することができない為、どのような場合でもTypeErrorになります。