Javascript ES6即使对象为空/未定义,也无错误地访问对象属性

Javascript ES6即使对象为空/未定义,也无错误地访问对象属性,javascript,ecmascript-6,Javascript,Ecmascript 6,在ruby中,有一个漂亮的方法被调用,它允许访问对象属性/方法而不冒出错的风险 例如 有没有办法在ES6中优雅地实现这种语法 现在,我一直在写丑陋的: if (object && object.key && object.key.subkey) { return object.key.subkey } 谢谢我使用lodash。获取: e、 g 非常方便。。如果对象不存在,则返回默认值,例如null 它非常适合深度嵌套的对象 e、 g 以及lodash文档中

在ruby中,有一个漂亮的方法被调用,它允许访问对象属性/方法而不冒出错的风险

例如

有没有办法在ES6中优雅地实现这种语法

现在,我一直在写丑陋的:

if (object && object.key && object.key.subkey) {
  return object.key.subkey
}
谢谢

我使用lodash。获取:

e、 g

非常方便。。如果对象不存在,则返回默认值,例如null

它非常适合深度嵌套的对象

e、 g

以及lodash文档中的一些示例:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'

Try
确实存在于ES6中,但有点不同。它需要捕获,但是,我们可以让捕获不做任何事情,这是不建议的

constobj={hello:'world'};
//控制台日志也是如此
试试{console.log(obj.hello)}catch(e){}
//失败了,什么也不做

试试{console.log(nil.hello)}catch(e){}
Yes!应该有一个本机实现。另外,我不太喜欢字符串路径描述(
a.b.c.d
)。最好有另一个操作数,比如
object~key~subkey
。是的,我认为这个很好,应该在本地实现。自从ES6以来,我发现自己使用的lodash越来越少,因为我们现在已经有了所有的好东西,比如地图过滤器、还原等等。但是u.get和u.has函数在遍历对象树时非常有用。
_.get(object, 'property', null);
_.get(object, 'a.b.c.d', 'default');
var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// => 3

_.get(object, ['a', '0', 'b', 'c']);
// => 3

_.get(object, 'a.b.c', 'default');
// => 'default'