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



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

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

相关内容

  • 没有找到相关文章

最新更新