【面試題】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站一鍵三連哦!感謝支援!!!