我在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