64

JavaScript で変数が存在し、null(false、empty) ではないかどうかを判断するには、次の 2 つの方法があることを知っています。

1)if ( typeof variableName !== 'undefined' && variableName )

2)if ( window.variableName )

どちらがより好まれますか、そしてその理由は何ですか?

4

8 に答える 8

114

変数名にアクセスしてReferenceError. 式typeof variableName !== 'undefined'false、次の 2 つのケースのいずれかになります。

  • 変数が宣言されていない (つまり、var variableNameスコープ内にない)、または
  • 変数は宣言され、その値はundefined(つまり、変数の定義されていません)

それ以外の場合、比較は に評価されtrueます。

変数が宣言されているかどうかを本当にテストしたい場合は、それを参照しようとする試みによって生成されたものが必要になりcatchます。ReferenceError

var barIsDeclared = true; 
try{ bar; }
catch(e) {
    if(e.name == "ReferenceError") {
        barIsDeclared = false;
    }
}

undefined宣言された変数の値がどちらでもないかどうかをテストしたいだけの場合は、null単純にテストできます。

if (variableName !== undefined && variableName !== null) { ... }

または同等に、非厳密な等価性チェックを使用してnull:

if (variableName != null) { ... }

操作の 2 番目の例と右側の式の両方で&&、値が「falsey」かどうか、つまりfalseブール値のコンテキストで強制されるかどうかをテストします。このような値にはnull、、、、falseおよび0空の文字列が含まれますが、これらすべてを破棄する必要があるわけではありません。

于 2013-05-23T16:35:12.953 に答える
21

「未定義」は、変数が保持する完全に有効な値であることに注意することが重要です。変数が存在するかどうかを確認したい場合は、

if (window.variableName)

変数が実際に定義されていることを確認しているため、より完全なチェックです。ただし、これは、変数がオブジェクトであることが保証されている場合にのみ役立ちます! さらに、他の人が指摘したように、variableName の値が false、0、''、または null の場合、これは false を返すこともあります。

とはいえ、未定義の値を持ちたくない場合が多いため、通常、日常の目的には十分ではありません。そのため、最初に変数が定義されていることを確認してから、Adam が指摘したように、変数が本当に未定義でない限り未定義を返さない typeof 演算子を使用して未定義ではないことをアサートする必要があります。

if ( variableName  && typeof variableName !== 'undefined' )
于 2013-05-23T16:35:55.677 に答える
12

変数 (v など) が定義されていて、null でないかどうかを確認する場合:

if (typeof v !== 'undefined' && v !== null) {
    // Do some operation  
}

、、、、、などのすべての偽の値をチェックundefinedする場合:null''0false

if (v) {
   // Do some operation
}
于 2013-05-23T17:45:09.840 に答える
1
if ( typeof variableName !== 'undefined' && variableName )
//// could throw an error if var doesnt exist at all

if ( window.variableName )
//// could be true if var == 0

////further on it depends on what is stored into that var
// if you expect an object to be stored in that var maybe
if ( !!window.variableName )
//could be the right way

best way => see what works for your case
于 2013-05-23T16:42:13.073 に答える
-1

if (variable)variable がオブジェクトであることが保証されている場合、または false、0 などが「デフォルト」値と見なされる場合 (したがって、未定義または null と同等) に使用できます。

typeof variable == 'undefined'指定された null が、初期化されていない変数またはプロパティに対して明確な意味を持つ場合に使用できます。このチェックはスローされず、エラーは変数が宣言されていません。

于 2013-05-23T16:37:09.637 に答える