Я заметил кое-что странное с компилятором 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