陣列與 for in
這堂課將介紹一個很容易誤會的用法,Array & for in
還記得在 reflection and extend 這堂課中我們透過 for 迴圈將物件的屬性與方法擴充到另一個物件,而在 JavaScript 中,陣列也是物件,所以我們可以透過 for in 的方式取得陣列中的索引與值 name value pair
1 | var arr = ['John', 'Jane', 'Jim']; |
在單純透過中括號建立物件 literal array 時,其實也是 new 一個物件,所以它的 prototype 也會指向 Array.prototype,所以如果我們在這上方直接新增屬性或方法,新建立的陣列也會取得,但透過 for in 列出陣列的 name value pair 時,新增在 Array.prototype 的屬性與方法也會被列出
1 | Array.prototype.myCustomFeature = 'cool!'; |
所以在開發 Array 相關程式時,避免使用 for in 方式遍歷它的內容,使用標準的 for 迴圈即可,就不會出現 prototype 所新增的屬性與方法了。
1 | for(var i = 0; i < arr.length; i++>) { |