我正在使用一些现有的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;
}
答案 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)
使用(结果OP 使用var
关键字,错误消失。var
关键字。)
使用逗号运算符将两个单独的赋值滚动到一个表达式中,如下所示:
k = 0, i = -1;
在JavaScript中是合法的。不过,它不被认为是好的风格。只需使用分号作为语句分隔符:
k = 0; i = -1;
逗号运算符,根据MDN:
如果要在需要单个表达式的位置包含多个表达式,可以使用逗号运算符。
你的情况不合适。巧妙地使用语言功能被认为是有害的。尽量不要在代码高尔夫比赛之外做一些聪明的事情。
答案 2 :(得分:-2)
你应该这样做:
k = 0;
i = -1;