CoffeeScript Undefined
в javascript, чтобы проверить, если переменная никогда не была создана, мы просто делаем
if (typeof MyVariable !== "undefined"){ ... }
мне было интересно, как я это делаю в coffeescript?... Я пытаюсь что-то вроде
if (MyVariable?false){ ... }
но это проверить если MyVariable
это функция, если так, что вызовет MyVariable(false) если нет, что вызовет void (0) или что-то в этом роде.
8 ответов:
наконец-то я нашел простой способ сделать это:
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).
и просто чтобы указать, вы не должны обертывать свои условия в круглые скобки, и вы не должны использовать фигурные скобки.
The
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
к неопределенному состоянию на код, то это компилирует к:if (!(MyVariable != null)) { MyVariable = "assign a value"; }
я считаю, что это работает, потому что
!=
используется CoffeeScriptsExistential 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"); }
кроме Jaider это выше (Я не мог комментировать из-за недостаточной репутации), будьте осторожны, что это другой случай, если это что-то внутри объекта/массива:
someArray['key']?
будет преобразован в:
someArray['key'] != null
скриншот из js2coffee.org:
Я просто использовать:
if (myVariable) //do stuff
поскольку undefined является ложным, он будет делать только вещи, если myVariable не является неопределенным.
вы просто должны знать, что он будет "делать вещи" для значений, которые равны 0, "" и null