【发布时间】:2018-06-10 20:57:42
【问题描述】:
尝试在条件(三元)运算符中使用逗号运算符进行日志记录时,我注意到一些奇怪的事情。这是一个人为的例子:
const a = 2;
const b = 1;
a > b ? console.log(a), a : b; //I expect this to log and evaluate to a
但我却遇到了这个:
Uncaught SyntaxError: Unexpected token ,
根据MDN documentation,条件运算符接受两个表达式作为三元运算符的'if'和'else'情况,而comma operator理论上是一个表达式为,
逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值。
那么为什么会出现语法错误?逗号运算符是一个表达式,应该允许在条件运算符中。虽然,在逗号的操作数周围加上括号可以正常工作:
a > b ? (console.log(a), a) : b; //Logs and gives a
为什么效果很好?括号(或grouping operator)允许解释器知道它正在处理一个表达式,但console.log(a), a 已经是一个不需要括号的表达式,那么为什么要这样做没有它们我会收到语法错误?
【问题讨论】:
-
我做了一些编辑,但我没有删除
ecmascript-6标签事件虽然我认为它甚至适用的唯一原因是你不必要地使用@987654329 @关键字而不仅仅是var -
@GeorgeJempty 我只选择 ECMAScript(没有版本),因为我在答案中使用了规范,但它不存在,尽管这是一个好点。我会说你的编辑很好,谢谢。
-
很高兴您可以在标题中添加“三元运算符”,我认为这会让它更适合 google。总而言之,自我回答的问答非常棒,我自己做过一些,但他们从来没有得到过这样的接待。
标签: javascript ecmascript-6 syntax-error language-lawyer ternary-operator