- 算数运算符
- number 运算
- 加减乘除
- 余数 x%7 余数是3
- 指数 x**3
- 自增自减 x++/++x/x--/--x
- a++ 的值 是a+之前的值 (a在前表达式就是取a之前的状态)
- ++a a 在后值在后
- 求值运算符 +x
- 负数运算符 -x
- string 运算
- 连接运算 '123'+'456'
- 尽量少用自增和自减--因为容易你和别人都记错
- 不同类型的不要加起来
- 比较运算符
- >
- <
- >=
- <=
- == 模糊相等
- != 不等
- === 全等
- !== 不全等
- 布尔运算符
- 或且非
- ||
- &&
- !
- 短路逻辑
- console&&console.log&&console.log('hi')
- 以防 console不存在报错
- a=a || 100
- a的保底值
二进制运算符
- 或,与,否
- | 两个位都为0,否则结果为0,否则为1 (有一个1结果就为1)
- & 两个都为1才是1
- ~
- 异或
- ^
- 两个位相同,结果为0,否则为1
- 左移右移
- <<和>>
头部补零的右移运算符
- >>>
平时工作很少用到,但是面试喜欢问
使用与运算符判读奇数偶数
- 代码
- 偶数 & 1= 0
- 奇书 & 1= 1
使用 ~取反,>>,<<,>>> 位运算抹除小数
- 代码
- console.log(~~ 6.83) // 6 两次取反
- console.log(6.83 >>0) // 6 往右移0位
- console.log(6.83<< 0) // 6 左移0位
- console.log(6.83 | 0 ) // 6 任何数和0 做或运算
- console.log(6.83 >>> 0) // 6
使用^来交换 a b 的值
- 代码
- var a =5
- var b = 8
- a ^ = b // a = a^b
- b ^ = a
- a ^ = b
- console.log(a) // 8
- console.log(b) // 5
奇葩运算符
点运算符
- 语法
- 对象.属性=属性值 a.name = 'frank'
- 作用
- 读取对象的属性中
有个疑问
- 不是对象,为啥也可以有属性?'a-b-c'.split('-')
- js有特殊逻辑,点前面不是对象,就把它封装成对象
- number会变成Number 对象
- string 会变成 String 对象
- bool会变成 Boolean 对象
- 程序员从来不会用这三种对象,只用简单类型
void 运算符
- 语法
- void 表达式或语句
- 作用
- 求表达式的值,或执行语句
- 然后void的值总是为 undefined
- 需求
- <a href=''http://example.com"οnclick="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
- 优先级就是先算什么后算什么
技巧
圆括号优先级最高 ,其他一律不记