Это ответ для более старой версии 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");
}