【问题标题】: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 对我喜欢的语法更加友好。

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

【问题讨论】:

    标签: javascript jslint use-strict


    【解决方案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 错误,则不会继续执行。但是,这确实使问题复杂化了……最初是一个简单的问题,而您的答案是正确的。我标记你的答案是正确的。
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2018-07-19
    相关资源
    最近更新 更多