Рассмотрит следующее:
(EDIT: Я слегка изменена функция, чтобы удалить использование или брекет с троичным оператором)Внеочередные: Логический или против троичного оператора
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
проблема:
Я знаю, что это легко исправить с помощью фигурных скобок:
function range(start,end,step){
var start = start || 1,
end = end || 100,
step = step || ((start < end) ? 1:-1);
console.log(step);
}
Вопрос: Почему не
||
оператора получить укороченный в этом случае ?Я знаю, что логическое ИЛИ имеют самый низкий приоритет среди двоичных логических условных операторов, но думал, что это имеет более высокую старшинство, чем условный оператор троичного?
Я неправильно читаю MDN docs for Operator precedence?
«более высокий приоритет» означает, что ваш код оценивается как «(шаг || (начало <конец))? 1: -1' –
«Высшее приоритет» означает, что '||' сначала оценивается, т. Е. 'Step || (start
Xufox
@NiettheDarkAbsol: это будет означать, что троянец имеет больший приоритет, не так ли? MDN-документы говорят иначе ... – Pineda