2008-11-17 15 views

Respuesta

35

si un objeto se define

Esto funciona en AS2 y AS3, y es la forma más confiable para probar si un objeto tiene un valor.

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

su también la manera más confiable para probar la propiedad de un objeto y leerlo en la misma expresión:

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

prueba si un objeto es nulo

Hay una diferencia entre nulo e indefinido, pero si no te importa puedes hacer una comparación normal entre cualquiera de ellos porque pare iguales:

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

es lo mismo que

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

Si se preocupan por la diferencia, utilice el operador === == o, lo que no convertirlos!.

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

¿Quiere decir que todas esas declaraciones if (obj == null || obj == undefined) en mi base de código se pueden condensar? ¡cortejar! :) – Herms

+0

¿Podría arrojar "if (obj)" allí? ¿Cómo funciona la coerción booleana? – bzlm

+0

Probablemente esté muerto, pero llegó a esta página buscando en Google el checing nulo de actionscript. Tengo un control mx: html y en htmlDOMInitialize, tomo el documento de la siguiente manera: doc: Object = myMxHTML.domWindow.document; Entonces doc.head == null se evalúa como falso a pesar de que trace (doc.head) muestra null. doc no es nulo, como en la documentación no puede ser. – HMR

3

Simplemente pruébelo frente a nulo. prueba

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

También podría recorrer un objeto primario para ver si contiene alguna instancia del objeto que está buscando.

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

Esta es una práctica muy mala de bucle solo para descubrir si algún objeto es nulo –

8

Para ActionScript 3.0, si lo que quieres es una prueba genérica para la nada, entonces es muy fácil:

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); 

En el ejemplo anterior, sólo se va a rastrear c. Esto es generalmente lo que necesito, y simplemente verificando if (obj) es la versión más fácil de leer.

Este método utiliza la conversión implícita a un valor booleano, también conocido como coacción boolean, y los detalles de lo valores se coaccionan a falso y qué valores se coaccionar a la verdadera follow ECMA standards y son también documented specifically for ActionScript.

+0

Pensé que habría intentado eso, pero esto de hecho funciona, y creo que se ve bien también. –

+0

Me gusta también, hace que el código sea más legible y facilita la refactorización. – bzlm

+0

Buen punto. Incluido en la respuesta aceptada. Gracias. –

Cuestiones relacionadas