Precedencia: operador lógico o vs. ternario
Considera lo siguiente:
(EDITAR: he modificado ligeramente la función para eliminar el uso o las llaves con el operador ternario)
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
El problema:
someFunction(1,10,2)
//step IS defined, shortcut logical OR || should kick in,
//step should return 2 BUT it returns 1
Soy consciente de que esto se soluciona fácilmente mediante el uso de llaves:
function range(start,end,step){
var start = start || 1,
end = end || 100,
step = step || ((start < end) ? 1:-1);
console.log(step);
}
La pregunta: ¿Por qué no||
operador se atajo en este caso?
Soy consciente de que el OR lógico tiene la precedencia más baja entre los operadores condicionales lógicos binarios, pero pensé quetiene mayor precedencia que el operador ternario condicional?
¿Estoy leyendo mal elDocumentos de MDN para precedencia de operadores?