一元算术运算符

一元算术运算符用于一个单独的操作数,并产生一个新值。在 JS 中,一元运算符具有很高的优先级,且都是右结合( right-associative ),包括一元加法( + )、一元减法( - )、递增( ++ )和递减( -- )。

一元加和一元减运算符主要用于基本的算术运算,也可以用于转换数据类型。


一元加( + )

一元加运算符以一个加号(+)表示,放在数值前面,对数值不会产生任何影响。

var num = 25;
num = +num;   // 25

在对非数值应用一元加运算符时,会调用Number()转型函数对这个值进行转换。

var s1 = '01';
var s2 = '1.1';
var s3 = 'z';
var b = false;
var f = 1.1;
var o = {
    valueOf:function(){
        return -1;
    }
};
s1 = +s1;  // 1
s2 = +s2;  // 1.1
s3 = +s3;  // NaN
b = +b;  // 0
f = +f;  // 1.1
o = +o;  // -1

另,在new Date()前面使用一元加符号,可以把日期字符串,转换为日期毫秒数。

console.log(new Date());   // on Jul 11 2016 20:25:54 GMT+0800 (中国标准时间)
console.log(+new Date());   // 1468239954076

一元减( - )

一元减运算符主要用于表示负数。

var num = 25;
num = -num; // -25

当一元减运算符用于非数值时,会对该值使用Number()转型函数进行转换,再将得到的数值转换成负数。

var s1 = '01';
var s2 = '1.1';
var s3 = 'z';
var b = false;
var f = 1.1;
var o = {
    valueOf:function(){
        return -1;
    }
};

s1 = -s1;   // -1
s2 = -s2;   // -1.1
s3 = -s3;   // NaN
b = -b;   // 0
f = -f;   // -1.1
o = -o;   // 1

递增( ++ )

递增++运算符对其操作数进行增量(加1)操作,操作数是一个左值(lvalue)(变量、数组元素或对象属性)。

运算符通过Number()将操作数转换为数字,然后给数字加1,并将加1后的数值重新赋值给变量、数 字元素或者对象属性。

var age = 29;
++age;

//  相当于

var age = 29;
age = age +1;

递增++运算符的返回值依赖于它相对于操作数的位置。

  • 当运算符在操作数之前,称为前增量运算符,它对操 作数进行增量计算,并返回计算后的值。
  • 当运算符在操作数之后,称为后增量运算符,它对操作数进行增量 计算,但返回未做增量计算的值。
不管是前增量还是后增量,这个运算符通常用在for循环中,用于控制循环内的计数器。
var i = 1, j = ++i;  // i=2 j=2
var i = 1, j = i++;  // i=2 j=1

[注意] ++x并不总和x = x+1完全一样,++运算符不进行字符串连接操作,它总是将操作数转换为数字并增1。
      var x = '1';
      ++x;  // 2

      var x = '1';
      x = x + 1;  // '11'

递减( -- )

递减运算符的操作数也是一个左值,它通过Number()把操作数转换为数字,然后减1, 并将计算后的值重新赋值给操作数。

和递增++运算符一样,递减运算符的返回值依赖于它相对操作数的位置,
  当递减运算符在操作数之前,操作数减1并返回减1之后的值;
  当递减运算符在操作数之后,操作数减1并返回减1之前的值。

var age = 29;
--age;
// 相当于
var age = 29;
age = age - 1;

前增量操作符与执行语句优先级相同,整个语句会从左向右求值。

   var num1 = 2;
   var num2 = 20;
   var num3 = --num1 + num2;  // 21
   var num4 = num1 + num2;  // 21

后增量操作符在包含它们的语句被求值之后才执行。

   var num1 = 2;
   var num2 = 20;
   var num3 = num1-- + num2;  // 22
   var num4 = num1 + num2;  // 21

在涉及++和--运算符时,如果将其用作后缀表达式,它和表达式应该同一行。否则,行尾将填补分号,
同时++或--将作为下一行代码的前缀操作符并与之一起解析。

   x
   --
   y

   javascript将其解析为:  x;--y;
   而代码的本意是:  x--;y;