“使用严格”是不是已过时?

Posted

技术标签:

【中文标题】“使用严格”是不是已过时?【英文标题】:Is "Bad Line Breaking" obsolete with "use strict"?“使用严格”是否已过时? 【发布时间】:2013-02-02 15:51:00 【问题描述】:

请假设“使用严格”;并且还假设,JSLint 是开启的并且错误不能被忽略。

我发现运算符和 ',' 启动的列表更具可读性,

例如:

var i = 0
    , j = 1
    , someLongVariablename1
    , someLongVariablename2
    , someLongVariablename3
    , someLongVariablename4;

 if( (
     'dcr' === cmd
      && (action)
      && ('get' === actionHttp || 'post' === actionHttp )
      && whatever
   )  ... 

因此我的问题是: “使用严格”是否已过时?

已编辑:'使用严格';不会阻止坏行代码的执行。它可以防止某些类型的错误的执行。

我看到 JSLint 和 JSHint 对待坏换行的方式不同。 JSHint 对我喜欢的语法更加友好。

因此,对于正在研究此问题的其他人来说,这可能是一个解决方案。

【问题讨论】:

【参考方案1】:

不幸的是,strict mode 并没有禁用 automatic semicolon insertion 的恐怖,因此“坏”换行符仍然是一个问题。例如:

(function() 
  "use strict";

  console.log(foo());

  function foo() 
    var a = 1, b = 2;

    return
    a + b;
  
)();

Live Example | Source(需要打开控制台查看)

这仍然会记录 undefined 而不是 3,因为 ASI 会启动并在 foo 中的 return 之后添加一个分号。

【讨论】:

我们在 JSLint 中使用了非常严格的设置。你写的代码是一个完整的 JSLint 反模式,因为 JSLint 给出了三个错误: * expected ; error * 无法访问的代码错误 我编辑了问题:我假设严格使用 JSLint,因此如果出现 JSLint 错误,则不会继续执行。但是,这确实使问题复杂化了……最初是一个简单的问题,而您的答案是正确的。我标记你的答案是正确的。

以上是关于“使用严格”是不是已过时?的主要内容,如果未能解决你的问题,请参考以下文章

xibs 是不是被认为已过时?

内核 4.x 中的 dnotify 是不是已过时?

Google Analytics Phonegap 插件已过时且无法正常工作

Alter Index Organize 是不是会导致统计数据过时?

StringBuffer 已过时?

variantOutput.getPackageApplication() 已过时