2010-11-12 26 views
16

我使用JSLint,以確保我的JavaScript是「嚴謹」,我得到了以下錯誤:JavaScript:錯誤 - 「期望賦值或函數調用,而是看到一個表達式」?

Expected an assignment or function call and instead saw an expression

在下面的代碼:

(my_var > 0) ? $("#abc").html(my_array.join('')) : $("#abc").html('<h2>Hello ' + persons_name); 

任何想法,爲什麼我得到這樣的一個錯誤?此外,我使用上面的代碼中看到的jQuery,以防萬一。

回答

14

我的猜測是JSLint會因爲使用三元運算符而不高興,而且你沒有對值做任何事情。將其重構爲等價物:

if (my_var > 0) { 
    $("#abc").html(my_array.join('')); 
} else { 
    $("#abc").html('<h2>Hello ' + persons_name); 
} 

將消除該錯誤。如果由於某種原因你真的連接到使用三元運算符,「正確」的方式來使用它會是:

$("#abc").html((my_var > 0) ? my_array.join('') : '<h2>Hello ' + persons_name); 
+0

我希望有一個放鬆的選擇使用按位&&作爲布爾類型檢查 – SimplGy 2012-11-05 22:31:39

8

我相信這是因爲三元運算符評估表達式並返回預期分配的值。例如:

var test = (my_var > 0) ? true : false; 

但是,您正在像使用常規的if/then/else語句那樣使用它。雖然三元運算符在if/then/else中執行,但它通常用於分配者。

編輯:作爲附錄:這句話對你有意義嗎?

var foo = 1; 
(my_var > 0) ? true : false; 
console.log('hello world'); 
2

您使用的單線的表達式(使用三元運算符是精確的表達式):您的線路被唯一的表達式的構成。

在很多語言中,這被認爲是不好的編程習慣,並且可以使用if語句重寫,以使該行更清晰。

0

只是問了同樣的Q沒有找到這一個出於某種原因...

三元返回一個沒有被使用的值,所以你通過不使用該值來濫用三元結構(即使函數調用是按照預期進行的)。

相關問題