は、次のことを考えてみましょう:
(編集:私は三項演算子で使用または中括弧を削除するには、わずかに機能を改正しました)優先順位:論理や三項演算子対
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);
}
質問: はなぜ
||
オペレータがこのような場合には、短いカットされません。 ?私は論理ORはバイナリ 論理条件演算子の中で最も低い優先度を持っていることを承知しているが、それは条件付きの三項演算子よりも優先さ 高いを持っていると思いましたか?
私はMDN docs for Operator precedenceを誤読していますか?
"より高い優先度"は、コードが評価されていることを意味します(ステップ||(開始<終了))? 1:-1' –
"優先順位が高い"とは、最初に '||'が評価されることを意味します。 (開始<終了) 'が最初に評価されます。 – Xufox
@NiettheDarkAbsol:これは、三元項の優先順位が高いことを意味します。 MDNのドキュメントはそうでなければ言う... – Pineda