一元操作符: ++ 、 --、+ 、-
一 、 ➕➕ 和 ➖➖
1、string: 只有在是数值的情况下才会计算,其他的都返回NaN
计算最终结果类型: number
计算规则如下:
let a = '01'
console.log(++a) // 2
let a = 'dd'
console.log(++a) // NaN
let a = 'undefined'
console.log(++a) // NaN
2、null 、undefined
let a = null
console.log(++a) // 1
let a = undefined
console.log(++a) // NaN
3、boolean
let a = true
console.log(++a) // 2
let a = false
console.log(++a) // 0
4、 对象: 调用valueOf() (优先) 或 toString()取值. 如果没有 返回NaN
let a = {
valueOf(){
return 0
}
}
console.log(++a) // 1
二 、 ➕、 ➖
- 加号 ➕
规则:
- 不会改变数值
- 类型变为number
- 其余同 ++ 或 --
const a = 'll'
console.log(+a) // NaN
- 减号 ➖
规则:
- 先转数值 后转 负数
- 规则同上
位操作符:
按位非~ 、 按位与& 、 按位或|、 按位异或 ^ 、 左移 << 、右移 >> 、无符号右移 >>>
布尔操作符
逻辑非 !、 逻辑与 && 、 逻辑或 ||
逻辑非 !
let a = '' | null | undefined | 0 | NaN | false
console.log(!!a) // false
let a = 'ss' | {} | function(){} | Infinity | 1 | true | [] | Symbol()
console.log(!!a) // true
逻辑与 && :先把第一个转化成boolean
规则
- 如果第一个是 true,则返回第二个操作数
- 如果第一个是 false,则返回第一个操作数
const a = 'ss' | {} | Infinity
const b = 0
const c = a && b
console.log(c) // 0
逻辑或 ||
规则
- 如果第一个是 true,则返回第一个操作数
- 如果第一个是 false,则返回第二个操作数
加性操作符 +
1. 若有一个非数字类型,则全部都会转成 字符串类型,
- [].toString() // 空字符串
- {}.toString() // [Object, Object]
- function(){}.toString() // 'function(){}'
- symbol 没有toString(),则会报错
2. null + undefined = NAN(第一条的特殊化)
3. 数值 + true/false = 数值 + 1/0
4. 数值 + null = 数值
5. 数值 + undefined = NAN
6. Infinity + Infinity = Infinity
7. -Infinity + -Infinity=-Infinity
8. -Infinity + Infinity = NaN
9. 任意数值 + NAN = NAN
减性操作符 - 调用valueof() / tostring().
- null.valueOf() // 0
- true.valueOf() // 1
- false.valueOf() // 0
1. Infinity - Infinity = NAN
2. 任意一个非数值 = NAN