为什么下面的代码给出不同的输出?
var test;
var output = test ? 'Test' : 'No Test' || true;
var output2 = true || test ? 'Test' : 'No Test'
console.log(output); // No Test
console.log(output2); // Test
因为运算符优先级。条件运算符的优先级为 4,而逻辑 OR 的优先级为 5,因此您的代码等效于:
var test;
var output = test ? 'Test' : ('No Test' || true);
// undefined ? 'Test' : 'No Test'
var output2 = (true || test) ? 'Test' : 'No Test'
// true ? 'Test' : 'No Test'
console.log(output);
console.log(output2);
OR 分组具有更高的优先级 - 其周围的令牌首先分组在一起。
var output2 = true || test ? 'Test' : 'No Test'
在上面的代码中,您使用了
true
这就是为什么它打印Test
您的条件运算符在这里变得真实
var output2 = test ? 'Test' : 'No Test'
如果您尝试过这样做,它将打印No Test
var test;
var output = test ? 'Test' : 'No Test' || true;
var output2 = test ? 'Test' : 'No Test'
console.log(output); // No Test
console.log(output2); // Test