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代码,还是比较郁闷。