В javascript, чтобы проверить, не создавалась ли переменная, мы просто делаем
if (typeof MyVariable !== "undefined"){ ... }
Мне было интересно, как это сделать в coffeescript? ... Я пробую что-то вроде
if (MyVariable?false){ ... }
но эта проверка, MyVariable
является ли функция, если это так, она вызовет MyVariable (false), если нет, то вызовет void (0) или что-то в этом роде.
coffeescript
undefined
Джайдер
источник
источник
if MyVariable isnt undefined
что производитif (MyVariable !== void 0)
.Ответы:
Наконец я нашел такой простой способ сделать это:
if (MyVariable?){ ... }
что сгенерирует:
if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }
ОБНОВЛЕНИЕ 07.04.2014 Демо Ссылка
источник
item != null
undefined
? Или надо тогда прибегнутьif typeof myVariable isnt 'undefined'
?==
и!=
) на самом деле обрабатываютnull
иundefined
как равные значения, поэтомуitem != null
фактически проверяют и на,null
иundefined
одновременно. Нет, если это написано какitem !== null
.Во-первых, чтобы ответить на ваш вопрос:
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
Надеюсь это поможет!
источник
isnt
Ключевое слово эквивалентно!=
в CoffeeScript, и может быть более удобным для чтения , если вы привыкли к JavaScript.!==
, а не!=
!=
в Coffee, что!==
в JavaScript переводится как .Это ответ для более старой версии 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"; }
Я считаю, что это работает, потому что
!=
используемый CoffeeScriptsExistential 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"); }
источник
variable?
теперь только компилирует переменной! = NULL... !== null
coffeescript.org/#try:variable%3Ftypeof MyVariable isnt "undefined"
из js2coffee
источник
В дополнение к ответу Джайдера выше (я не мог комментировать из-за недостаточной репутации) , будьте осторожны, это другой случай, если это что-то внутри объекта / массива:
someArray['key']?
будет преобразован в:
someArray['key'] != null
Скриншот с сайта js2coffee.org :
источник
Я просто использую:
if (myVariable) //do stuff
Поскольку undefined является ложным, он будет делать что-то, только если myVariable не undefined.
Вы просто должны знать, что он будет "делать что-то" для значений 0, "" и null.
источник
myVariable
не допускается использование ложных значений, таких какnull
или0
.Самый чистый способ, который я нашел для присвоения переменной неопределенной и ненулевой переменной, заключается в использовании
unless
:unless ( myVar? ) myVar = 'val'
источник
myVar ?= 'val'
Почему бы просто не использовать идиому OR?
myVar or 'val'
Таким образом, результат будет равен myVar, если он не определен, и в этом случае он будет равен val.
источник
''
,0.0
иfalse
. Что, наверное, не нежелательно.