Ответы:
key of obj
Это компилируется в JavaScript key in obj
. (CoffeeScript использует of
при обращении к ключам и in
при обращении к значениям массива: val in arr
проверяет, val
есть ли вход arr
.)
Ответ thejh правильный, если вы хотите игнорировать прототип объекта. Ответ Джимми правильный, если вы хотите игнорировать ключи со значением null
или undefined
.
own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
'?' оператор проверяет наличие:
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
null
.
obj.key?
это, вероятно, самый краткий.
obj.hasOwnProperty(name)
(игнорировать унаследованные свойства)
key of obj
что выдает ошибку, если значение является строкой или числом. Cannot use 'in' operator to search
. В этом случае, если объект не является неопределенным и не нулевым, он будет работать.
own key of obj
тоже работает, чтобы дополнительно протестировать.hasOwnProperty()
. «скорее всего» исходит от того, что я не пробовал, но этот синтаксис работает в пониманиях.