JS运算符备忘


链判断运算符 ?.

  • 读取对象内部的某个属性时,判断上层对象是否存在

    // 读取message data.result.state.message
    
    // 正常写法
    const message = ( data && data.result && data.result.state && data.result.state.message ) || ""
    
    // 链判断运算符写法
    const message = data?.result?.state?.message || ""
  • 三元运算符?:也常用于判断对象是否存在

    // state.code
    
    const code = state ? state.code : ""
  • ?.运算符常见形式

    a?.b
    // 等同于
    a == null ? undefined : a.b
    
    a?.[x]
    // 等同于
    a == null ? undefined : a[x]
    
    a?.b()
    // 等同于
    a == null ? undefined : a.b()
    
    a?.()
    // 等同于
    a == null ? undefined : a()

Null 判断运算符 ||??

  • 如果某个属性的值是nullundefined,有时候需要为它们指定默认值

  • 常见做法是通过||运算符指定默认值,但是属性的值如果为空字符串或false0,默认值也会生效,如下

    const value = data.value || "123"
    // 当data.value等于null、undefine、false、0或空值的时候value的值都是'123'
    // 这样会导致无法判断false、0或者空值
  • 通过??运算符,只有值为nullundefined时,才会返回右侧的值

    const value = data.value ?? "123"
    // 当data.value等于null、undefine的时候value的值才是'123'

逻辑赋值运算符 ||=&&=??=

// 或赋值运算符
x ||= y
// 等同于
x || (x = y)

// 与赋值运算符
x &&= y
// 等同于
x && (x = y)

// Null 赋值运算符
x ??= y
// 等同于
x ?? (x = y)
  • 写法对比

    // 老的写法
    user.id = user.id || 1;
    
    // 新的写法
    user.id ||= 1;
  • 示例

    // ||=  值为 null、undefined、false、0或空时取默认值
    let user = {
      id: 0
    }
    user.id ||= 1
    console.log(user.id) // 1
    
    let user = {
      id: 9
    }
    user.id ||= 1
    console.log(user.id) // 9
    
    // &&= 与上面相反,值不为 null、undefined、false、0或空时取默认值
    let user = {
      id: 0
    }
    user.id &&= 1
    console.log(user.id) // 0
    
    let user = {
      id: 9
    }
    user.id &&= 1
    console.log(user.id) // 1
    
    // ??=  ,值为 null undefined 时取默认值
    let user = {
      id: 0
    }
    user.id ??= 1
    console.log(user.id) // 0
    
    let user = {
      id: 9
    }
    user.id ??= 1
    console.log(user.id) // 9
    
    let user = {
      id: null
    }
    user.id ??= 1
    console.log(user.id) // 1
    

逻辑运算符

  • &&与、!!或、!非,!!非的取反

逻辑位运算符

  • &位与、|位或、^位异或、~位非

位移运算符

  • <<左移、>>右移、>>>无符号右移

  目录