【发布时间】:2010-09-22 17:59:59
【问题描述】:
在 ActionScript 中,如何测试一个对象是否已定义,即不为空?
【问题讨论】:
-
这在 AS1、AS2 和 AS3 中是否完全一样?
标签: actionscript-3 actionscript actionscript-2
在 ActionScript 中,如何测试一个对象是否已定义,即不为空?
【问题讨论】:
标签: actionscript-3 actionscript actionscript-2
只需针对 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;
}
}
【讨论】:
对于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;
trace(5)。但是,以及您的建议,这将违背代码的目的,即尽可能清楚地说明布尔强制是如何工作的。 :)