为什么' foo' +假? '杆' :' baz'评估为' bar'

时间:2016-12-01 19:25:04

标签: javascript

我从以下三元组中删除了括号:

res.setHeader('Content-Type', 'application/' + (isMap ? 'json' : 'javascript'));

测试失败了:

Error: expected 'json' to equal 'application/javascript'

起初我认为这只是一些有线的Node.js问题,但似乎是:

'foo' + false ? 'bar' : 'baz'

评估为' bar'在Firefox和Chrome中。

所以我的问题是:

  1. 我的第一部分发生了什么事。
  2. 当我通过true时,为什么我会获得三元操作的false值。

3 个答案:

答案 0 :(得分:0)

首先将false转换为字符串,然后连接到foo字符串,因为这会成功,它会返回true,最终会得到bar < / p>

答案 1 :(得分:0)

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

此处没有实际评估解决为false,因此它将返回true。

答案 2 :(得分:0)

'foo' + false ? 'bar' : 'baz'

连接'foo'+ false正在评估为true,因为false被视为字符串,因此字符串'foofalse'为真。

它的副本和接受的答案有一个很好的解释。

Using the ternary operator with string concatenation