交换机内部的表达式被调用多少次

问题描述 投票:0回答:1

给出如下switch语句:

switch(text.toLowerCase()) {
    case("aaa"):
        doSomething();
        return;
    case("bbb"):
        doSomething();
        return;
    case("ccc"):
        doSomething();
        return;
    default:
        return;
}

开关本身内部的表达式被调用多少次?

  • 在每次检查的情况下都将调用toLowerCase()(这将意味着最好将该表达式插入该开关之前,并在开关内使用该变量)

  • 还是会一次评估toLowerCase()并在所有情况下都使用最终表达式的值?

javascript switch-statement
1个回答
2
投票

switch语句中的表达式仅被调用一次。

if / else if语句相比(这是有效的方法,首先将结果分配给变量会更好)。[]

[如果您想对此绝对确定,则可以使用自己的toLowerCase()版本(出于测试目的而覆盖String.prototype)来自己进行测试:

var nbTime = 0;
var text = '';

String.prototype.toLowerCaseNbTime = function() {
    console.log(++nbTime)  // -> 1
    return this.toLowerCase();
}

switch(text.toLowerCaseNbTime()) {
    case("aaa"):
        doSomething();
        return;
    case("bbb"):
        doSomething();
        return;
    case("ccc"):
        doSomething();
        return;
    default:
        return;
}
© www.soinside.com 2019 - 2024. All rights reserved.