Свойство JavaScript Object.length

Приведенный ниже код сделает свойство «.length» доступным для любого объекта с помощью расширяемых прототипов/наследования JavaScript.

Вы можете определить это глобально где-нибудь в вашем JavaScript, у меня обычно есть файл Protopts.js для хранения моих прототипов.

// Code to add length property
if (!Object.prototype.length) {
  Object.defineProperty(Object.prototype, 'length', {   
    get: function(){     
      return Object.keys(this).length   
    }
  });
}
// usage example
let person = {name: "Gregg", surname: "OD", age: "31"}
person.length // logs: 3

Объект должен иметь встроенное свойство `.length`. Я уверен, что в будущих спецификациях JavaScript это может произойти — поэтому мы сначала делаем проверку с помощью оператора if, чтобы увидеть, не существует ли свойство length.

Следует отметить, что Object.keys имеет надежную поддержку браузеров вплоть до IE 9. Вы можете легко изменить это решение, если вам нужна дополнительная поддержка, но я очень сомневаюсь, что вы это сделаете. Единственная другая причина, по которой вы можете захотеть изменить это, - это если у вас есть методы в вашем объекте, которые вы не хотите учитывать в длине. Object.keys подсчитывает все ключи в объекте — как свойства, так и методы.

Не забывайте, что вы можете создавать свои собственные прототипы. Я считаю эти методы наиболее полезными при добавлении к массивам, объектам и строкам. Я добавляю к своим прототипам префикс подчеркивания, чтобы было очевидно, что я их создал:

._isEmpty()
._notEmpty()
._hasValues()
._copy()
._length
._search()
._clear()

Спасибо за чтение, надеюсь, это было полезно!