簡體   English   中英

JSHint - 期望一個條件表達式,而不是看到一個賦值

[英]JSHint -Expected a conditional expression and instead saw an assignment

我很清楚類似的問題,但我仍然無法根據這些問題解決我的問題。

所以,我的代碼如下所示:

for (var e, i = 0; e = formErrors[i]; i += 1)

JSHint 在字符 39 中返回所述錯誤,因此使用; formErrors[i] 我能做什么?

JSHint 警告你一個潛在的錯誤。 預計for語句的第二部分將是一個布爾表達式。 通常,您會為此使用比較運算符之一( =====!=>等)。 由於表達式是e = formErrors[i]它看起來可能是一個錯誤,可能是由於缺少等號。 這是一個常見的錯字,會導致很多錯誤。

顯然,在這種情況下,它不是錯誤,而是有意使用任何表達式的計算結果為某物,並且賦值表達式計算為指定值的事實:

 var x; alert(x = 1);

因此for語句實際上為e分配了一個新值,但也會將該值作為條件進行評估,如果需要,將其轉換為布爾值。

您可以重構您的代碼,使其既分配值使用滿足 JSHint 的強制轉換操作,並使代碼對讀者更加明顯:

for (var e, i = 0; !!(e = formErrors[i]); i += 1)

第二個! (直接在(e... ) 前面的那個導致轉換為布爾值,但也否定它,第一個!恢復這個否定。

這只是編寫循環的一種非常奇怪的方式。 JsHint 期望在那里有一個布爾表達式(“條件”),並判斷你的賦值是錯誤的,你實際上想要一個比較( ==而不是= )。

您應該做的是切換到以下常見的數組迭代習慣用法:

for (var i = 0; i < formErrors.length; i += 1) {
    var e = formErrors[i];
    …

(對於不包含虛假值的非稀疏formErrors數組,其工作方式與原始代碼相同。)

或者,如果您想編寫非慣用代碼,請轉儲 jshint :-)

e = formErrors[i] 是一個賦值,你不想要一個條件嗎? 在這種情況下,在 i=0 之后使用逗號,否則在分號之后放置一個條件。

好家伙! 你錯過了一兩個等號:

這個:

for (var e, i = 0; e == formErrors[i]; i += 1)

要么

for (var e, i = 0; e === formErrors[i]; i += 1)

雖然我認為'e'總是未定義,所以'for'將遍歷數組,而formErrors [i]是未定義的。

通常,for 循環中的中間元素是用於決定是否繼續循環的條件。 你在那里有一個任務,如果你想要一個條件,你應該使用e === formErrors[i] (或使用 double = ,但通常不推薦這樣做)。

賦值在技術上是可行的,因為 e 可以是例如某個對象 (true) 或 null (false)。 但這通常被認為是糟糕的編碼風格,並且不會產生非常可讀的代碼。

暫無
暫無

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

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