js的for-in

原创
2018/05/24 14:13
阅读数 48

习惯了写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/

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部