所不同的是
counter += st || counter + 1;
裝置相同
counter = counter + (st || counter + 1);
而counter = counter + st || counter + 1
裝置counter = (counter + st) || (counter + 1)
。
在您的示例代碼st
是undefined
,所以每一次,這相當於
counter = counter * 2 + 1;
因此,大跳過循環實際上確實
counter += counter + 1;
。
在另一方面,在
counter = counter + st || counter + 1;
st
是undefined
裝置counter + st
是NaN
,該計數爲假,因此這有效地運行
這相當於
counter += 1;
但是,這只是偶然的。如果您使用不同的參數,如調用你的函數:
function range(start, end, st) {
var arr = [];
var counter = start;
while (counter <= end) {
arr.push(counter);
counter = counter + st || counter + 1;
}
return arr;
}
console.log(range(-2, 2, 2));
結果是[ -2, -1, 1 ]
,而不是預期[ -2, 0, 2 ]
。
您可以通過執行
counter += st || 1;
,而不是解決您的代碼。
可能會有所幫助,如果你展示了它給你什麼與你期望的結果 –
因爲_operator precedence_。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – CBroe
@CrayonViolent它假設沒有提供'st'因爲它將被undefined添加1來計數 – yokimoto