js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)

js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)

ID:40558135

大小:22.93 KB

页数:4页

时间:2019-08-04

js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)_第1页
js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)_第2页
js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)_第3页
js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)_第4页
资源描述:

《js高端系列教程(6)——JavaScript探秘:for-in循环(for-in Loops)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。从技术上将,你可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。有个很重要的hasOwnProperty()方法,当遍历对象属性的时候可以过滤掉从原型链上下来的属性。思考下面一段代码:01//对象02var

2、 man={03   hands:2,04   legs:2,05   heads:106};07 08//在代码的某个地方09//一个方法添加给了所有对象10if (typeof Object.prototype.clone=== "undefined"){11   Object.prototype.clone= function (){};12}在这个例子中,我们有一个使用对象字面量定义的名叫man的对象。在man定义完成后的某个地方,在对象原型上增加了一个很有用的名叫clone()的方法。此原型链

3、是实时的,这就意味着所有的对象自动可以访问新的方法。为了避免枚举man的时候出现clone()方法,你需要应用hasOwnProperty()方法过滤原型属性。如果不做过滤,会导致clone()函数显示出来,在大多数情况下这是不希望出现的。01//1.02//for-in循环03for (var i in man){04   if (man.hasOwnProperty(i)){ //过滤05      console.log(i, ":",man[i]);06   }07}08/*控制台显示结果09h

4、ands:210legs:211heads:112*/13 14//2.15//反面例子:16//for-inloopwithoutcheckinghasOwnProperty()17for (var i in man){18   console.log(i, ":",man[i]);19}20/*21控制台显示结果22hands:223legs:224heads:125clone:function()26*/另外一种使用hasOwnProperty()的形式是取消Object.prototype上的方

5、法。像这样:1for (var i in man){2   if (Object.prototype.hasOwnProperty.call(man,i)){ //过滤3      console.log(i, ":",man[i]);4   }5}其好处在于在man对象重新定义hasOwnProperty情况下避免命名冲突。也避免了长属性查找对象的所有方法,你可以使用局部变量“缓存”它。1var i,hasOwn=Object.prototype.hasOwnProperty;2for (i in m

6、an){3    if (hasOwn.call(man,i)){ //过滤4        console.log(i, ":",man[i]);5    }6}严格来说,不使用hasOwnProperty()并不是一个错误。根据任务以及你对代码的自信程度,你可以跳过它以提高些许的循环速度。但是当你对当前对象内容(和其原型链)不确定的时候,添加hasOwnProperty()更加保险些。格式化的变化(通不过JSLint)会直接忽略掉花括号,把if语句放到同一行上。其优点在于循环语句读起来就像一个完整的

7、想法(每个元素都有一个自己的属性”X”,使用”X”干点什么):1//警告:通不过JSLint检测2var i,hasOwn=Object.prototype.hasOwnProperty;3for (i in man) if (hasOwn.call(man,i)){ //过滤4    console.log(i, ":",man[i]);5}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。