Самый простой способ проверить, существует ли ключ в объекте, с помощью CoffeeScript


110

Каков самый простой способ в CoffeeScript проверить, существует ли ключ в объекте?

Ответы:


182
key of obj

Это компилируется в JavaScript key in obj. (CoffeeScript использует ofпри обращении к ключам и inпри обращении к значениям массива: val in arrпроверяет, valесть ли вход arr.)

Ответ thejh правильный, если вы хотите игнорировать прототип объекта. Ответ Джимми правильный, если вы хотите игнорировать ключи со значением nullили undefined.


2
скорее всего own key of objтоже работает, чтобы дополнительно протестировать .hasOwnProperty(). «скорее всего» исходит от того, что я не пробовал, но этот синтаксис работает в пониманиях.
летающая овца

2
@flyingsheep Нет, это работает только в понимании. Попробуйте: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ах, хорошо :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
летающая овца

36

'?' оператор проверяет наличие:

if obj?
    # object is not undefined or null

if obj.key?
    # obj.key is not undefined or null

# call function if it exists
obj.funcKey?()

# chain existence checks, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?.grandChildKey

# chain existence checks with function, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?().grandChildKey

16
Это не удается, если ключ есть, но имеет значение null.
mu слишком короткое

В случае, когда никто не заботится о том, чтобы ключ существовал, но был нулевым, obj.key?это, вероятно, самый краткий.
Эндрю Мао

21
obj.hasOwnProperty(name)

(игнорировать унаследованные свойства)


Мне нравится этот ответ, потому key of objчто выдает ошибку, если значение является строкой или числом. Cannot use 'in' operator to search. В этом случае, если объект не является неопределенным и не нулевым, он будет работать.
jqualls

Это не удается, если объект имеет значение из своего прототипа.
Брайан М. Хант
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.