2011-07-28 19 views

Respuesta

17

que tiene (al menos) cuatro opciones:

  1. En muchos casos, puede utilizar the curiously-powerful || operator:

    x = obj.key || "default"; 
    

    Eso significa: Establecer x a obj.key menos obj.key es Falsy, en cuyo caso use "default" en su lugar. Los valores de falsy son undefined, null, 0, NaN, "" y, por supuesto, false. Por lo tanto, no querrá usarlo si obj.key puede ser válidamente 0 o cualquier otro de esos valores.

  2. Para situaciones en las || no es aplicable, no el operador in:

    x = "key" in obj ? obj.key : "default"; 
    

    in nos dice si un objeto tiene una propiedad con la clave dada. Tenga en cuenta que la clave es una cadena (los nombres de propiedad son cadenas o Símbolos, si estuviera utilizando un Símbolo, lo sabría). Por lo tanto, si obj.key puede ser válidamente 0, querrá usar esto en lugar del n. ° 1 anterior.

  3. in encontrará una clave si está en el objeto o cadena de prototipo del objeto (por ejemplo, todos los lugares que lo conseguiría si recupera a partir de la propiedad). Si lo que desea es comprobar el objeto en sí mismo y no su cadena de prototipo, puede utilizar hasOwnProperty:

    x = obj.hasOwnProperty("key") ? obj.key : "default"; 
    
  4. detectar específicamente el undefined:

    x = typeof obj.key !== "undefined" ? obj.key : "default"; 
    

    que utilizará el valor predeterminado si no lo hace obj tiene esa propiedad o si tiene la propiedad, pero el valor de la propiedad es undefined.

+0

Wow, nunca sabía esto. ¿Funciona esto también en otros idiomas (especialmente PHP)? Es realmente genial. – elslooo

+1

@Tim: No conozco PHP lo suficiente como para responder eso. En la mayoría de los lenguajes (C, C++, C#, Java), '||' solo devuelve 'true' o' false'. La versión de JavaScript es más interesante y más en el estilo de programación "funcional". (Por cierto, '&&' hace algo similar: le da la cosa de la derecha si la cosa de la izquierda es "sincera", o 'falsa 'si no lo es) –

+0

@TJCrowder, acabo de probarlo y no funciona en PHP :(... Gracias de todos modos =)! – elslooo

0

¿Qué hay de:

var d = {'hello':'abc'}; 
var helloVar = d.hello ? d.hello : 'default_val'; 
+0

FWIW, que funcionará exactamente como 'helloVar = d.hello || 'default_val'; ' –

+0

Sí, aunque' ... || ... 'es mucho más corto y más legible. Lástima que no funciona en otros idiomas, definitivamente me alegraría el día: p! – elslooo

Cuestiones relacionadas