Precedência: Operador lógico ou vs. ternário
Considere o seguinte:
(EDIT: Eu alterei a função ligeiramente para remover o uso ou chaves com o operador ternário)
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
O problema:
someFunction(1,10,2)
//step IS defined, shortcut logical OR || should kick in,
//step should return 2 BUT it returns 1
Estou ciente de que isso é facilmente corrigido usando chaves:
function range(start,end,step){
var start = start || 1,
end = end || 100,
step = step || ((start < end) ? 1:-1);
console.log(step);
}
A questão: Por que o||
operador atalho neste caso?
Estou ciente de que o OR lógico tem a menor precedência entre operadores condicionais lógicos binários, mas pensei quetem maior precedência do que o operador ternário condicional?
Estou interpretando mal oDocumentos MDN para precedência do operador?