W JavaScript można użyć operatora ++
przed nazwą zmiennej lub po niej. Jakie, jeśli w ogóle, są różnice między tymi sposobami inkrementacji zmiennej?++ someVariable Vs. someVariable ++ in JavaScript
Odpowiedz
samo jak w innych językach:
++x
(preinkrementuj) oznacza „zwiększamy zmienną, wartość wyrażenia jest wartość końcowa”x++
(postinkrementacja) oznacza „Pamiętaj pierwotnej wartości, a następnie zwiększamy zmienną; wartość wyrażenia jest wartość początkowa”
teraz kiedy jest stosowany jako samodzielny oświadczeniu, oznacza, że to samo:
x++;
++x;
Różnica pojawia się, gdy używana jest wartość wyrażenia w innym miejscu. Na przykład:
x = 0;
y = array[x++]; // This will get array[0]
x = 0;
y = array[++x]; // This will get array[1]
Curses , Prawie pobiłem cię do odpowiedzi, gdybym nie zatrzymał się, by załadować praktyczną odpowiedź jsfiddle. ;-) – Chris
Co by to wyglądało, gdybyś użył '+ 1' zamiast' ++ '? Czy istnieje sposób zwiększania wartości przed lub po dodawaniu liczb? – Keavon
Chciałbym wiedzieć, dlaczego jeśli wykonasz tę operację const r1 = (x ++) + (x ++); nie daje oczekiwanego rezultatu według twojego przykładu. –
Jak rozumiem, jeśli używasz ich samodzielnie, robią to samo. Jeśli spróbujesz wyprowadzić wynik ich jako wyrażenie, wtedy mogą się one różnić. Wypróbuj alert (i ++) w porównaniu z alertem (++ i), aby zobaczyć różnicę. i ++ ocenia do i przed dodaniem i ++ i robi dodawanie przed oceną.
Zobacz przykład http://jsfiddle.net/xaDC4/.
++x
zwiększa wartość, a następnie ją ocenia i zapisuje.x++
oblicza wartość, a następnie zwiększa ją i przechowuje.
var n = 0, m = 0;
alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */
pamiętać, że istnieją niewielkie korzyści wydajności do korzystania ++x
gdzie to możliwe, ponieważ odczytu zmiennej, zmodyfikować go, a następnie ocenić i zapisać go. W odróżnieniu od operatora x++
, w którym odczytujemy wartość, oceniamy ją, modyfikujemy, a następnie przechowujemy.
Myślałem o tym wczoraj czytając this response na pytanie o bad assumptions in C/C++. Czy w każdym przypadku możemy zagwarantować, że JavaScript zachowuje się w ten sposób? Czy uważasz, że niewłaściwą praktyką jest używanie w ogóle instrukcji increment w bardziej złożonej instrukcji?
Patrząc na ECMA-262, wydaje się dość dobrze określony. –
var x = 0, y = 0;
//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x); //1
//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y); //1
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2
var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1
- 1. Błąd "someVariable can not resolved" wskazany w Eclipse dla dołączonego JSP
- 2. non-blocking setTimeout w javascript vs sleep in ruby
- 3. Javascript onload in HTML
- 4. Python's __getattr__ in JavaScript
- 5. function()() in javascript
- 6. SQL JOIN vs IN performance?
- 7. http.createserver vs net.createserver in node.js
- 8. Subclassing vs Extension in swift
- 9. ArrayBuffer vs ArrayBuilder in scala
- 10. Particles vs ParticleSystem in three.js
- 11. „<>” vs „NOT IN”
- 12. Union Vs Concat in Linq
- 13. virtuale vs Methods in Mongoose
- 14. Int vs Integer in Swift
- 15. JavaScript Just In Time compilation
- 16. Zgodność z operatorem JavaScript IN
- 17. Javascript toFixed equivalent in java
- 18. Mysql Exists vs IN - skorelowane podzapytanie vs podzapytanie?
- 19. Scope vs Class Method in Rails 3
- 20. Kind vs Rank in type theory
- 21. implements vs extends in generics w Javie
- 22. html.haml vs haml in Rails zobacz szablony
- 23. distincto vs. fd/distinct in core.logic
- 24. Wyrażenia sql z equals vs in
- 25. IN vs OR Oracle, który szybciej?
- 26. Realm VS Room in Android app
- 27. Struct vs test double in ruby
- 28. JavaScript: test vs exec
- 29. OOP vs JavaScript
- 30. JavaScript window.scroll vs. window.scrollTo?
Patrz także język agnostic [Różnica i ++ i i ++ w pętli?] (Http://stackoverflow.com/q/484462/1048572) – Bergi