JavaScript:语法检查

JavaScript:语法检查,javascript,ide,syntax-error,Javascript,Ide,Syntax Error,编写JavaScript最让人恼火的部分可能是它如何在语法错误时悄无声息地崩溃。特别是缺少引号或大括号可能会毁掉整个脚本 结合使用'use strict'和window.onerror不难发现许多运行时错误 许多编码IDE提供某种语法检查,通常是通过jshint等插件 有没有办法让JavaScript报告自己的语法错误 或者,我很乐意推荐一个真正调试基于浏览器的JavaScript的IDE 编辑: JavaScript显然经历了一个解析阶段,语法错误显然导致了它。解析器本身是否以任何可捕获的方式

编写JavaScript最让人恼火的部分可能是它如何在语法错误时悄无声息地崩溃。特别是缺少引号或大括号可能会毁掉整个脚本

结合使用
'use strict'
window.onerror
不难发现许多运行时错误

许多编码IDE提供某种语法检查,通常是通过
jshint
等插件

有没有办法让JavaScript报告自己的语法错误

或者,我很乐意推荐一个真正调试基于浏览器的JavaScript的IDE

编辑:

JavaScript显然经历了一个解析阶段,语法错误显然导致了它。解析器本身是否以任何可捕获的方式报告错误

我知道第三方linter在这里很有用,但我想知道JavaScript本身是否提供了线索。

JavaScript在现代浏览器中不会因语法错误而“自动崩溃”(就这点而言,它甚至在旧浏览器上也没有)。打开开发工具(Ctrl+Shift+I和/或F12,或Mac上的Cmd+Shift+I)并查看控制台。它将向您显示语法错误,通常带有直接指向相关代码行的链接。这些开发工具还提供了功能齐全的调试器

JavaScript显然经历了一个解析阶段,语法错误显然导致了它。解析器本身是否以任何可捕获的方式报告错误


Yes-发送给它的调用者,调用者将在解析器运行的环境中,而不是您的代码中。根据规范,解析无效代码会导致语法错误。然后由该环境向您报告该错误。

有没有办法让JavaScript报告自己的语法错误?
这是一个多么美妙的想法!它太棒了,我刚刚回到过去实现了它,现在和之前,您将收到语法错误报告。尝试添加linter包,使用linter jshint。@vlaz非常有趣。JavaScript具有表示语法错误的
SyntaxError
对象(请参阅)。样本使用了
eval
,毫无疑问,一些聪明的智者会说这是邪恶的。关键是,也许有一种方法可以自己抓住这一点。我怀疑这是很多游戏机都采用的一种技术。我并不真正理解这个问题。除了抛出可捕获错误的运行时编译之外,在使用jshint解聚之前或在单元测试中已经可以检测到语法错误。将它们添加到部署步骤中,就不需要在浏览器中检测它们。那么,为什么要在浏览器的生产代码中检测它们?@t.niese我没有说我想要在浏览器的生产代码中出现错误。如果您在400行脚本的第3行缺少一个右大括号,那么整个过程都会失败。jsHint更担心缺少分号,单元测试甚至无法工作。如果您愿意,JavaScript确实会以静默方式失败,除非您在接收错误的环境中运行它。我使用Komodo Edit,以及其他许多工具,它使用jsHint查找这些错误,但这与查找基本错误不同。今天的浏览器做得很好,我经常使用它们,但它们几乎不是一个编码环境。请参阅我上面的编辑(当我完成它时)以获得澄清。@Manngo:恕我直言,但不,它没有。评估带有语法错误的脚本代码会根据规范引发一个
SyntaxError
。由环境来报告错误。好的,我明白你的意思:解析器报告错误,但是编码环境可能会也可能不会传递错误。浏览器在开发工具中不起作用。是这样吗?