В JavaScript почти всё является объектом. Объекты используются для хранения информации в парах key-value
, где значением может быть любой другой тип данных или функция. В отличие от массивов и строк, объекты не имеют предопределенного свойства, которое возвращает их длину.
Поэтому, если попытаться получить значение свойства length
объекта, возвращается undefined
. Вот, например, три Javascript-способа получить длину объекта, назовём его myObj
.
const myObj = {
key1: 'val1',
key2: 'val2',
key3: 'val3',
key4: 'val4',
};
Object.keys()
Метод Object.keys()
возвращает массив названий ключей, затем можно прочитать его свойство length
и получить длину объекта.
console.log(Object.keys(myObj).length); // 4
Цикл for..in
Получить длину объекта можно, перебрав все его свойства в цикле.
let count = 0;
for (let key in myObj) {
count++;
}
console.log(count); // 4
Добавление свойства length для Object.prototype
Если добавить свойство length
к прототипу объекта, его можно будет неоднократно использовать во всём приложении.
if (!Object.prototype.length) {
Object.defineProperty(Object.prototype, 'length', {
get: function() {
return Object.keys(this).length;
}
});
}
Преимущества последнего варианта достаточно очевидны: один раз определить и использовать свойство из любого места приложения, отсутствие цикла для перебора и подсчёта ключей объекта.