在ES5之后的標准中JS新增的特性包括了一些操作符。
?. 可選鏈操作符
可選鏈允許讀取連接對象鏈深處的屬性值而不必明確驗證鏈中每個引用是否有效。該表達式短路返回值
語法:obj?.prop obj?.[expr] arr?.[index] func?.(args)
例如一個表達式
res && res.data && res.data.status
意思很明確,這個表達式在res和res.data存在的時候會返回res.data.status。為避免屬性值不存在的情況,需要用到條件表達式或者三目運算符之類的操作。
使用可選鏈操作符后
res?.data?.status
使用可選鏈后不必擔心拋出不存在的異常,寫法更簡介。可選鏈操作符不止可用於常規對象,還可以用於方法,數組索引等。
??空值合並操作符
只有當左側為null和undefined時才會返回右側的值,否則返回左側操作數。
與邏輯或操作符 || 不同, || 會在左側操作符為假值時返回右側值,可能會遇到意外行為,比如左側是空字符串''或0等假值時。
||= &&= ??=邏輯賦值運算符
先進行邏輯運算,再根據邏輯結果視情況進行賦值運算。
或賦值運算符 ||=
x ||= y相當於x || (x = y)
user.id = user.id || 1 // 當user.id不存在時默認初始化為1 user.id ||= 1 // 新寫法
與賦值運算符&&=
x &&=y相當於x && (x = y)
空值賦值運算符??=
當左側為null或undefined時就把右側的值賦給左側,就算右側是null和undefined也會賦值。
let a = null
let b = 2 a ??= b console.log(a) // 2