Node.js中的三元运算符

时间:2018-09-05 02:50:22

标签: javascript node.js ternary-operator

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

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

bash      4663               rachmad  cwd       DIR                8,5     24576     123350 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules
java      7372               rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7373          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7376          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7377          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7378          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7379          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7380          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7381          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7382          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7383          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7384          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7385          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7386          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7387          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7388          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7389          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7390          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7400          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7401          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7408          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
java      7372 7409          rachmad  330r      REG                8,5      5287     126198 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules/apollo-codegen/package.json (deleted)
lsof      9659               rachmad  cwd       DIR                8,5     24576     123350 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules
grep      9660               rachmad  cwd       DIR                8,5     24576     123350 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules
lsof      9661               rachmad  cwd       DIR                8,5     24576     123350 /media/rachmad/Data/PROJECT/myproject/app/build/apollo-codegen/node_modules

在以下情况下,同样的方法不起作用,并且会引发以下错误

  

let text =“我是真的”;

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

SyntaxError:意外的标识符

  ^^^^ 

我无法理解为什么行为方式有所不同。

3 个答案:

答案 0 :(得分:7)

条件(三元)运算符中?:之后的内容必须是表达式,而不是语句。表达式求值。像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变量。)

答案 1 :(得分:1)

您无法在三元运算符中进行分配。您将需要执行以下操作:

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

答案 2 :(得分:0)

let text;

true ? (text = "I am true") : (text = "I am not true");

console.log(text);