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