js递增和递减

    JavaScript中的递增和递减运算符都是一元操作符,言外之意就是只能操作一个值的操作符。递增和递减操作符直接借鉴自C语言,各有两种版本:前置型(递增++i,递减–i)和后置型(递增i++,递减i–)。在JavaScript中,递增(递减)的前置和后置运算符对于初学者都非常容易混淆。

前置型递增(递减)

前置型递增也称之为前增量(pre-increment)运算符,它对操作数进行增量计算,并返回其计算后的值。这样或许不太好理解,换过一种方式来理解:前增量指的先计算,后赋值。
例如:

var i = 1;
console.log(i); // => 1++i;
console.log(i); // => 2

这个示例,前置递增++i操作符把i的值变成了2(也就是1+1)。实际上,执行前置递增++i和执行下面的表达式效果相同:

var i = 1;
i = i + 1;
console.log(i); // => 2

简单点讲:前置型递增就是先自身计算,再赋值给变量

var i = 1;var a = ++i; 
 // var i = 1; i = i + 1; a = i;console.log(a); // => 2console.log(i); // => 2

其中var a = ++i,实际上做了下面这几个操作:

i = 1;a = i + 1;i = i + 1;a = i;

前置递减–i和前置递增++i类似,不同的是先做减法(减1),再赋值。比如:

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

代码中的–i相当于:

var i =  6;
i = i - 1;
a = i - 1;
a = i;

执行前置递增和递减时,变量的值都是在语句被求值以前改变的(返回它递增(减)之后的值)。在计算机科学领域中,这种情况通常被称之为副效应

var age = 29;var anotherAge = --age + 2;
console.log(age) // => 28 (age = age - 1)console.log(anotherAge); // 30 (anotherAge = age - 1 + 2)

这个示列中变量anotherAge的初始值等于变量age的值前置递减(age = age - 1)再加上2。也就是前置–age先做减法操作,age的值变成了28,所以再加上2,其值就是30。

另外在JavaScript运算符中,前置递增(++i)和递减(–i)与执行语句的优先级相同,因此整个语句会从左至右被求值。
例如:

var foo = 1;var baz = 20;var bar = ++foo + baz;var baf = foo + baz;
console.log(foo);  // => 2console.log(bar);  // => 22console.log(baf);  // => 22

在这里,bar等于22是因为foo选加了1之后与baz相加。而baf也等于22是因为相应的加法操作使用了foo加上1之后的值。

后置型递增(递减)

前面也说过了,递增(递减)分前置型和后置型。前置型是++i(–i),后置型不同的是,将++(或–)放置在变量的后面,即i++(或i–)。后置型递增(递减)又称之为后增量(post-increment)运算符。

后置型递增是和前置型递增不同之处是其先赋值,后递增。简单点说:后置型递增是先将自身的值赋值给变量,然后再自增1。

例如:

var num1=2var num2=20var num3=num1++  +  num2;
var num4=num1+num2;
alert(num1);      	=>  3  
alert(num3);      	=>  22 // var i; i=num1=2; num1=num+1=3 ; num3=i + num2;
alert(num4);             =>  23 //  num1+num2;
总结
  • 前置递增(++): 在变量的前面,先自身执行加法操作后在赋值(++i);

  • 后置递增(++): 在变量的后面,先赋值后在执行加法操作(i++);

  • 前置递减(–): 在变量的前面,先自身执行减法操作后在赋值(–i);

  • 后置递减(–): 在变量的前面,先赋值后在执行减法操作(i–);

归纳起来:前置递增(前置递减)运算符,先计算(自增1(或自减1)),再赋值,返回操作对象递增(递减)之后的值;后置递增(后置递减)运算符,先赋值,再计算(自增1(或自减1)),返回操作对象递增之前的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值