为什么for in循环不适合用于数组

首先一点无关的,使用(var i in a) 而不是( i in a),除非你想创建全局变量。

第二点,for in 循环会忽略空的数组

var a = [];

a[5] = 5; // Perfectly legal JavaScript that resizes the array.

for (var i=0; i<a.length; i++) {

    // Iterates over numeric indexes from 0 to 5, as everyone expects.

}

var a = [];

a[5] = 5;

for (var x in a) {

    // Shows only the explicitly set index of "5", and ignores 0-4

}

第三,for in循环会对prototype属性进行循环。

// Somewhere deep in your JavaScript library...

Array.prototype.foo = 1;

// Now you have no idea what the below code will do.

var a = [1,2,3,4,5];

for (var x in a){

    // Now foo is a part of EVERY array and

    // will show up here as a value of ‘x‘.

}

最后一点,下面是最简单也是最快最好的方法

for(var i = 0, length = array.length; i < length; i++)

总而言之,如果你想迭代循环一个对象的key,使用

for (var key in object)

如果你想迭代循环一个数组的元素,那么,使用

for(var i = 0, length = array.length; i < length; i++)

为什么for in循环不适合用于数组

时间: 2024-10-25 08:30:52

为什么for in循环不适合用于数组的相关文章

javascript增加Array的each方法 循环遍历多维数组

由于ECMA提供遍历数组的方法forEach()只能遍历一维数组,没有提供循环遍历多维数组的方法,所以我们自己来实现一个each()方法,来遍历多维数组. <script charset=utf-8 type=text/javascript> /*var arr = [1,2,3,[4,[5]]]; arr.forEach(function(item,index,arr){ alert(item); }); */ //模拟ECMA forEach  循环遍历多维数组 var arr = [1,

哪种代理适合用于Web数据采集

在Web数据采集中为了避免被服务器封锁而通过代理下载的情况很常见.但是,并非所有的代理都适合于Web数据采集.下面是鲲鹏数据的技术人员给出的说明. 根据HTTP代理的匿名性可以将其分为以下几种: 1. 透明代理(Transparent Proxies) 目标服务器能够检测到真实的源IP. 目标服务器根据HTTP请求头进行检测,判断依据: REMOTE_ADDR = 代理服务器 IP HTTP_VIA = 通常为代理服务器 IP(或代理软件名称,也可能无此头) HTTP_X_FORWARDED_F

一个for循环打印二维数组

#include<stdio.h> #define MAXX 2 #define MAXY 3 void printarray() { int Arr[MAXX][MAXY] = {1,2,3,4,5,6}; for(int i = 0;i< MAXX*MAXY;i++) { printf("%d\n",Arr[i/MAXY][i%MAXY]); ///注意,一直没管MAXX什么事,在计算这一类的时候,最容易出问题 } } 一个for循环打印二维数组

基于redis的分布式锁(不适合用于生产环境)

基于redis的分布式锁 1 介绍 这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁.会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁. 本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现.在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息. 2 分布式锁 2.1 什么是分布式锁? 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥

linux扩容根分区脚本,适合用于centos 6、centos 7版本

#!/bin/bash#auther chentongsan,time 2019-05-30#Description: 适用于系统根分区扩容,第一次.第二次.第三次--..适合用于centos 6.centos 7版本#扫描总线,识别新增添加的磁盘.echo "- - -" > /sys/class/scsi_host/host0/scanecho "- - -" > /sys/class/scsi_host/host1/scanecho "-

1、C#基础:变量、运算符、分支、循环、枚举、数组、方法

C#..Net以及IDE简介 一.什么是.Net? .Net指 .Net Framework框架,一种平台,一种技术. .Net Framework框架是.Net平台不可缺少的一部分,它提供了一个稳定的运行环境来保证我们基于.Net平台开发的各种应用能够正常运转. .Net Framework 各版本区别 2002年 1.0------vs2002 统一类型系统,基础类库,垃圾回收,多语言支持.ado.net 1.0.asp.net 1.0.winform 1.0. 2003年 1.1-----

第三节 java 数组(循环遍历、获取数组的最值(最大值和最小值)、选择排序、冒泡排序、练习控制台输出大写的A)

获取数组的最值(最大值和最小值) 思路: 1.获取最值需要进行比较,每一次比较都会有一个较大的值,因为该 值不确定,需要一个变量进行临储. 2.让数组中的每一个元素都和这个变量中的值进行比较,如果大于了 变量中的值,就用该变量记录较大值. 3.当所有的元素都比较完成,那么该变量中存储的就是数组中最大值 例子://最大值 int arr[] = {1,2,3,4,5,}; int max = arr[0]; for(int a=0;a<arr.length;a++){ {if(arr[a])>a

逗号运算符、do while循环、嵌套循环、数组简介

1.逗号运算符扩展了for循环的灵活性,因为它可以使您在一个循环中使用多个初始化或更新表达式. 实例程序: #include<stdio.h> int main() { const int A=37; const int B=23; int c,d; printf("   c     d\n"); for(c=1,d=A;c<=16;c++,d+=B) printf("%5d  $%4.2f\n",c,d/100.0); return 0; } 运

N个数循环奇数位数的数组解法

原题是这样的:有N个数组成的数组,要求去除奇数位置上的数字,分别打印出这些数字:剩下的数字从新排列,继续去除其中技术位置上的数字,并打印这些数字:以此类推,直到只剩下最后一个数字,要求在屏幕上打印这些数字,并且显示最后剩下的一个数字在原来数组中的位置. 其实这是很有规律的,用数学方法解很方便.想法是第一次去除的是:{1,3,5,7….}全部的奇数,第二次去除的是{1,3,5,7,9…}×2,第三次去除的是{1,3,5,7,9}×2^2以此类推,很容易根据数学规律写出程式出来. 不巧的是下午头脑发