Что означает JSLint под "Неожиданным выражением" я "в позиции оператора?"?

У меня есть цикл for в JavaScript, который я запускал через JSLint несколько раз. В прошлом я получил the unexpected++ error, я решил реорганизовать, чтобы сделать мой код более удобочитаемым. Через месяц или около того JSLint вышел с обновлением и теперь показывает предупреждение...

Неожиданное выражение 'i' в позиции оператора. for (i; я < scope.formData.tabs.length; я = я + 1) {

//See JSLint.com for why I pulled out i initialization and i = i+1 instead of i++
//and http://stackoverflow.com/info/3000276/the-unexpected-error-in-jslint
var i = 0;
for (i; i < scope.formData.tabs.length; i += 1) {
    scope.formData.tabs[i].show = false; // hide all the other tabs 

    if (scope.formData.tabs[i].title === title) {
        scope.formData.tabs[i].show = true; // show the new tab 
    }
}

Возврат к var i = 0 и i++ не улучшает предупреждения, JSLint просто прекращает обработку.

Ответ 1

Похоже, последующая проблема не [просто?] из-за того, что JSLint находится в бета-версии. Это потому, что Crockford больше не разрешает for заявления по умолчанию. Похоже, мне нужно отложить выходные на прочитайте новые инструкции и источник. Странные вещи происходят в Круге К, человек.

Самая важная новая особенность ES6 - правильные хвостовые звонки. Это нет нового синтаксиса, поэтому JSLint этого не видит. Но это делает рекурсию намного больше привлекательный, который создает петли, особенно для петель, а тем более привлекательный.

Затем это в главной таблице раздела директивы /*jslint */:

Описание: выражение Tolerate for
Вариант: for
Значение: true, если оператор for должен быть разрешен.

Ниже таблицы ниже представлено следующее объяснение:

JSLint не рекомендует использовать инструкцию for. Использовать методы массива например forEach. Параметр for подавляет некоторые предупреждения. формы for, которые принимает JSLint, ограничены, исключая новые формы ES6.

Итак, чтобы сделать этот ворс в новом JSLint, вам нужен хотя бы этот код (с директивой for):

/*jslint white:true, for:true */
/*global scope, title */

function test()
{
    "use strict";
    var i;

    for (i=0; i < scope.formData.tabs.length; i = i + 1) {
        scope.formData.tabs[i].show = false; // hide all the other tabs 

        if (scope.formData.tabs[i].title === title) {
            scope.formData.tabs[i].show = true; // show the new tab 
        }
    }
}

Обратите внимание, что мне все равно пришлось переместить инициализацию i, поэтому у вас может быть проблема отчетность. Я также признаю Я с Стивеном на вопрос, который вы связываете; Я не уверен, почему i+= 1 лучше. Но теперь это похоже на жесткое требование. Нет опции plusplus.

Обратите внимание, что если код не был завернут в функцию (я завернул в test, выше), вы получите Unexpected 'for' at top level., что является новой ошибкой.

Ответ 2

EDIT: Кажется, я ошибался. См. Ответ ruffin для более подробного объяснения.

Кажется, проблема связана с jslint.com. Помните, что он все еще в бета-версии. Если вы используете старую версию (old.jslint.com), проблема, похоже, исчезнет.

Здесь вывод для old.jslint.com: enter image description here
Это в основном все о том, что область не определена... и т.д.

Здесь вывод от jslint.com: enter image description here Это о том, что область не определена... и т.д. И

Неожиданный "для".

вместе с

Неожиданное выражение 'i' в позиции оператора.

В настоящее время, я полагаю, вы должны просто использовать старую версию jslint.com.