Вопрос о цикле for в JavaScript? - PullRequest
1 голос
/ 02 сентября 2010

В следующем коде, почему переменная 'a' ссылается на индекс, а не на значение?

 for  (var a in  Values) {

     alert(Values[a]);
 }

Ответы [ 3 ]

10 голосов
/ 02 сентября 2010

Это по замыслу. Получить значение в массиве тривиально, когда вы знаете его ключ, но гораздо сложнее получить ключ при заданном значении. Значения могут дублироваться, так как узнать, какой ключ следует использовать? Но ключ уникален, поэтому, учитывая ключ, всегда можно получить только одно значение. Таким образом, цикл for будет перебирать ключи, и тривиально получить соответствующее значение.

1 голос
/ 02 сентября 2010

Думайте о массиве JavaScript как о обычном объекте со специальным свойством с именем length (на самом деле, он немного сложнее).Таким образом, поведение цикла for..in такое же, как и для других объектов:

var a = new Array();

a[1] = "a";
alert(a.length); // 2
alert(a[0]); // undefined

a[1000] = "b"
alert(a.length); // 1001


a[-1] = "c";
alert(a[-1]); // c

a.abc="why not";

for(var key in a)
{
  alert(key+"="+a[key]);
}
// 1=a
// 1000=b
// -1=c
// abc=why not

Также обратите внимание, что в вашем массиве могут быть пробелы без необходимости платить цену памяти.

0 голосов
/ 02 сентября 2010

Для каждого цикла ... в существует , который делает именно это - перечисляет только значения. Скоро появится браузер рядом с вами.

for each(var a in Values) {
    ..
}

Для массивов есть новая функция forEach , которая достигает того же.

someArray.forEach(function(value) {
    ..
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...