条件之间的差异

时间:2010-11-09 17:11:35

标签: actionscript-3

只是想知道是否有人可以解释这两个条件之间的区别:

if ( !object ) 

if ( object == null )

where object is an instance of a user-defined class.

我确定这两个不能以可互换的方式使用,或者是它们?

感谢。

3 个答案:

答案 0 :(得分:7)

效果在实践中是相同的,所以我想你可以说它们是可以互换的。

在布尔上下文(例如条件)中,表达式被计算为true或false。

在Actionscript 3.0中,以下值的计算结果为false:

  • 0
  • 的NaN
  • “”(空字符串)
  • 未定义
  • 空隙

其他一切评估为真。

对用户定义的类实例的引用可以为null或不为null。

所以,在这种情况下:

if ( object == null )

显然,只有当object为null时才满足条件。

在另一个案例中:

if ( !object )

如果objectobject,则表达式null将评估为false。如果是null,则表达式为false。由于这反过来被否定,最终值将为真,因此将满足条件。因此,就像第一种情况一样,如果object为null,则满足条件。和第一种情况一样,如果object不为空,则不满足条件。

如果您的变量是键入用户定义的类,则没有其他选项;这样的变量只能包含有效的引用或null;即,除了null之外,它不能在布尔上下文中保存任何可评估为false的值;所以,再次,它是null或非null 。这就是为什么两个代码示例具有相同的效果。

答案 1 :(得分:1)

第一个是进行布尔比较。如果对象为false,则not(!)操作将使条件成立,如果对象的值不是false,则语句将失败。

第二个条件是评估对象是否具有null值。

这些可以互换的原因是各种语言允许0,false,null(或“\ 0”)和其他类似含义值之间的某种等价。

我不知道actionscript,但是测试false,null,0等等,或者读布尔值的文档,会有一些好处。

答案 2 :(得分:0)

当然不是:) 第一个意味着只有与对象不同,命题才是真的; 仅当对象等于null时,第二个才为真。

“!”意思是“不是对象” “==”表示对象的值必须等于符号右侧的值