Я заметил кое-что немного странное с компилятором 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 компилируется так, как я ожидал.
Это правильное поведение? Если да, то почему он работает при использовании этого?
Изменить:
Чтобы добавить немного больше разъяснений. Это происходит не только с этим, но и с любыми другими свойствами объектов. Например, если бы я заменил вышеприведенный CoffeeScript тем, что ниже, он все же будет компилироваться только с "!= Null"...
if myVar.myProp?
alert myVar