2012-09-21 15 views
16

que parecen estar usando esta prueba muchoprueba de Javascript (objeto && objeto! == "nulo" && objeto! == "indefinido")

if(object && object !== "null" && object !== "undefined"){ 
    doSomething(); 
} 

en objects regrese de una visita de servicio o desde la lectura de las cookies (dado que los diferentes navegadores devuelven los diferentes valores null, undefined, "null", o "undefined").

¿Hay alguna manera más fácil/más eficiente de hacer este control?

+3

Si en realidad puede tener los valores de cadena '" nulo "' y '" undefined "', entonces su método no puede ser más simple. –

+0

A veces tiene las cadenas '" nulo "' o '" undefined "'. Gracias por la confirmación. –

+0

También puede usar '!!' como 'if (!! myobj) {doSomething();}' para verificar el objeto. Convierte el objeto en booleano y luego lo invierte de nuevo. Mira [esto] (http://stackoverflow.com/a/10597474) responde para una muy buena explicación. –

Respuesta

23

No creo que usted puede hacer que cualquier simple, pero que sin duda podría refactorizar que la lógica en una función:

function isRealValue(obj) 
{ 
return obj && obj !== 'null' && obj !== 'undefined'; 
} 

Entonces, al menos su código se convierte en:

if (isRealValue(yourObject)) 
{ 
doSomething(); 
} 
+0

Me gusta su respuesta porque es reutilizable y ** muy ** legible. Sin embargo, acabo de encontrar una manera muy simple de hacer el cheque real. –

1

tal como esto

if (typeof object !== "undefined" || object !== null) 
    // do something 
+0

'object' es [no una palabra reservada] (http://es5.github.com/#x7.6.1.1). –

+0

@JamesAllardice. usted tiene derecho. Eliminé el comentario –

+0

Esto no es equivalente a la función original ¿verdad? Él está específicamente buscando una cadena con el valor de "nulo". Ver: http://jsfiddle.net/7eYKN/ – aquinas

4

Si object es Truthy, que ya sabemos que no es null o undefined (suponiendo que los valores de cadena son un error). Supongo que se necesita una prueba que no sea null y no undefined.

Si es así, una comparación simple a null o undefined es comparar != null.

if(object != null){ 
    doSomething(); 
} 

La función doSomething se ejecutará sólo si object es ni null ni undefined.

+0

No: "A veces tiene las cadenas" nula "o" indefinida "." Esto no funcionará si el valor tiene una cadena REAL en él: http://jsfiddle.net/7eYKN/1/ – aquinas

+0

@aquinas: vi ese comentario en la pregunta, pero no tuve suficiente representante para responder. La pregunta sería entonces qué significa "a veces". Creo que el asker nos está dando un código impresionista en lugar de la representación real del código. Sí, una persona a veces puede querer compararla con la cadena '' nulo '', pero ese no es un escenario común, pero es más común ver la cadena ''' undefined '' debido a' typeof foo === '' undefined ''. '. Entonces mi respuesta trata de llegar al centro de lo que generalmente se busca, ya que la pregunta no parece representar ningún ejemplo común en el mundo real. – scatter

+0

@aquinas: si tuviera más representantes, también comentaría que el código de SnakeEyes siempre dará un resultado 'verdadero'. – scatter

10

Si tiene jquery, podría usar $ .isEmptyObject().

$.isEmptyObject(null) 
$.isEmptyObject(undefined) 
var obj = {} 
$.isEmptyObject(obj) 

Todas estas llamadas serán verdaderas. Espero que ayude

+2

No conteste preguntas de JavaScript con jQuery. jQuery no es compatible con JavaScript, cambia constantemente las cosas publicadas, ahorra 1KB aquí o allá al descargar 70KB en el cliente cuando su navegador ya puede manejar * real * JavaScript y tiene un rendimiento horrible en comparación con saber programar de manera competente . – John

2
if(!!object){ 
    doSomething(); 
}