**如下
for(var i=0;i
length;i++)
注:有待優化的空間
for(var i=0,len=arr.
length;i
i++)
注:將長度快取起來,避免重複獲取,基本是效能最高的一種陣列遍歷方法。(在遍歷長度較多的陣列時,才會顯示優勢)
arr.foreach(function
(el))
注:陣列自帶的方法
var arr=[2,3,4]
for(var item
in arr)
注:效率很低.該方法獲取的是鍵名。應用於array時,為下標index,應用到物件時,為key。下文提到的for of迴圈獲取到的是鍵值。
arr.map(function
(item))
注:方式優雅,效率很低,還不如foreach
for(var item
of arr)
注:是es6所支援的方法,凡是具有iterator介面的資料介面,都可以使用for of遍歷他的成員。其內部的實現方法是呼叫資料結構的symbol.iterator 方法。for of迴圈的使用範圍包括:陣列,set,map,類陣列物件(如arguments物件,dom nodelist物件等),generator物件,以及字串等
關於物件的遍歷,主要是指其屬性的遍歷。以下總結6種方法來遍歷物件的屬性
for in迴圈遍歷物件自身和可繼承的可列舉屬性(不包含symbol屬性)
該方法返回乙個陣列,包含物件自身的(不包含繼承的)所有可列舉的屬性(不包含symbol屬性)
注:大多數情況下,我們只關心物件自身的屬性,引入繼承的屬性會讓問題 複雜化。所以盡量不要用for in迴圈而使用object.keys()代替包含物件自身的所有屬性(不包含symbol屬性,但是包含不可列舉的屬性)
返回乙個陣列,包含物件自身的所有sybmol屬性。
返回乙個陣列,包含物件自身的所有屬性,不管屬性名是否是symbol或字串,也不管是否是可列舉的
與for in迴圈相同
描述物件的每個屬性都有乙個描述物件(descriptor),用於描述該屬性的行為。
獲取方法通過object.getownpropertydescriptor方法可以獲取該屬性的描述物件
var a=
object.getownpropertydescriptor(a,"a");
//
引入目的當改屬性為false時,標示某些操作會忽略這個屬性:
for in 迴圈
object.keys()
json.stringify()
object.assign()
reflect.enumerate()
實際上,引入改屬性的目的,就是為了讓某些屬性能夠規避掉for in迴圈
另外,es6種規定,所有class原型上的方法都是不可列舉的。
遍歷陣列,遍歷物件的方法
遍歷陣列 方法1 for 迴圈 使用臨時變數將陣列長度快取起來,避免重複獲取陣列長度 for var i 0,leng arr.length i leng i 方法2 foreach迴圈 遍歷陣列中的每一項,沒有返回值,對原陣列沒有影響,不支援ie arr.foreach item,index,ar...
js遍歷陣列和物件的方法
第二條鏈結裡有分析不同遍歷方式的效率 var arr name age var obj for in遍歷陣列和和物件 for key in obj foreach遍歷陣列,三個引數依次是陣列元素 索引 陣列本身 arr.foreach function value,index,array 返回乙個陣...
陣列和物件的遍歷
物件的遍歷 1 使用object.keys 遍歷 返回乙個陣列,包括物件自身的 不含繼承的 所有可列舉屬性 不含symbol屬性 var obj object.keys obj foreach function key 2 使用for in 遍歷 迴圈遍歷物件自身的和繼承的可列舉屬性 不含symbo...