JSHint期望对多个赋值进行赋值或函数调用

时间:2014-10-30 16:34:12

标签: javascript jslint jshint

我正在使用一些现有的JavaScript,我收到了以下错误消息Expected an assignment or function call and instead saw an expression.

var k, i;
k = 0, i = -1;

分配似乎是正确发生的,所以这有什么问题导致了lint警告?


为了更大的图景;如果它有用,这就是函数的开头是什么导致这一点。

var subgroups = {},
    groupSums = [],
    groupIndex = d3.range(n),
    subgroupIndex = [],
    k,
    x,
    x0,
    i,
    j;

chords = [];
groups = [];

// Compute the sum.
k = 0, i = -1; while (++i < n) {
  x = 0, j = -1; while (++j < n) {
    x += matrix[i][j];
  }
  groupSums.push(x);
  subgroupIndex.push(d3.range(n));
  k += x;
}

3 个答案:

答案 0 :(得分:5)

逗号运算符创建表达式。它是一个运算符,用于评估左侧和右侧的两个事物,然后将右侧的值作为其值。即使逗号分隔的内容是赋值,JS仍然将逗号运算符视为创建表达式。

JSLint和JSHint不喜欢只是坐在那里做任何事情的表情,比如

0 !== 1;

对于短信,

k = 0, i = 1;

是一个孤独的表达,没有做任何事情。

在您的特定情况下,可能更容易做到

for (k = 0, i = -1; ++i < n; ) {

并完成它,虽然我亲自写了

for (k = 0, i = 0; i < n; i++) {

正如您可能已经知道的那样,您可以将其关闭(JSHint的示例):

/*jshint -W030*/
/*jshint expr:true*/

答案 1 :(得分:2)

使用var关键字,错误消失。(结果OP 使用var关键字。)

使用逗号运算符将两个单独的赋值滚动到一个表达式中,如下所示:

k = 0, i = -1;

在JavaScript中是合法的。不过,它不被认为是好的风格。只需使用分号作为语句分隔符:

k = 0; i = -1;

逗号运算符,根据MDN:

  

如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符。

你的情况不合适。巧妙地使用语言功能被认为是有害的。尽量不要在代码高尔夫比赛之外做一些聪明的事情。

答案 2 :(得分:-2)

你应该这样做:

k = 0;
i = -1;