Le moyen le plus simple de vérifier si la clé existe dans l'objet à l'aide de CoffeeScript

110

Dans CoffeeScript, quel est le moyen le plus simple de vérifier si une clé existe dans un objet?

Ajsie
la source

Réponses:

182
key of obj

Cela compile en JavaScript key in obj. (CoffeeScript utilise ofpour faire référence aux clés et inpour faire référence aux valeurs de tableau: val in arrtestera s'il valy en a arr.)

La réponse de thejh est correcte si vous voulez ignorer le prototype de l'objet. La réponse de Jimmy est correcte si vous voulez ignorer les clés avec une valeur nullou undefined.

Trevor Burnham
la source
2
fonctionne très probablement own key of objaussi pour un test supplémentaire .hasOwnProperty(). le «plus probable» vient du fait que je n'ai pas essayé, mais cette syntaxe fonctionne dans les compréhensions.
mouton volant
2
@flyingsheep Non, cela ne fonctionne que dans les compréhensions. Essayez-le: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham
ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
mouton volant le
36

Le '?' l'opérateur vérifie l'existence:

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
limscoder
la source
16
Cela échoue si la clé est là mais a une valeur de null.
mu est trop court
Dans le cas où l'on ne se soucie pas de la clé existante mais étant nulle, alors obj.key?c'est probablement la plus concise.
Andrew Mao
21
obj.hasOwnProperty(name)

(pour ignorer les propriétés héritées)

thejh
la source
J'aime cette réponse parce key of objque jettera une erreur si la valeur est une chaîne ou un nombre. Cannot use 'in' operator to search. Dans ce cas, si l'objet n'est ni indéfini ni nul, il fonctionnera.
jqualls
Cela échoue là où l'objet a la valeur de son prototype.
Brian M. Hunt