禁用或至少检测自动分号插入

Has*_*own 9 javascript syntax

我总是编写strict mode希望被屏蔽(或至少被强制告知要更改我的代码)与Javascript语言的问题,如使用弃用的方法或错误解释的语法.

但是我今天遇到了这个问题,我想知道是否有任何方法可以在浏览器中禁用分号插入,或者是否有类似于严格模式的'编译'时错误?

JS [H/L] int似乎没有能够接受JS解释器插入分号并标记它们以便我们减轻它的位置吗?


编辑

如果在关键字后面找到分号之前存在新行,则JShintJSLint都会出错return.但是,我不知道有关自动插入的其他警告以及它们是否也被检测到.
无论如何,如果答案实际上解决了"禁用"部分,那将更具相关性.

mic*_*nic 1

关键字后面的表达式return必须始终与关键字在同一行开始,这与解释器无关,它是由 ECMAScript 标准定义的,这是语言的一个不好的部分,但如果您尊重 Douglas 描述的编写 JS 代码的规则克罗克福德,那么你就不会再遇到这种事了。

来自 Douglas Crockford 的《JavaScript:好部分》(附录 A.3 糟糕的部分):

JavaScript 有一种机制,可以通过自动插入分号来尝试纠正错误的程序。不要依赖于此。它可以掩盖更严重的错误。

有时它会在不受欢迎的地方插入分号。考虑在 return 语句上插入分号的后果。如果 return 语句返回一个值,则该值表达式必须与 return 位于同一行:

return
{
    status: true
};
Run Code Online (Sandbox Code Playgroud)

这似乎返回一个包含状态成员的对象。不幸的是,分号插入将其变成返回未定义的语句。没有任何警告表明分号插入导致了程序的误解。如果将 { 放在上一行的末尾而不是下一行的开头,则可以避免该问题:

return {
    status: true
};
Run Code Online (Sandbox Code Playgroud)

另请参阅 Douglas Crockford 的 JavaScript 代码约定:http://javascript.crockford.com/code.html

  • 看起来禁用可能要求太多,但我很乐意简单地检测插入,即从编译器获取报告,告诉我它做了什么。我太愚蠢了,无法编写始终遵循 ECMAScript 标准或 Crockford 标准的代码 - 甚至有人知道我有时会在同一天犯拼写错误和语法错误。对于这种愚蠢的行为,我需要一个自动化的过程,而不是另一个人告诉我要调整。 (8认同)
  • 我知道发生了什么事,我想阻止它。我不是“依赖”插入,它阻碍了我。再说一遍,问题的重点不是关于“返回”问题,这只是引起我注意的问题,它还会插入其他我想根除的东西 (3认同)
  • 这并不是问题的真正答案,只是“你做错了”,这没有帮助 (3认同)