La différence est que
counter += st || counter + 1;
la même signification que
counter = counter + (st || counter + 1);
que counter = counter + st || counter + 1
signifie counter = (counter + st) || (counter + 1)
.
Dans votre exemple de code st
est undefined
, de sorte que la boucle réalise effectivement
counter += counter + 1;
chaque fois, ce qui équivaut à
counter = counter * 2 + 1;
Par conséquent, les grandes bennes.
D'autre part, dans
counter = counter + st || counter + 1;
st
étant undefined
signifie counter + st
est NaN
, qui compte comme faux, donc cela va effectivement
counter = counter + 1;
qui équivaut à
counter += 1;
Cependant, cela ne fonctionne que par accident.Si vous appelez votre fonction avec des arguments différents, tels que:
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));
Le résultat est [ -2, -1, 1 ]
au lieu du [ -2, 0, 2 ]
prévu.
Vous pouvez corriger votre code en faisant
counter += st || 1;
à la place.
peut être utile si vous avez montré ce qu'il vous donne par rapport à ce que vous attendez –
Parce que _operator precedence_. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – CBroe
@CrayonViolent supposé ajouter 1 pour contrer si 'st' n'a pas été fourni car il sera indéfini – yokimoto