2

我正在尝试学习一些javascript,但是我不能完全回答为什么:

var a = 'xyz';
console.log('Example: ' + (a === 'xyz') ? 'A' : 'B');

给我回'A'而不是示例:A。但是当我把整个如果这样的话:

var a = 'xyz';
console.log('Example: ' + ((a === 'xyz') ? 'A' : 'B'));

它完美无缺。这是否意味着第一个将 'Example: ' 字符串放在逻辑 + 中,如果?

4

3 回答 3

7

这不是一个if语句,它是一个三元运算符。

但从根本上说,是的,正在发生的事情是首先评估这部分:

(a === 'xyz')

...并变成trueor false。然后完成(假设true):

'Example: ' + true

...导致:

'Example: true'

...然后就完成了:

'Example: true' ? 'A' : 'B'

...这给了我们'A'因为字符串不是空白的,所以它是真实的。

这是因为+它的优先级高于三进制 ( ? :)。

于 2013-06-19T17:26:23.440 回答
3

没错,正如你所看到+的,它的优先级高于?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

因此,在您的第一个表达式字符串连接中首先(a === 'xyz')执行与布尔值的连接,然后将非空字符串评估为布尔值true,并且“A”是最终输出。

在第二个表达式括号中强制?运算符在之前执行+

于 2013-06-19T17:25:59.077 回答
1

如果您不(a === 'xyz') ? 'A' : 'B'使用括号开始,JS 引擎会优先考虑+运算符并将您的真实测试解释为'Example: ' + (a === 'xyz'),从而返回 A。

即使相等性测试为假,它也会返回 A,因为与trueor连接的字符串false仍然为真。

于 2013-06-19T17:26:39.633 回答