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?

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.


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

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)


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.