?. !. ?? !!说明(自用记录)

  1. [?.]可链接操作符
    可选链操作符 [?.] 允许读取连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。[?.]操作符的功能类似于. 链操作符,不同之处在于,在引用为空,即 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 );

  1. [!.]非空断言操作符
    和?.相反,这个符号表示对象后面的属性一定不是null或undefined。
aa(value?:string){
    console.log(value!.length);
    // console.log(value.length);  
    //错误提醒: value is possibly 'undefined'.
}
aa('ppp');
//实际上这个东东不好用, 因为不传值, 编译JS后, 会报错,    所以建议使用?. 替代 !.

  1. [??]空值合并运算符, 只排除 undefined 和 Null这两个
 console.log(undefined ?? 2); // 2
 console.log(null ?? 2); // 2
 console.log(0 ?? 2); // 0
 console.log("" ?? 2); // ""
 console.log(true ?? 2); // true
 console.log(false ?? 2); // false
  
  1. [??=]空值赋值运算符
    当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值.同样在一些场景下,可以省略很多代码.
const b = 'test';
const a = 0;
const a1 = 12;
let c = null;
let d = '123';
let e = undefined;
c ??= b; // c = 'test';
d ??= a;  // d = '123';
e ??= a1; // e = 12

  1. [!!]逻辑双非, 值有明确的值的场合,即排除[null,undefined, “”, 0, NaN]
// 用于将一个值转换为布尔值。其中,第一个!表示取反,第二个!将取非后的值重新转换为布尔值。例如,将一个数字转换为布尔值,如果该数字为0,则布尔值为false,否则为true。
const a = '1';
console.log(!!a); // true
const b = NaN;
console.log(!!b); // false
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值