我在as3中新增了很多新的功能,並且我帶了一個doublet,這個陳述'if''bellow,也這麼想嗎?diff if語句
public function get products(a:Object){
if(a){
// smtg
}
if(null!=a){
// smtg
}
}
我在as3中新增了很多新的功能,並且我帶了一個doublet,這個陳述'if''bellow,也這麼想嗎?diff if語句
public function get products(a:Object){
if(a){
// smtg
}
if(null!=a){
// smtg
}
}
不,他們是不一樣的。雖然它們在許多情況下表現相似,但有很大的區別,第一種方法評估值,而第二種方法只檢查值是否爲空。
你可以看到這個例子的區別:
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
// ...
計算結果爲假會產生不同的結果,所有值。
請注意,對象a
可能不爲空,但仍然爲false
,因此if (a)
和if(a != null)
可能會產生不同的結果。
if (a)
不同於if (a != null)
。
後者只檢查a
和null
之間的等同性;前者將a
轉換爲Boolean
,然後檢查結果是否爲true
。
前者基本上是:
if (Boolean(a))
...
什麼時候a
轉化爲Boolean
發生取決於a
的類型。你可以找到這裏的規則(見「轉換爲Boolean」):
在我的測試,我發現if (a)
是快兩倍爲if (a != null)
,即使a
是一個對象,不是字符串或數字。
你的問題是否他們做同樣的事情?或爲什麼他們做同樣的事情? – Taurayi 2011-02-01 22:53:57
他們做同樣的比較嗎? – 2011-02-01 22:57:33