【问题标题】:Calling a function inside a switch case在 switch case 中调用函数
【发布时间】:2021-02-20 08:25:21
【问题描述】:

我正在尝试将以下 if、else if、else 转换为 switch 语句。

    if(zipValue === "") {
    setErrorFor(zip, 'Please enter a zip code');
} else if (!isZip(zipValue)) {
    setErrorFor(zip, 'Not a valid Aust zip code');
} else {
    setSuccessFor(zip);
}

到目前为止我已经尝试过:

switch (zipValue) {
case "":
setErrorFor(zip, 'Please enter a zip code');
break;
case !isZip(zipValue): //can't get this working
setErrorFor(zip, 'Not a valid Aust zip code');
break;
default:
setSuccessFor(zip);
break;

}

函数 isZip 对正则表达式进行检查,如下所示:

function isZip(zip) {
 return /^[0-9]{4}$/.test(zip);
 }

原来的 if、else if、else 正在工作我只是想了解更多关于使用 switch 语句并让我的代码更简洁的信息。谢谢。

PS 发布后,我现在看到 switch 语句使用更多代码行的讽刺意味。

【问题讨论】:

  • switch 使用严格比较 (===) 将提供的表达式的值与 case 值进行比较,这里您在第一种情况下与字符串进行比较,在第二种情况下与布尔值进行比较,所以根据初始 zipValue 的类型,其中之一永远不会匹配。
  • 我可以尝试带条件链的三元。
  • 是的,您可以尝试三进制,其中返回一个值而不是布尔值,以便与开关中的 zipValue 进行比较。然后就可以了。
  • 我发现了这个关于使用菊花链三元组的信息:stackoverflow.com/a/49762262/12822663 我已经在我的程序中使用了一个三元组,如下所示:!terms.checked ? setErrorFor(terms, '请同意条款') : setSuccessFor(terms);
  • 您为什么要更改此代码?代码已经是清晰易读的形式。你好像是故意宰了它……为什么?

标签: javascript switch-statement


【解决方案1】:

!isZip(zipValue) 的 case 语句中的值总是会返回一个布尔值。我猜 zipValue 将永远是一个字符串。因此,该 case 语句将永远不会运行,因为您正在比较两种不同数据类型的两个值。因此,如果有人输入邮政编码,比如说 12345,那么当它到达那个案例块时,它将返回 false。而且12345不等于假

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2013-08-22
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    相关资源
    最近更新 更多