在编写脚本的时候将常用到迭代如:
var list=[1,2,3,4]; for(var i=0,i<list.length,i++) { alert(list[i]); }
也可以写成
var list=[1,2,3,4]; for(var i in list) { alert(list[i]); }
由于getElementsByTagName返回NamedNodeMap对象,它是一个类似数组的对象,也有length属性,所以也可以像迭代一般数组一样迭代这个NamedNodeMap对象:
var all=document.body.getElementsByTagName('*');
for(i=0;i<all.length;i++)
{//对all[i]的对象进行操作}
但是如果用for(i in all)的方法进行迭代,可能会出现问题,因为循环会包括NamedNodeMap对象的附加方法,i的值会分别等于length,item,namedItem。这个时候,就要用hasOwnProperty()方法来避免这个问题,如果对象属性和方法是是非继承的,那么hasOwnProperty()方法返回true。即这里的检查不涉及从其它对象继承的属性和方法,只检查特定对象中自身直接创建的属性,比如分配给数组的元素。如果在for(i in ...)执行这种检查,就会跳过length这样的属性,因为length这样的属性不是all对象自己的,而是继承自NamedNodeMap对象的。
var all=document.all.getElementsByTagName('*'); for(i in all) { if(!hasOwnProperty(i)) { continue; } //对all[i]的对象进行操作 alert(); }