在我学习和改进我的JavaScript的过程中,我遇到了一个带有switch / case语句的脚本,我注意到一些变量在++之前使用++加上变量,然后一些变量在++之后变为++变量。这些有什么区别?这是我试图解释m和y变量的一个例子。
switch(f){
case 0:{
++m;
if(m==12){
m=0;
y++;
}
break;
}
case 1:{
--m;
if(m==-1){
m=11;
y--;
}
break;
}
case 2:{
++y;
break;
}
case 3:{
--y;
break;
}
case 4:{
break;
}
}
答案 0 :(得分:37)
++i
在递增后返回i
的值。 i++
在递增之前返回i
的值。
当++
位于其操作数之前时,它被称为“预增量”运算符,当它被称为“后增量”运算符之后。
只有在对结果做了某些事情时,这种区别才是重要的。
var i = 0, j = 0;
alert(++i); // alerts 1
alert(j++); // alerts 0
有一点需要注意的是,即使i++
在递增之前返回值,它仍会在转换为数字后返回该值。
所以
var s = "1";
alert(typeof s++); // alerts "number"
alert(s); // alerts 2, not "11" as if by ("1" + 1)
答案 1 :(得分:7)
与任何其他c风格++
增量器的区别相同。
foo = ++i
与:
i = i + 1;
foo = i;
foo = i++
与;
foo = i;
i = i + 1;
答案 2 :(得分:3)
var i = 0;
alert('i is ' + (++i)); // i is 1
// i is now 1
var i = 0;
alert('i is ' + (i++)); // i is 0
// i is now 1
答案 3 :(得分:1)
在JS(以及C,Perl,可能还有十几种其他语言)中,++ i运算符在之前递增i 它评估语句,然后i ++将其递增。与 - 相同。
示例:
var i=1;
alert(i++);
将显示“1”,但是:
var i=1;
alert(++i);
将显示“2”。
答案 4 :(得分:0)
为了说明,假设:
var a = 1;
然后
var b = ++a;
结果
true === (b === 2 && a === 2)
,而
var b = a++;
结果
true === (b === 1 && a === 2)
答案 5 :(得分:0)
++我是预增量,i ++是后增量。
如果你只是递增变量而不是同时使用结果它们是等效的。
在这种情况下你真的应该使用i + = 1来提高可读性(Douglas Crockford说道。)