2011-02-01 227 views
4

我在as3中新增了很多新的功能,並且我帶了一個doublet,這個陳述'if''bellow,也這麼想嗎?diff if語句

public function get products(a:Object){ 
    if(a){ 
    // smtg 
    } 
    if(null!=a){ 
    // smtg 
    } 
} 
+0

你的問題是否他們做同樣的事情?或爲什麼他們做同樣的事情? – Taurayi 2011-02-01 22:53:57

+0

他們做同樣的比較嗎? – 2011-02-01 22:57:33

回答

5

不,他們是不一樣的。雖然它們在許多情況下表現相似,但有很大的區別,第一種方法評估值,而第二種方法只檢查值是否爲空。

你可以看到這個例子的區別:

function test (a:Object):void 
{ 
    if (a) 
     trace("A"); 
    if (a != null) 
     trace("B"); 
} 

test(false); // B 
test(""); // B 
test(0); // B 
test(true); // A & B 
// ... 

計算結果爲會產生不同的結果,所有值。

0

請注意,對象a可能不爲空,但仍然爲false,因此if (a)if(a != null)可能會產生不同的結果。

0

if (a)不同於if (a != null)

後者只檢查anull之間的等同性;前者將a轉換爲Boolean,然後檢查結果是否爲true

前者基本上是:

if (Boolean(a)) 
    ... 

什麼時候a轉化爲Boolean發生取決於a的類型。你可以找到這裏的規則(見「轉換爲Boolean」):

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f87.html

在我的測試,我發現if (a)快兩倍if (a != null),即使a是一個對象,不是字符串或數字。