Это ответ для более старой версии coffeescript. См . Ответ Джайдера выше, если вы хотите получить более свежий ответ (по состоянию на июль 2014 г.)
Думаю, этот кофе-скрипт делает то, что вы хотите:
if not MyVariable?
MyVariable = "assign a value"
Что производит:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
Nb, если вы MyVariable
сначала выполняете присвоение , даже если вы устанавливаете MyVariable
значение undefined, как в этом коде , то это компилируется в:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Я считаю, что это работает, потому что !=
используемый CoffeeScripts Existential Operator
(знак вопроса) заставляет undefined
быть равным null
.
ps Вы действительно можете приступить if (MyVariable?false){ ... }
к работе? Он не компилируется для меня, если между экзистенциальным оператором и ложью нет пробела, то есть, MyVariable? false
что затем заставляет CoffeeScript проверять его как функцию из-за того, false
что он считает параметром для вас MyVariable
, например :
if MyVariable? false
alert "Would have attempted to call MyVariable as a function"
else
alert "but didn't call MyVariable as it wasn't a function"
Производит:
if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
alert("Would have attempted to call MyVariable as a function");
} else {
alert("but didn't call MyVariable as it wasn't a function");
}