javascript请教for in循环输出问题

 <script type="text/javascript">
        var x;
        var mycars = new Array();
        mycars[0] = "BMW";
        mycars[1] = "MG";
        mycars[2] = "荣威950";

        for(x in mycars){
            document.write(mycars[x] + "<br/>");
        }
    </script>
代码中的x在声明的时候取值为什么对输出没有影响,比如:var x =100;输出依然是

BMW
MG
荣威950

看错了,上面不算,sorry

 普通数组使用索引遍历:
for (var i = 0; i < arr.length; i++) {    console.log(arr[i]); }
 字典数组采用下标遍历:
for (var x in arr) {    console.log(arr[x]); }
 for(var x in mycars)
 相当于
 for (var x=0;x<mycars.length;x++)

 x只起到计数的作用,和mycars.length没有任何的影响

当for(x in mycars)的时候,x会被重新赋值,所以你在声明的时候赋值并不会影响到后面的循环,不过你在for(x in mycars){
x= 100;
}这个地方重新赋值,肯定就有影响了

for (x in mycars)中的mycars是个数组,意思是循环这个数组,每个元素赋值给x。请看js文档循环结构那章节。

for in对变量x重新赋值了为数组的下标了当然不在是100,x会变为数组下标最大值

for in对X重新赋值了,如果你讲x =100放到for 代码块里面肯定会有影响的

x 相当于数组的下标

for in 通常用来遍历一个对象 数组也是对象 所以有时候也可以用来遍历数组

for(var key in obj) 是以属性名遍历这个对象 key就相当于obj的属性名 而下标就是数组的属性 所以数组也可以用for in 来遍历
和for循环一样 都是在开始循环时 初始化(相当于声明一个变量) 所以和你在上面声明的变量是不一样的 也就不会影响循环

但一般不推荐使用for in来遍历数组
因为他是以属性名来遍历的 如果你给数组对象自定义了一个方法 在遍历时也会把比这个方法体给遍历出来、、这就不是我们想要的了