Um nicht mit dem Prototyp oder anderem Code zu hantieren, können Sie Ihr eigenes Objekt erstellen und erweitern:
function Hash(){
var length=0;
this.add = function(key, val){
if(this[key] == undefined)
{
length++;
}
this[key]=val;
};
this.length = function(){
return length;
};
}
myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2
Wenn Sie immer die Add-Methode verwenden, wird die Längeneigenschaft korrekt sein. Wenn Sie befürchten, dass Sie oder andere die Verwendung vergessen, könnten Sie die Eigenschaft Zähler, die die anderen gepostet haben, auch der Längenmethode hinzufügen.
Natürlich können Sie die Methoden jederzeit überschreiben. Aber selbst wenn Sie das tun, würde Ihr Code wahrscheinlich merklich versagen, was die Fehlersuche erleichtert ;)
1 Stimmen
@neitony - das ist irgendwie wahr, aber so viele Leute sind an PHP's "assoziatives Array" gewöhnt, dass sie annehmen könnten, es bedeutet " bestellt assoziative Karte", wenn JS-Objekte in der Tat ungeordnet sind.
4 Stimmen
In dem obigen Beispiel ist myObject.length undefiniert, zumindest in einer Browserumgebung. Deshalb ist es ungültig, @AdrianM
3 Stimmen
Varianten von
Object.
{keys
,values
,entries
}(obj).length
wurden nun insgesamt 38 Mal in 16 Antworten und in den Kommentaren zu dieser Frage erwähnt, und weitere 11 Mal in 7 gelöschten Antworten. Ich denke, das ist jetzt genug.