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

发布时间:2024年01月04日

可选链运算符 (?.)
用于访问可能为 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'。
文章来源:https://blog.csdn.net/long321041080/article/details/135382609
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。