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;
}

逗号运算符创建表达式。这是一个运算符,它计算左边和右边的两个值,然后得出右边的值。即使用逗号分隔的东西是赋值,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*/

使用var关键字,错误就会消失(原来OP确实使用了var关键字。)

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

k = 0, i = -1;

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

k = 0; i = -1;

逗号运算符,根据MDN:

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

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

您应该这样做:

k = 0;
i = -1;

最新更新