2012-06-28 40 views
10

Esto no tiene sentido para mí, pero tengo la sensación de que vio un código usando la siguiente:¿Se puede agregar una condición a una declaración de variable?

var abc = def || ghi; 

Mi pregunta es, ¿es válido? ¿Podemos agregar una condición a una declaración de variable? Imagino que la respuesta es no, pero tengo en mente que una vez vi algo similar en el código.

Respuesta

17

Esto da a abc el valor de def si ISN' t falsy (es decir, no false, null, undefined, 0 o una cadena vacía), o el valor de ghi si no es así.

Esto es equivalente a:

var abc; 
if (def) abc = def; 
else abc = ghi; 

Esto es comúnmente utilizado para las opciones:

function myfunc (opts) { 
    var mything = opts.mything || "aaa"; 
} 

Si llama myfunc({mything:"bbb"}) se utiliza el valor que das. Utiliza "aaa" si no proporciona nada.

En este caso, con el fin de permitir que la persona que llama en su totalidad omitir el parámetro, que también podría haber comenzado la función con

opts = opts || {}; 
+0

+1. Puede ser más preciso decir si "' def' se evalúa como verdadero ", ya que si es' 0', la cadena vacía, 'falso', etc.,' abc' obtendrá el valor de 'ghi'. –

3

, se puede añadir la condición de declaración de variables

Puede utilizar de esta manera,

function greet(person) { 
    var name = person || 'anonymouse'; 
    alert('Hello ' + name); 
} 
greet('jashwant'); 
greet();​ 

jsfiddle demo

0

bien, ver, es algo así como, o bien comprobar si una es verdadera . El verdadero será devuelto. :)

var abc = def || ghi; 

es equivalente a:

var abc = return (def == true) or (ghi == true) 
+2

cuidado. Su respuesta implica que esta operación siempre asigna un valor booleano. Esto es ** solo ** el caso si 'def' y' ghi' son valores booleanos. En todos los casos, 'abc' asumirá el valor de' ghi' (cualquiera que sea ese valor) _unless 'def' se evalúa como verdadero_. Si 'def' es" hola ", entonces abc será" hola "(no booelan). Si 'def' es falso/vacío/cero/indefinido/etc., Y' ghi' es "mundo", entonces 'abc' será" mundo "(de nuevo, no booleano). – user113215

6

El código var abc = def || ghi;

es lo mismo que

if (def) { //where def is a truthy value 
    var abc = def; 
} else { 
    abc = ghi; 
} 

¿Quieres una condición como una sentencia if?

if (xxx==="apple") { 
    var abc = def; 
} else { 
    abc = ghi; 
} 

que como escrito como un operador ternario es:

var abc = (xxx==="apple") ? def : ghi; 
+0

Acabo de ver un ejemplo en vivo de lo que leí ayer (polipasto de Javascript). Incluso si 'def' es falso en su primer ejemplo,' abc' no es global. ¿Estoy en lo cierto? – Jashwant

+0

'abc' puede ser global, solo depende de dónde esté definido. – epascarello

Cuestiones relacionadas