js中?.、??、??=的用法和含义

参考链接1
参考链接2

可选链运算符(?.)

可选链运算符(?.)类似于链式运算符(.),不同之处在于在引用为null或undefined时不会报错,而是短路返回undefined

let a;
let b = {name:'xxx'}
let c = [1,2,3]
let d = a?.name; // undefined
d = b?.name; // 'xxx'
d = b?.['name']; // 'xxx'
d = c?.[0]; // 1

let d = a?.name;举例,意思是只有当a存在,且a有name这个属性时,才会把a.name的值赋给d,否则会给d赋值undefined,且不会报错

let a = {
	getName:()=>{
		return '123'
	}
}
let result1 = a?.getName?.(); // 123
let result2 = a?.setName?.(); // undefined

与函数调用一起使用时,如果给定的函数不存在,则返回undefined,不会报错

注意: 如果被当作方法调用的是一个属性,使用?.还是会报错

空值合并运算符(??)

let a = null;
let b = 1;
let c = a ?? b; // 1

意思是只有当??左侧为null或undefined时,才会返回右侧的值,否则返回左侧值

常用空值合并运算符给常量赋默认值,保证其不会null或undefined

给变量赋默认值,常用逻辑或运算符(||),逻辑或运算符是一个布尔逻辑运算符,左侧会被强制转换成布尔值,任何的假值(0,‘’,NaN,null,undefined)都不会被返回

注意: ??不能和&&、||组合使用,因为空值合并运算符和其他逻辑运算符之间的运算优先级是未定的,会报错,可使用()来显式表明运算优先级

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

let a;
let b = '123';
let c = 'qwer'
a ??= b;// '123'
b ??= c;// '123'

意思是只有当??=左侧的值为undefined、null时,才会把右侧的值赋给左侧,否则左侧不会被赋值

你可能感兴趣的:(javascript,开发语言)