JavaScript: Ошибка - «Ожидается присваивание или вызов функции, а вместо этого видели выражение»? - PullRequest
16 голосов
/ 12 ноября 2010

Я использую JSLint , чтобы убедиться, что мой JavaScript "строгий", и я получаю следующую ошибку:

Ожидал присваивания или вызова функции и вместо этого увидел выражение

На следующий код:

(my_var > 0 ) ? $("#abc").html(my_array.join('')) : $("#abc").html('<h2>Hello ' + persons_name);

Есть идеи, почему я получаю такую ​​ошибку? Кроме того, я использую jQuery, как видно из приведенного выше кода, на случай, если что-то изменится.

Ответы [ 4 ]

14 голосов
/ 12 ноября 2010

Я полагаю, что 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);
8 голосов
/ 12 ноября 2010

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

var test = (my_var > 0) ? true : false;

Однако вы используете его как обычный оператор if / then / else.Хотя троичный оператор выполняет if / then / else, он традиционно используется в присваивателях.

РЕДАКТИРОВАТЬ: В качестве дополнения: будет ли это утверждение иметь смысл для вас?

2 голосов
/ 12 ноября 2010

Вы используете выражение (выражение, использующее троичный оператор, если быть точным) в одной строке: ваша строка состоит исключительно из выражения.

это считается плохой практикой программирования во многих языках и может быть переписано с использованием оператора if, чтобы сделать эту строку более ясной.

0 голосов
/ 22 января 2015

Просто спросил тот же вопрос, не найдя этого по какой-то причине ...

Тернар возвращает значение, которое не используется, поэтому вы злоупотребляете троичной структурой, не используя значение (даже если вызовы функций выполняются по назначению).

...