对象④for in 循环
和 in
操作符一样,for in
循环同样在查找对象属性时遍历原型链上的所有属性。
注意: for in
循环不会遍历那些 enumerable
设置为false
的属性;比如数组的length
属性。
// 修改 Object.prototype
Object.prototype.bar = 1;var foo = {moo: 2};
for(var i in foo) {console.log(i); // 输出两个属性:bar 和 moo
}
由于不可能改变 for in
自身的行为,因此有必要过滤出那些不希望出现在循环体中的属性, 这可以通过 Object.prototype
原型上的 hasOwnProperty
函数来完成。
注意: 由于 for in
总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能。
使用 hasOwnProperty
过滤
// foo 变量是上例中的
for(var i in foo) {if (foo.hasOwnProperty(i)) {console.log(i);}
}
这个版本的代码是唯一正确的写法。由于我们使用了 hasOwnProperty
,所以这次只输出 moo
。 如果不使用 hasOwnProperty
,则这段代码在原生对象原型(比如 Object.prototype
)被扩展时可能会出错。
一个广泛使用的类库 Prototype 就扩展了原生的 JavaScript 对象。 因此,当这个类库被包含在页面中时,不使用 hasOwnProperty
过滤的 for in
循环难免会出问题。
总结
推荐总是使用 hasOwnProperty
。不要对代码运行的环境做任何假设,不要假设原生对象是否已经被扩展了。
转载于:https://www.cnblogs.com/luckyxb/p/6398503.html
对象④for in 循环相关推荐
- 防止NSTimer和调用对象之间的循环引用
防止NSTimer和调用对象之间的循环引用 @interface NSTimer (EOCBlocksSupport)+ (NSTimer *)eoc_scheduledTimerWithTimeIn ...
- 小程序循环不同的组建_小程序之八,对象数组、循环及条件渲染
富力丹麦小镇P20-602的春天 一.对象数组 很多情况下,我们需要多次显示同一个条目(item),或者说是某个类的不同实例对象.类似如下: 那么,你可以写很复杂的WXML,"手工" ...
- php数组循环转为对象,php中循环实现(字符串,对象,或者数组)编码相互转换
/** * 循环实现编码互转 * * @param string $param(字符串,对象,或者数组),$currCharset当前编码,$toCharset期望编码 * @return 参数类型 ...
- js对象赋值、循环对象
一般我们给对象的属性赋值时这样的: let a={}; a.value="值"; 如果在一个循环中,循环去给对象赋值的话,就会覆盖掉前面的值,而又想每次循环赋值的属性都不一样的话, ...
- 如何在html页面遍历对象,javascript如何循环遍历对象?
在JavaScript中有多种循环遍历对象的方法,下面本篇文章就来给大家介绍一下使用JavaScript循环遍历对象的方法,希望对大家有所帮助. 1.使用for 循环 for 循环是 Js 中最常用的 ...
- 循环数组对象 php,PHP循环遍历stdClass对象的数组
我有一个在MySQL中运行的查询,它返回一个结果作为stdClass对象,如下所示: array(8){ [ 0 ]=>object(stdClass)#36(1){ [ "color ...
- 浅析 SpringMVC 中返回对象的循环引用问题
问题发现 今天这个话题还是比较轻松的,可能很多朋友也都遇到过这个问题. @RestController.@ResponseBody 等注解是我们在写 Web 应用时打交道最多的注解了,我们经常有这样的 ...
- Python快速学习10: 循环的对象及设计 (生活的规律)
正文 循环对象的并不是随着Python的诞生就存在的,但它的发展迅速,特别是Python 3x的时代,循环对象正在成为循环的标准形式. 灵活的循环方式 (我晚饭后爱上了萨克斯,因为这是生活的一部分.属 ...
- Python进阶06 循环对象与迭代
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 这一讲的主要目的是为了大家在读Python程序的时候对循环对象有一个基本概念. 循 ...
最新文章
- PL/SQL 游标
- 字符集:ASCII、GB2312、GBK、GB18030、Unicode
- python连接spark_python如何通过pyspark的API操作spark
- 深入理解Spark 2.1 Core (六):Standalone模式运行的原理与源码分析
- 《WinForm开发系列之控件篇》Item31 MenuStrip(暂无)
- 计算机视觉基础:图像处理 Task 03 - 颜色空间互转
- THUWC2019游记
- 题目1555:重复子串
- 人脸识别(三) 摄像头中的人脸识别+LFW数据集测试
- MIPI学习--CSI2
- Python 进行debug的错误most likely due to a circular import
- 3-增量序列{3,2,1}的希尔排序时间复杂度分析
- discuz X2数据字典
- SPSS纵向数据格式转换为横向数据格式时变量不是自己想要
- Oracle EBS WIP关闭失败提示:这些任务存在待定事务处理
- 怎么利用群控解决问题
- 基于微波光子I/Q去斜接受的雷达系统
- 电子元器件图片、名称、符号,超全面+唯样商城
- webpack5使用souceMap和watchMode搭建简易开发环境
- 3DMax—吹风机建模