2011-05-20 22 views
5

Java script tiene muchos valores Falsy como empecé a aprender. Tengo un programa que obtiene los valores de un servicio y cargas en una matriz de esta manera:Javascript inicializan a indefinido o nulo o ""

function loadNames() { 
    Global.names = // what should I use here? undefined, null, "", 0, {} or anything else 
    var lnames = getLNames(); // this is doing some magic 
     if (lnames.length !== 0) { 
      Global.names = new Array(); 
      for (var i = 0; i < lnames.length; ++i) 
       Global.names[i] = lnames[i]; 
    } 
} 

Quiero saber la manera correcta de restablecer Global.names. ¿Qué es más apropiado aquí? En el código I solo quiero marcar como if (Global.names)

PD: No puedo simplemente tomar el valor de retorno en Global.names ya que el objeto devuelto se destruye más tarde. Por lo tanto, tengo que hacer una copia profunda

Gracias

Respuesta

11

Tomado de JavaScript: las partes buenas:..

"La sentencia if cambia el flujo del programa basado en el valor de la expresión El entonces bloque se ejecuta si la expresión es Truthy Aquí son los valores Falsy :

  • falsa

  • nula

  • indefinido

  • la cadena vacía ''

  • el número 0

  • el número NaN "

Así que, básicamente, si configura su var a cualquiera de esos valores, que' ll ser capaz de hacer un if (var) {...}

0

lo establece a null es bueno, ya sabes que la variable existe pero no se le ha asignado un valor. De esta manera usted puede ver fácilmente el estado - si es undefined continuación, se le ha olvidado a declarar que, si es null se ha declarado, pero nunca le asigna un valor, y si se trata de una Array entonces usted puede probar la longitud de allí.

+3

Esto no es correcto. Si el valor es 'nulo', se le ha asignado un valor (el valor 'nulo'). Si no le asigna nada, será 'undefined'. El lenguaje nunca le asigna 'null' implícitamente. – fearofawhackplanet

+0

En realidad, sí, tienes razón, lo que realmente quise decir es que se le ha asignado un valor de "falsy" que es poco probable que se confunda más tarde con un valor válido como '[]'. –

+0

Sí, estoy de acuerdo con su enfoque – fearofawhackplanet

1

Usted no tiene que inicializar con nada. Se puede hacer:

if (!Global.names) Global.names = []; 
// add members to Global.names 

Este puede ser uno en una declaración:

Global.names = Global.names : []; 

Si desea restablecerla, entonces:

Global.names = []; 

o

delete Global.names; 
+0

Si bien es un gran ejemplo de inicialización de una variable con una declaración ternaria, no creo que responda del todo la pregunta del OP, ya que explícitamente está tratando de borrar el valor de 'Global.names', mientras que su código no cambiará su valor. –

5

Creo que deberías iniciar GLobal.names = []; y que simplemente comprobar si Global.names.length != 0. Si desea restablecerlo, simplemente vuelva a hacer una matriz vacía.

3

Creo que sería mejor para inicializar como una matriz y prueba como

if (Global.names.length) 

Además, si sólo almacenar cadenas de la matriz puede simplificar la función como

function loadNames() { 
    Global.names = getLNames().concat(); 
} 
Cuestiones relacionadas