Internet Explorerでこのステートメントに問題が発生しているのですが、それを行うためのより適切な方法があるかどうか疑問に思っていました。
var NEWVARIABLE = NEWVARIABLE || {};
NEWVARIABLE.Tools = NEWVARIABLE.Tools || {};
NEWVARIABLE
それは私に存在しないエラーを与えます
Internet Explorerでこのステートメントに問題が発生しているのですが、それを行うためのより適切な方法があるかどうか疑問に思っていました。
var NEWVARIABLE = NEWVARIABLE || {};
NEWVARIABLE.Tools = NEWVARIABLE.Tools || {};
NEWVARIABLE
それは私に存在しないエラーを与えます
定義されていない変数を使用(またはテスト)することはできません。私はもともとそれがあなたが次のステートメントでやっていたことだと思っていました
var NEWVARIABLE = NEWVARIABLE || {};
しかし、Fabrícioのおかげで、var宣言が引き上げられる(スクリプトタグの先頭に移動されるため、ステートメントにヒットしたときにすでに宣言されている)ことに気付きました。
typeof === 'undefined'
変数が存在するかどうかを確認するために変数を使用するかどうかをテストするための、それほど混乱しない方法
var NEWVARIABLE;
if (typeof NEWVARIABLE === 'undefined') {
NEWVARIABLE = {};
}
プロパティをチェックするときに同じスタイルを使用できます。typeof
プロパティのテストを使用する必要はありません。定義されていない場合でも、プロパティをテストできます。
回答を受け入れましたが、誤解を招く記述が含まれています。
定義されていない変数を使用(またはテスト)することはできません。それがあなたがしていることです
変数が宣言されているので、それはあなたがしていることではありません。
OPでは、コードは次のとおりです。
> var NEWVARIABLE = NEWVARIABLE || {};
> NEWVARIABLE.Tools = NEWVARIABLE.Tools || {};
構文エラーは含まれていません。エラーがスローされるのは、NEWVARIABLEがすでに存在し、アクセスまたは割り当てを試みるときにエラーをスローするToolsプロパティがある場合のみです(特定のホストオブジェクトで発生する可能性があります)。
以前にネイティブオブジェクトまたはプリミティブ値が割り当てられている場合NEWVARIABLE
、期待どおりの結果が得られない場合でも、エラーはスローされません。