web前端 - 操作符 🫱🏼

88 阅读1分钟

一元操作符: ++ 、 --、+ 、-


一 、 ➕➕ 和 ➖➖

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