что для .... в заявлении в JavaScript - PullRequest
3 голосов
/ 30 декабря 2010

любой может объяснить, как использовать для ... в утверждении в JavaScript. Я читал статью о w3school, но думаю, что это не так понятно. Ниже приведен код, объясните, пожалуйста:

<html>
<body>
<script type="text/javascript">
var x;
var mycars = new Array();
mycars[10] = "Saab";
mycars[20] = "Volvo";
mycars[30] = "BMW";

for (x in mycars)
{
document.write(mycars[x] + "<br />");
}
</script>
</body>
</html>

Ответы [ 4 ]

7 голосов
/ 30 декабря 2010

A for in loop будет перебирать каждое свойство объекта.

В вашем примере переменная x будет циклически проходить через все свойства объекта mycars.

Если вы добавите mycars.expensive = "Porsche";, это тоже будет найдено.


Обратите внимание, что, как указано MDC , циклы for in должны не использоваться для циклического перебора обычных массивов:

Хотя может быть заманчиво использовать это как способ перебора по Array , Это плохая идея. for...in заявление перебирает определенные пользователем свойства в дополнение к элементам массива, так если вы измените массив не целое число или неположительные свойства (например, добавление свойства "foo" к нему или даже путем добавления метода или собственность на Array.prototype), for...in заявление будет вернуть имя вашего пользователя свойства в дополнение к числовому индексов. Кроме того, потому что порядок итерация произвольна, повторяется массив не может посещать элементы в числовом порядке. Таким образом, лучше используйте традиционный цикл для с числовым индексом, когда перебирая массивы Аналогичный аргументы могут быть использованы против даже использовать для ... во всех (по крайней мере, без propertyIsEnumerable () или hasOwnProperty () проверяет), так как он также будет повторяться над Object.prototype (который, хотя обычно отговаривают, может, как в случай Array.prototype, будьте полезны продлен пользователем, где нет проблемы пространства имен, вызванные включение других библиотек, которые может не выполнить вышеуказанные проверки такие итерации и где они находятся осознает эффект такого расширения придется самостоятельно использовать итераторы, такие как for ... in).

1 голос
/ 30 декабря 2010

Сначала вы создаете объект с 3 элементами (а не массивом)

  var mycars = new Object();
  mycars[10] = "Saab";
  mycars[20] = "Volvo";
  mycars[30] = "BMW";

, где 10, 20 и 30 - свойства объекта.
затем вы хотите перемещаться по объекту, посещать все свойства и отображать каждое значение, связанное со свойством.

Именно здесь вмешивается конструкция javascript [for () in object ) expression ] Переменная будет установлена ​​на первое свойство объекта, затем на 2-е, затем на последнее. Попробуйте

  for (v in mycars) alert(v);

чтобы посмотреть, как это работает, и это тоже

  for (v in mycars) alert("Property: "+v+", value: "+mycars[v]);
0 голосов
/ 30 декабря 2010

for in - это способ скрывать ошибки для последующих поколений.Как было обильно указано, при применении к массиву он будет проходить по всем элементам массива, длине массива и любым другим данным, которые присоединяются к массиву.Лучше применить его к обычному объекту, но вы все равно должны фильтровать индексы через hasOwnProperty.

Лучше использовать предоставляемую фреймворком функцию, такую ​​как jQuery's $.each

0 голосов
/ 30 декабря 2010

Конструкция for ... in повторяется для каждого элемента в объекте с правой стороны in.В вашем случае блок под оператором for выполняется один раз для каждого автомобиля в mycars.

...