前言:作为Web前端开发,在部门内所有前端项目均使用TS的前提下,以下运算符号基本天天都会写,能简化代码,让我们少写一大串表达式。
一、?.(可选链运算符/安全导航操作符)
-
ES11(ES2020)新增的特性
-
使用场景:在项目开发中,后台接口返回的数据有时候一些属性不存在,即
undefined,或者后台接口有时候读取很慢,返回了null,这个时候我们组装数据遍历的时候会报错xxx不能为null。一旦报错,这段代码的执行就中断了,进而影响其他代码的执行甚至阻塞页面加载。 -
为了解决这个问题,我们只要在不确定的属性前的
.改成?.就可以不需要报错了,当没有取到值的时候,会默认为空,页面渲染也不会报错。 -
用法:
obj?.prop、obj?.[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