CoffeeScript Undefined

В javascript, чтобы проверить, не была ли создана переменная, мы просто делаем

if (typeof MyVariable !== "undefined"){ ... }

Мне было интересно, как я это делаю в coffeescript?... Я пробую что-то вроде

if (MyVariable?false){ ... }

но эта проверка, если MyVariable является функцией, если так, что вызовет MyVariable (false), если это не будет вызвано void (0) или что-то в этом роде.

Ответ 1

Наконец, я нашел этот простой способ сделать это:

if (MyVariable?){ ... }

который будет генерировать:

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }

ОБНОВЛЕНИЕ 04/07/2014 Демо-ссылка

enter image description here

Ответ 2

Во-первых, чтобы ответить на ваш вопрос:

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

Надеюсь, это поможет!

Ответ 3

Этот ответ предназначен для более старой версии 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");
}

Ответ 4

typeof MyVariable isnt "undefined" 

из js2coffee

Ответ 5

В дополнение к ответ Хайдера выше (я не мог прокомментировать из-за недостаточной репутации), будьте осторожны, чтобы это был другой случай, если он что-то внутри объекта/массива

someArray['key']?

будет преобразован в:

someArray['key'] != null

Снимок экрана из js2coffee.org:

js2coffee.org

Ответ 6

Я просто использую:

if (myVariable)
    //do stuff

Поскольку undefined является ложным, он будет делать вещи только тогда, когда myVariable не является undefined.

Вам просто нужно знать, что он будет "делать вещи" для значений, которые равны 0, "" и null

Ответ 7

Самый чистый способ, которым я нашел назначение переменной переменной undefined и not-null, использует unless:

unless ( myVar? )
    myVar = 'val'

Ответ 8

Почему бы просто не использовать идиому OR?

myVar or 'val'

Таким образом, результат будет равен myVar, если он не равен undefined, и в этом случае он будет равен "val".