Actionscript 3 测试是否在ActionScript中定义了对象

Actionscript 3 测试是否在ActionScript中定义了对象,actionscript-3,actionscript,actionscript-2,Actionscript 3,Actionscript,Actionscript 2,在ActionScript中,如何测试对象是否已定义,即不为null?只需针对null进行测试即可 var someObj:Object = getSomeObjectOrMaybeNull(); if(someObj == null) { trace("someObj is null!"); } else { trace("someObj is not null!"); } 测试是否定义了对象 这适用于AS2和AS3,是测试对象是否有值的最可靠方法 if (obj != null)

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

只需针对null进行测试即可

var someObj:Object = getSomeObjectOrMaybeNull();
if(someObj == null) {
  trace("someObj is null!");
} else {
  trace("someObj is not null!");
}
测试是否定义了对象

这适用于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);
}

您还可以循环父对象,查看它是否包含您正在查找的对象的任何实例

foundit=false;
for (var i in this) {
    if (this[i]._name == "MyMovie") {
         foundit=true;
    }
}
因为,如果你想要的只是一个关于虚无的通用测试,那么它非常简单:

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)
是最可读的版本


此方法使用到布尔值的隐式转换,也称为布尔强制,以及哪些值将强制为false以及哪些值将强制为true和true的详细信息。

您的意思是我的代码库中的所有if(obj==null | | obj==undefined)语句都可以压缩?呜!:)你能把“如果(obj)”扔进去吗?布尔强制是如何工作的?这可能已经死了,但在谷歌上搜索actionscript checing null时,它已经进入了这个页面。我有一个mx:html控件,在HtmlDominInitialize上,我像这样获取文档:doc:Object=myMxHTML.domWindow.document;然后doc.head==null计算为false,即使跟踪(doc.head)显示为null。doc不为空,因为在文档中它不能为空。@HMR您可能想问一个关于您具体情况的新问题。听起来好像发生了一些不寻常的事情,但我对ActionScript了解不够,不知道它是什么。嗨,Matthew,我也不知道应该发生什么。当搜索checkingnull时,这个页面会显示nr2,所以我想确保它仍然是最新的。没有做太多的测试,但是跟踪notNullVar.nullOrNotExisting给了我null,其中notNullVar.nullOrNotExisting==null等于false。我可以问一个新问题,但我敢打赌,当谷歌搜索这个问题时,很多人都会来到这里,如果这里的答案不起作用,他们可能会感到失望。这在AS1、AS2和AS3中的作用完全相同吗?我本以为我会尝试一下,但这确实有效,而且我觉得它看起来也不错。我也喜欢它,它使代码更具可读性,使重构更容易;如果(e)跟踪(e)Eeek!这个代码可以更干净<代码>变量a=未定义,b=空,c=5,d@TheWobbuffet为什么停在那里?代码可以清除为只包含
跟踪(5)
。但是,这和你的建议一样,会破坏代码的目的,代码的目的是尽可能清楚地说明布尔强制是如何工作的。:)这是非常糟糕的做法,循环只是为了找出某个对象是否为null