ES6/2015 中的空安全属性访问(和条件赋值)

在ES6(ES2015/JavaScript.next/Harmony)中是否有-safe property access(null propagation/exist)运算符,例如CoffeeScript中的??还是计划用于ES7?null

var aThing = getSomething()
...
aThing = possiblyNull?.thing

这大致如下:

if (possiblyNull != null) aThing = possiblyNull.thing

理想情况下,解决方案不应将 (偶数 ) 分配给 ifundefinedaThingpossiblyNullnull


答案 1

更新(2022-01-13):似乎人们仍在发现这一点,这是当前的故事:

更新(2017-08-01):如果你想使用官方插件,你可以尝试使用新转换的Babel 7的alpha版本。您的里程可能会有所不同

https://www.npmjs.com/package/babel-plugin-transform-optional-chaining

原文

实现当前处于阶段 1 的功能:可选链接。

https://github.com/tc39/proposal-optional-chaining

如果你想今天使用它,有一个Babel插件可以做到这一点。

https://github.com/davidyaha/ecmascript-optionals-proposal


答案 2

它不如?运算符,但要获得类似的结果,您可以执行以下操作:

user && user.address && user.address.postcode

由于 和 都是 falsy 值(请参阅此参考),因此只有在先例不为 null 或未定义的情况下,才能访问运算符后面的属性。nullundefined&&

或者,您可以编写如下函数:

function _try(func, fallbackValue) {
    try {
        var value = func();
        return (value === null || value === undefined) ? fallbackValue : value;
    } catch (e) {
        return fallbackValue;
    }
}

用法:

_try(() => user.address.postcode) // return postcode or undefined 

或者,使用回退值:

_try(() => user.address.postcode, "none") // return postcode or a custom string