JavaScript: Ошибка - "Ожидалось назначение или вызов функции и вместо этого увидел выражение"?
Я использую JSLint, чтобы убедиться, что мой JavaScript "строгий", и я получаю следующую ошибку:
Ожидалось назначение или вызов функции и вместо этого увидело выражение
В следующем коде:
(my_var > 0 ) ? $("#abc").html(my_array.join('')) : $("#abc").html('<h2>Hello ' + persons_name);
Любые идеи, почему я получаю такую ошибку? Кроме того, я использую jQuery, как видно из приведенного выше кода, в случае, если это имеет значение.
Ответы
Ответ 1
Мое предположение было бы в том, что JSLint несчастлив, так как вы используете тернарный оператор, и вы ничего не делаете со значением. Рефакторинг этого в эквивалент:
if (my_var > 0 ) {
$("#abc").html(my_array.join(''));
} else {
$("#abc").html('<h2>Hello ' + persons_name);
}
устранит ошибку. Если по какой-то причине вы действительно привязаны к использованию тернарного оператора, "правильный" способ его использования:
$("#abc").html((my_var > 0) ? my_array.join('') : '<h2>Hello ' + persons_name);
Ответ 2
Я считаю, что это потому, что тернарный оператор оценивает выражение и возвращает значение, которое, как ожидается, будет назначено. Например:
var test = (my_var > 0) ? true : false;
Однако вы используете его как обычный оператор if/then/else. Хотя тернарный оператор выполняет, если /then/else, он традиционно используется в назначениях.
EDIT: В качестве дополнения: будет ли это утверждение иметь для вас смысл?
var foo = 1;
(my_var > 0) ? true : false;
console.log('hello world');
Ответ 3
вы используете выражение (выражение с использованием тернарного оператора, если быть точным) в одной строке: ваша строка состоит из одного выражения.
это считается плохой практикой программирования на многих языках и может быть перезаписано с помощью оператора if
, чтобы сделать эту строку более понятной.
Ответ 4
Просто спросил тот же Q, не найдя этот по какой-то причине...
Тернар возвращает значение, которое не используется, поэтому вы злоупотребляете тройной структурой, не используя значение (даже если вызовы функций выполняются по назначению).