【问题标题】:"switch" statement only allows the first 2 "case" blocks - regardless of order: Why?“switch”语句只允许前 2 个“case”块——不管顺序:为什么?
【发布时间】:2014-02-24 05:28:21
【问题描述】:

我有一个简单的 Javascript switch 语句。我正在 Firefox 中调试它(使用 Firebug)。

Firebug 的 Javascript 调试器的一个好处是 Javascript 的有效行由绿色行号指示。

我遇到了一个非常奇怪的问题。

我的 Javascript 代码仅对 switch 语句中的前两个 case 块有效。我附上截图来证明case 块本身是有效的,因为当我将任何case 块放在前两个位置中的任何一个位置时,它们都会成功运行。

这是case 块的#1:

特别是,请注意,绿色的行号停止在第三个块的开头。这不仅仅是一个视觉问题。当我使用调试器并到达第三个块时,Javascript dies。当到达前两个case 块时,代码运行成功。

这是case 块的#2 顺序 - 除了块的顺序之外相同:

请注意,唯一的区别是case 块的顺序。这一次,前两个case 块成功执行(到达时) - 包括case在第一个屏幕截图中失败的块。但是当到达第三个case 块时,Javascript(即使它在第一个屏幕截图中显示的位置成功)。

这是case 块的第三个顺序 - 但你明白了:

在这种情况下也是如此。第三个 case 块导致 Javascript 死掉只是因为它不在前两个位置之一

尽管我想质疑我的理智,但必须有一个解释。救命!

【问题讨论】:

  • 第一步是replicate it with a minimal, self-contained test case。当你这样做时,你不仅可能会弄明白,而且如果你不这样做,你可以分享一些东西,其他人可以尝试帮助你弄明白。
  • 确实如此,而且我通常会这样做。我希望有一些明显的东西,所以我首先发布了 - 偶尔连续 8 小时的编程会让人们希望节省时间。但如果我找不到答案,我会继续。
  • 正如 tj 所说,您应该将其发布为代码块,而不考虑图像。这样我们就可以在我们的系统上对其进行测试
  • 里面一定藏着一些奇怪的不可见字符。如果您删除了开关的所有文本,然后(道歉)从头开始重新输入,我怀疑您会解决问题。或者,如果您可以访问 vivim,它们非常擅长突出显示奇怪的字符。
  • 确实,即使没有 SSCCE,复制和粘贴实际代码已经解决了过去在 SO 上的其他人的这个问题,因为违规字符(如果这是发生的事情)经常出现保存。

标签: javascript switch-statement


【解决方案1】:

发生这种情况的通常原因是无法打印的字符已成功进入源代码。十几个类似 Unicode 空格的字符中的一个,等等。通常当在 SO 上提出这个问题时,这就是最终找到的答案。 (也就是说,问题通常表现为代码不工作根本,而不是你所描述的。)

如果您删除了开关的所有文本,然后(抱歉)从头开始重新输入,我怀疑您会解决问题。或者,如果您可以访问 vivim,它们非常擅长突出显示不寻常的字符。

【讨论】:

  • 这就是答案。一侧评论一文不值,以防你有想法:我将文本批发复制并粘贴到 UltraEdit 的 Hex 视图中,并没有发现特殊的隐藏字符。请注意,我的调试器与我的编辑器位于不同的机器上,并且我有一个同步应用程序 (Cubby) 自动同步,所以也许 it 添加了隐藏字符。
  • 非常非常奇怪的东西。 :-) 很高兴你把它整理好了,希望这(包括你上面的注释)能为其他人整理出来!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 2016-02-22
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
相关资源
最近更新 更多