JavaScriptのundefinedについてまとめました。
undefinedについて解説した後に、下記のことについて書いています。
・undefinedの判定方法
・undefinedとnullの違いについて
JavaScriptのundefinedとは?
JavaScriptのundefinedは値が未定義なことを表します。
例えば、下記のプログラムを実行するとundefinedが出力されます。
let value;
console.log(value); // undefined
最初にvalue
変数を作りました。
この変数の値は、初期化していないので未定義です。
console.log
で出力すると、「undefined
」が返ってくることが確認できました。
このように変数に値が定義されていないと、値はundefinedになります。
また、変数の値が定義されていないとき以外にも、下記の場合にundefinedになります。
・存在しないオブジェクトのプロパティにアクセスしたとき
・存在しない配列の要素をアクセスしたとき
それぞれ、コードを書いて確認してみます。
戻り値のない関数が返すundefined
処理が書いてない、戻り値のなしの関数を書いてみました。
function undefinedFunc() {
}
console.log(undefinedFunc()); // undefined
最初に処理がないundefinedFunc
関数を書いています。
console.log
で、undefinedFunc
関数を呼び出して出力するとundefined
が出力されました。
このように、関数に戻り値のない場合にはundefined
になります。
存在しないオブジェクトのプロパティにアクセス
オブジェクトを定義して、存在しないプロパティにアクセスするようにしてみました。
fruits = { apple: 'りんご', grape: 'ぶどう' }
console.log(fruits.orange); // undefined
最初にfruits
オブジェクトを定義しています。
その次の処理で、fruits
オブジェクトの存在しないorange
プロパティにアクセスしました。
console.log
で出力すると、undefined
になりました。
このように、存在しないプロパティにアクセスしたときはundefined
になります。
存在しない配列要素にアクセス
最後に存在しない配列要素にアクセスしてみます。
fruits = ['apple', 'orange', 'grape'];
console.log(fruits[10]); // undefined
最初にfruits
配列を3つの要素で定義しています。
その次の処理で、fruits
配列の存在しない10番目にアクセスしました。
console.log
で出力するとundefined
になりました。
このように存在しない配列要素にアクセスしたときにもundefined
になります。
undefinedの判定方法
undefinedか判定するときには、比較演算子の「===
」を使います。
例えば、下記のようにして判定することができます。
let value;
if (value === undefined) {
console.log('valueはundefinedです。');
}
最初にvalue
変数を作っています。
値が未定義なので、undefined
になります。
次の処理のif文で、「value === undefined
」として、undefined
か判定しています。
このように比較演算子の「===
」を使うことで判定できます。
undefined
のときにはtrue
が返ってきて、undefined
でないときにはfalse
になります。
今回はundefined
なのでtrue
が返ってきて、「valueはundefinedです。
」を出力して処理が終わります。
比較演算子のイコール2つに注意
先ほどは、比較演算子のイコール3つで比較しました。
イコールが2つの場合には、厳密に比較しないので、null
の場合にもtrue
が返ってきます。
let value = null;
if (value == undefined) {
console.log('valueはundefinedです。');
}
先ほどのプログラムを少し修正しました。
最初にvalue
変数にnull
を代入しています。
そして、次の処理でイコールが2つの比較演算子で比べています。
この場合は厳密に比較しないので、undefined
でもnull
でもtrue
が返ってきます。
厳密にundefined
か比較したいときには、イコール3つの比較演算子「===
」を使うようにしましょう。
undefinedとnullの違い
今回解説したようにundefined
は値が未定義のときに返ってきました。
null
もundefined
も、どちらも値ないことを表しています。
undefined
は値がない場合に、未定義の変数に代入されたり、システムレベルで予期していないときに自動的に使われることがありました。
null
は変数を定義したけど、空ということを明示的に表します。
そのため、プログラムレベルではnull
を使った方が良さそうですが、undefined
も変数に代入することは可能です。
undefined
で比較して、バリデーションなどを書いておけば、ひとつに統一されてシンプルになりそうな気がします。
どちらを使うかに関しては、チーム内で共通認識を持っていたほうが迷うことがなくて良いかと思います。
おわりに
今回はJavaScriptのundefinedについて解説しました。
undefinedについてまとめると、下記のようになります。
・変数が初期化されていないときに、undefinedが返ってくる
・返り値のない関数で、undefinedが返ってくる
・存在しない配列・オブジェクトにアクセスしたときに、undefinedが返ってくる
・`null`と`undefined`は、比較演算子の「`===`」で比べる
・`null`と`undefined`は、値がないことを表すが厳密には違う
コメント