在ecmascript中我们知道可以通过for in语句进行对象属性的遍历,当然这些属性不包括继承而来的属性:
在firefox以及其他浏览器实现的js语言扩展中,增加了each语句,each和in类似,不过它遍历的是对象的属性值:
在js扩展中还有更为通用的可迭代对象,in和each语句可以应用在任何可迭代对象;所谓可迭代对象是可以生成“下一个”值的对象,它要满足以下2个基本条件:
1.必须包含一个值为函数的__iterator__属性;
2.该函数必须返回一个对象,这个对象必须有一个next函数属性用来生成下一个值。一般来说我们将该对象称为迭代器对象;
如果你的目的是创建一个有限的迭代器(你并不想遍历死循环吧),那么当迭代到末尾时,需要抛出stopiteration异常;注意该异常只是个对象而已,并不是一个构造器函数,所以不必用new来创建。而each或in语句内部可以自动处理该异常,所以一般没必要自己写catch来手动捕获该异常以便跳出迭代器的干活了。
我们下面利用函数的闭包,将一个可迭代对象封装在一个函数中:
下面<code>这里写代码片</code>分别用in和each来迭代可迭代器对象: