目录
- 算术运算符
- 比较运算符
- 布尔运算符
- 二进制位运算符
- 其他运算符
- 运算符优先级
一、算术运算符(数学运算)
number 运算
- 加减乘除
- 余数 x % 7
- 指数 x ** 3
-
自增自减 x++ / ++x / x-- / --x (a在前值为前a在后值为后)
-
求值运算符 +x
-
负数运算符 -x
string 运算
- 连接运算 '123' + '456'
- (加号能把字符串加起来,只支持加号)
- 数字加字符串 1+'2'是错误的,JS不提示
- (JS会默认先把数字变成字符串,返回结果'12')
- 字符串减数字 '2'-1也是错误,JS不提示
- (会默认先把字符串变成数字,返回结果1)
忠告:
- 尽量少用自增自减,因为容易你和别人都记错
- 不同类型不要加起来
二、比较运算符
>
<
>=
<=
== 模糊相等 (不使用)
!= 不模糊相等模糊
=== 全等
!== 不全等 NaN !== NaN
三、布尔运算符
或且非
||
&&
!
短路逻辑
- console && console.log && console.log('hi')
- 如果console和console.log存在就执行console.log('hi')
- 以防 console 不存在报错
- a = a || 100
- 如果a存在a=a,a不存在则a=100
四、二进制位运算符
或、与、否
| 两个位都为0,则结果为0,否则为1
&
~
异或
^
两个位相同,则结果为0,否则为1
左移右移
<< 和 >>
头部补零的右移运算符
>>>
五、其他运算符
点运算符
语法
对象.属性名 = 属性值
作用
读取对象的属性值
有个疑问
不是对象,为什么也可以有属性?'a-b-c'.split('-')
JS 有特殊逻辑,点前面不是对象,就把它封装成对象
number 会变成 Number 对象
string 会变成 String 对象
bool 会变成 Boolean 对象
程序员从来不用这三种对象,只用简单类型
void 运算符
语法
void 表达式或语句
作用
求表达式的值,或执行语句
然后 void 的值总是为 undefined
需求
<a href="http://example.com" onclick="f(); return false;">点击</a>
return 假值可以阻止默认动作
<a href="javascript: void(f())">文字</a>
改用 void 可以炫技
逗号运算符
语法
表达式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个运算符
- 怎么记忆呢
技巧
- 圆括号优先级最高
- 会用圆括号就行
- 其他一律不记