2011-02-01 7 views
4

私はas3でかなり新しく、私はダブレットが付いています。diff ifステートメント

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

あなたは同じことをするかどうか質問ですか?なぜ彼らは同じことをしますか? – Taurayi

+0

彼らは同じ比較をしますか? –

答えて

5

いいえ、それらは同じではありません。彼らは多くの場合同様の動作をしますが、最初のメソッドは値を評価し、2番目のメソッドは値がnullでないかどうかをチェックするという大きな違いがあります。

あなたはこの例で違いを見ることができます:

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

本当にクール,,,! –

+0

+1レッスンに感謝します。知っておいてよかった。 – TheDarkIn1978

0

オブジェクトがaであることはnullでなくてもよいが、falseなので、if (a)if(a != null)は異なる結果をもたらす可能性があることに注意してください。

0

if (a)は、if (a != null)とは異なります。

後者は、anullの間の同等性のみをチェックします。前者はaBooleanに変換し、結果がtrueであるかどうかを確認します。

前者は基本的に次のとおりです。

if (Boolean(a)) 
    ... 

aBooleanに変換されたときに何が起こるaの種類によって異なります。あなたが(「ブールへのキャスト」を参照)、ここでのルールを見つけることができます:私のテストでは

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

私はaがオブジェクトである場合でも、if (a)倍の速度としてif (a != null)であることを発見したと文字列や数字ではありません。