CoffeeScript Undefined

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

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

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

if (MyVariable?false){ ... }

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

84 голоса | спросил Jaider 29 MarpmThu, 29 Mar 2012 20:16:06 +04002012-03-29T20:16:06+04:0008 2012, 20:16:06

7 ответов


0

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

if (MyVariable?){ ... }

, который сгенерирует:

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

ОБНОВЛЕНИЕ 04/07/2014 демонстрационная ссылка

введите описание изображения здесь

ответил Jaider 20 AMpFri, 20 Apr 2012 03:20:06 +040020Friday 2012, 03:20:06
0

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

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

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

ответил soundslikeneon 29 MarpmThu, 29 Mar 2012 20:31:48 +04002012-03-29T20:31:48+04:0008 2012, 20:31:48
0

Этот ответ для более старой версии coffeescript. См. ответ Jaider выше , если вы хотите получить более актуальный ответ (по состоянию на июль 2014 года)

Этот сценарий делает то, что вы хотите, я думаю:

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){ ... } работать? Он не скомпилируется для меня, если не будет пробела между экзистенциальным оператором и ложью, т.е. MyVariable? false, который он считает параметром для вашего 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"
ответил AJP 29 J000000Sunday12 2012, 03:09:50
0

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

someArray['key']?

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

someArray['key'] != null

Снимок экрана с сайта js2coffee.org :

js2coffee.org

ответил LongYC 31 J000000Thursday14 2014, 06:33:09
0

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

if (myVariable)
    //do stuff

Так как undefined - это ложь, он будет делать что-то, только если myVariable не равен undefined.

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

ответил Magrangs 29 MarpmThu, 29 Mar 2012 20:19:45 +04002012-03-29T20:19:45+04:0008 2012, 20:19:45
0

Самый простой способ присвоения переменной неопределенной и ненулевой переменной - использовать unless:

unless ( myVar? )
    myVar = 'val'
ответил fooling 3 J000000Wednesday13 2013, 22:21:20
0

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

myVar or 'val'

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

ответил l3x 12 22013vEurope/Moscow11bEurope/MoscowTue, 12 Nov 2013 19:15:58 +0400 2013, 19:15:58

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132