可能性のある複製:
JavaScriptで変数が定義されているかどうかを確認するにはどうすればよいですか?
JavaScriptでnull、未定義、または空白の変数をチェックする標準関数はありますか?
2つの部分で発生するスクリプトがあります。
最初の部分は変数を設定します:
var pagetype = "textpage";
2番目の部分は単純なifステートメントです。
if(pagetype == "textpage") {
//do something
};
これで、2番目の部分であるifステートメントがサイトのすべてのページに表示されます。しかし、varが宣言されている最初の部分は、一部のページにのみ表示されます。
Varのないページでは、自然にこのエラーが発生します。
Uncaught ReferenceError: pagetype is not defined
だから私の質問は次のとおりです:JavaScriptまたはJQを使用して、varが存在するかどうかを検出する方法はありますか?
私は別のif文を使用するだけだと想像しています、例えば:
if ("a var called pagetypes exists")....
SOにはこのような多くの答えがあると思いますが、ここに行きます:
if ( typeof pagetype !== 'undefined' && pagetype == 'textpage' ) {
...
}
typeof
を使用できます:
if (typeof pagetype === 'undefined') {
// pagetype doesn't exist
}
あなたの場合、他のすべてのelclanrs
回答の99.9%が正解です。
ただし、undefined
は有効な値であるため、誰かが初期化されていない変数をテストする場合
var pagetype; //== undefined
if (typeof pagetype === 'undefined') //true
varが存在するかどうかを判断する唯一の100%信頼できる方法は、例外をキャッチすることです。
var exists = false;
try { pagetype; exists = true;} catch(e) {}
if (exists && ...) {}
しかし、私はそれをこのように決して書きません
存在をテストするには、2つの方法があります。
a。 "property" in object
このメソッドは、プロパティの存在についてプロトタイプチェーンをチェックします。
b。 object.hasOwnProperty( "property" )
このメソッドは、プロパティの存在を確認するためにプロトタイプチェーンを上に移動するのではなく、メソッドを呼び出すオブジェクトに存在する必要があります。
var x; // variable declared in global scope and now exists
"x" in window; // true
window.hasOwnProperty( "x" ); //true
次の式を使用してテストしている場合、falseを返します
typeof x !== 'undefined'; // false
各条件ステートメントの前に、次のようなことができます。
var pagetype = pagetype || false;
if (pagetype === 'something') {
//do stuff
}
Try..catchを使用して変数が宣言されているかどうかを判断することは、宣言されていない場合にエラーを発生させることは不可能です。次のようなテスト:
if (typeof varName == 'undefined')
varName
がスコープ内の変数であるかどうかは通知せず、typeofでのテストで未定義が返されるだけです。例えば.
var foo;
typeof foo == 'undefined'; // true
typeof bar == 'undefined'; // true
上記では、fooは宣言されているがbarは宣言されていないことはわかりません。 in
を使用して、グローバル変数をテストできます。
var global = this;
...
'bar' in global; // false
ただし、グローバルオブジェクトはアクセスできる唯一の変数オブジェクト*であり、他の実行コンテキストの変数オブジェクトにはアクセスできません。
解決策は、常に適切なコンテキストで変数を宣言することです。