2011-05-26 87 views
2

我在今天的代碼看到這個和我也是震驚的是,它不會產生錯誤爲什麼這不會錯誤?

if($('.MyClass')) 
{ 
    // do stuff here 
} 

所以這是一個if語句內的jQuery選擇。根據螢火蟲,如果沒有找到選擇器,它將返回null。如果發現它會返回dom對象。

因此,從我可以告訴它總是進入if語句,但我更加震驚,它不會錯誤。

如果在C#中試圖只在if語句中有一個對象或null,我認爲它不會編譯。

我期待至少有一個錯誤出現在螢火蟲中。

+1

每次調用'jQuery'(至少有一個選擇器)都會返回一個jQuery對象。對象總是評估爲「真」。不要忘記JavaScript是動態輸入的。在這種情況下,你有一個語法錯誤*編輯:不再是*。 – 2011-05-26 15:56:51

+0

我在chrome中出錯:我得到'Uncaught SyntaxError:意外的令牌。' – hunter 2011-05-26 15:57:21

+0

正是......你不能用'.'開始一個變量名稱。 – hunter 2011-05-26 15:58:33

回答

3

它沒有錯誤,因爲(我假設,當然,你輸錯了你的問題,你必須在你的類名像if($('.MyClass'))引號):

if(null){ 
    // Do something 
} 

是有效的語法在JavaScript(儘管它可能無法達到你期望的效果)。

JavaScript將嘗試將null轉換爲布爾值。當這種轉換髮生時,JavaScript指定演員應該返回false

+0

我得到'意外的令牌'。'' – hunter 2011-05-26 15:56:20

+0

@hunter - 這是因爲OP代碼無效。我在回答中假設他們忘記輸入引號。 – 2011-05-26 15:59:25

+0

OP改變了他的問題......沒關係......至少我沒有瘋狂,至少在這種情況下 – hunter 2011-05-26 15:59:43

2

我會更擔心有關報價:

if($('.MyClass')) 
{ 
    // do stuff here 
} 

如果THAT的話,那麼這將是完全有效的。在JavaScript中(我認爲),什麼是不0nullfalsetrue,這意味着如果它存在的jQuery對象將評估爲true,並null(計算結果爲false),如果它沒有。

+0

我得到了'Unexpected token'。''這是有道理的,因爲我不認爲你可以啓動一個變量名用'.' – hunter 2011-05-26 15:56:43

+0

報價有什麼問題? – chobo2 2011-05-26 15:56:58

+0

@ chobo2:他們錯過了。 – 2011-05-26 15:57:26

0

您的問題的代碼會產生語法錯誤。

也許你的意思是

if($('.MyClass')) 
{ 
    // do stuff here 
} 

通知周圍的.MyClass引號)

這工作,因爲jQuery的,如果沒有選擇匹配返回一個空的對象。但對象沒有少..這樣的,如果代碼總是會被執行..

有用的語法將

if($('.MyClass').length) 
{ 
    // do stuff here 
} 
+0

是錯別字固定。 – chobo2 2011-05-26 16:00:25

0

JavaScript並不是C#。

if (X) {}(其中X評估爲null)是完全有效的語法。

而且沒關係,因爲選擇器永遠不會是null。這是一個對象,對象始終評估爲true

這一切都說,我期望從 if ($(.MyClass))地獄和酷刑,因爲它不是 if ($('.MyClass'))

+0

@Tomalak Geret'kal - 所以如果它沒有找到任何匹配的東西,它仍會返回一個對象是什麼原因? So null == true? – chobo2 2011-05-26 16:00:03

+0

@ chobo2:'null'與__沒有任何關係。選擇器是一個對象。它包含一個空的節點集合是一個內部屬性,它不會影響對象本身的動態類型。它不像一些低級C鏈接列表指針。 :) – 2011-05-26 16:00:48

+2

@chobo:不,它不會返回null。它返回一個對象。你在哪裏讀到'null'被返回? – 2011-05-26 16:00:53