Noté algo un poco extraño con el compilador de CoffeeScript y me preguntaba si este era el comportamiento correcto o no. Si es correcto que tengo curiosidad por qué hay una diferencia ..CoffeeScript Operador existencial y este
Dada la siguiente CoffeeScript:
if @myVar?
alert myVar
que estaba esperando para compilar tener JavaScript así:
if (typeof this.myVar !== "undefined" && this.myVar !== null) {
alert(myVar);
}
Pero en cambio, lo que el compilador de CoffeeScript genera es el siguiente:
if (this.myVar != null) {
alert(myVar);
}
Si no hago referencia a esto (o cualquier otro objeto principal), CoffeeScript compila como era de esperar.
¿Es este el comportamiento correcto? Si es así, ¿por qué funciona diferente al usar esto?
Editar:
Para añadir un poco más aclaraciones. Esto no ocurre solo con esto, sino con cualquier otra propiedad de los objetos. Por ejemplo, si yo fuera sustituir el CoffeeScript anterior con lo que está debajo de ella todavía sería compilar con solamente ...
if myVar.myProp?
alert myVar
posible duplicado de [operador existencial y el objeto propiedades] (http://stackoverflow.com/questions/9990117/existential-operator-and-object-properties) –