【问题标题】:Ignore camelcase variable in JSHint忽略 JSHint 中的驼峰式变量
【发布时间】:2013-10-18 11:20:42
【问题描述】:

JShint 和以下代码行有点问题。

$location.path('map-' + map.id + '/venue-' + map.attributes.default_venue.value);

我收到了错误,Identifier 'default_venue' is not in camel case. 这通常不会成为问题,但我无法控制变量名称 - 它是通过 JSON API 引入的。

我有什么办法可以针对受影响的变量或它们出现的行抑制此问题?

抱歉,如果以前有人问过这个问题,我很确定一定是这样,但我找不到解决方案。

【问题讨论】:

    标签: javascript coding-style jshint code-cleanup


    【解决方案1】:

    JSHint 在函数级别遵循指令,因此您可以找到封闭函数并向其添加 camelcase 选项。这是一个例子:

    /*jshint camelcase: true */
    
    var not_camel_case = 1; // Warns
    
    function example() {
      /*jshint camelcase: false */
      var not_camel_case = 2; // Does not warn
    }
    

    【讨论】:

    • 这是一个很好的答案,但不是真正可扩展的。如果您从 API 获取的所有内容都包含下划线,那么您不会在使用该数据的每个地方都添加此注释。我已经接受了这样一个事实,即如果您的 API 不使用驼峰式大小写,那么尝试在您的前端代码中强制执行它是不值得的。
    • @jackocnr - 是的,如果您必须从某个地方处理大量带下划线的属性名称,则无法区分它们与您在自己的代码中定义的属性名称。除了修补 JSHint 以允许“允许下划线”标识符列表之外,实际上没有办法解决这个问题。
    【解决方案2】:

    根据JSHint Docs,您可以在名为.jshintrc 的同一目录中创建一个配置文件,或者在任何目录中一直到您的根目录。我只是用这个设置我的:

      {
        "camelcase": false
      }
    

    这里还有很多其他选项:http://jshint.com/docs/options/#camelcase

    【讨论】:

    • 如果你想在每一行代码中都包含它,这很好。我只是想要它用于我需要覆盖它的一行。请参阅接受的答案以了解如何执行此操作。
    【解决方案3】:

    我将来自 api 的属性名称放在单独的字符串中。例如:

    var defaultVenueAttributeKey = 'default_venue';
    $location.path('map-' + map.id + '/venue-' + map.attributes[defaultVenueAttributeKey].value);
    

    它有点冗长,但您可以将来自 API 的所有属性名称组合在一起,这样可以更轻松地响应 API 更改。

    【讨论】:

      【解决方案4】:

      接受的答案/*jshint camelcase: true */ 对我不起作用。我仍然收到错误。

      我查看了docs,发现这个解决方案对我有用:

      /*eslint camelcase: ["error", {properties: "never"}]*/
      

      【讨论】:

      • 这个问题是关于 jsHint 的,你的答案是关于 esLint 的。它们是用于类似目的的不同事物。虽然你的答案是 esLint 的正确答案。
      • 正如上述用户所说,这个答案是关于 ESLint 而不是 JSHint
      【解决方案5】:

      试试这样的东西。虽然很糟糕,但它会起作用。

      var foo;
      $.each( jsonArray, function ( i, value ) {
          if ( i === 'array_element' ) {
              foo = value;
          }
      });
      

      【讨论】:

      • 不,请不要那样做!这不是从对象中获取属性的有效方法,而且以编码标准的名义牺牲性能通常是一个坏主意。
      • 我同意,这会影响性能。但是当你为开源项目做贡献时,你可能不得不屈服于编码标准。
      • 这只是为了避免掉毛吗?如果是这样,为什么不直接做 jsonArray['array_element']?无论哪种方式,不......只是不要。
      • @Aaronius 有趣的是,如果您尝试将属性作为字符串访问,jshint 在这些情况下会抱怨,并声称“使用点运算符会更好地访问”
      • linter 的目的是使代码更具可读性,除此之外,这确实没有。聪明的解决方案,但它有点太聪明了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2013-09-29
      相关资源
      最近更新 更多