<!doctype html>
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<script>
var arr=[1,4,56,7,7,8,8,,9,,9,9,,9,9]; var obj={name:"eval",age:23,sex:"女"}; //只能遍歷索引數組。 for(var j=0,len=arr.length;j<len;j++){ console.log(arr[j]); }
//for...in 是遍歷對象的健名,或者數組的下標(數組,對象都可用)
存在的問題:1)在某些情況下,這段代碼可能按照隨機順序遍歷數組元素,
2)數組原型鏈上的屬性都能被訪問到
Array.prototype.a=123;
Array.prototype.foo=function(){};
var arr=[2,3];
for(let k in arr){
console.log(arr[k]);//2,3,123,function()
}
但是我們可以進行過濾處理(也不是很麻煩)
for(let k in arr){
arr.hasOwnProperty(k)&& console.log(arr[k]);
}
總之:for-in是為普通對象設計的,你可以遍歷得到字符串類型的鍵,因此不適用於數組遍歷
for(var i in arr){ console.log(arr[i]); } for(var i in obj){ console.log(i); }
//for …of….遍歷數組的鍵值,不能遍歷對象,但是可以遍歷類數組對象(也是數組),還可以用來遍歷一個字符串(它將字符串視為一系列的Unicode字符來進行遍歷:) for(let value of arr){ console.log(value); } 利用for....of....遍歷一個字符串 for(var chr of "abcdefr"){ console.log(chr); } 結果:a,b,c,d,e,f,r
//js中forEach只能遍歷數組,不能遍歷對象
存在的問題:不能使用break語句中斷循環,也不能使用return語句返回到外層函數。
arr.forEach(function(e){ console.log(e); }); //js中的forEach只是支持對數組的遍歷,不支持對對象的遍歷 /* obj.forEach(function(e){ console.log(e); }); */ //arr.map只能遍歷數組 arr.map(function(v,i){ console.log(v,i); }); arr.map((v,i)=>(console.log(i,v))); var list = new Map().set('a',1).set('b',2).set('c',3); console.log(list); for (var [key,value] of list) { console.log(key + ' => ' + value); } </script> </body> </html>
