一、加性操作符
包含加法(+)和减法(-)
加法
- “+”两侧的操作数,任何一侧为字符串,另一侧也会转换为字符串,此时的+起到了拼接作用。
- “+”两侧都是Number类型的情况下,按照如下规则返回结果:
两侧都为数值,执行常规加法运算;
如果有一个操作符是NaN,则结果返回NaN。(NaN与任何数据运算,都会返回NaN)。
- 如果操作数是布尔值、undefined、null,则会根据对应的规则转换成数字类型,然后在进行计算,如果其中转换结果为NaN,则结果就是NaN
var result = '1' + 2 + 3 // 123减法
- “-”左右两侧都是Number类型的情况下:
左右两侧均为数值,执行常规的减法运算;
如果其中一个操作数是NaN,则结果就是NaN。
- 如果操作数是字符串、布尔值、undefined、null,则先会(根据对应的规则)转为数字类型,然后再进行计算,如果其中转换结果为NaN,则结果就是NaN。
二、乘性操作符
包含 乘法 ( * ) 除法 ( / ) 取模( % )
乘法操作符
- 当左右两侧都为Number类型的时候,按照如下规则返回结果:
- 如果有一侧不是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;
! 非运算符,并不是只可以写一个,而是可以在操作数前写多个