我删除从以下三元括号:为什么'foo'+ false? “酒吧”:“巴兹”评价为“巴”
res.setHeader('Content-Type', 'application/' + (isMap ? 'json' : 'javascript'));
,用测试失败:
Error: expected 'json' to equal 'application/javascript'
起初我以为这只是一些有线的Node.js问题,但似乎:
'foo' + false ? 'bar' : 'baz'
在Firefox和Chrome中评估为'bar'。
所以我的问题是:
- 发生了什么事我的字符串的第一部分。
- 为什么我在通过
false
时得到三元操作的true
值。
了'FALSE'首先被转化为一个'string',然后再连接到'foo'字符串,因为这个成功则返回true,你将结束与“酒吧” –
@NickVanderhoven你应该写一个真实的答案。 – Soviut
运算符优先级规则存在,因为JS无法知道你是否打算'(“foo”+ false)? “bar”:“baz”或者“foo”+(false?“bar”:“baz)”。存在对parens进行分组以清除代码和/或覆盖运算符优先级。 – 2016-12-01 19:30:34