Почему объект, все свойства которого не определены, не указан как пустой?

1

С Lodash и Underscore я могу знать, пуст ли объект.

const a = {};

Я хочу понять, почему он не распознает как пустой объект, где все его свойства не определены.

Пример:

const a = {
  b: undefined,
  c: undefined
};

Этот вопрос не является дубликатом lodash: объект проверки пуст: я не ищу метод для проверки, если он пуст с неопределенными свойствами, я хочу понять, почему даже со свойствами неопределенного значения это не пустой объект.

  • 3
    потому что не пусто?
  • 1
    Я не вижу причин для того, чтобы объект, в котором Object.keys(obj).length > 0 считался пустым: это не так.
Показать ещё 6 комментариев
Теги:

2 ответа

1
Лучший ответ

Ваш объект a не пустой, он имеет 2 свойства, определенные для него, b и c и их значения не undefined.

Вы говорите в одном из ваших комментариев:

Я прекрасно понимаю, что если у него есть свойства, но если его свойства не имеют значения, почему бы не сказать, что объект пуст.

Но дело в том, что эти свойства не "не имеют значения", они имеют значение undefined. undefined - совершенно правильное значение, такое же как null, "" (пустая строка) и NaN.

1

Ответ на ваш вопрос содержится в документах, на которые вы ссылаетесь. Если функции вызываются для объектов, они проверяют длину. Если длина> 0, объект не считается пустым.

const a = {
  b: undefined,
  c: undefined
};

console.log(Object.keys(a).length); // 2

Подчеркни Документы

Возвращает true, если перечислимый объект не содержит значений (не перечислимых собственных свойств). Для строк и массивоподобных объектов _.isEmpty проверяет, имеет ли свойство length значение 0.

Lodash Docs

Проверяет, является ли значение пустым объектом, коллекцией, картой или набором.

Объекты считаются пустыми, если у них нет собственных перечисляемых строковых ключевых свойств.

Подобные массиву значения, такие как объекты аргументов, массивы, буферы, строки или jQuery-подобные коллекции, считаются пустыми, если они имеют длину 0. Аналогично, карты и наборы считаются пустыми, если они имеют размер 0.

Для этого представьте картотеку, представляющую ваш объект. Хотя ящики могут не содержать ничего, физически шкаф все же содержит три ящика. В зависимости от контекста, в котором вы используете _.isEmpty(), это может быть или не быть важной частью информации.

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню