JavaScript Switch语句-可以使用case值吗?

3
我想知道在执行代码块时,是否可以在JavaScript switch语句中使用类似于“this”的东西。
例如:
switch(x) {
    case 'The pyramids of Giza':
        console.log(this);
        break;
    case 'The Leaning Tower of Pisa':
        console.log(this);
        break;
    default:
        console.log('Not found');
}

等同于:

switch(x) {
    case 'The pyramids of Giza':
        console.log('The pyramids of Giza');
        break;
    case 'The Leaning Tower of Pisa':
        console.log('The Leaning Tower of Pisa');
        break;
    default:
        console.log('Not found');
}

这仅仅是为了提高效率而已,谢谢!


4
casebreak之间的代码中,只需使用变量x。更详细的解释即将呈现! - Noble Mushtak
谢谢您的快速回复,我刚刚发现自己是个白痴,因为如果它们是相同的值,我只需要使用 x - Domenic Corso
4个回答

15

switch 语句中,您可以访问要测试的变量。毕竟,如果 x 等于 "The pyramids of Giza",那么 x 必须也是您想要在该 case 中使用的值。

switch(x) {
    case 'The pyramids of Giza':
        console.log(x); // output: 'The pyramids of Giza'
        break;
    case 'The Leaning Tower of Pisa':
        console.log(x); // output: 'The Leaning Tower of Pisa'
        break;
    default:
        console.log('Not found');
}

3
有些事情如此简单,以至于我们忽视了它们! - Catalin Iancu
唯一的问题(除非我漏掉了什么)是如果我正在执行 switch(someCPUIntensiveFunction())。仍然相对明显的解决方案是在 switch 语句之前缓存 someCPUIntensiveFunction() 的结果,并基于此进行切换,但在我看来,避免额外的行会很好。 - Wowfunhappy
在我的情况下,我要切换的函数很可能根本不需要大量CPU计算——但是如果我能编写一种避免额外函数调用的方式,那就太好了。 - Wowfunhappy
@Wowfunhappy:是的,在计算代价高昂的情况下,缓存变量引用而不是重新计算是明智的选择。 - David Thomas

3
当您访问一个case:时,指定在case:中的值始终是放置在switch语句中的变量。这是因为只有当变量与首先在case:中指定的值相等时,才会访问case:,因此如果您已经访问了该case:,那么变量的值必须与case:中指定的值相同。因此,这就是您要查找的代码:
switch(x) {
    case 'The pyramids of Giza':
        console.log(x);
        break;
    case 'The Leaning Tower of Pisa':
        console.log(x);
        break;
    default:
         console.log('Not found');
}

1
switch(x) {
    case 'The pyramids of Giza':
        console.log(x);
        break;
    case 'The Leaning Tower of Pisa':
        console.log(x);
        break;
    default:
        console.log('Not Found');
}

应该就是这样了。

0
如果你要在HTML中返回值,可以这样写
switch(x) {
    case 'The pyramids of Giza':
        return `<button class="badge text-white">${x}</button>`
        break;

    case 'The Leaning Tower of Pisa':
        return `<button class="badge text-blue">${x}</button>`
        break;
    default:
        console.log('Not Found');
}


目前你的回答不够清晰,请[编辑]以添加更多细节,帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接