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