js复合值合并运算符和可选链操作符的用途
原创js中??和?.的用法
js使用空值合并运算符和可选链运算符。
js中??
- 仅当左侧为null和undefined右侧的数字仅在以下情况下返回
- 空值合并运算符(??当左边的操作数为时,为逻辑运算符。 null 或者 undefined 返回其右操作数,否则返回左操作数。
-
带逻辑或运算符(||与此不同,当左操作数为假值时,逻辑或运算符返回右操作数。
console.log(null ?? 12);//12 console.log(undefined ?? 12);//12
//短路操作 let x=0 let prop = null?.[x++]; console.log("prop",prop,x);//undefined 0
console.log("" ?? 12);//"" console.log(0 ?? 12);//0 console.log(false ?? 12);//false
console.log(null || 12);//12 console.log(undefined || 12);//12 console.log("" || 12);//12 console.log(0 || 12);//12 console.log(false || 12);//12
js中?.
- 可选链条操作员( ?. )允许您读取连接对象链中深层属性的值,而无需显式验证链中的每个引用是否有效。
-
?. 操作员的功能类似。 . 链运算符,不同的是引用为空。(null 或者 undefined) 在表达式返回值短路的情况下不会导致错误。
const obj = { name: hello, cat: { name: world } }; const catName = obj.cat ?.name; console.log(catName);//world
const dogName = obj.dog ?.name; console.log(dogName);//undefined
const obj = { name: hello, cat: { name: { name111: world, sayHi() { console.log("Hi"); } }, sayHi() { console.log("Hi"); } }, }; const catName = obj.cat ?.name?.name111; console.log(catName); //world
const catName1 = obj.cat ?.name2222?.name111; console.log(catName1); //undefined //obj的 name2222未定义属性
//连用 const catName2 = obj.cat ?.name2222?.name111??"正好"; console.log(catName2); //正好
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除