一、算术运算符
Number 运算
- 加减乘除
-
余数 %
- JS 中 -1%7 是错误的先计算 1%7 然后再变成负数,得出 -1
- 指数 **
-
自增自减 a++ / ++a / a– / -aa(尽量少用)
- a++ 表达式的值是 a,++ a 的表达式的值是 a +1
- a– 表达式的值是 a,–a 的表达式的值是 a -1
- 求值运算符号 +a 不是取正值
- 负数运算符 -a
String 运算
-
连接运算符 + ’12’+’45’ =’1245′
- 只支持 + 法运算,其它运算不支持
- 如果加号中运算中有非字符串,则转换为字符串,再相加, 如果字符串 - 数字,则字符串转为数字,再相减(不同类型不要运算)
二、比较运算符
- >
- <
- >=
- <=
-
==
- 模糊相等, 经常会自动进行类型转换 (不推荐使用)
- 0==[],0==’0′,0==’t’ tab 字符 , 但是 []!=’0′!=’t’
// 自相矛盾 var a =[] if(a){console.log('a')} else{console.log('a 不等于 true')}//a var a =[] if(a==true){console.log('a')} else{console.log('a 不等于 true')}// a 不等于 true
- !=
-
=== 全等
- 基本类型看值是否相等, 类型不相等直接返回 false
- 对象看地址是否相等
- []!==[],{}!=={}, 空对象不等于空对象,NaN !==NaN
- !==
三、布尔运算符
- 或且非 || && !
-
短路逻辑
- consloe&&console.log&&console.log(‘hi’), 防御性编程,防止 console 不存在报错
- a =a||100,100 为 a 的默认值,这种写法有一个 bug,5 个 falsy 值,可用以下语法计算
function add(n=0){return n+1}// n 的默认值是 0
四、进制运算符
- 或 : 只要有一个为 1, 值就是 1
- 与 : 只有两个为均为 1,值才为 1
- 非:取反
- 异或 : 两个为相等为 0,不相等为 1
- 左移,右移 << >>
- 头部补零的右移运算符 >>>
二进制值 | 或 | 与 | 异或 |
---|---|---|---|
a | 1111 | 1111 | 1111 |
b | 1010 | 1010 | 1010 |
计算值 | 1111 | 1010 | 0101 |
使用运算符计算值奇偶
- 偶数 & 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 的值
- 新语法 [a,b] =[b,a]
- 位运算
a^=b,b^=a,a^=b
点运算符,读取对象的属性值
* 对象. 属性名 = 属性值
- 不是对象,也可以用点运算符,因为如果前面不是对象,则会转换成对象,然后运算点运算符
void 运算符
- void 表达式或者语句
- 求表达式的值,或执行语句,然后 void 的值总是 undefined
- 用法: <a href =”javascript:void(f())”>
逗号 运算符
- let a=(1,2) a=2
let f = x=>{console.log('a');return x+1}
let f3= x=>(console.log('a'), x+1)// 简写方式
运算符的优先级
- 圆括号优先级最高
- 逗号优先级最低