Я заметил кое-что немного странное с компилятором CoffeeScript и задавался вопросом, было ли это правильным поведением или нет. Если это правильно, я любопытно, почему есть разница ..Экспериментальный оператор CoffeeScript и этот
Учитывая следующий CoffeeScript:
if @myVar?
alert myVar
Я ожидал, что это компилировать в JavaScript, как это:
if (typeof this.myVar !== "undefined" && this.myVar !== null) {
alert(myVar);
}
Но вместо того, что выдает компилятор CoffeeScript:
if (this.myVar != null) {
alert(myVar);
}
Если я не ссылаюсь на это (или любой другой родительский объект), компиляция CoffeeScript, как и следовало ожидать.
Это правильное поведение? Если да, то почему это работает при использовании этого?
Edit:
Чтобы добавить немного больше разъяснений. Это происходит не только с этим, но и с любыми другими свойствами объектов. Например, если бы я был заменить выше CoffeeScript с тем, что под ним все еще будет составлять лишь ...
if myVar.myProp?
alert myVar
возможно дубликат [экзистенциального оператора и объекта свойства] (http://stackoverflow.com/questions/9990117/existential-operator-and-object-properties) –