次のことを考慮してください:(
編集:関数を少し修正して、三項演算子の使用または中括弧を削除しました)
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);
}
質問:
||
この場合、オペレーターが近道に ならないのはなぜですか?2 項論理条件演算子の中で論理 OR の優先順位が最も低いことは承知していますが、条件付き 3 項演算子よりも優先順位が高いと思いましたか?
Operator precedence の MDN ドキュメントを読み間違えていますか?