以下遍歷方法中for迴圈效能最好,而且優化版for迴圈效能最高。只有foreach不能跳出迴圈。
在迴圈陣列時,如果在迴圈過程中對陣列進行了增刪改,那麼在後面的每次迴圈中,進行操作的都是已經修改過後的陣列。
let arr = ['a','b','c','d'];for (let i = 0; i < arr.length; i++)
}console.log(arr);
//此時輸出 ["b", "d"] 而不是 ["c", "d"],即實際上刪除了 a、c
該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則可以使用 return ,return 只能在函式體內使用。
var arr = [1,2,3]for(var i=0; i)
//優化版for迴圈,對於較大的陣列優化比較明顯
for(var i=0,len = arr.length; i)
注意,以上迴圈是先判斷再執行,第一次執行也需判斷
foreach迴圈每個元素是值。
該迴圈無法中途跳出迴圈,break、continue、return都無法使用。
var arr = [1,2,3]arr.foreach(
function
(value, index, arr))
//value:必需,當前陣列元素的值
//index:可選,當前元素的索引
//arr:可選,當前元素所屬的陣列物件
for...in迴圈每個元素是索引,該迴圈效率比較低。for...in 迴圈不太適用於遍歷陣列,主要是為遍歷物件而設計的。
該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則也可以使用 return 。
//用於陣列
var arr = [1,2,3,4]
for (var i in
arr)
//用於物件
var obj =
for (var j in
obj)
for...of迴圈每個元素是值。該迴圈不支援物件。
該迴圈可以使用 break、continue 來跳出迴圈,若該迴圈放在函式體內則也可以使用 return。
var arr = [1,2,3]for (var
value of arr)
for (var
value of arr)
//輸出:1 2
map 迴圈可以遍歷陣列
map的**函式中支援 return返回值,return 後面的值將返回作為新陣列的元素,原陣列不會改變。
array.map(function(val,index,arr){})
let arr = ['a','b','c'];arr.map(
function
(val,index,arr))
let arr2 = arr.map(function
(val,index,arr))
console.log(arr2)
//["new a", "new b", "new c"]
物件的每個屬性都有乙個描述物件(descriptor),用來控制該屬性的行為。object.getownpropertydescriptor方法可以獲取該屬性的描述物件。
let obj = ;object.getownpropertydescriptor(obj, 'foo')
//
描述物件的enumerable屬性,稱為「可列舉性」,如果該屬性為false,某些操作比如一些遍歷操作會忽略當前屬性。
目前,有四個操作會忽略enumerable為false的屬性。
該遍歷方法輸出的是物件自身的屬性以及原型鏈上可列舉的屬性。不含symbol屬性。(包含所有可列舉的)(不含 symbol 的)
var obj =;object.prototype.country = 'china'; //
在原型鏈上新增屬性,預設的可列舉性是 true
console.log(obj);
for (var index in
obj)
object.keys返回乙個陣列,該陣列由物件自身的所有可列舉屬性的鍵名組成。(只包含自身可列舉的)(不含 symbol 的,不含繼承的)
var obj =;object.keys(obj).foreach(
function
(item))
object.getownpropertynames返回乙個陣列,該物件由物件自身所有的屬性的鍵名組成。(包括自身所有的)(不含 symbol 的,不含繼承的)
reflect.ownkeys返回乙個陣列,包含物件自身的所有鍵名,不管鍵名是 symbol 或字串,也不管是否可列舉。(包含所有的除了繼承)
for(var i=1;i<=10;i++)console.log(i) //1234567
}
但是要注意,break語句跳出的是自己所在的那一層 for 迴圈語法,如果有多個 for 迴圈巢狀,break 總是跳出自己所在的那一層 for 迴圈。
for (let i=1; i<=10; i++)}//break 只是跳到這裡,外層的for迴圈還在繼續
console.log('break');
}
for(var i=1;i<=10;i++)console.log(i) //1234567910
}
return語句只能出現在函式體內,出現在**中的其他任何地方都會造成語法錯誤!return語句就是用於指定函式返回的值。
functiona()
}}console.log(a());
//報錯:uncaught syntaxerror: illegal return statementfor(var i=1;i<=10;i++)
console.log(i)
}
js中的一些方法
陣列 map 方法建立乙個新陣列,其結果是該陣列中的每個元素都呼叫乙個提供的函式後返回的結果。返回值 乙個新陣列,每個元素都是 函式的結果。var array1 1,4,9,16 const map1 array1.map x x 2 console.log map1 expected output...
JS遍歷物件屬性的一些方法
靜態方法reflect.ownkeys 返回乙個由目標物件自身的屬性鍵組成的陣列。object.entries 方法返回乙個給定物件自身可列舉屬性的鍵值對陣列,其排列與使用for.in迴圈遍歷該物件時返回的順序一致 區別在於for in迴圈還會列舉原型鏈中的屬性 object.fromentries...
JS陣列中的一些方法
let arr let arrjson 20,22,18,21 every 判斷陣列中每個元素都大於或小於乙個指定元素 let newarr arrjson.every item console.log newarr false 必須要全部滿足才會返回true sort 陣列排序 返回乙個新的陣列 ...