2011-11-23 7 views

Odpowiedz

176
key of obj 

To kompiluje się na key in obj JavaScript. (Coffeescript wykorzystuje of odnosząc się do kluczy i in, odnosząc się do wartości tablicowych: val in arr przetestuje czy val jest w arr.) Odpowiedź

thejh jest poprawna, jeśli chcesz zignorować prototyp obiektu. Odpowiedź Jimmy'ego jest poprawna, jeśli chcesz zignorować klucze o wartości null lub undefined.

+2

Najprawdopodobniej "własny klucz z obiektu" działa również, aby testować automatycznie '.hasOwnProperty()'. "najprawdopodobniej" pochodzi ode mnie, nie próbowałem, ale ta składnia działa w zrozumieniu. –

+2

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

+0

ah, [ok] (https://github.com/jashkenas/coffee-script/issues/1019): 'own = (prop, obj) -> Object :: hasOwnProperty.call obj, prop' –

20
obj.hasOwnProperty(name) 

(ignorować właściwości dziedziczone)

+0

Podoba mi się ta odpowiedź, ponieważ 'klucz z obj' rzuci błąd, jeśli wartość jest ciągiem lub liczbą. "Nie można użyć operatora" w "do wyszukiwania". W tym przypadku, jeśli obiekt nie jest niezdefiniowany i nie jest pusty, zadziała. – jqualls

+0

Nie powiedzie się tam, gdzie obiekt ma wartość ze swojego prototypu. –

32

Znak "?" kontroli operatora dla istnienia:

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

Nie powiedzie się, jeśli klucz istnieje, ale ma wartość 'null'. –

+0

@muistooshort Cóż, to denerwujące .. –

+0

W przypadku, gdy nie interesuje nas klucz, ale jest pusty, to "obj.key?" Jest prawdopodobnie najbardziej zwięzły. –

Powiązane problemy