@ palmsey: Справедливости ради OP, документы javascript фактически явно ссылаются на использование переменных типа Object таким образом, как «ассоциативные массивы».
И, честно говоря, @palmsey он был совершенно прав: они не ассоциативные массивы, а определенно объекты :) - выполняющие работу ассоциативного массива. Но что касается более широкой темы, вы определенно имеете на это право в соответствии с этой довольно прекрасной статьей, которую я нашел:
JavaScript «Ассоциативные массивы» считается вредным
Но в соответствии со всем этим, не является ли принятый ответ самой плохой практикой?
Укажите функцию прототипа size () для объекта
Если что-то еще было добавлено в Object .prototype, то предложенный код завершится ошибкой:
<script type="text/javascript">
Object.prototype.size = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
Object.prototype.size2 = function () {
var len = this.length ? --this.length : -1;
for (var k in this)
len++;
return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>
Я не думаю, что ответ должен быть принят, так как ему нельзя доверять, если у вас есть другой код, работающий в том же контексте выполнения. Чтобы сделать это надежным способом, вам наверняка понадобится определить метод size в myArray и проверять тип элементов при их итерации по ним.