typescript中使用 ?. ?? ??= 运算符

可选链运算符 (?.)
用于访问可能为 null 或 undefined 的属性或方法,以避免出现异常错误。如果使用 . 运算符来访问一个可能为 null 或 undefined 的值,会导致运行时错误。而使用 ?. 运算符,如果该值为 null 或 undefined,则表达式会短路,返回 undefined,而不会抛出异常。
例如:

let obj = { foo: { bar: 42 } };
let value = obj?.foo?.bar; // 如果 obj 或 obj.foo 或 obj.foo.bar 为 null 或 undefined,value 将为 undefined,否则为 42

空值合并运算符 (??)
用于给定一个默认值,当一个表达式的值为 null 或 undefined 时,返回默认值。如果一个变量或表达式的值为 null 或 undefined,使用 ?? 运算符可以提供一个备选值。
例如:

let x = null;
let y = x ?? 5; // 如果 x 为 null 或 undefined,y 将为 5,否则为 x 的值

空值合并赋值运算符 (??=)
用于将默认值赋给一个变量,当该变量的值为 null 或 undefined 时。如果一个变量的值为 null 或 undefined,可以使用 ??= 运算符将一个默认值赋给该变量。
例如:

let x = null;
x ??= 5; // 如果 x 为 null 或 undefined,将把 5 赋给 x

??和 ||比较相似

?? 和 || 区别

假值:false、0、空字符串、null、undefined 等
?? 判断左侧操作数为null或undefined时,返回右侧操作数
|| 判断左侧操作数为’假值'时,返回右侧操作数

let a:any;
let b = '1111';
let c = null;
let d:any = 0;
let e;
e ??= a?.b ?? c ?? d?.a ?? b;

a?.b:这是可选链运算符 ?. 的使用,它尝试访问变量 a 的属性 b。如果 a 为 null 或 undefined,则表达式返回 undefined。
a?.b ?? c:这是空值合并运算符 ?? 的使用,它判断左侧操作数 a?.b 是否为 null 或 undefined。如果是,则返回右侧操作数 c 的值。否则,返回左侧操作数 a?.b 的值。
a?.b ?? c ?? d?.a:继续使用空值合并运算符 ??,判断前一个表达式的结果 a?.b ?? c 是否为 null 或 undefined。如果是,则返回右侧操作数 d?.a 的值。否则,返回前一个表达式的结果。
a?.b ?? c ?? d?.a ?? b:再次使用空值合并运算符 ??,判断前一个表达式的结果 a?.b ?? c ?? d?.a 是否为 null 或 undefined。如果是,则返回右侧操作数 b 的值。否则,返回前一个表达式的结果。
根据上述表达式的逻辑,以下是对应的执行过程:

a 的值为 undefined。
a?.b 的结果为 undefined。
a?.b ?? c 的结果为 null,因为左侧操作数为 undefined,右侧操作数为 null。
a?.b ?? c ?? d?.a 的结果为 0,因为左侧操作数为 null,右侧操作数为 d?.a,而 d 的值为 0。
a?.b ?? c ?? d?.a ?? b 的结果为 '1111',因为左侧操作数为 0,右侧操作数为 '1111'。
最终,变量 e 的值被赋为 '1111'。
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值