忽略JSHint中的驼峰变量命名规则。

66

我在使用JShint时遇到了一些问题,与下面这行代码有关。

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

我遇到了这个错误:Identifier 'default_venue' is not in camel case. 通常情况下这不是一个问题,但是我无法控制变量名 - 它是通过 JSON API 引入的。

是否有任何方法可以为受影响的变量或出现它们的行抑制此问题?

如果此问题以前曾经被问过,我很抱歉,我很确定一定有,但我找不到解决方案。

5个回答

130

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

/*jshint camelcase: true */

var not_camel_case = 1; // Warns

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

5
这是一个很好的答案,但实际上并不可扩展。如果你从API获取的所有内容都包含下划线,那么你不会在使用这些数据的每个地方都添加这个注释。我已经认识到一个事实,即如果你的API没有使用驼峰命名法,那么在前端代码中试图强制执行它是不值得的。 - jackocnr
1
@jackocnr - 如果你需要处理很多来自某处的下划线属性名称,那么就没有办法区分它们和你在自己的代码中定义的属性名称。除非修补JSHint以允许“下划线允许”的标识符列表,否则没有其他方法可以解决这个问题。 - James Allardice

19
根据JSHint文档,你可以在同一个目录下创建一个名为.jshintrc的配置文件,或者在任何目录中一直到根目录。我只是使用以下设置来设置我的:
  {
    "camelcase": false
  }

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


1
如果您想在每行代码中都包含它,那么这很好。我只是想在需要覆盖它的一行上使用它。请参阅已接受的答案以了解如何执行此操作。 - Sam Beckham

4

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

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

虽然有点啰嗦,但你可以将所有来自API的属性名称分组在一起,这样更容易应对API的变化。


-1

被接受的答案/*jshint camelcase: true */对我没有起作用。我仍然得到错误。

我看了文档并找到了对我有用的解决方案:

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

2
这个问题涉及到jsHint,而你的答案是关于esLint的。它们是不同的东西,但都有类似的作用。尽管你的答案对于esLint是正确的。 - Sam Beckham
正如上面的用户所述,这个答案是关于 ESLint 而不是 JSHint - lacy

-6

试试这样的东西...虽然很邪恶,但它会起作用。

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

10
不,请不要那样做!那不是从对象获取属性的高效方式,为了编码标准而牺牲性能通常是个坏主意。 - callumacrae
1
我同意,这会影响性能。但是当你为开源项目做贡献时,你可能不得不遵守编码标准。 - inchikutty
这只是为了规避代码检查吗?如果是这样,为什么不直接使用 jsonArray['array_element']?无论哪种方式,都不要这样做。 - Aaronius
1
@Aaronius 有趣的是,如果您尝试将属性作为字符串访问,jshint会在这些情况下发出警告,声称“最好使用点运算符访问”。 - WickyNilliams
一个代码检查器的目的是使代码更易读,但这并不一定达到了该目的。虽然这个解决方案很巧妙,但有点过于聪明。 - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接