2016-12-01 62 views
0

我删除从以下三元括号:为什么'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'。

所以我的问题是:

  1. 发生了什么事我的字符串的第一部分。
  2. 为什么我在通过false时得到三元操作的true值。
+0

了'FALSE'首先被转化为一个'string',然后再连接到'foo'字符串,因为这个成功则返回true,你将结束与“酒吧” –

+1

@NickVanderhoven你应该写一个真实的答案。 – Soviut

+2

运算符优先级规则存在,因为JS无法知道你是否打算'(“foo”+ false)? “bar”:“baz”或者“foo”+(false?“bar”:“baz)”。存在对parens进行分组以清除代码和/或覆盖运算符优先级。 – 2016-12-01 19:30:34

回答

0

false首先转换为字符串,然后再连接到foo字符串,因为这种成功,则返回true,你将结束与bar

0

因为你没有传递FALSE。您正在向字符串添加一个FALSE对象。在这种情况下,JavaScript会将其视为一个空变量。这不是一个布尔值,就像你想的那样。

在这里没有实际的评估来解决错误,所以它会简单地返回true。