【问题标题】:JS - Evaluation with function within switch-caseJS - 在 switch-case 中使用函数进行评估
【发布时间】:2018-10-16 14:02:38
【问题描述】:

我有 ID 为 alternative1alternative2 等的对象。我想以相同的方式设置所有这些对象的样式,所以我正在尝试:

    switch (feature.id) {
      case 'marker':
           ...
        break;
      case feature.id.includes('alternative'):
      case 'connectionMarker':
        ... //add styling
        break;

这似乎不起作用。我怎么能这样做?

【问题讨论】:

  • 当布尔值与开关中的字符串不匹配时,使用带有大小写的布尔值是零意义的。我认为你需要重新考虑你的方法。似乎使用开关是错误的。
  • swich 使用Identity/strict equality operator ===。这意味着您需要将 true 作为 switch 值并检查比较结果,或者采取其他方法。
  • 该函数调用产生一个布尔结果,所以就好像你写了case truecase false
  • document.querySelectorAll("[id^=alternative]").forEach(function() { this.classList.add("alter"); }); 或者只是 css:[id^=alternative] { color:red }

标签: javascript switch-statement


【解决方案1】:

你可以使用一个简单的技巧:

switch (feature.id) {
  case 'marker':
    ...
    break;
  case (feature.id.includes('alternative') ? feature.id : !feature.id):
    // your code here
    break;
  case 'connectionMarker':
    ...
    break;
}

由于feature.id 始终是一个字符串值,!feature.id 将始终返回 false。因此,如果feature.id 包含“替代”这一行:

case (feature.id.includes('alternative') ? feature.id : !feature.id):

变成:

case feature.id:

这将永远是这种情况(如feature.id === feature.id)。否则,该行的计算结果为:

case 0:

解释器会跳过。

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多