【发布时间】: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 所说,您应该将其发布为代码块,而不考虑图像。这样我们就可以在我们的系统上对其进行测试
-
里面一定藏着一些奇怪的不可见字符。如果您删除了开关的所有文本,然后(道歉)从头开始重新输入,我怀疑您会解决问题。或者,如果您可以访问
vi或vim,它们非常擅长突出显示奇怪的字符。 -
确实,即使没有 SSCCE,复制和粘贴实际代码已经解决了过去在 SO 上的其他人的这个问题,因为违规字符(如果这是发生的事情)经常出现保存。
标签: javascript switch-statement