Ответ 1
Наконец, я нашел этот простой способ сделать это:
if (MyVariable?){ ... }
который будет генерировать:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
ОБНОВЛЕНИЕ 04/07/2014 Демо-ссылка
В javascript, чтобы проверить, не была ли создана переменная, мы просто делаем
if (typeof MyVariable !== "undefined"){ ... }
Мне было интересно, как я это делаю в coffeescript?... Я пробую что-то вроде
if (MyVariable?false){ ... }
но эта проверка, если MyVariable
является функцией, если так, что вызовет MyVariable (false), если это не будет вызвано void (0) или что-то в этом роде.
Наконец, я нашел этот простой способ сделать это:
if (MyVariable?){ ... }
который будет генерировать:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
ОБНОВЛЕНИЕ 04/07/2014 Демо-ссылка
Во-первых, чтобы ответить на ваш вопрос:
if typeof myVariable isnt 'undefined' then # do stuff
Решение Magrangs будет работать в большинстве случаев, за исключением случаев, когда вам нужно различать undefined и false (например, если myVariable может быть true, false или undefined).
И просто указать, что вы не должны обертывать свои условия в круглых скобках, и вы не должны использовать фигурные скобки.
Ключевое слово then
может использоваться, если все находится на одной строке, иначе используйте отступ, чтобы указать, какой код находится внутри условия.
if something
# this is inside the if-statement
# this is back outside of the if-statement
Надеюсь, это поможет!
Этот ответ предназначен для более старой версии coffeescript. См. ответ Jaider выше, если вы хотите получить более свежий ответ (по состоянию на июль 2014 года)
Этот файл coffeescript делает то, что вы хотите, я думаю:
if not MyVariable?
MyVariable = "assign a value"
Что производит:
if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
MyVariable = "assign a value";
}
N.b. если сначала выполнить назначение MyVariable
, даже если вы установите MyVariable
на undefined, как в этот код, тогда этот компилятор в:
if (!(MyVariable != null)) {
MyVariable = "assign a value";
}
Я считаю, что это работает, потому что !=
, используемый CoffeeScripts Existential Operator
(знак вопроса), заставляет undefined
равняться null
.
p.s. Вы можете получить 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");
}
typeof MyVariable isnt "undefined"
из js2coffee
В дополнение к ответ Хайдера выше (я не мог прокомментировать из-за недостаточной репутации), будьте осторожны, чтобы это был другой случай, если он что-то внутри объекта/массива
someArray['key']?
будет преобразован в:
someArray['key'] != null
Снимок экрана из js2coffee.org:
Я просто использую:
if (myVariable)
//do stuff
Поскольку undefined является ложным, он будет делать вещи только тогда, когда myVariable не является undefined.
Вам просто нужно знать, что он будет "делать вещи" для значений, которые равны 0, "" и null
Самый чистый способ, которым я нашел назначение переменной переменной undefined и not-null, использует unless
:
unless ( myVar? )
myVar = 'val'
Почему бы просто не использовать идиому OR?
myVar or 'val'
Таким образом, результат будет равен myVar, если он не равен undefined, и в этом случае он будет равен "val".