2008-09-18 5 views

Respuesta

37

Si se trata de un objeto a continuación, sólo debe ser capaz de comprobar para ver si es o nullundefined y luego cargarlo si lo es.

if (myObject === null || myObject === undefined) { 
    myObject = loadObject(); 
} 

Uso de la función typeof es también una opción, ya que devuelve el tipo del objeto proporcionado. Sin embargo, devolverá null or undefined si el objeto no se ha cargado, por lo que podría reducirse un poco a la preferencia personal en lo que respecta a la legibilidad.

+1

No es una prueba como si (myObject == null) (o undefined) suficiente, ya que ese es precisamente el punto de la simple igualdad? ¿O me falta algo? – PhiLho

+0

@PhiLho: según el tipo de objeto, el objeto podría ser nulo o no estar definido. JavaScript los trata como dos cosas diferentes. – rjzii

+7

@Rob @PhiLho Esto: 'x == null' es equivalente a esto:' x === null || x === undefined' (bajo la condición de que la variable global 'undefined' no se haya modificado). Por lo tanto, en lugar de su expresión, simplemente puede escribir 'myObject == null'. No solo es más pequeño, sino también más robusto, ya que es indiferente a las asignaciones a la variable 'undefined'. –

1

typeof(obj) volvería "objeto" de un objeto de una clase entre otros valores posibles.

27
if(typeof(o) != 'object') o = loadObject(); 
+9

Recuerde que typeof devuelve "objeto" para valores nulos, por lo que probablemente desee algo como [if (null! == x && 'object' == typeof (x)) {] –

3

No estoy seguro de lo que quiere decir con "cargado" ... ¿existe la variable object y simplemente no tiene el tipo que desea? En ese caso, usted querrá algo como:

function isObjectType(obj, type) { 
    return !!(obj && type && type.prototype && obj.constructor == type.prototype.constructor); 
} 

y luego usar if (isObjectType(object, MyType)) { object = loadObject(); }.

Si object no se llena con nada antes de la prueba (es decir, - typeof object === 'undefined') entonces sólo tiene:

if ('undefined' === typeof object) { object = loadObject(); } 
3

es probable que desee para ver si un objeto dado es definido

Especialmente si se hace en un hilo asíncrono con un setTimeout para comprobar cuándo aparece.

var generate = function() 
    { 
     window.foo = {}; 
    }; 
    var i = 0; 
    var detect = function() 
    { 
    if(typeof window.foo == "undefined") 
    { 
      alert("Created!"); 
      clearInterval(i); 
    } 
    }; 
    setTimeout(generate, 15000); 
    i = setInterval(detect, 100); 

debería en teoría detectar cuando window.foo entra en existencia.

2

Si desea detectar un objeto personalizado:

// craete a custom object 
function MyObject(){ 

} 

// check if it's the right kind of object 
if(!(object instanceof MyObject)){ 
    object = new MyObject(); 
} 
2

Usted también puede utilizar un acceso directo if(obj)

3

Si por carga te refieres definido, se puede comprobar el tipo de la variable con el typeof función. Sin embargo typeof tiene algunas peculiaridades, e identificará un objeto, una matriz y un nulocomo un objeto

alert(typeof(null)); 

La identificación de un nulo como un objeto definido probablemente haría que el programa falle, a fin de comprobar con algo como

if(null !== x && 'object' == typeof(x)){ 
    alert("Hey, It's an object or an array; good enough!"); 
} 
4
myObject = myObject || loadObject(); 
1
if (!("someVar" in window)) { 
    someVar = loadObject(); 
} 

le indicará si cualquier JS ha asignado previamente a la globa l someVar o declarado un nivel superior var someVar.

Eso funcionará incluso si el valor cargado es undefined.

Cuestiones relacionadas