js中的for in迴圈
阿新 • • 發佈:2019-02-02
原型新增屬性之後,預設情況下列舉,最後輸出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('')); }