12

変数が定義されているかどうかを確認しています。明示的に定義されていない場合は、次のようにして定義します。

if ( typeof(aVariable) == 'undefined' ) {
  var aVariable = value;
}

変数が定義されていないため、JSLint は、変数が定義される前に使用されていることを警告します。これはまさに私が望んでいることです。

どうすればこれを克服できますか?

これらの変数を明示的に定義できるようにしたい:

<script>
  var aVariable = value;
</script>
<script src="myScript.js"></script>

したがって、このスクリプトを含める予定のすべてのユーザーは、プロパティの一部をカスタマイズできます。残念ながら、このロジックは既に何百もの Web サイトでこのように使用されているため、変更することはできません。

私は自分の質問に答えたので、下にスクロールして回答/解決策を見つけます。スタックオーバーフローには表示されません。それらを見逃さないようにしてください。

4

6 に答える 6

7

JSLint が伝えていることは、変数を定義する前に変数を使用してはならないということだと思います。シナリオに適していることに満足している場合は、その警告を無視できます。よくわからない場合は、この変数がまだ定義されていない理由をもう一度考えてみてください。

たとえば、定義されているか定義されていないかではなく、aVariable に値が設定されているかどうかを本当にテストしますか?

var aVariable = null;

... (今度いつか)

if (aVariable == null) {
  aVariable = value;
}
于 2010-02-10T07:53:44.727 に答える
5

JSLintメーリングリストでより受け入れられる回答を見つけました。Boldewynについては申し訳ありません:)

解決策 1

IE では、スクリプト レベル (つまり、ファイルごと、またはスクリプト ブロックごと) で、解析段階 (実行前) で "var" 宣言が検出されると、その変数の値が既に存在する場合はリセットされます。

したがって、単純にこれを行う方がよいでしょう:

/*global foo: true */
if (typeof foo === "undefined") {
foo = "some value";
}

「var」を宣言せずに foo を割り当てるだけで、foo は自動的にグローバル スコープを取得します。

解決策 2 (特殊なケース)

明示的に設定された変数がゼロまたは false でない場合

var foo = foo || "some value";
于 2010-02-11T11:13:47.570 に答える
4

変数(とにかくグローバル)をwindow:の明示的なメンバーにすることができます。

window.aVariable = 'default';

以降

if (! ('aVariable' in window)) {
    window.aVariable = 'new value';
}

コードを変更したくない、または変更できない場合は、コードがとにかく機能するため(つまり、ECMAScript 5の厳密モードを有効にしない限り)、実用的な仮説を立て、JSLintの苦情を無視することをお勧めします。 。)。

于 2010-02-10T08:05:35.197 に答える
2

これを試して:

aVariable = null;

aVariable = typeof(aVariable) == 'undefined' ? null : value;
于 2010-02-10T07:55:46.743 に答える
1

変数を使用する前に、変数を宣言するのが最も簡単です。

var aVariable;

これは「未定義」型で初期化されるため、未定義のテストは引き続き機能します。

if (typeof aVariable == "undefined") {
    aVariable = value;
}
于 2010-02-10T09:24:26.160 に答える
-1

変数名にキャメルケースを使用すると、そのエラーが発生するようです。変数を大文字で始める (Variable) か、すべて小文字にする (Variable) と、「暗黙のグローバル」エラーが発生します。

変数名に大文字小文字を強制することで何を示唆しようとしているのかはわかりませんが、常にJSLintを一粒の塩で取る必要があります。ここで行っていることは完全に有効であり、未定義の変数を誤って使用しないようにするための良い方法です。

于 2010-02-10T07:56:34.860 に答える