js是一門動態語言,而且是弱型別的,這也引來了一些不必要的麻煩,比如說陣列的長度不固定,陣列也可以像其他語言裡的物件一樣給它新增屬性看下面的例子
var arr = [1,2,3]arr.name = '李世明'
for(var i = 0 , len = arr.length ; i)
console.log('陣列長度:'len)
上面是正常的使用常規的for迴圈語句,還有乙個用來迴圈物件的for(var key in obj),假如使用for in以上的arr會出現什麼樣的結果呢?它會迴圈4次,沒錯就是這麼怪異,下面來解析一下為什麼會這樣,解釋的不對的話小夥伴們多多指教,下面只是我個人的理解,或許不對
陣列本身也是個由鍵值對組成的,在普通的陣列中(沒有給陣列追加任何屬性的情況下比如上面的name屬性),驗證這點可以使用console.log(arr)和console.dir(arr)驗證檢視
所以name作為arr的乙個用for in顯然就會被迭代到,因為他列舉的是鍵值對,在這個arr的陣列中可列舉的屬性就4個,看**
所以在迴圈陣列時應該盡量避開for in 以免發生不必要的麻煩
當然了在es 2015中可以用for of來替代for in,for of修復了這個bug
for in 迴圈遍歷物件遇到的問題
當原型鏈上的可列舉屬性和目標物件的屬性同名時,原型鏈上的同名屬性會被忽略 a a.proto name ye for item in a console.log item name a.proto name2 ye for item in a console.log item name name2順...
for 迴圈和 for in 迴圈的區別
for 迴圈 塊一定的次數 for in 遍歷陣列或者物件的屬性 對陣列或者物件的屬性進行迴圈操作 注意 for in 迴圈會訪問該物件的原型,應該用在非陣列物件的遍歷上,不建議使用該方法遍歷陣列。示例 1 doctype html 2 html lang en 3 head 4 meta char...
for迴圈和for in的區別
for var i in arr 和for var i 0 i前者迴圈的是屬性,後者迴圈的才是陣列。如果專案中對陣列進行了擴充套件,不能使用前者,否者擴充套件陣列屬性時擴充套件的函式體也會被當成資料返回。比如說我們擴充套件乙個陣列屬性array.prototype.remove function v...