JavaScriptは変数が存在する(定義されている/初期化されている)かどうかをチェックします。

変数が初期化されているかどうかをチェックする方法はどちらが良い/正しいですか? (変数には何でも入れられると仮定して(文字列、int、オブジェクト、関数など))

if (elem) { // or !elem

または

if (typeof(elem) !== 'undefined') {

または

if (elem != null) {

typeof`演算子]1が欲しいのです。具体的には

if (typeof variable !== 'undefined') {
    // the variable is defined
}
解説 (19)

ほとんどの場合、あなたは以下を使用します。

elem != null

単純な if (elem) とは異なり、0, false, NaN, '' を許可し、nullundefined を拒否するので、引数やオブジェクトのプロパティの存在を確認するのに適した、一般的なテストとなります。


他のチェックも間違ってはいませんが、使い方が違うだけです。

  • if (elem):elemがオブジェクトであることが保証されている場合や、false,0などが "default" 値であると考えられる場合に使用できます (そのため、undefinednull` と同等です)。

  • 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 文字に減らすことができるので、毎回数バイトを節約できることです。

解説 (4)

変数が定義されていることだけを気にするのか、意味のある値を持たせたいのかにもよります。

型が未定義かどうかをチェックすると、その変数がまだ定義されていないかどうかをチェックします。

=== null!== nullは、変数の値が正確にnull` であるかどうかのみをチェックします。

nullまたは!= nullは、変数の値がundefinedまたはnull` であるかどうかをチェックします。

if(value) は、変数が undefined, null, 0, または空の文字列であるかどうかをチェックします。

解説 (0)