即使object为null / undefined,ES6访问对象属性也没有错误

时间:2018-03-26 10:04:41

标签: javascript ecmascript-6

在ruby中,有一个名为.try的漂亮方法,它允许访问对象属性/方法而不会有出错的风险。

例如

{hello: 'world'}.try(:[], :hello) # 'world'
nil.try(:[], :hello) # nil (no error)

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

我使用lodash _.get:

https://lodash.com/docs/4.17.5#get

e.g。

_.get(object, 'property', null);

非常方便..如果对象不存在则会回退到默认值,例如空。

对于深层嵌套的对象,这非常好。

e.g。

_.get(object, 'a.b.c.d', 'default');

来自lodash docs的一些例子:

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'

答案 1 :(得分:1)

ES6确实存在

Try,但它有点不同。它需要一个捕获,但是,我们可以让捕获无所事事,这是不建议的。



const obj = {hello: 'world'};

//passes so does the console log
try{console.log(obj.hello)} catch(e){}
//fails so does nothing
try{console.log(nil.hello)} catch(e){}