这些JS条件语句在功能上是否相同?

时间:2017-06-29 16:06:51

标签: javascript if-statement ternary-operator

关于条件if / else语句,以下示例在功能上是等效的吗?

function isEntering() {
    if (this.stage === 'entering') {
        return true;
    } else {
        return false;
    }
}

function isEntering() {
    if (this.stage === 'entering') {
        return true;
    } return false;
}

function isEntering() {
    if (this.stage === 'entering') {
        return true;
    } 
}

isEntering = (this.stage === 'entering') ? true : false;

如果是这样,我会使用最简洁的选项。但只有这四者在功能上是等价的。

3 个答案:

答案 0 :(得分:4)

如果expr是一个布尔表达式,就像在这里一样,那么就没有必要写

if (expr) return true;
else return false;

或写

if (expr) x = true;
else x = false;

或永远写

expr ? true : false

因为是一个布尔表达式,expr可以直接返回或分配:

return expr;

x = expr;

最简洁的选择是你没有给出的选择:

function isEntering() { return this.stage === 'entering'; }

答案 1 :(得分:1)

它们并非完全等同。 前两个是等价的,但是:

function isEntering() {
    if (this.stage === 'entering') {
        return true;
    } 
}

如果undefined,则会返回this.stage !== 'entering'

此外:

isEntering = (this.stage === 'entering') ? true : false;

没有将功能定义为其他示例。

如上所述,您可以添加:

isEntering = () => this.stage === 'entering';

如果您不需要功能,可以使用:

isEntering = this.stage === 'entering'

答案 2 :(得分:-1)

1,2和4的结果将是相同的。 但是3可以返回undefined和 对于最佳实践,您可以使用第4个