Ця відповідь призначена для попередньої версії 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");
}