javaScript-操作符

203 阅读7分钟
+加、- 减、* 乘、/ 除、% 取模(求余数)++递增 --递减 + 正号 - 负号

一、加性操作符

包含加法(+)和减法(-)

加法

  • “+”两侧的操作数,任何一侧为字符串,另一侧也会转换为字符串,此时的+起到了拼接作用。
  • “+”两侧都是Number类型的情况下,按照如下规则返回结果:

      两侧都为数值,执行常规加法运算;

      如果有一个操作符是NaN,则结果返回NaN。(NaN与任何数据运算,都会返回NaN)。

  • 如果操作数是布尔值、undefined、null,则会根据对应的规则转换成数字类型,然后在进行计算,如果其中转换结果为NaN,则结果就是NaN

var result = '1' + 2 + 3     // 123

减法

  • “-”左右两侧都是Number类型的情况下:

       左右两侧均为数值,执行常规的减法运算;

       如果其中一个操作数是NaN,则结果就是NaN。

  • 如果操作数是字符串、布尔值、undefined、null,则先会(根据对应的规则)转为数字类型,然后再进行计算,如果其中转换结果为NaN,则结果就是NaN。

二、乘性操作符

包含 乘法 ( * ) 除法 ( / ) 取模( % )

乘法操作符

  • 当左右两侧都为Number类型的时候,按照如下规则返回结果:
      左右两侧均为数值,按照常规的乘法计算;
      如果有一个操作数是NaN,则结果返回NaN;
  • 如果有一侧不是Number类型,则(根据对应的规则)转为数字类型,然后进行计算。

除法操作符

  • 当左右两侧都为Number类型:

      如果左右两侧均为数值,则按照常规的乘法计算; 

     如果是非零的有限数被零除,则结果返回 Infinity 或 -Infinity; 

     如果是零被零除,则返回NaN; 

     如果有一个操作数是NaN,则结果返回NaN。

  • 如果有一侧不是Number类型,则(根据对应的规则)转为数字类型,然后进行计算。

var result = '10' / 20   // 0.5

取模操作符

进行除法运算,求余数

  • “%”两侧均为Number类型时:

      两侧为数值,按照常规除法运算,返回余数;

      一侧为NaN,返回NaN;

      除数为0,结果返回NaN。

  • 如果有一侧不是Number类型,则(根据对应的规则)转为数字类型,然后进行计算

三、一元操作符

只能操作一个值得操作符叫做一元操作符

一元加运算符

  • 如果操作数是Number类型的时候,正号放在数值前面,对其完全没有任何影响 
  • 如果操作数是string、true、false、null、undefined,则(根据对应规则)转为数字类型。

var num = 5
console.log(+num)      //5
console.log(+null)     //0

一元减运算符

  • 如果操作数是Number类型的时候,负号放在数值前面,表示负数。
  • 如果操作数是string、true、false、null、undefined,则(根据对应规则)转为数字类型。

var num = 2
console.log(-num)      //-2
console.log(+undefined)     //NaN

我们可以巧妙地利用隐式类型转换:

var a = '23'
console.log(typefo a)     //string
console.log(typefo +a)     //number

var b = 5
console.log(typefo(a + ''))  //string

递增和递减运算符

  • 前置型

       变量的值都是在语句被求值以前发生改变

var num = 10;
var num1 = ++num - 2; //9
var num2 = num - 2; //9

  • 后置型

       变量的值都是在语句被求值以后发生改变

var num = 10;
var num1 = num++ -2; // 8
var num2 = num - 2; //9

  • 当遇到Number类型时,如果是数值,直接进行计算。 
  • 如果是string、null、undefined、false、true,则(根据对应规则)转换为数字类型后进行计算。

四、赋值运算符

= 等号、 += 加等 、 -= 减等 、 *= 乘等 、 /= 除等 、 %= 模等

等号(=)赋值运算符

作用把右侧的值,赋给左侧的变量。

var a = 9

在等号(=)赋值运算符前添加 "+"运算符 或 "-"运算符 ,就可以完成复合赋值运算

加等+=

var a = 2
a = a + 2        <-->     a += 2

减等

var a = 2
a = a - 1        <-->     a -= 1

乘等

var a = 2
a = a * 2        <-->     a *= 2

除等

var a = 2
a = a / 2        <-->     a /= 2

模等

var a = 2
a = a % 2        <-->     a %= 2

五、比较操作符

关系操作符

< 小于 、 > 大于 、<= 小于等于 、 >= 大于等于 

  • 关系操作符通常用来比较,两个值的大小关系,结果返回一个布尔值
  • 如果左右两侧都是数值,则数值之间进行比较  
  • 如果左右两侧都是字符串,则根据字符串对应的字符编码值  
  • 如果有一侧是NaN,则结果得到false 
  • 如果是null、undefined、true、false,则(会根据对应的规则)进行转换,然后进行比较

相等操作符

==相等、 != 不等、 === 全等、 !== 全不等

用于确认两个变量之间,是否相等

相等

比较两个操作数之间是否相等,如果相等会返回true,如果不相等会返回false,在比较的时候,会进行隐式类型转换。

1==1    // true
'1' == 1    //true
true == 1    //true
NaN == NaN   //false

  • NaN不等于任何类型的数值,包括自己本身,所以一定返回false; 
  • 如果都是String类型的话,比较字符编码值,如果完全一致,则返回true,否则返回false; 
  • 如果两侧都是Number类型数值,比较值是否相同; 
  • 如果两边都是Object类型,则比较地址是否一致; 
  • null == undefined 返回true; 
  • 如果一侧是String,一侧是Number,将String(指的是不是数值类型的字符串)转换为NaN之后,进行比较; 
  • 如果一侧是Boolean,则把布尔值转换为Number类型后,在根据上述规则进行比较;

全等

全等也是比较两个操作数之间是否相等的,但是与 == 不同,它从以下两个点进行考虑: 

  • 值是否相等 
  • 类型是否相等

1===1  //true
'1' === 1   // false
true === 1   // false

因为会判断类型,所以在这里并不会进行隐式类型的转换。  

  • 一旦两个操作数的数据类型不同,直接返回false。
  •  一旦出现NaN,返回结果false; 
  • 当类型一致的情况下,比较值是否相同,如果不同返回false,如果相同返回true

不等和全不等

和以上的相等和全等一样,不等和全不等在比较的时候:  

  • 前者只注重值,并且会进行隐式类型的转换,转换的规则与相等是一致的,只是返回的结果正好是相反的。  
  • 后者在注重值的同时,还会注重类型是否相同,转换规则与全等是一致的,只是返回的结果正好是相反的。

六、逻辑运算符

&& 与 、 || 或 、! 非

与 —— &&

作用在两个条件之间:

  • 当第一个条件转换为 Boolean 为 false ,返回第一个值; 
  • 当第一个条件转换为 Boolean 为 true ,返回第二个值;

或 —— ||

  • 作用在两个条件之间 当第一个条件转换为 Boolean 为 false,返回第二个值; 
  • 当第一个条件转换为 Boolean 为 true ,返回第一个值;

非 —— !

作用在一个条件上,所以也是一元运算符的成员之一,表示对该操作数进行取反操作,所以会对改数据进行隐式类型转换为布尔值,然后取反,最后返回一个Boolean值。  

  • 如果操作数是Object类型,结果返回false;(所有对象均为true) 
  • 如果操作数是一个空字符串,结果返回true; 
  • 如果是非空的字符串,结果返回false; 
  • 如果是Number数值0,结果返回true; 
  • 如果是NaN,返回true; 
  • 如果是非0数值,返回false; 
  • 如果是 null 或 undefined ,返回true;

! 非运算符,并不是只可以写一个,而是可以在操作数前写多个