JSLint - Ожидается увидеть оператор, но вместо этого увидел блок
Я только что включил проверку JSLint в Aptana Studio 3. В моем веб-приложении у меня есть следующий код:
Sessions.getVars = function()
{
return $http.get(baseURL)
.then(function(response) { return response.data; },
function(response) { /* TODO Error handling */ });
};
Это выбрасывает следующую ошибку Expected to see a statement but instead saw a block
,
Я посмотрел в этом вопросе, но на самом деле это только ответ на вопрос в связи с утверждениями switch/case. Кто-нибудь может помочь мне понять, почему существует эта ошибка?
3 ответа
Это гораздо проще, чем установка волнистых скоб. У вас есть определенный тип блока - пустой блок - и JSLint не любит пустые блоки. Он хочет заявлений.
Обратите внимание, что функция без возвращаемого значения возвращает undefined
в любом случае, так что вы можете помешать этому без изменения функции следующим образом:
/*jslint sloppy:true, white:true */
/*global Sessions, $http, baseURL */
Sessions.getVars = function()
{
return $http.get(baseURL)
.then(function(response) { return response.data; },
function(response) { return undefined; });
};
Я думаю, что это все, что вы видите.
Обратите внимание, что JSLint не обязательно так плох в отношении того, где вы поставили волнистые линии, как вы могли бы поверить в эти другие ответы!;^) В любом случае, если вы используете директивы JSLint, это не является нарушителем.
Я использую две директивы:
sloppy
- позволяет пропустить использование"use strict";
white
- позволяет для любого свободного места, которое вы хотите. Без этого вы увидите ошибку, я думаю, что другие ответы здесь ожидают, но эта ошибка будетExpected exactly one space between ')' and '{'.
Я бы сказал, что вы можете просто запустить фрагмент на JSLint.com, чтобы проверить, но похоже, что Крокфорд находится в середине своего предупредительного перехода к новому JSLint, который намного более драконовский, чем старый. На данный момент я бы предложил протестировать фрагменты на http://old.jslint.com/.
Если вы это сделаете, вы увидите, что для того, чтобы сделать JSLint "полностью счастливым", вам нужно удалить response
из этой второй функции, а также: function() { return "Something"; });
, Он также не любит неиспользуемые параметры.
Если вы хотите оставить комментарий TODO, вам нужно добавить todo
директива тоже.
Добавление обоих этих изменений дает нам:
/*jslint sloppy:true, white:true, todo:true */
/*global Sessions, $http, baseURL */
Sessions.getVars = function()
{
return $http.get(baseURL)
.then(function(response) { return response.data; },
function() {
/* TODO Error handling; add `err` to parameters */
return undefined;
});
};
Вероятно, это связано с тем, что jslint применяет соглашение о размещении открывающей фигурной скобки тела функции в той же строке, что и function
ключевое слово, т.е.
function myFunc () { // Put it here
// body...
}
Это также может быть ошибкой в том, что парсер не может распознать тело функции, начинающееся с новой строки.
PS. Если JSLint соответствует вашим потребностям, продолжайте использовать его, но я чувствую себя обязанным представить вам некоторые альтернативы:
jshint и eslint. jshint предоставляет настраиваемые правила для известных ловушек и обеспечивает хорошие привычки кодирования, тогда как eslint (в дополнение) предоставляет правила для реализации определенного стиля кодирования (за счет кажущегося подавляющего количества параметров конфигурации).
Используйте рекомендуемый стиль форматирования JavaScript здесь, другие стили в основном являются вариациями этого. Большинство редакторов автоматически форматируют ваш код JS в этот стиль или что-то очень близкое.
{ (Левая фигурная скобка) должна находиться в конце строки, которая начинает составной оператор.
Существует множество неприятных ошибок JavaScript, которых можно избежать, следуя рекомендуемым правилам форматирования ( пример). Это также поможет другим людям читать этот код.
JSLint все о соблюдении таких рекомендаций. Поэтому обходить их часто, но не всегда контрпродуктивно, поэтому был изобретен JSHint.