javascript - nodejs中的三元运算符

标签 javascript node.js ternary-operator

我正在尝试在 nodejs 中使用三元运算符进行条件检查。

三元运算符在以下情况下工作正常,没有问题。它在控制台中打印文本

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

在下面的情况下同样不起作用,它会抛出以下错误

let text = "I am true";

  ^^^^ 

SyntaxError: Unexpected identifier

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

我无法理解为什么这会有所不同。

最佳答案

条件(三元)运算符中 ?: 后面的内容必须是表达式,而不是语句。表达式求值。变量赋值,如 let text = "I am true";,是一个语句,而不是一个表达式 - 它某事(赋值“I对 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 变量。)

关于javascript - nodejs中的三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52176367/

相关文章:

javascript - Ember js 中的 hasMany 关联

javascript - 如何在 c3 图表中创建刻度线

javascript - 单击 Webkit 通知时如何从浏览器中的任何其他选项卡返回当前选项卡

javascript - Bundle.js 不接受任何更改

javascript - SailsJS 获取发布的数据

java - 当我使用三元运算符时抛出 NullPointerException

node.js - 如何使用 Express.js 正确处理 SIGINT?

javascript - AngularJS $http.get 不检索后端数据

c++ - 运行 while 的第一个实例

java - 语法问题 : Ternary and loop inside return statement