@ivandao

Как правильно посчитать количество полей в объекте?

Задача: посчитать количество полей в объекте
Есть решение:

var i = 0  
   for (const key in object) {
        if (object.hasOwnProperty(key)) {
           i++            
        }
    }


Также данный код работает без проверки if (object.hasOwnProperty(key)).
В каких случаях код без hasOwnProperty не будет работать?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
Все ж просто
const p = {
  a: 11
};
const obj = {
  b: 22
};

Object.setPrototypeOf(obj, p);
obj.a //-> 11
obj.b //-> 22

console.log(Object.keys(obj).length); //-> 1

console.log((() => {
  let length = 0;
  for (const k in obj) {
    length++;
  }
  return length;
})()); //-> 2 , т.е. a и b

console.log((() => {
  let length = 0;
  for (const k in obj) {
     if (obj.hasOwnProperty(k)) {
        length++            
      }
    }
  return length;
})());  //-> 1

'a' in obj //-> true
obj.hasOwnProperty('a') //-> false


for...in в паре с hasOwnProperty можно считать устаревшей конструкцией, вместо нее используются методы Object
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
qork
@qork
{ background: #F00B42 }
Символы не перечисляются при итерации for...in. В дополнение к этому, Object.getOwnPropertyNames() не вернет символьные свойства объекта. Тем не менее, их можно получить с помощью Object.getOwnPropertySymbols().

https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
@Dasslier
Junior FrontEnd Developer
Ответ неправильный - сообщение отредактировано, дабы не позориться))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы