据我所知,x++
基本上是一种说x = x + 1
的方式。到目前为止,这么清楚。在前端Javascript中,我偶尔会看到++x
- 我似乎记得jsPerf测试我无法再找到(一个Google ++
如何有效?)这种方式在某个特定版本的IE中获得了很小的性能优势,让它继续下去。
但是我最近遇到了一些在执行顺序(JS代码)中出现奇怪怪癖的事情:
var x = 1;
console.log(x++); // 1 (?!)
console.log(x); // 2
...而
var x = 1;
console.log(++x); // 2 (what I would've expected)
console.log(x); // 2
我无法理解这一点。当操作和赋值在括号内时,我们如何返回未修改的变量,因此在调用console.log
之前应该执行所有权限,更不用说执行并返回了?
答案 0 :(得分:5)
这是两件不同的事情
x++
是后增量。它在更改之前返回x
,但随后更改它:
tmp = x;
x = x+1;
return tmp;
,而
++x
是预增量。它首先更改x
并在之后返回新值:
x = x+1;
return x;
第二个也稍快,因为您的编译器/解释器不需要创建临时变量并复制数据。
答案 1 :(得分:2)
x++
获取值,然后递增它。
++x
递增值,然后得到它。
这是我使用的支持这些运算符的每种语言中的行为。
答案 2 :(得分:1)
使用++ AFTER变量在该行代码后增加值。
同样,使用++之前,变量会在该代码行中使用之前递增该值。
酷吧?
var x = 1;
x++;
console.log(x++); // 2 (?!)
console.log(x); // 3
console.log(++x); // 4
console.log(x++); // 4
console.log(x); // 5
答案 3 :(得分:1)
你在谈论 pre - 和 post - increment operators之间的区别。在前面的情况下,操作基本上是(x = x + 1; yield x)
,而在第二种情况下,它是(yield x; x = x + 1)
。