diff if语句

时间:2011-02-01 22:21:05

标签: actionscript-3

我在as3中几乎是新手,我带来了一个双重声明,声明'如果'吼叫,做同样的想法?

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

3 个答案:

答案 0 :(得分: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
// ...

评估为 false 的所有值都会产生不同的结果。

答案 1 :(得分:0)

请注意,作为对象a的对象不能为空,但仍为false,因此if (a)if(a != null)可能会产生不同的结果。

答案 2 :(得分:0)

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

后者仅检查anull之间的相等性;前者将a转换为Boolean,然后检查结果是否为true

前者基本上是:

if (Boolean(a))
  ...

a转换为Boolean时会发生什么情况取决于a的类型。您可以在此处找到规则(请参阅“转换为布尔值”):

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

在我的测试中,我发现if (a) 的速度是if (a != null)的两倍,即使a是对象而不是字符串或一个数字。