Two examples using for...in loop

1. 循环打印数组的值

看看下面这个js代码片段,第一个和第二个循环是等效的。需要注意的是,for...in语句与for语句有一点不同,它循环的范围是一个对象所有的属性或是一个数组的所有元素(引用)

<script type="text/javascript">
    var a = [1, 3, 5, 6, 33];
       
    for(ele in a) {
       document.write(ele + ": " + a[ele]);
       document.write("<br/>");
    }
    for(i=0; i< a.length; i++) {
        document.write(i + ": " + a[i]);
        document.write("<br/>");
    }
</script>

执行任意一个循环,都得到如下输出:

0: 1

1: 3

2: 5

3: 6

4: 33

这个例子其实说明 JavaScript 中的数组和 Java 中的是不一样的。JavaScript 数组类似一个 Java 的 Map 结构,Key 就是 index,在第一个循环中,作为 index 的 ele 其实就是这个 Key 了。 另外一个例子, 可参考: http://www.w3school.com.cn/tiy/t.asp?f=jsrf_array_for_in

2. 循环打印对象的所有属性

其实,就是循环打印一个 json 对象,示例代码如下:

    <script type="text/javascript">
        var json = {
            "name" : "中国移动",
            "sex" : "阴阳",
            "口碑" : "负数"
        };
        for ( var p in json) {
            document.writeln("prop:" + p + ", value:" + json[p] + "<br/>\n");
        }
    </script>

上面的代码,属性名可不用引号,即可写成下面这样的:

    <script type="text/javascript">
        var json = {
            name : "中国移动",
            sex : "阴阳",
            口碑 : "负数",
 sayHi: function(a) {
     alert(a);
 }
        };
        for ( var p in json) {
            document.writeln("prop:" + p + ", value:" + json[p] + "<br/>\n");
        }
    </script>

输出的结果为:

prop:name, value:中国移动
prop:sex, value:阴阳
prop:口碑, value:负数
prop:sayHi, value:function(a) { alert(a); }

需要注意的是,for...in 在循环输出对象的属性名时,有一个缺陷:每次循环的顺序可能不一样。

PS: 这个Google Sites虽然允许编辑html,但不能嵌入js代码,还是比较郁闷。