2012-05-05 4 views
12

¿Cuál es la diferencia entre estos dos? De Ruby, estoy acostumbrado a apple ||= walrus configuración manzana igual a la morsa solo si la manzana es nula. Eso parece ser lo mismo en JS/CS, aunque? = Parece hacer lo mismo. Lo que me confunde es la siguiente:¿Cómo se diferencia el operador "|| =" de "? =" En CoffeeScript?

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

wat

Respuesta

18

Lo mejor que se puede hacer es mirar el JS resultante.

CoffeeScript:

apple = 0 
walrus = 9 
apple ?= walrus // outputs 0 
apple ||= walrus // outputs 9 

JavaScript:

var apple, walrus; 
apple = 0; 
walrus = 9; 
if (apple == null) apple = walrus; 
apple || (apple = walrus); 

Como se puede ver, el ?= comprueba de forma explícita es algo es null o undefined en JS. Esto es muy diferente de ||= que solo depende de si apple es un valor falso.

Expandir un poco más apple ||= walrus es equivalente en significado a apple = apple || walrus, por lo que cualquier valor de apple que sea cierto cortará la lógica y no cambiará el valor de apple.

+0

Esa última línea me hizo entenderlo. Gracias. – Chris

+0

@Chris Cool, me alegro de ayudar. – loganfsmyth

+2

(Para el lector casual: 'undefined == null' es verdadero en JavaScript.' Undefined' y 'null', dos valores de falso-y, son los * solo * valores de' x' que dan como resultado 'x == null 'siendo cierto.) –

3

?= es la existencial operador. Comprueba contra null y undefined.

||= simplemente comprueba el valor de la variable para que sea "no falso", si mal no recuerdo ... entonces significa que 0 es falso.

Cuestiones relacionadas