记录前端工作中经常使用的一些运算符号

308 阅读2分钟

前言:作为Web前端开发,在部门内所有前端项目均使用TS的前提下,以下运算符号基本天天都会写,能简化代码,让我们少写一大串表达式。

一、?.(可选链运算符/安全导航操作符)

  • ES11(ES2020)新增的特性

  • 使用场景:在项目开发中,后台接口返回的数据有时候一些属性不存在,即undefined,或者后台接口有时候读取很慢,返回了null,这个时候我们组装数据遍历的时候会报错xxx不能为null。一旦报错,这段代码的执行就中断了,进而影响其他代码的执行甚至阻塞页面加载。

  • 为了解决这个问题,我们只要在不确定的属性前的.改成 ?.就可以不需要报错了,当没有取到值的时候,会默认为空,页面渲染也不会报错。

  • 用法: obj?.propobj?.[expr]arr?.[index]func?.(args)

const obj ={
    a:1,
    b:{  // 有时候,可能b这个对象属性不存在
        c:2,
        d:3 
    }
}
obj.a //正常取值
obj.b //当此属性不存在,这样取值的话,也只是取到一个 undefined,并不会报错
obj.b.c //当b属性不存在的时候,在undefined下取值,就绝对会造成程序崩溃
obj?.b?.c //使用可选链操作符,即安全导航操作符,取不到c的时候会默认为空,就不会造成程序崩溃


二、!(非空断言操作符)

  • !.和?.相反,这个符号表示对象后面的属性一定不是null或undefined。
  • 不会防止出现null或undefined。 它只是告诉 TypeScript 的类型检查器对特定的属性表达式,不做 "严格空值检测"
  • 使用时注意要保证 x! 不能为null或undefined,不然页面渲染还是会报错

三、??(空值合并运算符)

  • 当它左侧的表达式为 null或者 undefined时,返回其右侧表达式,否则返回左侧表达式
  • || 的区别是,?? 对于左侧为0和空字符串 ''这些假值时,也会返回假值,而|| 不会返回假值

四、!!(强制转换为boolean)

  • 将它右侧的表达式强制转换为布尔值
var a ;
console.log(a)  //undefined
console.log(!a) //true
console.log(!!a) //false

五、~~ (强制转换为integer)

  • 因为~ 按位取反运算符,~~ 就是执行两次取反,即转换为整数型
~~false //0
~~true //1
~~123.4 //123
~~'123.5' //123
~~''    //0
~~'123a' //0
~~undefined //0
~~null //0

六、||和&&(或运算、与运算)

  • 这两家伙基本天天写了,不多说 ||左侧只要为真,返回左侧,为假返回右侧

&&左侧只要为真,返回右侧,为假返回左侧

0||1     //1
false||1 //1
''||1    //1
1||2     //1

0&&1     //0
false&&1 //false
''&&1    //''
1&&2     //2