yo sepa, no hay manera de hacer esto de forma fiable, a menos que cambie a una matriz. Que honestamente, no parece, me parece bastante sencillo que los arreglos sean contables y los objetos no.
Probablemente el que más se aproxima es algo como esto
// Monkey patching on purpose to make a point
Object.prototype.length = function()
{
var i = 0;
for (var p in this) i++;
return i;
}
alert({foo:"bar", bar: "baz"}.length()); // alerts 3
pero esto crea problemas, o al menos preguntas. ¡Todas las propiedades creadas por el usuario se cuentan, incluida la función _length! Y aunque en este simple ejemplo puede evitarlo simplemente usando una función normal, eso no significa que pueda evitar que otros scripts hagan esto. ¿Entonces, Qué haces? Ignorar las propiedades de la función?
Object.prototype.length = function()
{
var i = 0;
for (var p in this)
{
if ('function' == typeof this[p]) continue;
i++;
}
return i;
}
alert({foo:"bar", bar: "baz"}.length()); // alerts 2
Al final, creo que probablemente debería abandonar la idea de hacer sus objetos contable y encontrar otra manera de hacer lo que sea que estás haciendo.
Ya he respondido aquí http://stackoverflow.com/questions/126100/how-to-efficiently-count-the-number-of-keys-properties-of-an-object-in-javascrip Object.keys (obj) .length – spats