La forma más sencilla de verificar si la clave existe en el objeto usando CoffeeScript


110

En CoffeeScript, ¿cuál es la forma más sencilla de comprobar si existe una clave en un objeto?

Respuestas:


182
key of obj

Esto se compila a JavaScript key in obj. (CoffeeScript usa ofcuando se refiere a claves, y incuando se refiere a valores de matriz: val in arrprobará si valestá dentro arr)

La respuesta de thejh es correcta si desea ignorar el prototipo del objeto. La respuesta de Jimmy es correcta si desea ignorar las claves con un valor nullo undefined.


2
lo más probable es que también own key of objfuncione para probar adicionalmente .hasOwnProperty(). lo “más probable” viene de que yo no lo haya intentado, pero esta sintaxis funciona en comprensiones.
oveja voladora

2
@flyingsheep No, solo funciona en comprensiones. Pruébelo: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
oveja voladora

36

Los '?' el operador comprueba la existencia:

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
Esto falla si la clave está ahí pero tiene un valor de null.
mu es demasiado corto

En el caso de que a uno no le importe que la clave exista pero sea nula, obj.key?probablemente sea la más concisa.
Andrew Mao

21
obj.hasOwnProperty(name)

(ignorar propiedades heredadas) a.


Me gusta esta respuesta porque key of objarrojará un error si el valor es una cadena o un número. Cannot use 'in' operator to search. En este caso, si el objeto no está indefinido y no es nulo, funcionará.
jqualls

Esto falla cuando el objeto tiene el valor de su prototipo.
Brian M. Hunt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.