JavaScript に触れていると undefined というものを見る機会があります。
それと null というのも見る事があります。
なんとなく、これらは同じようなものだろうと思っていましたが厳密には違うようなので、自分なりにまとめてみました。
undefined とは
言葉としては「未定義」という意味になります。JavaScript の undefined を見てみると概ねこの解釈で合います。
undefined が「未定義」という事
実際に JavaScript で undefined が発生する例を見ながら undefined が「未定義」という事を見ていきます。
まず、変数は値が設定されていなければ undefined になります。
let val;
console.log(val); // undefined
返却値のない関数から返却値を受け取ろうとすると undefined になります。
function sampleFunc() {}
console.log(sampleFunc); // undefined
存在しないプロパティへのアクセスすると undefined になります。
const obj = {};
obj.sampleKey = 'aaa';
console.log(obj.key); // undefined
以下は undefined になりませんが未定義なので存在しないものとして扱われます。
JSON.stringify({key: undefined})
console.log(obj); // {}
このように、undefined は未定義だという事が分かります。
nullとは
null は設定すべき値が何もありませんでしたという意味になります。undefined のように自然に発生するものではなく、プログラマーが意図してnullを使用しなければnullは発生しません。
例えば変数にnullを設定した場合、その変数は「未定義」ではなくnull(設定すべき値がない)になります。
関数の戻り値が数値を返す事を想定しているが何も返せないケースが存在する場合、undefinedを返却すると「未定義」を返却する事になります。しかし、nullを返却すれば、nullを受け取った側はこれは何も返す事がないケースなんだなと判断できます。
まとめ
undefined は「未定義」
null は 「設定すべき値がない」