如果更改包含三元运算符的顺序,为什么逻辑 OR 的工作方式不同

Why logical OR working differently if change the order contains terinary operator

为什么下面的代码给出了不同的输出?

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

因为 operator precedence。条件运算符的优先级为 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'

in this above code you used true thats why it has printed Test your conditional operator here got as true

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