【发布时间】:2010-11-09 17:11:34
【问题描述】:
只是想知道是否有人可以解释这两个条件之间的区别:
if ( !object )
if ( object == null )
where object is an instance of a user-defined class.
我确定这两个不能互换使用,或者是吗?
谢谢。
【问题讨论】:
标签: actionscript-3
只是想知道是否有人可以解释这两个条件之间的区别:
if ( !object )
if ( object == null )
where object is an instance of a user-defined class.
我确定这两个不能互换使用,或者是吗?
谢谢。
【问题讨论】:
标签: actionscript-3
实际上效果是一样的,所以我猜你可以说它们是可以互换的。
在布尔上下文(例如条件)中,表达式被评估为真或假。
在 Actionscript 3.0 中,以下值的计算结果为 false:
其他一切都为真。
对用户定义的类实例的引用可以为空或非空。
所以,在这种情况下:
if ( object == null )
显然,只有当 object 为 null 时才满足条件。
在其他情况下:
if ( !object )
如果object 是null,则表达式object 的计算结果为假。如果是null,则表达式为假。由于这反过来又被否定了,所以最终值将是真的,因此条件将被满足。因此,就像第一种情况一样,如果object 为空,则满足条件。和第一种情况一样,如果object 不为空,则不满足条件。
如果您的变量被键入到用户定义的类,则没有其他选择;这样的变量只能包含有效的引用或空值;即它不能在布尔上下文中保存任何可评估为 false 的值,但 null 除外;所以,再次,它要么为空,要么不为空。这就是为什么两个代码示例具有相同效果的原因。
【讨论】:
首先是进行布尔比较。如果对象为假,则 not(!) 操作将使条件为真,如果对象的值不是假,则语句将失败。
第二个条件是评估对象是否具有 null 值。
这些可以互换的原因是各种语言允许在 0、false、null(或“\0”)和其他具有相似含义的值之间进行一些等价。
我不知道 actionscript,但测试 false、null、0 等的等价性,或阅读有关布尔值的文档,会有一些好处。
【讨论】:
undefined。这可能会导致一个令人困惑的情况,其中var != NULL 并不一定意味着您有一个有效的指针。您可以使用var != 'undefined'(或类似的东西)进行检查
当然不是 :) 第一个意味着命题只有在与对象不同时才为真; 只有当对象等于 null 时,第二个才为真。
“!”意思是“不是对象” "==" 表示对象的值必须等于符号右侧的值
【讨论】: