我正在遍历一些现有的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*/
使用(原来OP确实使用了var
关键字,错误就会消失var
关键字。)
使用逗号运算符将两个单独的赋值滚动到一个表达式中,如下所示:
k = 0, i = -1;
在JavaScript中合法可行。不过,这并不被认为是好风格。只需使用分号作为语句分隔符:
k = 0; i = -1;
逗号运算符,根据MDN:
如果希望在需要单个表达式的位置包含多个表达式,则可以使用逗号运算符。
你的情况不符合要求。巧妙地使用语言特征被认为是有害的。尽量不要在代码高尔夫比赛之外做一些聪明的事情。
您应该这样做:
k = 0;
i = -1;