【问题标题】:Test if an object is defined in ActionScript测试对象是否在 ActionScript 中定义
【发布时间】:2010-09-22 17:59:59
【问题描述】:

在 ActionScript 中,如何测试一个对象是否已定义,即不为空?

【问题讨论】:

  • 这在 AS1、AS2 和 AS3 中是否完全一样?

标签: actionscript-3 actionscript actionscript-2


【解决方案1】:

只需针对 null 测试它。

var someObj:Object = getSomeObjectOrMaybeNull();
if(someObj == null) {
  trace("someObj is null!");
} else {
  trace("someObj is not null!");
}

【讨论】:

    【解决方案2】:

    测试是否定义了对象

    这适用于 AS2 和 AS3,是测试对象是否具有值的最可靠方法。

    if (obj != null) {
        doSomethingWith(obj);
    }
    

    它也是测试对象属性并以相同表达式读取它的最可靠方法:

    if (arr[0] != null && arr[0]>5) {
        doSomethingWith(arr[0]);
    }
    

    测试一个对象是否为空

    null 和 undefined 之间是有区别的,但如果您不在乎,您可以在两者之间进行正常比较,因为它们比较相等:

    if (obj == null) {
        doSomethingWith(obj);
    }
    

    相同
    if (obj == undefined) {
        doSomethingWith(obj);
    }
    

    如果您关心差异,请使用 === 或 !== 运算符,它们不会转换它们。

    if (obj === undefined) {
        // obj was never assigned a value
    }
    else if (obj === null) {
        // obj was explicitly set to null
    }
    else {
        doSomethingWith(obj);
    }
    

    【讨论】:

    • 您的意思是我的代码库中的所有 if(obj == null || obj == undefined) 语句都可以压缩?呜! :)
    • 你能把“if (obj)”扔进去吗?布尔强制是如何工作的?
    • 这可能已经死了,但到了这个页面谷歌搜索 actionscript checing null。我有一个 mx:html 控件,在 htmlDOMInitialize 上我像这样获取文档: doc:Object = myMxHTML.domWindow.document;然后 doc.head==null 评估为 false 即使 trace(doc.head) 显示为空。 doc 不为空,因为在文档中它不能为空。
    • @HMR 您可能想提出一个关于您的具体情况的新问题。听起来好像发生了一些不寻常的事情,但我对 ActionScript 的了解还不够,无法知道它是什么。
    • 嗨,马修,我也不知道会发生什么。在搜索检查 null 时,这个页面会出现 nr2,所以我想确保它仍然是最新的。没有做太多测试,但跟踪 notNullVar.nullOrNotExisting 给了我 null 其中 notNullVar.nullOrNotExisting==null 等于 false。可以提出一个新问题,但我敢打赌,很多人在谷歌搜索时会来到这里,如果这里的答案不起作用,可能会感到失望。
    【解决方案3】:

    您还可以遍历父对象以查看它是否包含您要查找的对象的任何实例。

    foundit=false;
    for (var i in this) {
        if (this[i]._name == "MyMovie") {
             foundit=true;
        }
    }
    

    【讨论】:

    • 这是一个非常糟糕的做法,循环只是为了找出某个对象是否为空
    【解决方案4】:

    对于ActionScript 3.0,如果你想要的只是对nothingness的通用测试,那么这很容易:

    var a;
    var b;
    var c;
    var d;
    a = undefined;
    b = null;
    c = 5;
    if (a) 
        trace(a);
    if (b) 
        trace(b);
    if (c) // Will trace
        trace(c); 
    if (d) 
        trace(d);
    

    在上面的例子中,只有c 会被追踪。这通常是我需要的,只检查if (obj) 是最易读的版本。

    此方法使用隐式转换为布尔值,也称为boolean coercion,详细说明了哪些值将强制为false,哪些值将强制为truefollow ECMA standards和@ 987654323@.

    【讨论】:

    • 我以为我会尝试这样做,但这确实有效,而且我认为它看起来也不错。
    • 我也喜欢它,它使代码更具可读性,并且使重构更容易。
    • 注意,e = 0; if (e) trace(e);
    • 哎呀!这段代码可以非常更干净! var a = undefined, b = null, c = 5, d;
    • @TheWobbuffet 为什么停在那里?可以将代码清理为仅包含trace(5)。但是,以及您的建议,这将违背代码的目的,即尽可能清楚地说明布尔强制是如何工作的。 :)
    猜你喜欢
    • 2012-11-05
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多