在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
}
由于
答案 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)
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){}