如何正确检查Javascript / MeteorJS中函数返回的子属性

时间:2016-01-02 16:41:56

标签: javascript meteor

在我的代码中,我正在检查if (Meteor.user().profile.something.someAttribute) {。但是,如果Meteor用户未登录(即,调用Meteor.user()失败),则会引发TypeError。我认为这会更优雅地失败,因为if语句会看到然后不执行。但是,它会抛出错误,然后搞砸我的应用程序。我通过

修复了它
if(Meteor.user()) {
  if (Meteor.user().profile.something.someAttribute) {

但这看起来并不优雅。有没有更好的方法来做到这一点,或者我对Javascript有一些基本的误解?

2 个答案:

答案 0 :(得分:2)

当用户未登录时,Meteor.user()返回nullstated in the documentation并尝试访问profile null失败。检查返回值是唯一的方法,但你可以更优雅地写它:

let user = Meteor.user();
if (user && user.profile.something.someAttribute) { … }

答案 1 :(得分:1)

这真的是一个javascript问题,而不是流星问题。它也是一种非常常见的模式。你可能会发现这个解决方案更优雅:

if (Meteor.user() 
    && Meteor.user().profile.something.someAttribute) {

但除非你想编写辅助函数,否则没有真正的方法,例如:

function check(object) {
    if (argument.length == 0) {
        return object;
    } else if (object) {
        return check(object[arguments[0]], arguments.slice(1));
    } else {
        return undefined;
    }
}

然后使用

if (check(Meteor.user(), "profile", "something", "someAttribute")) {

这将继续小心并在请求子潜艇之前检查每个子对象的未定义。