views:

5035

answers:

4

In actionscript, how can you test if an object is defined, i.e., not null?

+2  A: 

Just test it against null.

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

test if an object is defined

This works in AS2 and AS3, and is the most reliable way to test if an object has a value.

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

Its also the most reliable way to test an object's property and read it in the same expression:

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

test if an object is null

There's a difference between null and undefined, but if you don't care you can just do a normal comparison between either one because they compare equal:

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

is the same as

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

If you care about the difference, use the === or !== operator, which won't convert them.

if (obj === undefined) {
    // obj was never assigned a value
}
else if (obj === null) {
    // obj was explicitly set to null
}
else {
    doSomethingWith(obj);
}
Matthew Crumley
You mean all those if(obj == null || obj == undefined) statements in my codebase can be condensed? woo! :)
Herms
Could you throw "if (obj)" in there? How does boolean coercion work?
bzlm
A: 

You could also loop through a parent object to see if it contains any instances of the object you're looking for.

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

For AS3, if all you want is a generic test for nothingness, then it's very easy:

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

In the example above, only c will trace. This is usually what I need, and just checking if (obj) is the most readable version.

bzlm
I thought I would have tried that, but this indeed works, and I think it looks nice too.
Matt Shanley
I like it too, it makes the code more readable and makes refactoring easier.
bzlm
Good point. Included in the accepted answer. Thanks.
Jenko