CoffeeScript kullanarak nesnede anahtarın var olup olmadığını kontrol etmenin en basit yolu


110

CoffeeScript'te, bir nesnede bir anahtar olup olmadığını kontrol etmenin en basit yolu nedir?

Yanıtlar:


182
key of obj

Bu, JavaScript'lere derlenir key in obj. (CoffeeScript kullanır ofşifreler bahsedilirken, ve indizi değerlerine söz konusu olduğunda: val in arrolmadığını test edecek valolan arr.)

Nesnenin prototipini görmezden gelmek istiyorsanız, thejh'nin cevabı doğrudur. nullVeya undefineddeğerine sahip anahtarları yok saymak istiyorsanız Jimmy'nin cevabı doğrudur .


2
büyük olasılıkla own key of obj, ek olarak test etmek için de işe yarar .hasOwnProperty(). "büyük olasılıkla", denememiş olmamdan geliyor, ama bu sözdizimi anlayışla çalışıyor.
uçan koyun

2
@flyingsheep Hayır, sadece anlamada işe yarar. Deneyin: coffeescript.org/#try:own%20key%20of%20obj
Trevor Burnham

ah, tamam :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
uçan koyun

36

'?' operatör var olup olmadığını kontrol eder:

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
Anahtar oradaysa ancak değerine sahipse bu başarısız olur null.
mu çok kısa

Birinin var olan anahtarı umursamadığı, ancak boş obj.key?olduğu durumda, muhtemelen en özlü olanıdır.
Andrew Mao

21
obj.hasOwnProperty(name)

(devralınan özellikleri yok saymak için)


Bu yanıtı beğendim çünkü key of objdeğer bir dizge veya sayı ise bir hata atar. Cannot use 'in' operator to search. Bu durumda, nesne tanımsız değilse ve boş değilse çalışacaktır.
jqualls

Bu, nesnenin prototipinden değer aldığında başarısız olur.
Brian M. Hunt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.