Respostas:
key of obj
Compila para o JavaScript key in obj
. (CoffeeScript usa of
quando se refere a chaves, e in
quando se refere a valores de array: val in arr
testará se val
está dentro arr
)
a resposta do jh está correta se você deseja ignorar o protótipo do objeto. A resposta de Jimmy está correta se você deseja ignorar as chaves com um valor null
ou undefined
.
own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
O '?' operador verifica a existência:
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?
provavelmente é o mais conciso.
obj.hasOwnProperty(name)
(para ignorar propriedades herdadas)
key of obj
vai gerar um erro se o valor for uma string ou um número. Cannot use 'in' operator to search
. Nesse caso, se o objeto não for indefinido e não for nulo, ele funcionará.
own key of obj
funciona também para testar adicionalmente.hasOwnProperty()
. o “mais provável” vem de eu não ter tentado, mas essa sintaxe funcionando nas compreensões.