我正在尝试使用一些javascript,但我无法回答原因:
var a = 'xyz';
console.log('Example: ' + (a === 'xyz') ? 'A' : 'B');
让我回到'A'而不是示例:A。然而,当我把整体放在那样的时候:
var a = 'xyz';
console.log('Example: ' + ((a === 'xyz') ? 'A' : 'B'));
它完美无瑕。这是否意味着第一个将'Example:'字符串放在逻辑+中,如果这个?
答案 0 :(得分:7)
这不是if
声明,而是三元运算符。
但从根本上说,是的,正在发生的事情是首先对这部分进行评估:
(a === 'xyz')
...并变为true
或false
。然后就完成了(让我们假设true
):
'Example: ' + true
...导致:
'Example: true'
......然后就完成了:
'Example: true' ? 'A' : 'B'
...这给了我们'A'
因为字符串不是空白的,所以它很简洁。
这是因为+
的优先级高于三元组(? :
)。
答案 1 :(得分:3)
正如您所看到的,+
的优先级高于?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
因此,在您的第一个表达式中,首先执行布尔值(a === 'xyz')
的字符串连接,然后将非空字符串计算为布尔值true
,并将“A”作为最终输出。
在第二个表达式括号中强制?
运算符在+
之前执行。
答案 2 :(得分:1)
如果你没有用括号设置(a === 'xyz') ? 'A' : 'B'
,JS引擎优先于+
运算符,并将你的真实测试解释为'Example: ' + (a === 'xyz')
,从而返回A.
即使相等测试为假,也会返回A,因为与true
或false
连接的字符串仍为真。