Ця відповідь призначена для попередньої версії coffeescript. Дивіться відповідь Джайдера вище, якщо ви хочете отримати більш сучасну відповідь (станом на липень 2014 року)
Цей coffeescript робить те, що ви хочете, я думаю:
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){ ... }до роботи? Він не компілюється для мене, якщо не існує пробілу між екзистенціальним оператором та 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");
}