2011-07-18 23 views
0

我完全不知道爲什麼這不起作用。對我沒有意義。如果條件在JavaScript中不能使多個?

這將返回一個 「語法錯誤:解析錯誤」:

if ($(this).attr("id") === 'search' || opening = true) return false; 

良好的措施,我也試過以下,取得了同樣的結果:

if (1 = 1 && 2 = 2) { return false; } 
+0

有沒有更多的代碼?因爲在這裏它不會做任何錯誤的事情,除了開放的分配。 –

+0

@Igois:你爲什麼需要更多的代碼?你可以很清楚地看到,這裏的問題是使用一個等號來確定一個語句中的等號。 –

回答

10

有在打三個不同的運營商:

  • =:分配
  • ==:平等
  • ===:全等

=實際修改一個變量,所以你不應該在裏面使用它if聲明。也就是說,您應該使用... || opening == true)而不是... || opening = true)

+1

請注意,在if條件中使用'='是(通常認爲)不好的做法,但仍然是完全有效的JS。問題中的代碼給出錯誤的原因是因爲運算符優先級導致表達式被評估爲'($(this).attr(「id」)==='search'|| opening)= true',當然第一部分'($(this).attr(「id」)==='search'|| opening)'不是一個變量,所以它不能被賦值。 – nnnnnn

7

在JavaScript =用於分配值,而=====用於比較它們。

當你把opening = true在你的if語句,你不檢查,如果openingtrue,要設置openingtrue。改爲使用==

例如,

var x = 5; 
if (x == 10) { 
    alert("x is 10"); 
} else { 
    alert("x isn't 10"); 
} 

會顯示 「x不是10」,而

var x = 5; 
if (x = 10) { 
    alert("x is 10"); 
} else { 
    alert("x isn't 10"); 
} 

會顯示 「x爲10」。

+0

第二個錯誤是因爲你不能給'1'賦值,因爲它不是一個有效的變量名。 '2'一樣。 –

1

您的病情錯誤

if ($(this).attr("id") === 'search' || opening = true) return false; 

應該

if ($(this).attr("id") === 'search' || opening == true) return false; 

問題是等號

=是不同的,以==

的第一個是賦值運算符。第二個是比較

1

第一示例應爲:

if ($(this).attr("id") === 'search' || opening == true) return false; 

和第二:

if (1 == 1 && 2 == 2) { return false; } 

注雙等於(==)符號爲邏輯等於是不一樣的單個等於(=)符號,它處理變量賦值。

0

當您測試是這樣的:

opening=true; 

你真正做的是設置openingtrue的價值是什麼。改爲使用==

最後,即使正確,操作順序也會變得混亂。將括號放在比較的每個部分周圍。

if (($(this).attr("id") === 'search') || (opening == true)) return false; 
-4

我的猜測是===不存在。 ==是測試平等

所以if ($(this).attr("id") === 'search' || opening == true) return false; 應該if ($(this).attr("id") == 'search' || opening == true) return false;

+3

'==='比較值**和**類型。它絕對是一個有效的運營商。 – Brad