美文网首页js 世界
【面试题】js 问号(?)的强大之处,你知道吗??

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

作者: 前端末晨曦吖 | 来源:发表于2022-08-31 22:58 被阅读0次

    问号(?)的强大之处

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

    一、问号点(?.)

    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站一键三连哦!感谢支持!!!

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/kedjnrtx.html