Найпростіший спосіб перевірити наявність ключа в об'єкті за допомогою CoffeeScript


110

У CoffeeScript який найпростіший спосіб перевірити наявність ключа в об'єкті?

Відповіді:


182
key of obj

Це компілюється в JavaScript key in obj. (CoffeeScript використовує ofпри посиланні на клавіші та inпри посиланні на значення масиву: val in arrперевірить, чи valнемає arr.)

відповідь thejh правильна, якщо ви хочете ігнорувати прототип об'єкта. Відповідь Джиммі правильна, якщо ви хочете ігнорувати ключі зі значенням nullабо undefined.


2
швидше за все, own key of objпрацює і для додаткового тестування .hasOwnProperty(). "найімовірніше" походить від мене не намагався, але цей синтаксис працює в розумінні.
літаючі вівці

2
@flyingsheep Ні, це працює лише в розуміннях. Спробуйте: coffeescript.org/#try:own%20key%20of%20obj
Тревор Бернхем

ах, добре :own = (prop, obj) -> Object::hasOwnProperty.call obj, prop
літаючі вівці

36

"?" оператор перевіряє наявність:

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
Це не вдається, якщо ключ є, але він має значення null.
mu занадто короткий

У випадку, коли когось не цікавить існуючий ключ, але він є нульовим, obj.key?це, мабуть, самий стислий.
Ендрю Мао

21
obj.hasOwnProperty(name)

(ігнорувати успадковані властивості)


Мені подобається ця відповідь, тому що вона key of objпризведе до помилки, якщо значенням є рядок або число. Cannot use 'in' operator to search. У цьому випадку, якщо об’єкт не визначений та недійсний, він буде працювати.
jqualls

Це не вдається, коли об'єкт має значення з прототипу.
Брайан М. Хант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.