##js的操作符 重要点记录
1.后置型递增或者递减与前置型最大的区别:前置型会立刻改变值,后置型则在下一次计算时改变值
2.一元加和一元减(减相当于将数值变为复数)
(1).对于数值操作来说,不会产生任何影响
(2).对于非数值操作,操作符会像 Number()转型函数一样对这个值执行转换
3.位操作符省略
4.布尔操作符
(1).逻辑非:逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。而同时使用两个逻辑非操作符,实际上就会模拟 Boolean()转型函数的行为。
(2).在使用逻辑与操作符时要始终铭记它是一个短路操作符,第一个为假则直接不会读取第二位数值。
(3).逻辑或操作符同样也是短路操作符,第一个为真则不会读取第二位数值。开发中一般用逻辑或来避免某个变量被赋值null或者undefined的情况
5.乘性操作符
(1).乘法:
1).一个操作数为NaN,结果也是NaN
2).Infinity×0,结果NaN
3).Infinity×1,结果Infinity,Infinity×-1,结果-Infinity
4).数值与转换后(自动使用Number())仍是非数值的数相乘,结果NaN
(2).除法:
1).一个操作数为NaN,结果也是NaN
2).Infinity/Infinity,结果NaN
3).0/0,结果NaN
4).有限数/0,结果Infinity或者-Infinity
5).有限数/Infinity,结果Infinity或者-Infinity
6).除数或者被除数再转化后不是数值时,结果NaN
(3).求模:
1).Infinity % 有限大的数,结果也是NaN
2).有限大的数 % 0,结果NaN
3).Infinity%Infinity,结果NaN
4).有限大的数 % Infinity,结果有限大的数
5).0 % 数,结果0
6).除数或者被除数再转化后不是数值时,结果NaN
6.加性操作符
(1).加法:
1).一个操作数为NaN,结果也是NaN
2).Infinity+Infinity,结果Infinity
3).(-Infinity)+ (-Infinity),结果-Infinity
4).(-Infinity)+ Infinity,结果NaN
5). 0 + 0,结果0
6).(-0)+ 0,结果0
7).(-0)+ (-0),结果-0
8).如果操作数都是字符串,则结果就是字符串拼接
9).如果只有一个操作数时字符串,则将另一个转换成字符串再进行字符串拼接
10).如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。
(2).减法:
1).一个操作数为NaN,结果也是NaN
2).Infinity - Infinity,结果NaN
3).(-Infinity) - (-Infinity),结果NaN
4).(-Infinity)- Infinity,-Infinity
5).Infinity - (-Infinity),Infinity
6).0 - 0,结果0
7).(-0)- 0,结果-0
8).(-0) - (-0),结果0
9).如果有一个操作数是字符串、布尔值、null 或 undefined,则先在后台调用 Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是 NaN,则减法的结果就是 NaN;
10).如果只有一个操作数时字符串,则将另一个转换成字符串再进行字符串拼接
11).如果有一个操作数是对象、数值或布尔值,则调用它们的 toString()方法取得相应的字符串值,然后再应用前面关于字符串的规则。
7.关系操作符
(1).如果都是数值直接进行比较
(2).如果都是字符串,则进行字符串编码比较,注意这里'23'<'3',因为两个字符串找对应编码
(3).如果一个操作数是数值,则将另一个转化为数值进行比较
(4).如果一个操作数是布尔值,则将布尔值转化为数值进行比较
(5).如果一个操作数是对象,则调用这个对象的 valueOf()方法,用得到的结果按照前面的规则执行比较。如果对象没有 valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较。
8.相等操作符
(1).相等和不相等:
1)."=="和"!="这两个操作符都会先转换操作数(通常称为强制转型),然后再比较它们的相等性。
2).如果一个操作数是布尔值,则将其转换为数字进行比较
3).如果一个是字符串,一个是数值,则会将字符串转换为数值进行比较
4).如果一个是对象,用对象的 valueOf()方法,用得到的基本类型值按照前面的规则进行比较;
5).null 和 undefined 是相等的。
6).要比较相等性之前,不能将 null 和 undefined 转换成其他任何值
7).如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true。重要提示:即使两个操作数都是 NaN,相等操作符也返回 false;因为按照规则,NaN 不等于 NaN。
8).如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回 true;否则,返回 false
(2).全等和不全等:
上文提到相等和不相等这两个操作符都会先转换操作数(通常称为强制转型),但是全等是不会转换的,因此必须值和类型都相等或者全不等才行
9.三元运算符(条件运算符)
例子:var max = (num1 > num2) ? num1 : num2;
10.赋值操作符
简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量
每个主要算术操作符(以及个别的其他操作符)都有对应的复合赋值操作符
let num = 1;
num = num + 3;(常规写法)
num2 += 3;(复合赋值操作)
乘/赋值(*=);
除/赋值(/=);
模/赋值(%=);
加/赋值(+=);
减/赋值(=);
左移/赋值(<<=);
有符号右移/赋值(>>=);
无符号右移/赋值(>>>=)。
设计这些操作符的主要目的就是简化赋值操作。使用它们不会带来任何性能的提升。
11.逗号操作符
逗号操作符可以在一条语句中执行多个操作
var num1=1, num2=2, num3=3;
逗号操作符还可以用于赋值,逗号操作符总会返回表达式中的最后一项
var num = (5, 1, 4, 8, 0); // num 的值为 0