変数が初期化されているかどうかをチェックする方法はどちらが良い/正しいですか? (変数には何でも入れられると仮定して(文字列、int、オブジェクト、関数など))
if (elem) { // or !elem
または
if (typeof(elem) !== 'undefined') {
または
if (elem != null) {
typeof`演算子]1が欲しいのです。具体的には
if (typeof variable !== 'undefined') {
// the variable is defined
}
ほとんどの場合、あなたは以下を使用します。
elem != null
単純な if (elem)
とは異なり、0
, false
, NaN
, ''
を許可し、null
や undefined
を拒否するので、引数やオブジェクトのプロパティの存在を確認するのに適した、一般的なテストとなります。
他のチェックも間違ってはいませんが、使い方が違うだけです。
if (elem):
elemがオブジェクトであることが保証されている場合や、
false,
0などが "default" 値であると考えられる場合に使用できます (そのため、
undefinedや
null` と同等です)。
typeof elem == 'undefined'は、指定された
null` が初期化されていない変数やプロパティとは異なる意味を持つ場合に使用できます。
これは、elem
が宣言されていない(つまり、var
文がない、window
のプロパティではない、または関数の引数ではない)場合にエラーを投げない唯一のチェックです。これは、私の意見では、タイプミスを見逃すことになるので、むしろ危険です。これを避けるためには、以下の方法をご覧ください。
また、undefined
との厳密な比較も有効です。
if (elem === undefined) ...
ただし、グローバルなundefined
は別の値でオーバーライドできるので、変数undefined
を使用する前にカレントスコープで宣言しておくとよいでしょう。
var undefined; // really undefined
if (elem === undefined) ...
あるいは
(function (undefined) {
if (elem === undefined) ...
})();
この方法の副次的な利点は、JS ミニファイアが undefined
変数を 1 文字に減らすことができるので、毎回数バイトを節約できることです。
変数が定義されていることだけを気にするのか、意味のある値を持たせたいのかにもよります。
型が未定義かどうかをチェックすると、その変数がまだ定義されていないかどうかをチェックします。
=== nullや
!== nullは、変数の値が正確に
null` であるかどうかのみをチェックします。
nullまたは
!= nullは、変数の値が
undefinedまたは
null` であるかどうかをチェックします。
if(value)
は、変数が undefined
, null
, 0
, または空の文字列であるかどうかをチェックします。