js语法_?.和??运算符的使用
1、?. (可选链运算符)
在js中,我们经常会访问对象下面的属性,但是对象的值可能会存在为:null、undefined的情况,这样就会报错:Uncaught TypeError: Cannot read properties of undefined 异常错误,导致程序无法进行运行。
而在真实的项目中,我们会经常处理这个情况,如果这个值就读这个值,没有也不能报错(进行兼容处理)。在以前没有这个运算符的时候,只能通过:三木运算符、if判断、或者try/catch等方式来处理。但是这些方式在特定情况下会很复杂 ,比如:
let name=obj.data.person.name而使用?.则完美解决这个问题:
let name=obj?.data?.person?.name当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错。
结论:
?. 可以无限链下去,不论有多少属性,只要有最后可以访问到属性,就会直接赋值最后的属性值。否则当任何一个链出现问题,立刻停止,而后赋值undefined。
2、??(空值合并运算符)
?? 双问号后面是默认值(可常量、可变量)。
当然是在没有值得时候会默认 ?? 后边的值,但是有了默认值 ,那么 ?? 后的值也就不会在去默认了,也就是变成了 赋默认值。就跟三木运算一样,不满足会执行 : 后边的。
?? 和 || 相似,但也存在如下区别:
1. || 只会在左边的值为假值时返回右边的值 (0, '', undefined, null, false 等都为假值)。
2. ?? 是在左边的值为undefined或者null时才会返回右边的值。
如:
let obj={
a:0,
b:'',
c:null,
};
console.log(obj.a ?? 'fly63');//0
console.log(obj.a || 'fly63');//fly63
console.log(obj.b ?? 'fly63');//''
console.log(obj.b || 'fly63');//fly63
console.log(obj.c ?? 'fly63');//fly63
console.log(obj.c || 'fly63');//fly63
//obj.d为undefined
console.log(obj.d ?? 'fly63');//fly63
console.log(obj.d || 'fly63');//fly63结论:
??是判断有没有值,||是判断真假。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!