位运算符用在哪里_一次弄懂JavaScript的各种运算符

268bcd193586d30d4748b75781d42640.png

算数运算符

令y = 5

536606db05cd14a1c493703a42e4c923.png

"+"作为二元运算符

规则

1) Infinity + Infinity = Infinity 
2) (-Infinity) + (-Infinity) = -Infinity 
3) Infinity + (-Infinity) = NaN 
4) Infinity + null = Infinity
5) 0 + 0 = 0 
6) -0 + -0 = -0 
7) +0 + -0 = +0 
8) 如果是两个字符串,则将字符串进行拼接 
9) 如果有一个是字符串一个不是字符串,则将非字符串转换成字符串再拼接
10) 如果操作数都不是字符串类型,则将操作数转换为数值类型再相加

"+"作为一元运算符

作用

于Number()相同,将其他类型的对象转换为数字类型

    let two = "2";
    let three = "3";
    console.log(+two + +three); // 5
    先将字符串转换为数字再相加,因为一元运算符的优先级比二元运算符的优先级更高

"-"运算符

规则

1) Infinity - Infinity = NaN 
2) (-Infinity) - (-Infinity) = -NaN 
3) Infinity - (-Infinity) = Infinity 
4) Infinity - null = Infinity
5) 0 - 0 = 0 
6) -0 - -0 = -0 
7) +0 - -0 = +0 
8) 与NaN相关的减法运算结果都为NaN 
9) 如果有一个操作数是对象,则先对对象进行隐式转换,再根据前面的规则进行减法运算
10) 如果果有一个操作数是非数字类型则先在后台调用 Number()函数将其转换为数值,再根据前面的规则进行减法运算。

对隐式转换不了解的话可以看看这篇文章一次弄懂Javascript隐式转换

"*"运算符

规则

1) Infinity * 0 = NaN
2) Infinity * null = NaN
3) Infinity * undefined = NaN
4) Infinity * Infinity = Infinity
5) 如果操作数的值超过数值的表示范围,结果为Infinity 或 - Infinity 
6) 如果操作数中有一个操作数为NaN,结果为NaN 
7) 如果操作数中有一个操作数为undefined,结果为NaN
8) 如果有一个操作数是对象,则先对对象进行隐式转换,再根据前面的规则进行乘法运算
9) 如果有一个操作符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行乘法运算

"/"运算符

规则

1) Infinity / 0 = Infinity
2) Infinity / null = Infinity
3) Infinity / undefined = NaN
4) Infinity / Infinity = NaN
5) 如果操作数的值超过数值的表示范围,结果为Infinity 或 - Infinity 
6) 如果操作数中有一个操作数为NaN,结果为NaN 
7) 如果操作数中有一个操作数为undefined,结果为NaN
8) 如果有一个操作数是对象,则先对对象进行隐式转换,再根据前面的规则进行除法运算
9) 如果有一个操作符不是数值类型,则先调用Number()进行转换,再根据前面的规则进行除法运算

"%"运算符

规则

1) 操作数都是数值,执行常规的除法计算,返回除的余数 
2) 任何数 % undefined = NaN
3) 任何数 % NaN = NaN
4) Infinity % 任何数 = NaN
5) 有限大的数 % 0 = NaN 
6) 有限大的数 % Infinity = 有限大的数 
7) 0 % 除null、undefined、NaN任何数 = 0 
8) 如果有一个操作数是对象,则先对对象进行隐式转换,再根据前面的规则进行取余运算
9) 有一个操作数不是数值,则调用Number()转换

"++"运算符

规则

1) 应用于非数字类型的时候,先将其转换为数字,再执行++的操作。  
2)应用于浮点数,执行加1的操作 
3)应用于对象,先对对象进行隐式转换,再根据前面的规则进行++运算

"--"运算符

规则

1) 应用于非数字类型的时候,先将其转换为数字,再执行--的操作。  
2)应用于浮点数,执行减1的操作 
3)应用于对象,先对对象进行隐式转换,再根据前面的规则进行--运算

"**"运算符

作用

进行幂运算

语法

操作数 ** 幂
    console.log(2 ** 3);     // 8
    console.log(8 ** (1/3)); // 2

赋值运算符

=、+=、-=、*=、/=、%=

令x = 10 y = 5

3b99a34aba019bd104fddd8082837ac9.png

比较运算符

==、===、!=、!==

令x = 5

be73e38047a49c64d5f121562d8924ba.png

规则

1) 如果操作数是布尔类型,比较之前先将其转换成数值,false为0,true为1 
2) 如果操作数是字符类型,另一个是对象,对象先进行隐式转换,再进行比较 
3) 如果操作数是字符类型,另一个操作数是数值,则将字符串转换为数值在比较 
4) null == undefined 为true
5) null与undefined以外的任何数都不想等。 
6) NaN与任何数都不相等
7) 如果两个操作数都是对象,比较是不是同一个对象,如果是则返回true否则false

关系运算符

>、<、>=、<=

规则

1) 两个操作数都是数值,则执行数值比较 
2) 两个操作数都是字符串, 则比较两个字符串对应的ascii码
4) 如果一个操作数是对象,将对象隐式转换后再比较。 
3) 如果一个操作数非数值类型,则将其转换为数字类型再比较

逻辑运算符

令x = 6 y = 3

28706a6d7787a50cca67525d745c04ac.png

"&&"运算符

规则

1) 如果第一个操作数是对象,则返回第二个操作数 
2) 如果第二个操作数是对象,则只有在第一个操作数的值为true的情况下才会返回该对象 
3) 如果两个操作数都是对象,则返回第二个操作数
4) 如果有一个操作数是null,则返回null 
5) 如果有一个操作数是NaN, 则返回NaN 
6) 如果有一个操作数是undefined,则返回undefined

"||"运算符

规则

1) 第一个操作数是对象,则返回第一个操作数 
2) 第一个操作数的求值结果为false,则返回第二个操作数 
3) 两个操作数都是对象,则返回第一个操作数 
4) 两个操作数都是null,则返回null 
5) 两个操作数都是NaN,则返回NaN 
6) 两个操作数都是undefined,则返回undefined

"!"运算符

规则

1) 如果操作数是一个空字符串,返回true 
2) 如果操作数是数值0,返回true 
3) 如果操作数是null,返回true 
4) 如果操作数是NaN,返回true 
5) 如果操作数是undefined,返回true
6) 其他情况返回false

位运算符

ca0394770107add4a0024c57b2b15dbf.png

"&"按位与运算符

作用

&对操作数的二进制数中对应的每一位都做与算,如果对应位都为1则结果为1,如果对应位有一个是0,则结果为0

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011 
console.log(1 & 3) // 1

"|"按位或运算符

作用

|对操作数的二进制数中对应的每一位都做运算,如果对应位都为0则结果为0,如果对应位有一个是1,则结果为1

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011
console.log(1 | 3) // 3

"~"按位非运算符

作用

~对操作数的二进制数对应的每一位都做运算,如果对应位为0则结果为1,如果对应位为1则结果为0

1 的二进制表示为: 00000000 00000000 00000000 00000001 
3 的二进制表示为: 00000000 00000000 00000000 00000011 
----------------------------- 
1 反码二进制表示: 11111111 11111111 11111111 11111110 
由于第一位(符号位)是1,所以这个数是一个负数。JavaScript 内部采用补码形式表示负数,即需要将这个数减去1,再取一次反,然后加上负号,才能得到这个负数对应的10进制值。 
----------------------------- 
1 的反码减 1: 11111111 11111111 11111111 11111101 
    再取反: 00000000 00000000 00000000 00000010 
表示为10进制加负号:-2 
console.log(~ 1) // -2

"^"按位异或运算符

作用

^对操作数的二进制数中对应的每一位都做异或操作,当对应位的值不同时,结果为1,否则为0

1 的二进制表示为: 00000000 00000000 00000000 00000001
3 的二进制表示为: 00000000 00000000 00000000 00000011 /
console.log(1 ^ 3) // 2

"<<"左移运算符

作用

<<运算符使指定值的二进制数所有位都左移指定位数

移动规则

丢弃高位,低位补0即按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

1 的二进制表示为: 00000000 00000000 00000000 00000001 
2 的二进制表示为: 00000000 00000000 00000000 00000010 
console.log(1 << 1) // 2

">>"有符号右移运算符

作用

>>运算符使指定值的二进制数所有位都右移指定位数

移动规则

向右被移出的位被丢弃,拷贝最左侧的位以填充左侧。由于新的最左侧的位总是和以前相同,符号位没有被改变。

1 的二进制表示为: 00000000 00000000 00000000 00000001 
0 的二进制表示为: 00000000 00000000 00000000 00000000 
console.log(1 >> 1) // 0

">>>"无符号右移运算符

作用

>>>运算符使指定值的二进制数所有位都右移指定位数

移动规则

向右被移出的位被丢弃,左侧用0填充。因为符号位变成了0,所以结果总是非负的。对于非负数,有符号右移和无符号右移总是返回相同的结果。

条件运算符

语法

判断条件 ? 条件为真时的操作 : 条件为假时的操作
let num = 2;
num > 1 ? console.log("对"):console.log("错"); // "对" 

类型运算符

typeof运算符

作用

返回变量的类型

    console.log(typeof null);     // object 
    console.log(typeof undefined);// undefined
    console.log(typeof []);       // object
    console.log(typeof {});       // object
    console.log(typeof true);     // boolean
    console.log(typeof "123");    // string
    console.log(typeof 123);      // number

typeof检测类型并不准确,准确的检测方法与各种检测方法的介绍和对比请查看深入理解JS数据类型检测

instanceof

语法

a instance of

作用

查看a是否是b的实例,是则返回true,不是则返回false

注意事项

原型链可以被修改,所以这种方法同样不准确,详情查看深入理解JS数据类型检测

其他运算符

"."点运算符

作用

读取对象的属性值,点只能用在对象上面,若点前面不是对象,则先将其变为对象,调用完之后再改回原来的类型

void运算符

作用

求表达式的值,或执行语句,然后void的值总是为undefined。

在a标签中return false可以阻止默认动作,将其改为void(f())作用相同。

","逗号运算符

语法

表达式1,表达式2,...,表达式n

作用

忽略第一个操作数,返回第二个操作数

注意事项

逗号操作符的优先级比"="低

delete运算

作用

delete运算符用来删除对象属性或者数组元素,如果删除成功或所删除的目标不存在,delete将返回true。

注意事项

不是所有的属性都可删除,一些内置核心和客户端属性是不能删除的,通过 var 语句声明的变量不能删除,通过 function 语句定义的函数也是不能删除的。

in运算符

语法

a in b

作用

判断操作数a是否作为属性名存在于对象b中,是则返回true,不是则则返回false

    let obj = {
        a: 1
    }
    console.log("a" in obj); // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值