1. ホーム
  2. javascript

[解決済み] JavaScriptで "undefined "をチェックするにはどうすればよいですか?[重複しています]

2022-03-14 02:59:17

質問

JavaScriptで変数が未定義かどうかをテストする最も適切な方法は何でしょうか?

いくつかの方法が考えられますが、どのような方法が考えられますか?

if (window.myVariable)

または

if (typeof(myVariable) != "undefined")

または

if (myVariable) // This throws an error if undefined. Should this be in Try/Catch?

解決方法は?

もし、ある変数がその値に関係なく宣言されているかどうかを調べたいのであれば、その変数に対応した in 演算子は最も安全な方法です。この例で考えてみましょう。

// global scope
var theFu; // theFu has been declared, but its value is undefined
typeof theFu; // "undefined"

しかし、変数やプロパティは宣言されていても初期化されていないだけなので、場合によっては意図した結果にならないかもしれません。その場合は in 演算子を使えば、より確実なチェックができます。

"theFu" in window; // true
"theFoo" in window; // false

変数が宣言されていないのか、値があるのかを知りたい場合 undefined を使用します。 typeof 演算子は文字列を返すことが保証されています。

if (typeof myVar !== 'undefined')

に対して直接比較する。 undefined は面倒なので undefined は上書きされる可能性があります。

window.undefined = "foo";
"foo" == undefined // true

@CMS さんのご指摘の通り、ECMAScript 第 5 版でパッチが適用されており undefined は書き込み不可です。

if (window.myVar) は、これらの偽の値も含んでしまうので、あまり堅牢ではありません。

虚偽
0
""
NaN
ヌル
未定義

3つ目のケース - を指摘してくれた @CMS に感謝します。 if (myVariable) は、2つのケースでエラーを投げることもできます。ひとつは、変数が定義されていない場合です。 ReferenceError .

// abc was never declared.
if (abc) {
    // ReferenceError: abc is not defined
} 

もう一つは、変数は定義されているが、ゲッター関数があり、それを呼び出すとエラーになる場合です。例えば

// or it's a property that can throw an error
Object.defineProperty(window, "myVariable", { 
    get: function() { throw new Error("W00t?"); }, 
    set: undefined 
});
if (myVariable) {
    // Error: W00t?
}