你可能寫過這樣的代碼fetch
var street = user.address && user.address.street;
複製代碼
有了這個新語法,你能夠寫成spa
var street = user.address?.street
複製代碼
你可能還寫過這樣的代碼code
var fooInput = myForm.querySelector('input[name=foo]')
var fooValue = fooInput ? fooInput.value : undefined
複製代碼
有了新語法後,你能夠寫成orm
var fooValue = myForm.querySelector('input[name=foo]')?.value
複製代碼
但在實際使用中,仍是會有些不便,好比input
const result = response?.settings?.n || 100
複製代碼
你但願若是 response 或者 response.settings 或者 response.settings.n 不存在(值爲 null 或者 undefined)時,result 保底值爲 100。class
可是上面代碼在 n 爲 0 的時候,也會讓 result 變成 100,你實際上但願此時 result 爲 0。語法
因而你只好把代碼寫成這樣di
const result = response?.settings?.n === undefined ? 100 : response?.settings?.n
複製代碼
或者你封裝一下query
const result = fetch(response?.settings?.n, 100)
複製代碼
如今,你能夠用另外一個新語法——「雙問號語法」——來簡化代碼:copy
const result = response?.settings?.n ?? 100
複製代碼
這個 ?? 的意思是,若是 ?? 左邊的值是 null 或者 undefined,那麼就返回右邊的值。
有了這兩個語法,估計之後 JS 代碼中就會全是問號了!哈哈。