Respostas:
key of obj
Compila para o JavaScript key in obj. (CoffeeScript usa ofquando se refere a chaves, e inquando se refere a valores de array: val in arrtestará se valestá 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 nullou 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 objvai 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 objfunciona também para testar adicionalmente.hasOwnProperty(). o “mais provável” vem de eu não ter tentado, mas essa sintaxe funcionando nas compreensões.