0

次の実装が機能するのに jshint エラーと見なされる理由について何か提案はありますか?

try {
    map.childNodes.length;
} catch (err) {
    console.log(err);
}

反復する前に、childNodes に長さがあるかどうかを確認したいだけです。

ここで同様のこと:

try {
    response.errors.length > 0;
    deferred.reject(response);
} catch (e) {
    deferred.resolve(response);
}
4

2 に答える 2

3

JSHint からの警告は次のとおりです。

代入または関数呼び出しを期待していましたが、代わりに式を見ました。

を使用しなくても警告が表示されますtry..catch。JSHint はmap.childNodes.length;、スタンドアロンのステートメントとしてはおそらく役に立たず、コーディングの誤りを示している可能性が高いことを知らせています。つまり、ほとんどの場合、スタンドアロンのステートメントとして値にアクセスするだけでなく、値を使って何かをしたいと考えています。たとえば、 (useless) statement で同じ警告が表示されます5;

もちろん、ステートメント内の唯一の動作としてプロパティにアクセスすると便利な場合もあります。たとえば、 を使用してプロパティにゲッター関数を定義している場合、プロパティObject.definePropertyにアクセスするとゲッター関数がトリガーされます。ただし、値のみのステートメントはコーディング エラーである可能性が非常に高いため、JSHint は疑わしいコードについて警告します。

そうは言っても、オブジェクトではなくresponse.error偽の値 ( undefined, ) である可能性があると心配しているとすれば、アプローチは改善される可能性があります。null

if(response.errors && response.errors.length > 0) {
    deferred.resolve(response);
} else {
    deferred.reject(response);
}
于 2013-10-28T19:41:24.273 に答える
0

条件にあるはずの条件演算子を悪用しているためですif。JSHint は、Javascript でできることを承認することを意図したものではありません。

最初に、次のような配列型チェックを使用できます。

if (toString.call(map.childNodes) === '[object Array]') {
  //iterator
}

2 つ目は、おそらく次のようなものです。

if (response.errors && response.errors.length > 0) {
  deferred.reject(response);
} else {
  deferred.resolve(response);
}
于 2013-10-28T19:46:47.923 に答える