今天寫個函數時想遍歷數組,想一想沒怎麼用過for...of...
這類的語法,因而作了個嘗試,竟發現for...of...沒法改變數組元素。
javascript
貼代碼,上例子java
let array = [1,2,3]; for(let num of array){ num++; console.log(num); } console.log(array); //輸出以下 //2 //3 //4 //[1,2,3]
這是爲何呢,暫時找不到答案
那麼for...in...會不會呢?
數組
因而又試試for...in...
語法
代碼以下函數
let obj = { std1 : "Bob", std2 : "Mike" } for(let name in obj){ obj[name] = 'Lily'; console.log(obj[name]); } console.log(obj); //顯示以下 //"Lily" //"Lily" //{std1:"Lily", std2:"Lily"}
。。。。。
留個坑,之後看能不能找到爲何。
後來找出解釋,不知是否正確,以下:
如下是我的推斷,有錯誤請指出
code
如下是MDN的可迭代協議:「可迭代協議容許 JavaScript 對象去定義或定製它們的迭代行爲, 例如(定義)在一個 for..of 結構中什麼值能夠被循環(獲得)。一些內置類型都是內置的可迭代對象而且有默認的迭代行爲, 好比 Array or Map, 另外一些類型則不是 (好比Object) 。」
這裏咱們注意到Array和Map
與Object
的迭代行爲是不同的對象
另外一段材料:「當一個對象須要被迭代的時候(好比開始用於一個for..of循環中),它的@@iterator方法被調用而且無參數,而後返回一個用於在迭代中得到值的迭代器。」
重點在於「返回一個用於在迭代中得到值的迭代器。」
這裏咱們能夠看到for of 的本質是返回一個迭代器
ip
迭代器經過next()方法返回值
,而不是指向地址
,因此在for of 迭代中沒法改變數組元素get