上面的三行代码都通过||运算符指定默认值,但是这样写是错的。开发者的原意是,只要属性的值为nullundefined,默认值就会生效,但是属性的值如果为空字符串或false0,默认值也会生效。

    为了避免这种情况, 引入了一个新的 Null 判断运算符??。它的行为类似||,但是只有运算符左侧的值为nullundefined时,才会返回右侧的值。

    1. const animationDuration = response.settings.animationDuration ?? 300;
    2. const showSplashScreen = response.settings.showSplashScreen ?? true;

    这个运算符的一个目的,就是跟链判断运算符?.配合使用,为nullundefined的值设置默认值。

    上面代码中,response.settings如果是nullundefined,就会返回默认值300。

    1. // …
    2. }

    上面代码判断props参数的enabled属性是否赋值,等同于下面的写法。

    ??有一个运算优先级问题,它与&&||的优先级孰高孰低。现在的规则是,如果多个逻辑运算符一起使用,必须用括号表明优先级,否则会报错。

    1. lhs && middle ?? rhs
    2. lhs ?? middle && rhs
    3. lhs || middle ?? rhs