可选链与双问号

前言

看代码的时候,发现一个有趣的写法:selectedUid = item?.uid,查了一下,原来是 js 新语法,还找到了另一个有趣的语法,双问号,真是好家伙~

可选链

1
2
3
4
5
// 从前
var street = user.address && user.address.street;

// 现在
var street = user.address?.street;

双问号

1
2
3
4
5
// 从前
const result = response?.settings?.n === undefined ? 100 : response?.settings?.n

// 现在,当 ?? 左边的值是 null 或者 undefined 时,返回右边的值
const result = response?.settings?.n ?? 100

注意:双问号和 || 有点像,不同之处是:

  • 当 ?? 左边的值是 null 或者 undefined 时,才返回右边的值

  • || 是当左边为空就返回

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    undefined ?? 'default' // 'default'
    null ?? 'default' // 'default'
    false ?? 'default' // false
    '' ?? 'default' // ''
    0 ?? 'default' // 0

    undefined || 'default' // 'default'
    null || 'default' // 'default'
    false || 'default' // 'default'
    '' || 'default' // 'default'
    0 || 'default' // 'default'