2011-02-01 180 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是一个对象,不是字符串或数字。