for...in循环中的循环计数器是字符串,而不是数字它包含当前属性的名称或当前数组元素的索引,下面有个不错的示例大家可以参考下

大家都知道在JavaScript中提供了两种方式迭代对象: 
(1)for 循环; 
(2)for..in循环; 
使用for循环进行迭代数组对象,想必大家都已经司空见惯了。但是,使用for.. in循环时,大家可要注意了,为什么这么说呢?大家听我娓娓道来.... 
javascript提供了一种特殊的循环(也就是for .. in循环),用来迭代对象的属性或数组的每个元素,for...in循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引。 
案例一:

复制代码代码如下:

//使用for..in循环遍历对象属性 
varperson={ 
name: "Admin", 
age: 21, 
address:"shandong" 
}; 
for(vari in person){ 
console.log(i); 

执行结果为: 
name 
age 
address 
当遍历一个对象的时候,变量 i 也就是循环计数器 为 对象的属性名

复制代码代码如下:

//使用for..in循环遍历数组 
vararray = ["admin","manager","db"] 
for(vari in array){ 
console.log(i); 

执行结果: 



当遍历一个数组的时候,变量 i 也就是循环计数器 为 当前数组元素的索引 
案例二: 
但是,现在看来for .. in循环还挺好用啊,不过,别高兴太早,看看下面的例子:

复制代码代码如下:

var array =["admin","manager","db"]; 
//给Array的原型添加一个name属性 
Array.prototype.name= "zhangsan"; 
for(var i in array){ 
alert(array[i]); 

运行结果: 
admin 
manager 
db 
zhangsan 
咦,奇观了,怎么平白无故的冒出来一个zhangsan 
现在,再看看使用 for循环会怎样?

复制代码代码如下:

vararray = ["admin","manager","db"]; 
//给Array的原型添加一个name属性 
Array.prototype.name = "zhangsan"; 
for(var i =0 ; i<array.length; i++){ 
alert(array[i]); 
}; 

运行结果: 
admin 
manager 
db 
哦, 现在明白了,for..in循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误。为了避免这个问题,我们可以使用对象的hasOwnProperty()方法来避免这个问题,如果对象的属性或方法是非继承的,那么hasOwnProperty() 方法返回true。即这里的检查不涉及从其他对象继承的属性和方法,只会检查在特定对象自身中直接创建的属性。 
案例三:

复制代码代码如下:

vararray = ["admin","manager","db"]; 
Array.prototype.name= "zhangshan"; 
for(vari in array){ 
//如果不是该对象自身直接创建的属性(也就是该属//性是原型中的属性),则跳过显示 
if(!array.hasOwnProperty(i)){ 
continue; 

alert(array[i]); 

运行结果: 
admin 
manager 
db 
一切又完好如初,哎,不知道,同志们看完有什么感受,是不是有种“拨开云雾见晴天”的感觉啊,呵呵

JavaScript中for..in循环陷阱介绍相关推荐

  1. JavaScript中利用for循环遍历数组

    这篇文章主要为大家详细介绍了JavaScript中利用for循环遍历数组,最好不要使用for in遍历,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 先看一段代码 1 2 3 4 5 6 7 8 ...

  2. django中的for循环_深入了解 JavaScript 中的 for 循环

    在ECMAScript5(简称 ES5)中,有三种 for 循环,分别是: 简单for循环 for-in forEach 在2015年6月份发布的ECMAScript6(简称 ES6)中,新增了一种循 ...

  3. javascript中的for循环

    使用方法1: for(i=0;i<10;i++) { } 使用方法2:(可以对数据.对象成员等进行遍历) var y = [2, 3, 5];  for (i in y)        docu ...

  4. php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?

    大家都知道在JavaScript中提供了两种方式迭代对象: (1)for 循环: (2)for..in循环: 使用for循环进行迭代数组对象,想必大家都已经司空见惯了.但是,使用for.. in循环时 ...

  5. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

  6. JavaScript中的事件循环

    JavaScript是单线程单并发语言 单线程:主程序只有一个线程,即同一时间片段内其只能执行单个任务. 引发的问题: 单线程,意味着任务都需要排队,前一个任务结束,才会执行后一个任务.若前一个任务耗 ...

  7. 谈谈Javascript中那些For循环的事

    let arr = [1, 2, 3, 4, 5]; One 从初学编程就开始用的最基础的一种循环: for (let i = 0; i < arr.length; i++) {console. ...

  8. 深入浅出 JavaScript 中的For循环之详解

    点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 公众号回复[ 加群 ],与大佬们一起成长- 今天我想分享一个有关于循环筛选的知识点,也许是前端小白 ...

  9. 在JavaScript中遭遇级联表达式陷阱

        依稀还记得,在学习C语言的库函数时,很多字符串操作相关的函数都会返回和结果相关的指针.其实这个返回值很多时候都并不是非常必要,因为在我们的传入的参数中,十有八九已包含了这个指针.而加上这个返回 ...

最新文章

  1. HTML5----CSS显示半个字符
  2. 前台页面进行图片上传判断
  3. 移动版“全功能”Photoshop发布!还有AI剪视频一键传抖音、一键抠图功能上线 | Adobe MAX 2019...
  4. JAVA HashMap单key多value的实现及迭代器打印(附源码)
  5. LeetCode Shell 194. 转置文件
  6. oracle 空间数据处理,Oracle数据库空间数据的处理
  7. Object类的hashCode()方法
  8. 在c语言中下面的运算符中优先级最高的是,C语言习题请高手解答急急急1.下列运算符中优先级最高的运算符 爱问知识人...
  9. 简单Android app开发_app开发流程:如何简单快速进行app手机开发?
  10. Python机器学习(基础篇---监督学习(k近邻))
  11. 女程序员上班第一件事:调整IDE颜色以适配今天的衣着妆容
  12. 【MATLAB深度学习工具 deepNetworkDesigner的使用 包涵实例手写数字识别和LSTM预测完整代码 】
  13. 这是我的脚本原型。。比我的生成器的麻烦(这种最稳定,我做成的脱机刷毛实
  14. 火狐浏览器无法选择安装盘
  15. 流体力学专业常用网站集合
  16. PPT文件没有密码解除限制编辑
  17. 如何分辨iphone 的冷屏与暖屏
  18. 消费者满意度调查方案
  19. 前端基础知识概述 -- 移动端开发的屏幕、图像、字体与布局的兼容适配
  20. 系统集成项目管理工程师10大管理47个过程域输入输出工具(项目范围管理)

热门文章

  1. 让思维导图改变我们的工作和生活吧
  2. RHEL/CentOS下的VLAN设置
  3. 升级在即,BU发布新版本并将Mempool未确认交易限制增加到500
  4. Spring Boot 入门
  5. Android 开发应该掌握的 Proguard 技巧
  6. gitlab安装配置、备份恢复
  7. Yenista光学发布新型无源器件测试平台CTP10
  8. java消息服务,JMS 和 ActiveMQ
  9. 四、Android学习第四天——JAVA基础回顾(转)
  10. Struts2获取request三种方法