Operador Existencial CoffeeScript e este
Notei algo um pouco estranho no compilador CoffeeScript e fiquei imaginando se esse era o comportamento correto ou não. Se estiver correto, estou curioso para saber por que há uma diferença ..
Dado o seguinte CoffeeScript:
if @myVar?
alert myVar
Eu esperava que ele fosse compilado em JavaScript assim:
if (typeof this.myVar !== "undefined" && this.myVar !== null) {
alert(myVar);
}
Mas, em vez disso, o que o compilador CoffeeScript produz é este:
if (this.myVar != null) {
alert(myVar);
}
Se eu não referenciar isso (ou qualquer outro objeto pai), o CoffeeScript será compilado como seria de espera
Este é o comportamento correto? Se sim, por que funciona diferente ao usar isso?
Editar
Para adicionar um pouco mais de esclarecimento. Isso não acontece apenas com isso, mas com outras propriedades dos objetos. Por exemplo, se eu substituísse o CoffeeScript acima pelo que está abaixo, ele ainda seria compilado com apenas "! = Null" ...
if myVar.myProp?
alert myVar