聊聊JS的相关运算符 | 8月更文挑战

335 阅读6分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

算数运算符

运算符 + - * / %

+ 加号运算符

功能:

1.对数字代数求和

2.对字符串进行连接

3.将一个数值转换成字符串 ——>数值+""

注意:任何数据类型+字符串都等于字符串

字符串拼接时:

数值+字符串——>将数值直接转为字符串拼接

字符串+字符串——>两者直接拼接

- 减号运算符

功能:

1.对数值进行减法操作;

2.对操作数进行“取反”操作;

3.将字符串转换成数值;数值型字符串-0=该数值,非数值-0==NaN

***  / 乘号、除号运算符**

功能:对两个数进行乘法或除法运算

正负规则:同号为正,异号得负

% 取余运算符

两个数相除取余数。

余数是正还是负,和第一个运算数的符号相同

复合赋值运算符  += -= *=  /= %=

分别相加、相减、相乘、相除和取余后赋值。


自增和自减运算符

++ --

对唯一的运算数进行递增或者递减操作(每次加1或者减1)

注意点:

1.运算数必须是一个变量、数组的一个元素或者对象的属性

2.如果运算数是非数值则运算符会将它转成数值直接返回,不会再+或-

3.符号位置决定运算结果:

运算数之前——>先进行递增或者递减,再进行求值

运算数之后——>先求值,再进行递增或者递减操作


关系运算符(比较运算符)

大小运算 >  <  >=  <=

如果左边  大于/小于/大于等于/小于等于  右边,返回true,否则返回false

操作规则:

1.数值与数值比较——>比较代数值

2.仅一个运算数是数值——>将另一个运算数转成数值,并比较它们的代数值

3.字符串与字符串——>逐个字符比较它们的Unicode数值

4.字符串与非数值——>将运算数转换成字符串进行Unicode比较

5.运算数即非数字也非字符串——>转换成数字或者字符串后进行比较

6.运算数无法转换成数值或者字符串——>返回false

7.与NaN比较——>返回false

等值运算

相等比较==    !=

比较两个运算符的返回值,看返回值是否相等或不等

存在类型转换:

布尔值:true-----1;false-----0;

对象:调用valueOf()

字符串与数值比较:字符串转换成数值

比较原则:

1.null与undefined相等

2.NaN不等于任何数值,包括自身

3.对象,是不是同一对象,是的话 == 是true

相同比较  ===   !==

不存在隐示类型转换的绝对等于和绝对不等于,比较两个运算数的返回值及数据类型是否相同或不同

比较原则:

1.只有数据类型和数值相同才为相同

2.原始值和引用值之间是绝对不等于

3.引用值之间比较的是它们的引用(内存地址)


对象运算符

in:判断左边是否是右边的成员

instancesof:判断左边对象实例是否是右边的这个类或构造函数构造出来的

new:创建并初始化一个新的对象

delete:删除指定对象的属性,数组元素或者变量

.和[]:存取对象和数组元素

():函数调用,改变运算符的优先级等    


逻辑运算符

&&逻辑与

规则:

1.第一个操作数是对象,返回第二个;

2.第一个操作数值为true,第二个为对象时,返回第二的对象;

3.两个都是对象时,返回第二个;

4.其中一个操作数是null或者undefined或者NaN时,对应返回null、undefined、NaN,如果同时是这三个值中的两个,返回第一个数;(暂时感觉0也是这个规律)

特性:

1.当且仅当两个运算数的值为true时,返回true,否则返回false;

2.短路操作:当第一个操作数的值是false时,则不再对第二个操作数进行求值了,返回第一个。

|| 逻辑或

规则:

1.第一个操作数是对象,返回第一个;

2.第一个操作数值为false,返回第二个;

3.两个都是对象时,返回第一个;

4.两个操作数是null或者undefined或者NaN时,对应返回null、undefined、NaN(0也是这个规律)

特性:

1.当且仅当两个运算数的值为false时,返回false,否则返回true;

2.短路操作:当第一个操作数的值是true时,则不再对第二个操作数进行求值了,返回第一个。

!逻辑非

非运算符返回值的为true的有:undefined、null、NaN、0、""

false的有:对象、非空字符串、非0数值

特性:

1.当运算的值为false则返回true,否则返回false。

2.连续使用两次,可将任意类型转成布尔值(true or false)。


位运算符

基础知识:

1.类型:

(1).有符号:数字位是 前31位  ,符号位是第32位

(2).无符号:只能是正数,第32位表示数值,数值范围可以加大

2.数值范围:-2147483648到2147483647

3.存储方式:

正数:纯二进制存储,31位中每一位表示2的幂,用0补充无用位

负数:2进制补码存储,补码的计算步骤:

(1.确定该数字的非负版本的二进制表示(例如,要计算 -18的二进制补码,首先要确定 18 的二进制表示)

(2.求得二进制反码,即要把 0 替换为 1,把 1 替换为 0

(3.在二进制反码上加 1

4.当做0来处理的特殊值NaN和Infinity

逻辑位运算

返回值为1的:按位非~0、按位与&对应位全是1、按位或| 任何一位是1、按位异或^ 即不同时为1也不同时为0    

返回值为0的:按位非~1、按位与&任意一位是0、按位或| 对应位全位0、按位异或^ 对应位全0或全1    

位移操作:

左移<<:将数值的所有位左移指定的位数,所有空位用0补充。左移1位对其乘2,左移2位对其乘4,以此类推;

有符号右移>>:将数值的所有位右移指定的位数,移出的位被舍弃,保留符号位,右移1位对其除2,右移2位对其除4,以此类推(在舍弃移出位后的基础上除);

无符号右移>>>:

正数:与有符号右移结果相同

负号:会出现无限大的数值

复合赋值运算符

位操作符与等号结合,复合赋值不会有性能方面的提升   


其他运算符

  1. ?: 条件运算符,又叫三目运算符,是简洁的if else

2.typeof 类型判定运算符

  1. 逗号操作符,在一行语句中执行多个不同的操作,特殊的(1,2)会看一眼第一个,然后返回第二个数。

\