js的for-in

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

java:python

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中就会使用以下的代码app

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

其实否则,这里的name并非数组的元素,而是元素对应的下标,测试

因此这段代码输出的并不是你所想象的大数据

“zhangsan”ui

“lisi”.net

“wangwu”prototype

而是输出code

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/

相关文章
相关标签/搜索