为什么不推荐for...in遍历数组_for in为什么不能遍历数组-程序员宅基地

技术标签: 前端  js  

我们一般来说,使用for…in来遍历对象,使用for…of来遍历数组

总之,for…in 循环主要是为了遍历对象而生,不适用于遍历数组

for…of 循环可以用来遍历数组、类数组对象,字符串、Set、Map 以及 Generator 对象

我们强烈建议不要使用for…in来遍历数组
为什么???

因为for…in遍历的是对象的key或者是数组的下标。当然最重要的原因是,他会到原型链上寻找,遍历其中新增加的属性的key值

for of遍历的是数组元素值,
for in 遍历的是数组的索引(即键名)
for of遍历的只是数组内的元素,
for in 遍历的不只是数组内的元素,还有其新增的原型属性和索引

for of 遍历

Array.prototype.method=function(){
    
  console.log(this.length);
}
var myArray=[11,21,41,51,61,71]
myArray.name="数组";
for (var value of myArray) {
    
  console.log(value);
}
//输出数组每项的值:11,21,41,51,61,71

for in 遍历

Array.prototype.method=function(){
    
  console.log(this.length);
}
var myArray=[11,21,41,51,61,71]
myArray.name="数组";
for (var value in myArray) {
    
  console.log(value);
}
// 输出数据的下标以及新增属性和方法: 0,1,2,3,4,5,method,name

总结
1因为我们的for…in会遍历出拓展的方法和属性,所以当我们对Array进行扩展的时候,会打印出来,就比较的尴尬,不知所措
2我们的for…in得到的是key值,如果是数组的话,得到的是字符串类型的key值,如果这个时候进行下标操作的话,可能会出现奇奇怪怪的问题

for…in和for…of都可以使用break,continue的操作

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42458965/article/details/108845018

智能推荐

浅谈web应用的负载均衡、集群、高可用(HA)解决方案-程序员宅基地

文章浏览阅读759次。 声明:以下仅为个人的一些总结和随写,如有不对之处,还请看到的网友指出,以免误导。 (详细的配置方案请google,这里只说解决方案。) 1、熟悉几个组件1.1、apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全Socket层(SSL)等等,目..._ha:/鉁攃nlnxx5m

debian 10 安装_如何在Debian 10上安装和使用Composer-程序员宅基地

文章浏览阅读997次。debian10 安装 介绍 (Introduction)Composer is a popular dependency management tool for PHP, created mainly to facilitate installation and updates for project dependencies. It will check which other packag..._debian -bash: curl: command not found

在jsp里使用在线编辑器ckeditor-程序员宅基地

文章浏览阅读902次。jsp中标签内引入js文件在body里面使用页面即可显示在线编辑器了在计算中使用CKEDITOR.instances.replyBody.getData()即可取到在线编辑器中的内容下面附上ckeditor编辑器的使用api连接ckeditor api

librdkafka问题总结_rdkafka::topic::partition_ua-程序员宅基地

文章浏览阅读1.5w次。librdkafka问题总结librdkafka是kafka官方推荐的c client端开源库。本文基于librdkafka_0.8, 对该库作简要介绍,同时对使用过程中遇到的一些问题做个总结一、模块介绍librdkafka主要分为config,topic,produce,consume几个模块config依据kafka相应的config文件字段定义 先通过默认配置文件创建confg对象,再通过c_rdkafka::topic::partition_ua

寒假水108——搜索【广搜】_解救小哈-程序员宅基地

文章浏览阅读148次。 Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 10..._解救小哈

js递归循环数组-程序员宅基地

文章浏览阅读1.8k次。当我们从后台获取回来的数据是一个数组时,而且每个元素是一个对象,对象的层级不确定,需要使用递归循环遍历所有的子元素var tdata=[  {    "code": "has Value Domain Member",    "value": "未婚",    "properties": [      {        "code": "MDM VD Member PKID",   ..._js递归循环数组

随便推点

Zhong__Linux系统安装MongoDB数据库_linux系统(rpm包)如何安装mongodb-程序员宅基地

文章浏览阅读139次。QQ交流群:121160124关注微信公众号:邂逅最美的时光在Linux(CentOS7)上安装MongoDB的社区版安装MongoDB可以rpm方式和tar包方式安装一、使用.rpm包(推荐)1.配置包管理系统(yum)。创建一个/etc/yum.repos.d/mongodb-org-4.0.repo文件,以便您可以使用yum以下命令直接安装MongoDB:vi..._linux系统(rpm包)如何安装mongodb

Boot Loader_bootload能输出打印吗?-程序员宅基地

文章浏览阅读664次。Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 B_bootload能输出打印吗?

centos6.4安装mysql5.5_server version: 5.5.58-程序员宅基地

文章浏览阅读1.3k次。LVM管理磁盘创建pv[root@owenz ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created[root@owenz ~]# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created_server version: 5.5.58

Android开发笔记(七十三)代码混淆与反破解_android packageinfo混淆-程序员宅基地

文章浏览阅读4.7k次。代码混淆ProGuard是ADT自带的apk混淆器,它的用途有:1、压缩apk包的大小,能删除无用的代码,并简化部分类名和方法名。2、加大破解源码的难度,因为部分类名和方法名被重命名,使得程序逻辑变得难以理解。代码混淆的规则在proguard-project.txt中编写,然后在project.properties补充规则文件的路径,如下所示:proguard.conf_android packageinfo混淆

父子组件通信-程序员宅基地

文章浏览阅读1k次。父子组件通信根组件data传子组件根组件data传子组件在子组件使用props属性,然后在使用组件标签时绑定props里的属性到根组件的data数据,这样就可以在模板里使用props的属性当作根组件的data数据使用了<head> <meta charset="utf-8"> <title></title> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"><_父子组件通信

LED驱动程序设计_keyled驱动程序设计-程序员宅基地

文章浏览阅读1.3k次。S3C2440 GPIO通用输入输出接口的简称,S2440一共有130个GPIO口,分为A~J共9组:GPA,GPB,GPC……GPJ;通过设置相应的寄存器,可以选择某个GPIO口是用于输入,输出还是特定其他特殊功能。例如可以设置GPH6口用于输入输出,或者是串口;每组GPIO(GPA-GPJ),都可以通过3个寄存器来控制与访问,这三个寄存器分别是GPxCON:GPIO配置寄存器----..._keyled驱动程序设计