【面试题】js 问号(?)的强大之处,你知道吗??

问号(?)的强大之处

点击打开视频讲解更加详细

一、问号点(?.)

obj: {
  name: "末晨曦吖",
},

console.log(this.obj.age, "年龄");        //undefined
console.log(this.obj.hobby, "爱好");      //undefined

console.log(this.obj.age.data, "年龄");   //报错
console.log(this.obj.hobby.data, "爱好"); //报错

我们都知道第二个代码中打印的年龄和爱好是会报错的,因为我们在打印age和hobby时都已经是undefined的了,在undefined中有打印data属性肯定是没的了,也就报错了。

那我们都怎么避免这中值为空的问题而引发报错呢?

是的,我们可以使用前判断是否为空,若不为空时,我们再去拿其中的某个属性。

console.log(this.obj.age && this.obj.age.data, "年龄", this.obj.age.data);
console.log(this.obj.hobby && this.obj.hobby.data,"爱好",this.obj.hobby.data);

在代码中可以知道,我们在获取data属性时,首先判断前面的属性不为空在去获取。
这种方式呢我们用问号点也是可以实现的。

使用 (?.)实现判断案例:

//this.obj.age?.data  === this.obj.age && this.obj.age.data

console.log(this.obj.age?.data, "年龄"); //undefined
console.log(this.obj.hobby.hobbydata, "爱好"); //报错

?.作用总结:

作用就是判断这个对象(this.obj)下的(age)下的(data)是否为null或者undefined,当其中一链为null或者undefined时就返回undefined,这样即使中间缺少一个属性也不会报错。

二、问号问号(??)

console.log(1 || "xx") 			//1
console.log(0 || "xx") 			//xx
console.log(null || "xx")		//xx
console.log(undefined || "xx")  //xx
console.log(-1 || "xx") 		//-1
console.log("" || "xx") 		//xx

console.log(1 ?? "xx")			//1
console.log(0 ?? "xx") 			//0
console.log(null ?? "xx") 		//xx
console.log(undefined ?? "xx")  //xx
console.log(-1 ?? "xx") 		//-1
console.log("" ?? "xx") 		//''

??作用总结:

使用方式就是与 或(||)相同用法,但是要注意的是??忽略0和空字符串等错误的值

?. 与 ??联合使用

let obj ={}
console.log(obj?.a?.b ?? 233 ) //233

let obj={a:{b:1}}
console.log(obj?.a?.b??233) //1

若对您有帮助,请点击跳转到B站一键三连哦!感谢支持!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咬着拽天下的程序猿

心若释然,何惧万水千山!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值