文档章节

js的for-in

chro008
 chro008
发布于 2018/05/24 14:13
字数 395
阅读 5
收藏 0

习惯了写java、python的童鞋对以下代码肯定很熟悉

java:

String[] s = {"a","b","c"};
for(String ss : s) {
    System.out.println(ss);
}

python:

fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
print '当前水果 :', fruits[index]

各个语言均有一些遍历数组的快捷写法,想当然的,有的朋友在js中就会使用如下的代码

var names = ["zhangsan","lisi","wangwu"];
for(var name in names) {
    console.log(name);
}

其实不然,这里的name并不是数组的元素,而是元素对应的下标,

所以这段代码输出的并非你所想象的

“zhangsan”

“lisi”

“wangwu”

而是输出

0

1

2

当然你可以这样写:

var names = ["zhangsan","lisi","wangwu"];
for(var index in names) {
    console.log(names[index]);
}

但是这样写有2点不好的地方,

1是据测试,大数据量的数组用for-in遍历,普遍效率低于for

2是如果不小心对数组进行了属性扩展,那么往往会出现意想不到的问题,比如以下的例子

var names = ["zhangsan","lisi","wangwu"];
names.age=123;
Array.prototype.copy = function() {};
for(var index in names) {
    console.log(names[index]);
}

上面输出了names的所有属性,除了数组定义的三个名字之外还有123和f(){};

zhangsan lisi wangwu 123 ƒ () {}

所以不推荐用for-in,一般使用普通的for循环即可,可以如下写法

var names = ["zhangsan","lisi","wangwu"];
names.age=123;
Array.prototype.copy = function() {};
for(var index=0;index<names.length;index++) {
    console.log(names[index]);
}

这样写是没有问题的,当然还有ES6新出的for of也可以

var names = ["zhangsan","lisi","wangwu"];
names.age=123;
Array.prototype.copy = function() {};
for(var name of names) {
    console.log(name);
}

推荐阅读:for in ,for-of,for-each联系与区别

https://www.easytake.top/blog/

© 著作权归作者所有

chro008

chro008

粉丝 5
博文 46
码字总数 19512
作品 0
海淀
程序员
私信 提问
分享51本关于JavaScript方面的学习书籍(免费下载)

分享51本关于JavaScript方面的学习书籍(免费下载) 1、JavaScript面向对象15分钟教程 2、原型、作用域、闭包的完整解释 3、Javascript面向对象特性实现(封装、继承、接口) 4、JavaScript面向...

邓剑彬
2012/12/02
1K
12
JavaScript 开发者必备:七大资源共享

【IT168 技术】JavaScript 最近几年已经由一个二流选手变成使用最广的函数式编程语言。越来越多的资源投入到这个语言的开发中。   我最近做了很多 JS 开发,有前台的,也有在后台使用 Node...

作者:itwriter
2012/03/19
0
0
JavaScript 开发者必备的7个资源

JavaScript 最近几年已经由一个二流选手变成使用最广的函数式编程语言。越来越多的资源投入到这个语言的开发中。 我最近做了很多JS开发,有前台的,也有在后台使用 Node.js 的。我想在这里分...

虫虫
2012/03/17
8.3K
5
学习Javascript的8张思维导图

分别归类为:  javascript变量  javascript运算符  javascript数组  javascript流程语句  javascript字符串函数  javascript函数基础  javascript基础DOM操作  javascript正则表达式...

thinkyoung
2014/09/23
0
0
React Native iOS混合开发实战教程

在做RN开发的时候通常离不了JS 和Native之间的通信,比如:初始化RN时Native向JS传递数据,JS调用Native的相册选择图片,JS调用Native的模块进行一些复杂的计算,Native将一些数据(GPS信息,...

JiaPengHui
2018/09/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部