Zauważyłem coś dziwnego z kompilatorem CoffeeScript i zastanawiałem się, czy to było prawidłowe zachowanie czy nie. Jeśli prawdą jest, że jestem ciekaw, dlaczego istnieje różnica ..CoffeeScript Existential Operator i ten
Biorąc pod następującym coffeescript:
if @myVar?
alert myVar
Spodziewałem się go skompilować do JavaScriptu tak:
if (typeof this.myVar !== "undefined" && this.myVar !== null) {
alert(myVar);
}
Ale zamiast tego, co wypisuje kompilator CoffeeScript:
if (this.myVar != null) {
alert(myVar);
}
Jeśli nie odwołuję się do tego (lub jakikolwiek inny obiekt nadrzędny), CoffeeScript kompiluje się tak, jak bym się spodziewał.
Czy to jest prawidłowe zachowanie? Jeśli tak, dlaczego działa to inaczej podczas korzystania z tego?
Edit:
Aby dodać trochę więcej wyjaśnień. Nie dzieje się tak tylko z tą, ale innymi właściwościami obiektów. Na przykład, jeśli miałbym wymienić powyżej coffeescript z tym, co pod nią nadal będzie skompilować tylko ...
if myVar.myProp?
alert myVar
możliwe duplikat [egzystencjalnej podmiotu i przedmiotu właściwości] (http://stackoverflow.com/questions/9990117/existential-operator-and-object-properties) –