在编写脚本的时候将常用到迭代如:

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();
}
posted on 2012-09-11 16:25  诡异的手柄  阅读(350)  评论(0编辑  收藏  举报