троичный оператор в nodejs - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь выполнить условную проверку, используя троичный оператор в nodejs.

Троичный оператор работает нормально, без проблем в сценарии ниже. Он печатает текст в консоли

{true ? (
  console.log("I am true")      
) : (
  console.log("I am not true")
)}

И то же самое не работает при сценарии ниже и выдает следующую ошибку

let text = "Я правда";

  ^^^^ 

SyntaxError: Неожиданный идентификатор

{true ? (
  let text = "I am true";
  console.log(text);      
) : (
  console.log("I am not true")
)}

Я не могу понять, почему это ведет себя по-другому.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

То, что следует за ? или : в условном (троичном) операторе, должно быть выражением , а не операторами. Выражения оценивают в значение. Назначение переменной, подобно let text = "I am true";, является оператором , а не выражением - оно делает что-то (присваивает «я истинный» переменной text), а не оценивая до некоторого значения.

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

let text;
(true ? (
  text = "I am true",
  console.log(text)
) : (
  console.log("I am not true")
))

Но условный оператор все еще не подходит для этой ситуации - условный оператор оценивает в значение (это выражение само по себе). Если вы не собираетесь использовать полученное значение, вы должны использовать if/else вместо этого:

let text;
if (true) {
  text = "I am true";
  console.log(text);
} else console.log("I am not true");

Время использования условного оператора - это когда вам нужно использовать результирующее значение, например:

const condition = true;
const text = condition ? 'I am true' : 'I am not true';
console.log(text);

(Посмотрите, как результат условной операции используется здесь - он присваивается переменной text.)

0 голосов
/ 05 сентября 2018

Вы не можете сделать такое назначение в троичном операторе. Вам нужно сделать что-то вроде:

let text = myCondition
              ? "I am true"
              : "I am not true"
...