for in 列舉陣列(Array)的危險陷阱
- 詳細內容
- 分類:Javascript
- 發佈:2013-02-28, 週四 10:12
- 點擊數:2265
Javascript for in 列舉陣列(Array)的危險陷阱:
一般而言,我們使用for來重複操作陣列,使用for in 來列舉物件屬性。
但for in 也不是不能操作陣列,只是這種作法有陷阱存在。
原因出在於對物件屬性的擴充,這會造成for in在操作陣列時,將擴充屬性也當成陣列內容列舉出來。
讓我們看看下面的例子。
for in 列舉陣列(Array)的範例:
<script type="text/javascript">
var arr=["one","two","three"];
for ( a in arr){
document.writeln("arr["+a+"]="+arr[a]+"<br/>");
}
arr.four="four";
Array.prototype.five="five";
document.writeln("=====================<br/>");
for ( a in arr){
document.writeln("arr["+a+"]="+arr[a]+"<br/>");
}
</script>
for in 列舉陣列(Array)的範例輸出:
arr[0]=one
arr[1]=two
arr[2]=three
=====================
arr[0]=one
arr[1]=two
arr[2]=three
arr[four]=four
arr[five]=five
很明顯陣列arr新增屬性four與原型新增屬性five都被當成陣列元素列舉出來了。
這種邏輯錯誤在真正寫程式時,可能不容易發現。
就算是自己確定沒有對物件新增屬性,但在合作開發的程式下,
誰能確定陣列原型沒有被動過...
所以說,用for in 操作陣列是危險的行為,
對內建物件的原型進行擴充,也是不好的習慣。當然對ECMAScript未來支援的擴充實作除外。
參考:迴圈敘述 for 與 for in、陣列物件 Array。
按個讚!~支持本站!~
你可能會有興趣的文章
- Array.valueOf()傳回原始值
- Array.unshift()新增元素並傳回陣列長度
- Array.toString()傳回陣列元素字串
- Array.splice()加入移除陣列元素
- Array.sort()陣列排序
- Array.slice()傳回陣列的部分片段