Najprostszy sposób sprawdzenia, czy klucz istnieje w obiekcie przy użyciu CoffeeScript


Odpowiedzi:


182
key of obj

To kompiluje się do JavaScript key in obj. (CoffeeScript używa ofprzy odwoływaniu się do kluczy i inprzy odwoływaniu się do wartości tablic: val in arrsprawdzi, czy valjest warr .)

Odpowiedź thejh jest poprawna, jeśli chcesz zignorować prototyp obiektu. Odpowiedź Jimmy'ego jest poprawna, jeśli chcesz zignorować klucze z wartością nulllub undefined.


2
najprawdopodobniej own key of objdziała również do dodatkowych testów .hasOwnProperty(). „najprawdopodobniej” pochodzi ode mnie, nie próbowałem, ale ta składnia działa ze zrozumieniem.
latające owce

2
@flyingsheep Nie, działa tylko ze zrozumieniem. Wypróbuj: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ah, ok :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
latająca owca

36

„?” operator sprawdza istnienie:

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
To kończy się niepowodzeniem, jeśli klucz istnieje, ale ma wartość null.
mu jest za krótkie

W przypadku, gdy nie obchodzi nas, że klucz istnieje, ale jest pusty, obj.key?jest prawdopodobnie najbardziej zwięzły.
Andrew Mao

21
obj.hasOwnProperty(name)

(aby zignorować dziedziczone właściwości)


Podoba mi się ta odpowiedź, ponieważ key of objzgłosi błąd, jeśli wartość jest ciągiem lub liczbą. Cannot use 'in' operator to search. W takim przypadku, jeśli obiekt nie jest niezdefiniowany i nie jest pusty, zadziała.
jqualls

Nie udaje się to, gdy obiekt ma wartość ze swojego prototypu.
Brian M. Hunt
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.