摘要:數組遍歷普通循環代碼如下注有待優化的空間優化循環注將長度緩存起來,避免重復獲取,基本是性能最高的一種數組遍歷方法。循環的使用范圍包括數組,,,類數組對象如對象,對象等,對象,以及字符串等對象的屬性遍歷關于對象的遍歷,主要是指其屬性的遍歷。
數組遍歷 1.普通for循環
代碼如下
for(var i=0;i注:有待優化的空間
2.優化for循環for(var i=0,len=arr.length;i注:將長度緩存起來,避免重復獲取,基本是性能最高的一種數組遍歷方法。(在遍歷長度較多的數組時,才會顯示優勢)
3. forEach循環arr.forEach(function(el){ //do something here })注:數組自帶的方法
4. for in 方法var arr=[2,3,4] for(var item in arr){ console.log(item)// 0,1,2 }注:效率很低.該方法獲取的是鍵名。應用于array時,為下標index,應用到對象時,為key。下文提到的for of循環獲取到的是鍵值。
5. map方法arr.map(function(item){ //do something here })注:方式優雅,效率很低,還不如forEach
6. for of 循環(ES6)for(var item of arr){ // do something here }注:是ES6所支持的方法,凡是具有iterator接口的數據接口,都可以使用for of遍歷他的成員。其內部的實現方法是調用數據結構的Symbol.iterator 方法。for of循環的使用范圍包括:數組,Set,Map,類數組對象(如arguments對象,DOM Nodelist對象等),Generator對象,以及字符串等
對象的屬性遍歷關于對象的遍歷,主要是指其屬性的遍歷。以下總結6種方法來遍歷對象的屬性
1. for infor in循環遍歷對象自身 和 可繼承的 可枚舉屬性(不包含Symbol屬性)
2. Object.keys(obj)該方法返回一個數組,包含對象自身的(不包含繼承的)所有可枚舉的屬性(不包含Symbol屬性)
3. Object.getOwnPropertyNames(obj)注:大多數情況下,我們只關心對象自身的屬性,引入繼承的屬性會讓問題 復雜化。所以盡量不要用for in循環而使用Object.keys()代替
包含對象自身的所有屬性(不包含Symbol屬性,但是包含不可枚舉的屬性)
4. Object.getOwnPropertySymbols(obj)返回一個數組,包含對象自身的所有Sybmol屬性。
5. Reflect.ownKeys(obj)返回一個數組,包含對象自身的所有屬性,不管屬性名是否是Symbol或字符串,也不管是否是可枚舉的
6. Reflect.enumerate(obj)與for in循環相同
擴展閱讀:屬性的可枚舉性描述
對象的每個屬性都有一個描述對象(Descriptor),用于描述該屬性的行為。
獲取方法
通過Object.getOwnPropertyDescriptor方法可以獲取該屬性的描述對象
var a={A:1} Object.getOwnPropertyDescriptor(a,"A"); //{ // configurable:true, // enumerable:true,可枚舉性,true // value:1, // writable:true //}引入目的
當改屬性為false時,標示某些操作會忽略這個屬性:
for in 循環
Object.keys()
JSON.stringify()
Object.assign()
Reflect.enumerate()
實際上,引入改屬性的目的,就是為了讓某些屬性能夠規避掉for in循環
另外,ES6種規定,所有Class原型上的方法都是不可枚舉的。參考文獻:
阮一峰:《ES6標準入門》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88109.html
摘要:中可以實現遍歷的數據類型主要是對象,其中包括普通對象與數組。遍歷器是一種接口,為各種不同的數據結構提供統一的訪問機制。實例五遍歷器對象實例五是的遍歷過程,通過手動調用其對象的方法實現信息獲取。為每個數組元素執行函數。 前言 ??將依據自身痛點學習,計劃對原生JavaScript寫一個系統,本文為第一篇,感興趣的同學可以關注個人公眾號:ZeroToOneMe,或者github博客,將持續...
摘要:判斷是深拷貝對象還是數組如果要拷貝的對象的屬性依然是個復合類型,遞歸運用遞歸,當要拷貝的對象或者數組的屬性依然是個對象或者數組時,遞歸調用。遍歷對象聊完了深拷貝和淺拷貝,接下來說一下遍歷。 在js這門語言中,數據存放在堆中,而數據的引用的存放在棧中。 淺拷貝 我們說的淺拷貝,指的是,引用地址的拷貝,棧中兩塊不同的引用地址都指向了堆中同樣一塊區域。所以,我們通過一個地址修改了堆中的數據,...
摘要:如圖遍歷數組遍歷數組元素并以某種方式處理每個元素是一個常見的操作。如圖不過,里的功能比較強大,可以遍歷而且返回值是的則被省略掉總結遍歷對象,遍歷出來的是鍵名,而不是鍵值,參數必須是對象。 可能是由于職業的關系,下班之后完全不想Open PC,但很多知識點有必要自己做個小小總結。本人之前對原生Array和Object完全沒概念。 遍歷對象的方法: Object.keys(Object)...
摘要:總結中的循環遍歷定義一個數組和對象經常用來遍歷數組元素遍歷值為數組元素索引用來遍歷數組元素第一個參數為數組元素,第二個參數為數組元素索引,第三個參數為數組本身可選沒有返回值用來遍歷數組元素第一個參數為數組元素,第二個參數為數組元素索引,第三 總結JavaScript中的循環遍歷 定義一個數組和對象 const arr = [a, b, c, d, e, f]; const obj = ...
摘要:數組的本質數組屬于一種特殊的對象。運算符會返回數組的類型是對象的鍵名一律為字符串,所以,數組的鍵名其實也是字符串。數組的空位讀取遍歷無兩個逗號之間沒有任何值,我們稱該數組存在空位。數組的方法可以將類似數組的對象變成真正的數組。 定義數組的本質length 屬性in 運算符for...in 循環和數組的遍歷數組的空位類似數組的對象參考鏈接 1.定義 任何類型的數據,都可以放入數組。 va...
閱讀 2618·2021-09-28 09:36
閱讀 2228·2021-09-07 09:58
閱讀 1494·2019-08-26 13:53
閱讀 1275·2019-08-23 17:53
閱讀 3023·2019-08-23 15:34
閱讀 1850·2019-08-23 15:34
閱讀 2864·2019-08-23 12:04
閱讀 3717·2019-08-23 10:56