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

