1、for循環通常用來遍歷數組或類數組對象
模式1:長度緩存
for(var i=0,max=arr.length;i<max;i++){ //your code }
模式2:逐減,與零比較比與非零比較速度快
var i,myarrary=[]; for(i=myarray.length;i--;){ //code } var myarray=[],i=myarray.length; while(i--){ //code }
2、for-in循環用來遍歷非數組對象。
與for循環不同的是,for-in循環是對對象每個屬性(包括對象原型鏈的屬性)的枚舉,並且它並不是按照屬性排列的順序(無序)來的。
模式1:object.hasOwnProperty(propname); //如果proname是非繼承屬性,返回true;如果不存在或是從原型鏈繼承屬性,返回false。
for(var i in man){ if(man.hasOwnProperty(i)){ //code } }
模式2:用call
var i,hasOwn = Object.prototype.hasOwnProperty; for(i in man) if(hasOwn.call(man,i)){ //code }