問號(?)的強大之處 點擊打開視頻講解更加詳細 一、問號點(?.) obj: { name: "末晨曦吖", }, console.log(this.obj.age, "年齡"); //undefined console.log(this.obj.hobby, "愛好"); //undefined ...
問號(?)的強大之處
一、問號點(?.)
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