Die robusteste Antwort (dh sie erfasst die Absicht dessen, was Sie versuchen, während Sie die wenigsten Fehler verursachen) wäre:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(myObj);
In JavaScript gibt es eine Art Konvention, nach der Sie Object.prototype keine Elemente hinzufügen , da dadurch Aufzählungen in verschiedenen Bibliotheken unterbrochen werden können. Das Hinzufügen von Methoden zu Object ist jedoch normalerweise sicher.
Hier ist ein Update ab 2016 und eine weit verbreitete Bereitstellung von ES5 und darüber hinaus. Für IE9 + und alle anderen modernen ES5 + -fähigen Browser können Sie Folgendes verwenden: Object.keys()
Der obige Code lautet wie folgt :
var size = Object.keys(myObj).length;
Dies muss keinen vorhandenen Prototyp ändern, da dieser Object.keys()
jetzt eingebaut ist.
Bearbeiten : Objekte können symbolische Eigenschaften haben, die nicht über die Object.key-Methode zurückgegeben werden können. Die Antwort wäre also unvollständig, ohne sie zu erwähnen.
Der Sprache wurde ein Symboltyp hinzugefügt, um eindeutige Bezeichner für Objekteigenschaften zu erstellen. Der Hauptvorteil des Symboltyps ist die Verhinderung von Überschreibungen.
Object.keys
oder Object.getOwnPropertyNames
funktioniert nicht für symbolische Eigenschaften. Um sie zurückzugeben, müssen Sie verwenden Object.getOwnPropertySymbols
.
var person = {
[Symbol('name')]: 'John Doe',
[Symbol('age')]: 33,
"occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2