Сообщение об ошибке JSLint - Что случилось с этим?

Я получил эту ошибку, и не знайте то, что могло быть причиной. Какая-либо идея?

Проблема в строке 2 127 символов 18: Плохо для в переменном 'спорте'. для (спорт в sugested_sports)

                // make array
        var sugested_sports = data.split(",");

            // pre build DIV
        var sporty_items = '';
        for (sport in sugested_sports)
        {
            if  (sugested_sports.hasOwnProperty(sport)) {
                sporty_items += '<a href="#'+identifier[1]+'">'+sugested_sports[sport]+'</a>';
            }
        }
            // insert DIV
        DIVsuggestions.html(sporty_items);

большое спасибо.

14
задан Hans 22 May 2010 в 02:54
поделиться

2 ответа

Try

var sport;
for (sport in sugested_sports)

Это позаботится о недостающем объявлении переменной и поместит ее вне цикла for (см. Ошибка jsLint "Cannot set property 'first' of undefined" ).

19
ответ дан 1 December 2019 в 06:53
поделиться

Ответ Пойнти, вероятно, тот, на который жалуется lint.


Как правило, вы должны быть осторожны при использовании для (... in ...) . Люди часто путают эту конструкцию с foreach из C # или другими подобными концепциями в других языках, хотя на самом деле это не связано. Конструкция javascript for in выполняет итерацию каждого члена объекта, а не только значений в коллекции, включая методы и свойства. Такое поведение часто может приводить к неожиданным побочным эффектам, если вы заранее не знаете, как оно работает.

Например:

x = ['one', 'two'];
for (var value in x) {
  alert(value);
}

Это дает два предупреждения, первое содержит 0 , а второе 1 , в частности индексы коллекции.

Если мы немного изменим это:

x = ['one', 'two'];
x.method = function() {};
for (var value in x) {
  alert(value);
}

На этот раз мы получим три предупреждения: 0 , 1 и метод . Я имел в виду неожиданное поведение. Можно использовать в , если вы знаете, что он делает, но я не раз видел, как это улавливало людей.

Следующее работает с обоими примерами:

x = ['one', 'two'];
for (var i = 0; i < x.length; i++) {
  alert(i);
}
17
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: