al momento mi viene in mente solo un workaround semplice

ri-edit:
codice:
var a = [];
a[0] = "a";
a[1] = "b";
a["public"] = "variabile pubblica dell'oggetto Array";

Array.prototype.mixedLength = function () {
    var l = 0;
    for (p in this) l++;
    return l - 1;
}


alert(a.length);
alert(a.mixedLength());
Sicuramente esisterà una soluzione migliore.