[解決済み】JSLintのエラー「body of a for in should be wrapped in in if statement」はどういう意味ですか?
質問
私は JSLint を私のJavaScriptファイルに追加しました。それはエラーを投げました。
for( ind in evtListeners ) {
41行目の文字9の問題:for inの本体は、以下のようにする必要があります。 を if 文でラップして、不要なものをフィルタリングする。 プロパティをプロトタイプから削除してください。
これはどういうことでしょうか?
どのように解決するのですか?
まず最初に。
決して
を使用します。
for in
ループを使用して、配列を列挙します。決して 古き良き
for(var i = 0; i<arr.length; i++)
.
この背景には、次のような理由があります。JavaScriptの各オブジェクトは、特殊フィールド
prototype
. このフィールドに追加したものはすべて、その型のすべてのオブジェクトでアクセスできるようになります。例えば、すべての配列に
filter_0
は、ゼロをフィルタリングします。
Array.prototype.filter_0 = function() {
var res = [];
for (var i = 0; i < this.length; i++) {
if (this[i] != 0) {
res.push(this[i]);
}
}
return res;
};
console.log([0, 5, 0, 3, 0, 1, 0].filter_0());
//prints [5,3,1]
これは、オブジェクトを拡張し、新しいメソッドを追加する標準的な方法です。多くのライブラリがこの方法を採用しています。
しかし、ここでは
for in
は今、機能している。
var listeners = ["a", "b", "c"];
for (o in listeners) {
console.log(o);
}
//prints:
// 0
// 1
// 2
// filter_0
わかりますか?いきなりfilter_0を別の配列のインデックスだと思い込んでいるのです。もちろん、実際には数値インデックスではありません。
for in
は数値インデックスだけでなく、オブジェクトフィールドを通して列挙します。ですから、今はすべての数値インデックスを列挙しています。
と
filter_0
. しかし
filter_0
は、特定の配列オブジェクトのフィールドではなく、すべての配列オブジェクトがこのプロパティを持っています。
幸いなことに、すべてのオブジェクトに
hasOwnProperty
このメソッドは、このフィールドが本当にオブジェクト自体に属しているのか、それとも単にプロトタイプチェーンから継承され、その型のすべてのオブジェクトに属しているのかをチェックします。
for (o in listeners) {
if (listeners.hasOwnProperty(o)) {
console.log(o);
}
}
//prints:
// 0
// 1
// 2
このコードは配列に対しては期待通りに動作しますが、決してそうではないことに注意してください。
決して
を使用します。
for in
と
for each in
は配列の場合です。このとき
for in
はオブジェクトのフィールドを列挙するものであり、配列のインデックスや値を列挙するものではありません。
var listeners = ["a", "b", "c"];
listeners.happy = "Happy debugging";
for (o in listeners) {
if (listeners.hasOwnProperty(o)) {
console.log(o);
}
}
//prints:
// 0
// 1
// 2
// happy
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
-
[解決済み] javascript:void(0)」とは何ですか?
-
[解決済み] CodeMash 2012の'Wat'トークで言及された、この奇妙なJavaScriptの動作の説明とは?
-
[解決済み] JavaScriptで配列の長さを初期化する方法は?
-
[解決済み] JSLintが "missing radix parameter "と表示する。
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Vueが定義されていない
-
[解決済み] switchの使用時に「ステートメントはif文でフィルタリングされなければならない」というtslintのクレームが発生する。