目录
算术运算符
比较运算符
布尔运算符
其他运算符
运算符优先级
-
总结:
-
不要用
== -
不要用
a++
-
一、算数运算符
1.number运算
-
加减乘除
+、-、*、/不能除0,会得到无限大 -
余数
x%7负数的余数会把负号提出来 -
指数
x**3 -
自增自检
x++、++x、x--、--x数字在前返回值为运算前,数字在后返回值为运算后 -
求值运算符
+x -
负数运算符
-x
注意的事项
- 如果加法是数字和字符串相加,则会把数字变成字符串不同类型尽量不要加起来
'1'+ 2
// '12'
- 如果减法是数字和字符串相减,会把字符串变成数字
'2' - 1
// 1
- 尽量不要用自增自减,把
a++换成a += 1
2.string运算
-
连接运算
'123'+'456' // '123456' -
字符串只支持加号运算
二、比较运算符
-
>大于 -
<小于 -
>=大于等于 -
<=小于等于 -
==模糊等于 永远不要使用两个等号,只能用三个等号
-
!=不等于 -
===全等 基本类型看值是否相等,对象看地址是否相等[] !== [] // ture
!==不全等NaN !== NaN
三、布尔运算符
1.或、且、非
-
||或 -
&&且 -
!非
2.短路逻辑
-
console&&console.log&&console.log('hi')防御性编程 -
以防
console不存在,导致代码报错程序异常 -
a = a || 100 -
a的保底值,但这样写有一定的漏洞 -
最新写法
function add(n=0){
return n+1
}
add(null) // 1
add(undefined) // 1
add('') // 1
四、其他运算符
1.二进制运算符(只对二进制有效)
或、与、否
-
|两个位都为0,结果为0,否则为1 -
&两个位都为1,结果为1,否则为0 -
~有点复杂,需要的时候看MDN
异或
^两个位都相同则结果为0,否则为1
左移右移
-
<<和>>把数字向左或向右移动一位 -
>>>头部补零运算符 这个没咋学 一辈子基本上都用不上
特点
- 面试喜欢问,但实际工作用不到
面试问题
-
1.使用与运算符判断奇偶
-
代码
偶数 & 0b001 = 0
奇数 & 0b001 = 1
-
2.使用
~、>>、<<、|取整 -
代码
console.log(~~ 3.14) // 3
console.log(3.14 >> 0) // 3
console.log(0 << 3.14) // 3
console.log(3.14 | 0) // 3
console.log(3.14 >>> 0) // 3
-
3.使用
^交换a,b的值 -
代码
var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
// a = 8
// b = 5
- 其实新语法很快就搞定了
[a,b] = [b,a] 效果一样
2.点运算符
语法
对象.属性名 = 属性值
作用
- 读取对象的属性值
特殊的地方
-
不是对象用.操作符,JS不会报错
-
JS会发现不是对象,创建一个临时对象,你用完以后,立马删掉这个临时对象
特殊逻辑
-
点前面如果不是对象,JS会把它封装成一个对象
-
number会变成Number对象、string会变成String对象、bool会变成Boolean对象 -
程序员从不用这三种对象,只用简单类型对象
3.void运算符
语法
void表达式或语句
作用
-
求表达式的值,或执行语句
-
然后void的值总是为undefined
4.逗号运算符
语法
表达式1,表达式2,...,表达式n
作用
- 将
表达式n的值作为整体的值
使用
-
let a = (1,2,3,4,5) -
a = 5(egg 疼) -
let f = (x) => (console.log('平方值为'),x*x)如果不想写return可以用逗号隔开,函数会默认取最后的表达式为返回值 -
但必须要把函数体用圆括号括起来
五、运算符优先级
不同运算符
-
1+2*3是(1+2)*3还是1+(2*3)先加减后乘除,小学生都会 -
!a === 1是(!a) === 1还是!(a === 1)加括号,括哪个,哪个优先级最高
相同运算符
-
从左到右计算
a + b + c -
从右到左赋值
a = b = c = d等同于a = (b = (c = d))
优先级汇总
-
不需要记,因为太繁杂,需要的时候看MDN即可
-
技巧:圆括号优先级最高,如果需要提高优先级直接圆括号括起来即可