[?.]可链接操作符 可选链操作符 [?.] 允许读取连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。[?.]操作符的功能类似于. 链操作符,不同之处在于,在引用为空,即 null 或者 undefined 的情况下不会引起错误,该表达式短路返回值.
const test : ObjectLiteralType = { a: { b: [ { c: '存在' } ] } } ;
console . log ( test && test. a && test. a. b. length ? test. a. b[ 0 ] . c : '不存在' ) ;
可链接写法
const test : ObjectLiteralType = { a: { b: [ { c: '存在' } ] } } ;
console . log ( test?. a?. b[ 0 ] ?. c ) ;
[!.]非空断言操作符 和?.相反,这个符号表示对象后面的属性一定不是null或undefined。
aa ( value? : string ) {
console . log ( value! . length) ;
}
aa ( 'ppp' ) ;
[??]空值合并运算符, 只排除 undefined 和 Null这两个
console . log ( undefined ?? 2 ) ;
console . log ( null ?? 2 ) ;
console . log ( 0 ?? 2 ) ;
console . log ( "" ?? 2 ) ;
console . log ( true ?? 2 ) ;
console . log ( false ?? 2 ) ;
[??=]空值赋值运算符 当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值.同样在一些场景下,可以省略很多代码.
const b = 'test' ;
const a = 0 ;
const a1 = 12 ;
let c = null ;
let d = '123' ;
let e = undefined ;
c ??= b;
d ??= a;
e ??= a1;
[!!]逻辑双非, 值有明确的值的场合,即排除[null,undefined, “”, 0, NaN]
const a = '1' ;
console . log ( ! ! a) ;
const b = NaN ;
console . log ( ! ! b) ;