JS中的 ?. ?? ??=

1.可选链(?.)

/*
只有当a存在,同时a具有name属性的时候,才会把值赋给b,
否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.
*/
let a;
let b = a?.name;//undefined
const arr = [{ name: "ww" }, { name: "qq" }];
console.log(arr?.[0]);// {name: 'ww'}

2.空值合并运算符(??)

let a = null;
let c = { name: 'ww' };
let b = a ?? c;// {name: 'ww'}
//如果a等于null或者undefined,那么b=c,否则b=a

3.空值赋值运算符(??=)

/*
当??=左侧的值为null、undefined的时候,才会将右侧赋值给左侧,否则不改变原来的值
*/
let b = 'hello';
let a = 0;
let c = undefined;
let d = null
console.log(b ??= a);//hello
console.log(c ??= d);//null

4.逻辑或赋值 (x ||= y)

/*
运算符仅在 x 为假时才赋值。
*/
const obj = {
name: '',
age: 0
}
obj.name ||= 'fatfish'
obj.age ||= 100
console.log(obj.name, obj.age) // fatfish 100

5.逻辑与赋值(&&=)

/*
逻辑与赋值 (x &&= y) 运算符仅在 x 为真时才赋值。与逻辑或赋值 (||=) 相反,只有 x 为真时才会正确赋值。
*/
const obj = {
name: 'fatfish',
age: 100
}
obj.name &&= 'medium' // medium
obj.age &&= 1000 // 1000
console.log(obj.name, obj.age) // medium 1000
posted on   文仲玉  阅读(585)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示