Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当有一个“时,我可以使用三元运算符吗?”;return";从条件来看?_Javascript - Fatal编程技术网

Javascript 当有一个“时,我可以使用三元运算符吗?”;return";从条件来看?

Javascript 当有一个“时,我可以使用三元运算符吗?”;return";从条件来看?,javascript,Javascript,我正在尝试调用一个过程,以转到另一个状态并获得此返回。以前我是这样编码的: if (self.word && row.wordId == self.word.wordId) { return this.$state.go('r.s.s.a.w.w.edit', { subjectId: self.sus.subject.id, wordId: row.wordId }); } else

我正在尝试调用一个过程,以转到另一个状态并获得此返回。以前我是这样编码的:

    if (self.word && row.wordId == self.word.wordId) {
        return this.$state.go('r.s.s.a.w.w.edit', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    } else {
        return this.$state.go('r.s.s.a.w.w', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    }
   return self.word && row.wordId == self.word.wordId
        ? self.$state.go('r.s.s.a.w.w.edit', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        })
        : self.$state.go('r.s.s.a.w.w', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    }
现在我将其编码如下:

    if (self.word && row.wordId == self.word.wordId) {
        return this.$state.go('r.s.s.a.w.w.edit', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    } else {
        return this.$state.go('r.s.s.a.w.w', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    }
   return self.word && row.wordId == self.word.wordId
        ? self.$state.go('r.s.s.a.w.w.edit', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        })
        : self.$state.go('r.s.s.a.w.w', {
            subjectId: self.sus.subject.id,
            wordId: row.wordId
        });
    }

是否有人可以确认这是一种有效的方法,或者我应该在self之前返回。$state.go?

看起来您缺少一些括号:

(self.word && row.wordId == self.word.wordId)
    ? return this.$state.go('r.s.s.a.w.w.edit', {
        subjectId: self.sus.subject.id,
        wordId: row.wordId
        })
    : return this.$state.go('r.s.s.a.w.w', {
        subjectId: self.sus.subject.id,
        wordId: row.wordId
    });
但我知道你为什么要这么做?这会降低代码的可读性。 你不需要它。您可以删除“else”:


函数返回“if”,因此不需要其他函数。

据我所知,您的示例是相同的。然而,我更喜欢第一个的可读性

在您的具体情况下(不是作为一般解决方案),我可能会这样写:

var whereNext = self.word && row.wordId == self.word.wordId
  ? 'r.s.s.a.w.w.edit'
  : 'r.s.s.a.w.w';

return this.$state.go(whereNext, {
  subjectId: self.sus.subject.id,
  wordId: row.wordId
});
甚至

var edit = self.word && row.wordId == self.word.wordId ? '.edit' : '';

return this.$state.go('r.s.s.a.w.w' + edit, {
  subjectId: self.sus.subject.id,
  wordId: row.wordId
});

“括号”是不必要的,但是您的第二个示例更易于阅读。我认为您以前的代码很容易阅读和理解。那么为什么是三元呢?当然你可以试一下。在大多数情况下,三元只用于为同一个变量分配两个不同的值(例如:if(boolean)?true:false),特别是对于一行条件。像您这样转换“复杂”if条件(在许多行上)是不太可读的。喜欢阿马丹建议的另一种方法。