算术运算符(数学运算)
number 运算
-
加减乘除
-
余数 x % 7 注意:-1 % 7 的余数是-1(JS出错)
-
指数 x ** 3
-
自增自减 x++ / ++x / x-- / --x (x在前,值为前;x在后,值为后)
-
求值运算符 +x
-
负数运算符 -x (可以把负数变正)
string 运算
-
连接运算 '123' + '456'(字符串只支持+运算,如果写了数字,会自动把数字变成字符串)
-
注意:尽量少用自增自减
-
不同类型的不要加起来
比较运算符
-
(>) 大于
-
<
-
(>=)大于等于
-
<=
-
== (永远不要用)
-
!=
-
===
-
!==
NaN !== NaN
- 强行记忆,特殊。
布尔运算符
或且非
-
||
-
&&
-
!
短路逻辑
-
console && console.log && console.log('hi') -
以防 console 不存在报错
-
a = a || 100//if(!n){n=0}else{n=n} -
a 的保底值(如果想要n=0,可以直接写到参数里)
二进制运算符
或、与、否
-
| 两个位都为0,则结果为0,否则为1
-
&
-
~
异或
-
^
-
两个位相同,则结果为0,否则为1
左移右移
- << 和 >>
头部补零的右移运算符
- (>>>)
使用与运算符判断奇偶
代码
-
偶数 & 1 = 0
-
奇数 & 1 = 1
使用~, >>, <<, >>>, |来取整
代码
-
console.log(~~ 6.83) // 6
-
console.log(6.83 >> 0) // 6
-
console.log(6.83 << 0) // 6
-
console.log(6.83 | 0) // 6
-
console.log(6.83 >>> 0) // 6
使用^来交换 a b 的值
代码
-
var a = 5
-
var b = 8
-
a ^= b
-
b ^= a
-
a ^= b
-
console.log(a) // 8
-
console.log(b) // 5
点运算符
语法
- 对象.属性名 = 属性值
作用
- 读取对象的属性值
有个疑问
-
不是对象,为什么也可以有属性?'a-b-c'.split('-')
-
JS 有特殊逻辑,点前面不是对象,就把它封装成对象
-
number 会变成 Number 对象
-
string 会变成 String 对象
-
bool 会变成 Boolean 对象
-
程序员从来不用这三种对象(==,++, new number()),只用简单类型
void 运算符
语法
- void 表达式或语句
作用
-
求表达式的值,或执行语句
-
然后 void 的值总是为 undefined
需求
逗号运算符
语法
- 表达式1, 表达式2, ..., 表达式n
作用
- 将表达式 n 的值作为整体的值
使用
-
let a = (1,2,3,4,5)
-
那么 a 的值就是 5,奇葩吧?
-
let f = (x) => (console.log('平方值为'), x*x)
-
注意上面的括号不能省
运算符优先级
不同运算符
-
1 + 2 * 3 是 ~~(1 + 2) * 3 ~~还是 1 + (2 * 3)
-
! a === 1 是 (! a) === 1 还是 ! (a === 1)
-
new Person().sayHi() 是什么意思
相同运算符
-
从左到右 a + b + c
-
从右到左 a = b = c = d
优先级汇总
汇总表位于 MDN
- 一共有20个运算符
技巧
-
圆括号优先级最高
-
会用圆括号就行,其他一律不记