原文链接:http://caibaojian.com/js-loop-for-in.html

javascript for...in 语句

for...in 语句用于对数组或者对象的属性进行循环操作。

for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

viaTip:for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。原文来自:http://caibaojian.com/js-loop-for-in.html

语法:

for (变量 in 对象) { 在此执行代码 }

“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。

实例:使用 for ... in 循环遍历数组。

<html>
<body>
<script type="text/javascript"> var x var mycars = new Array() mycars[0] = "Saab" mycars[1] = "Volvo" mycars[2] = "BMW" for (x in mycars) { document.write(mycars[x] + "<br />") } </script> </body> </html>

应用可见这里:http://caibaojian.com/js-max-repeat.html

注意一:for in循环不会按照属性的下标来排列输出。http://www.cnblogs.com/rubylouvre/p/3396042.html

"first":"first","zoo":"zoo","2":"2", "34":"34", "1":"1", "second":"second" }; for (var i in obj) { console.log(i); }; 输出: 1 2 34 first zoo second

执行时按chrome执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出。由于这个奇葩的设定,让avalon的ms-with对象排序不按预期输出了。只能强制用户不要以纯数字定义键名。

实例1:在数组的原型对象上定义了一个新的属性,使用for循环没出现问题

function getNewArray(){
var array=[1,2,3,4,5]; Array.prototype.age=13; var result = []; for(var i=0;i<array.length;i++){ result.push(array[i]); } alert(result.join('')); }

实例2:采用了for in循环,但是给我们期望的一样还是得到了12345的正确结果

//code from http://caibaojian.com/js-loop-for-in.html
function getArrayTwo(){
var array=[1,2,3,4,5 ]; var result=[]; for(var i in array){ result.push(array[i]); } alert(result.join('')); }

实例3:给原型添加属性之后,默认情况下枚举,最后输出1234513

function getNewArrayTwo(){
var array=[1,2,3,4,5 ]; Array.prototype.age=13; var result=[]; for(var i in array){ result.push(array[i]); } alert(result.join('')); }

所以建议不要对数组执行for in循环,事实上,在高性能javascript这本书中,也强调了for in循环的不好,因为它总是会访问该对象的原型,看下原型上是否有属性,这在无意中就给遍历增加了额外的压力。

解决方法:

如果某个对象具有给定名称的属性,那么Object.prototype.hasOwnProperty(name)返回true。如果该对象是从原型链中继承了该属性,或者根本没有这样的一个属性,则返回false。通过hasOwnProperty限定for in循环在当前中遍历,而不用去考虑它的原型属性。

function finalArray(){
var array=[1,2,3,4,5 ]; Array.prototype.age=13; var result=[]; for(var i in array){ if(array.hasOwnProperty(i)){ result.push(array[i]); } } alert(result.join('')); }

注意事项:

1.有一部分浏览器,例如早期的safari浏览器,不支持这个方法

2.对象经常被用作哈希值,这就是存在hasOwnProperty被另外的属性屏蔽的风险(但是我估计没有人那么无聊使用这个属性)

转载于:https://www.cnblogs.com/lzm1989/p/5967832.html

javascript中的for in循环和for循环的使用相关推荐

  1. 在JavaScript中逐个遍历数组?

    如何使用JavaScript遍历数组中的所有条目? 我以为是这样的: forEach(instance in theArray) 其中theArray是我的数组,但这似乎是不正确的. #1楼 如果您不 ...

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

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

  3. javascript中for循环和setTimeout同时使用,出现的问题

    javascript中for循环和setTimeout同时使用,出现的问题 for循环代码 <!DOCTYPE html> <html lang="en"> ...

  4. JavaScript中for..in循环陷阱介绍

    for...in循环中的循环计数器是字符串,而不是数字它包含当前属性的名称或当前数组元素的索引,下面有个不错的示例大家可以参考下 大家都知道在JavaScript中提供了两种方式迭代对象:  (1)f ...

  5. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖

    我们通常会把项目中使用的第三方依赖写在 package.json 文件里,然后使用 npm .cnpm 或者 yarn 这些流行的依赖管理工具来帮我们管理这些依赖.但是它们是如何管理这些依赖的.它们之 ...

  6. Javascript中for循环

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

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

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

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

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

  9. Javascript中的循环变量声明,到底应该放在哪儿?

    不放走任何一个细节.相信很多Javascript开发者都在声明循环变量时犹 豫过var i到底应该放在哪里:放在不同的位置会对程序的运行产生怎样的影响?哪一种方式符合Javascript的语言规范?哪 ...

  10. Javascript中的条件语句和循环语句

    Javascript条件语句有以下几种: 单项条件结构 (if条件语句) 双向条件结构 (if...else条件语句) 多项条件结构 (switch条件语句) If条件语句的语法如下: if (exp ...

最新文章

  1. Elasticsearch 深入3
  2. oracle with和insert结合使用
  3. pku3277 City Horizon.(离散化+二分查找)
  4. Java编程:哈希表
  5. 凸二次规划(convex quadratic programming)问题
  6. 使用vue-video-player播放视频 一个页面多个视频,并且只能唯一播放
  7. 社群运营的八大变现模式
  8. HDU5510 Bazinga(KMP)
  9. 图解CSS3 Flexbox属性
  10. navicat 关于orcale新建表空间,用户和权限分配
  11. 【C标准库】通过locale.h设置美元的格式
  12. python读书心得体会_Python学习心得体会
  13. 什么是RC高通滤波电路
  14. 【19考研】计算机/软件等专业调剂信息集合!【完结版】
  15. RabbitMQ:Consumers的介绍和使用
  16. 链家网二手房数据分析(承接上篇爬虫)
  17. 维视智造2023届校招火热进行中 快来加入我们
  18. Springboot+MySQL+VUE实现的在线教育网站源码+视频教程(Springboot微服务架构)
  19. 开源项目piwik搭建
  20. Java五子棋课程设计

热门文章

  1. Java 分布式 RPC 框架性能大比拼,Dubbo 排第几?
  2. Github标星2w+,热榜第一,如何用Python实现所有算法
  3. Java线程详解(18)-障碍器
  4. Java线程详解(3)-线程栈模型与线程的变量
  5. React 应用的性能优化思路
  6. C++基础汇总(一)
  7. 【Scratch】青少年蓝桥杯_每日一题_1.25_投球
  8. 黑白子交换c语言思路,递归 算法思路和优化和简单实现: 黑白子交换
  9. rocm平台_痛击NV CUDA!AMD ROCm开放计算平台瓜熟蒂落
  10. 用html标记语言,HTML标记语言——引用