考虑以下:
(编辑:我稍微修改了函数以删除三元运算符的使用或大括号)
function someFunction(start,end,step){
var start = start || 1,
end = end || 100,
boolEndBigger = (start < end); // define Boolean here
step = step || boolEndBigger ? 1:-1;
console.log(step);
}
someFunction()
// step isn't defined so expect (1<10) ? 1:-1 to evaluate to 1
someFunction(1,10)
// again step isn't defined so expect to log 1 as before
问题:
someFunction(1,10,2)
//step IS defined, shortcut logical OR || should kick in,
//step should return 2 BUT it returns 1
我知道使用大括号可以轻松解决此问题:
function range(start,end,step){
var start = start || 1,
end = end || 100,
step = step || ((start < end) ? 1:-1);
console.log(step);
}
问题:为什么不||
在这种情况下操作员可以走捷径吗?
我知道逻辑或在二进制中具有最低的优先级
逻辑条件运算符,但认为它具有较高的
优先级比条件三元运算符?
我是不是误读了有关运算符优先级的 MDN 文档 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence?