【问题标题】:Difference between conditionals条件之间的区别
【发布时间】:2010-11-09 17:11:34
【问题描述】:

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

if ( !object ) 

if ( object == null )

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

我确定这两个不能互换使用,或者是吗?

谢谢。

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    实际上效果是一样的,所以我猜你可以说它们是可以互换的。

    在布尔上下文(例如条件)中,表达式被评估为真或假。

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

    • 0
    • NaN
    • “”(空字符串)
    • 未定义
    • 无效

    其他一切都为真。

    对用户定义的类实例的引用可以为空或非空。

    所以,在这种情况下:

    if ( object == null )
    

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

    在其他情况下:

    if ( !object )
    

    如果objectnull,则表达式object 的计算结果为假。如果是null,则表达式为假。由于这反过来又被否定了,所以最终值将是真的,因此条件将被满足。因此,就像第一种情况一样,如果object 为空,则满足条件。和第一种情况一样,如果object 不为空,则不满足条件。

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

    【讨论】:

      【解决方案2】:

      首先是进行布尔比较。如果对象为假,则 not(!) 操作将使条件为真,如果对象的值不是假,则语句将失败。

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

      这些可以互换的原因是各种语言允许在 0、false、null(或“\0”)和其他具有相似含义的值之间进行一些等价。

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

      【讨论】:

      • 还要记住变量可以是undefined。这可能会导致一个令人困惑的情况,其中var != NULL 并不一定意味着您有一个有效的指针。您可以使用var != 'undefined'(或类似的东西)进行检查
      • 在这种情况下, object 是已知类型,因此 undefined 不应该适用。 AFAIK 仅使用无类型变量或尝试访问不存在的变量将获得“未定义”值。
      【解决方案3】:

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

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

      【讨论】:

      • 等等,如果它与对象不同是什么意思?与它被比较的对象是什么?至少 (object == null) 指定它必须是相等的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2017-11-01
      相关资源
      最近更新 更多