CoffeeScript Undefined


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

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

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

if (MyVariable?false){ ... }

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

8 82

8 ответов:

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

if (MyVariable?){ ... }

что будет генерировать:

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

обновление 04/07/2014 Демо-Ссылке

enter image description here

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

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";
}

я считаю, что это работает, потому что != используется 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

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

someArray['key']?

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

someArray['key'] != null

скриншот из js2coffee.org:

js2coffee.org

Я просто использовать:

if (myVariable)
    //do stuff

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

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

самый чистый способ, который я нашел, чтобы назначить переменную неопределенной и не-нулевой переменной, использует unless:

unless ( myVar? )
    myVar = 'val'

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

myVar or 'val'

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