簡體   English   中英

JSHint期望一個分配或函數調用以進行多個分配

[英]JSHint expected an assignment or function call for multiple assignment

我正在整理一些現有的JavaScript,但收到錯誤消息“ Expected an assignment or function call and instead saw an expression. 對於以下。

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

分配似乎正確進行,那么導致棉絨警告的問題出在哪里呢?


大局觀 如果有幫助的話,這就是函數開始的樣子。

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM