1. 程式人生 > >js中的for in迴圈

js中的for in迴圈

原型新增屬性之後,預設情況下列舉,最後輸出1234513

function getNewArrayTwo(){
var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];
for(var i in array){
result.push(array[i]);
}
alert(result.join(''));
}

所以建議不要對陣列執行for in迴圈,事實上,在高效能javascript這本書中,也強調了for in迴圈的不好,因為它總是會訪問該物件的原型,看下原型上是否有屬性,這在無意中就給遍歷增加了額外的壓力。

解決方法:

如果某個物件具有給定名稱的屬性,那麼Object.prototype.hasOwnProperty(name)返回true。如果該物件是從原型鏈中繼承了該屬性,或者根本沒有這樣的一個屬性,則返回false。通過hasOwnProperty限定for in迴圈在當前中遍歷,而不用去考慮它的原型屬性。

function finalArray(){
var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];
for(var i in array){
if(array.hasOwnProperty(i)){
result.push(array[i]);
}
}
alert(result.join(''));
}