2

変数を未定義と比較するのは安全ではありませんか?

if(foo == undefined)

if(foo == 'undefined')

最初の例で十分ですか?または、次のようなものにする必要があります

if('undefined' in window){
     //compare against undefined
} else {
    //compare against 'undefined'
}

オブジェクトundefinedに存在するので?windowすべてのブラウザーに存在しますか? それとも、単に と比較する必要があり== 'undefined'ますか? SOで同様の質問をいくつか見つけましたが、ウィンドウオブジェクトの未定義プロパティの存在に関する回答はありません。

4

5 に答える 5

1

代わりに使用することをお勧めしますtypeof

if (typeof foo == "undefined") {
    // ...
}

これは文字列typeof返すので、常に文字列値と比較する必要があることに注意してください。

于 2012-09-22T18:32:11.373 に答える
1

foo == undefinedと の間で混乱していると思いますtypeof foo == "undefined"

変数が現在のスコープで別のものに設定されていない限り、どちらも同じ結果になります。undefinedこの場合、foo == undefinedはそれと比較されtypeof foo == "undefined"ますが、-as は正しく解決されます。

var undefined = 4;
var reallyUndefined;

reallyUndefined == undefined; // false
typeof reallyUndefined == undefined; // true

undefined他の何かに設定されることが現実世界のシナリオであるかどうかは議論の余地があり、それを行うライブラリ/コードの有効性に疑問があります...ただし、このため、常に使用することをお勧めしますtypeof foo === "undefined".

私はまた、foo == undefinedに対して使用することにも注意をfoo === undefined払っています (type-coercian を使用しないトリプル イコールに注意してください==)。

を使用すると、 、 where-as==などのリスクが生じます。これは、常に を使用する必要がある理由の良い例です。null == undefined; // truenull === undefined; // false===


tl;dr :typeof foo === "undefined";

于 2012-09-22T18:33:44.330 に答える
1
if (foo === undefined)

安全です

于 2012-09-22T18:34:08.660 に答える
1

これを行うにはいくつかの方法がありますが、私が見つけた最も簡単な方法は次のとおりです。

if(foo === undefined){
  //do stuff
}
于 2012-09-22T18:34:58.150 に答える
1

すべてのコードを完全に制御でき、誰かがいじる心配がないことがわかっている場合はundefined、それと比較しても安全です。

alert(window.foo === undefined);

一方、もう少し偏執的になりたい場合は、外部の言葉の影響を受けない typeof チェックを行うことができます

alert(typeof window.foo == 'undefined')

3 番目のオプションは、独自のローカルの未定義変数を持つことです。

function testme(a, undefined) {
   alert(a === undefined); // Will be false.
}

testme(10);
于 2012-09-22T18:35:14.353 に答える