++i проти i++ в Javascript

11 червня 2015 11:35 denysdovhan 747 4

Там де є i там є маленька, але важлива відмінність між ++i та i++, що може завдати достатньо головного болю, якщо не бути обережним. Спробуйте це:

var i = 5;
i++;
console.log(i); //=> 6
++i;
console.log(i); //=> 7

Як і очікувалось, обидві версії інкерментують і. Різниця з’являється тоді, коли вирази реально щось виконують. Якщо ми внесемо маленьку зміну, ми отримаємо кардинально інший результат:

var i = 5;
console.log(i++); //=> 5
console.log(i); //=> 6

Це означає, що значення і не актуальне доки не виконається console.log(). Це може бути особливо каверзним якщо ви робите порівняння:

var i = 5;
console.log(++i === i++) //=> false

З іншого боку, ++i виконується перед тим, як будь яка операція його викличе:

var i = 5;
console.log(++i)// => 6

Тож що робити? Не використовуйте обидва! Використовуйте i += 1. Його поведінка більш передбачувана і ви не сплутаєте його ні з чим іншим!

Джерело перекладу

747 6

Схожі матеріали:

Коментарі:

andreykko

11 Чер 2015 12:36

Я б рекомендував використовувати тільки i += 1, якщо кодер не знає різниці між ++i та i++, або не знає, що краще використати в його конкретній ситуації (що теж дивно). Імхо.

OlegWock

11 Чер 2015 16:21

Не згоден. Якщо ціль просто додати 1, то нема ріниці:
int i = 42;
i += 1;
i++;
++i;
Бо результат один. А якщо треба щось хитрожопіше, типу в циклі фор, то там вже ніяк не викрутися з i+=1, треба інкремент юзати.

denysdovhan

11 Чер 2015 16:54

OlegWock, Delphi попереду всієї планети зі своїми i:=i+1 та Inc(i)))

knaipa

23 Лип 2015 12:41

node.js в консолі дає такий результат

> var i = 5
undefined
> console.log(++i === i++)
true
undefined
Авторизуйтесь, щоб залишити коментар.