今天在看一些教程的代码时发现,有个for循环,与java的for循环不一样:
var array = new Array("Jack","Tom","Mary","Kate");
for(index in array){
document.write(array[index]);
}
奇怪的是for循环里的index,这个到底是个索引还是个对象,从循环体里面看,它应该是个索引,困扰我的是它这个index是不是固定要这么写的,试了一下,可以用别的字符来做,说明不是固定写法。我正纳闷呢,如果有那么多固定的写法,哪里记得住那么多啊。
另外,要注意的是,系统自带的数组,比如document.links这样的数组,如果使用for(n in document.links)这样的形式来直接取links里的元素,打印出各个元素的href,name,childNodes等属性或子节点的值,那么会报错,因为这些系统自带的数组,里面什么内容,直接想是想不到的,不过如果使用普通的for循环,如for(n=0;n<XXX.length;n++)这样的形式还是比较安全的,可以直接输出里面各个元素的值。
试了发现,document.links数组第0个元素并不是第1个超链接对象,而是length的值,如果使用document.links[0]这样来取值,它确实又是第1个超链接对象,这个是什么原因?
用普通的for循环for(n=0;n<document.links.length;n++)取第N个元素,和 用特殊的for循环for(n in document.links)取第N个元素,两者的第0个元素的值是不一样的,前者能取到正确的第1个超链接对象,后者却取出的是undefined,所以不能把特殊的for循环在任意场合直接使用。
如果是自己创建的数组或已经明确知道数组存放的内容的情况下,这2种for循环可以任意选一种使用。