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/

相關文章
相關標籤/搜索