一元操作符(++、–)
let num = 1
// 前置型,先自身累加或累减,后操作
console.log(++num) //-> 1+1 -> 2
console.log(--num) //-> 2-1 ->1
console.log(++num+1) //-> 1+1+1 -> 3
console.log(--num-1) //-> 2-1-1 -> 4
// 后置型,会先操作,后自身累加或累减
num = 1
console.log(num++) // -> 先输出1,自身累加 -> 1+1
console.log(num--) // 先输出2,自身累减 -> 2-1
console.log(5+num++) //-> 5+1 -> 输出 6 -> 自身累加 num = 2
console.log(8-num--) //-> 8-2 ->输出 6 -> num = 1
console.log((num++)+3) //-> 1+3 ->输出 4 -> num=2
console.log((num--)-2) // -> 2-2 -> 输出 0 -> num = -1
逻辑操作符
(0,null,undefined,"",NaN)为false,其他全部为true
非(!)
会将它操作的对象转换为布尔值,然后对其取反,会返回一个布尔值
console.log(!0) // true
console.log(!'abc') // false
console.log(!1) // false
console.log(!null) //true
console.log(!11) //fasle
//俩个叹号表示取反再取反
console.log(!!0) // false
console.log(!!'abc') // true
console.log(!!1) // true
与(&&)
判断时,两个为真则为真,一个为假则为假
// 赋值时,只有第一个值为true的情况下才会返回第二个值,如果第一个值为false的话就返回第一个值,并且不会再对右侧进行操作了
console.log(!{} && {a:'1'}) // false
console.log(0 && {a:'1'}) // 0
console.log(1 && {a:'1'}) // {a: "1"}
console.log({} && {a:'1'}) // {a: "1"}
console.log({} && 1) // 1
console.log({} && 'a') // a
console.log({} && false) // false
或(||)
判断时,一个为真则为真,两个为假则为假
// 赋值时,只有第一个值为false的情况下才会返回第二个值,如果第一个值为true的话就返回第一个值,并且不会再对右侧进行操作了
console.log(!{} || {a:'1'}) // {a:'1'}
console.log(0 || {a:'1'}) // {a:'1'}
console.log(1 || {a:'1'}) // 1
console.log({} || {a:'1'}) // {}
关系操作符(>、<、>=、<=)
- 数值与数值就正常比较
- 字符串与字符串比较的是字符编码值
- 数值与其它类型相比较会将其它类型隐式转换为数值,然后再做比较
- 其它类型值比较都会转换为数值,再进行比较
相等操作符(==、===)
- == 相等
- != 不相等
相等和不相等的比较规则
1. 布尔值与其它类型值做比较会把布尔值转换为数字再做比较,false为0,true为1
2. 字符串和数值比较时,会把字符串转换为数值再做比较
3. 对象和其它类型值做比较的时候会调用toString()方法,得到原始值之后再通过上面两条规则进行转换比较
4. null == object, null和undefined和其它类型作比较的时候都是false
5. NaN != NaN , NaN与其它类型作比较的时候都是false
6. 对象与对象作比较是将两个内存地址作比较,也就是判断他们是不是同一个对象
- === 全等,只有在连类型都相同的情况下,左右两边的值才会相等
- !== 不全等
赋值操作符
=、+=、-=、*=、/=、%=
let n = 1
console.log(n += 1) //-> n = n+1 -> n = 1+1
console.log(n -= 1) //-> n = n-1 -> n = 2-1
加(+)减(-)乘(*)除(/)和求模(取余,%),都是正常运算,要注意当数字与字符串相加时会变成字符串拼接,以及加减表正负的操作。