2020-12-17 for in和for of

(1)Iterator

?他是一個(gè)接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一訪問(wèn)機(jī)制顷蟀,任何數(shù)據(jù)結(jié)構(gòu)只要部署Iterator接口搜囱,就可以完成遍歷操作

?遍歷過(guò)程

  • 創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前結(jié)構(gòu)的起始位置
  • 第一次調(diào)用指針對(duì)象的next方法趾痘,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員
  • 第二次調(diào)用指向第二個(gè)成員
  • 不斷調(diào)用next方法,直到指向他數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置
  • 每一次調(diào)用next方法蔓钟,都會(huì)返回?cái)?shù)據(jù)結(jié)構(gòu)的當(dāng)前成員信息永票。就是返回包含value和done兩個(gè)屬性的對(duì)象,其中滥沫,value是當(dāng)前成員的值侣集,done是一個(gè)布爾值,表示遍歷是否結(jié)束

?原生具備Iterator接口的結(jié)構(gòu)

  • Array
  • Map
  • Set
  • String
  • TypedArray
  • 函數(shù)的arguments對(duì)象
  • NodeList對(duì)象

(2)for...of...

?一個(gè)數(shù)據(jù)結(jié)構(gòu)只要部署了Symbol.iterator屬性兰绣,就會(huì)被視為具有iterator接口世分,就可以用for...of循環(huán)遍歷他的成員
?對(duì)于普通的對(duì)象使用for...of遍歷,會(huì)報(bào)錯(cuò)

解決方法

  • 使用Object.keys方法將對(duì)象的鍵名生成一個(gè)數(shù)組缀辩,然后遍歷這個(gè)數(shù)組臭埋。

  • image.png

優(yōu)點(diǎn)

  • 遍歷數(shù)組時(shí),相比于其他方法更簡(jiǎn)潔
  • 與forEach方法相比臀玄,他可以與break瓢阴,continue,return結(jié)合使用

for...in...

?for..in循環(huán)會(huì)遍歷原型鏈上可以枚舉的屬性健无,包括原型鏈上的方法

image.png
?將對(duì)象的一個(gè)屬性設(shè)置為不可枚舉的炫掐;
image.png

? for...in...的缺點(diǎn)

  • for...in循環(huán)不僅遍歷數(shù)字鍵名,還會(huì)遍歷手動(dòng)添加的其他鍵睬涧,甚至包括原型鏈上的鍵募胃。
  • 某些情況下,for...in循環(huán)會(huì)以任意順序遍歷鍵名畦浓。
  • 數(shù)組的鍵名是數(shù)字痹束,但是for...in循環(huán)是以字符串作為鍵名“0”、“1”讶请、“2”
  • 不適合遍歷數(shù)組
  • for...in 循環(huán)只遍歷可枚舉屬性

(3)Object.definedPeoperty()

?可以用來(lái)新增對(duì)象的一個(gè)屬性祷嘶,也可以用來(lái)修改一個(gè)對(duì)象的屬性,返回這個(gè)對(duì)象
?Object.defineProperty(obj, prop, descriptor)

descriptor

  • configurable:當(dāng)且僅當(dāng)該屬性的 configurable 鍵值為 true 時(shí)夺溢,該屬性的描述符才能夠被改變论巍,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)象上被刪除。默認(rèn)為false
  • enumerable:當(dāng)且僅當(dāng)該屬性的 enumerable 鍵值為 true 時(shí)风响,該屬性才會(huì)出現(xiàn)在對(duì)象的枚舉屬性中嘉汰。默認(rèn)為false
  • value: 該屬性對(duì)應(yīng)的值∽辞冢可以是任何有效的 JavaScript 值(數(shù)值鞋怀,對(duì)象,函數(shù)等)持搜。默認(rèn)為undefined
  • writable: 當(dāng)且僅當(dāng)該屬性的 writable 鍵值為 true 時(shí)密似,屬性的值,也就是上面的 value葫盼,才能被賦值運(yùn)算符改變残腌。默認(rèn)為false

Object.getOwnPropertyDescriptor(obj, 'name')?//查看一個(gè)屬性的描述

(4)Object.getOwnPropertyNames()

?方法返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的全部屬性的屬性名贫导,不管該屬性是否可遍歷抛猫。

?可以使用上面這種方法來(lái)遍歷出不可以枚舉的對(duì)象屬性值;
image.png

?只能遍歷自身可以遍歷的數(shù)組
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脱盲,隨后出現(xiàn)的幾起案子邑滨,更是在濱河造成了極大的恐慌,老刑警劉巖钱反,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掖看,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡面哥,警方通過(guò)查閱死者的電腦和手機(jī)哎壳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)尚卫,“玉大人归榕,你說(shuō)我怎么就攤上這事≈ㄉ妫” “怎么了刹泄?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵外里,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我特石,道長(zhǎng)盅蝗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任姆蘸,我火速辦了婚禮墩莫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逞敷。我一直安慰自己狂秦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布推捐。 她就那樣靜靜地躺著裂问,像睡著了一般。 火紅的嫁衣襯著肌膚如雪玖姑。 梳的紋絲不亂的頭發(fā)上愕秫,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音焰络,去河邊找鬼戴甩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛闪彼,可吹牛的內(nèi)容都是我干的甜孤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼畏腕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缴川!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起描馅,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤把夸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后铭污,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恋日,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嘹狞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岂膳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡磅网,死狀恐怖谈截,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤簸喂,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布毙死,位于F島的核電站,受9級(jí)特大地震影響娘赴,放射性物質(zhì)發(fā)生泄漏规哲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一诽表、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隅肥,春花似錦竿奏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至秃症,卻和暖如春候址,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背种柑。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工岗仑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人聚请。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓荠雕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親驶赏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炸卑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • [if !supportLists]第一章 [endif]ES2015 ECMAScript 6(簡(jiǎn)稱ES6)是于...
    海綿寶寶_b8a2閱讀 551評(píng)論 0 0
  • ECMAScript和JavaScript的關(guān)系是,前者是后者的規(guī)格煤傍,后者是前者的一種實(shí)現(xiàn)初學(xué)者一開始學(xué)習(xí)Java...
    _雙眸閱讀 301評(píng)論 0 0
  • 由于受新型冠狀病毒的影響盖文,假期又延長(zhǎng)了,又不能出門蚯姆,只好在家認(rèn)真學(xué)習(xí)了五续,就借此機(jī)會(huì)閱讀完阮一峰老師的ECMAScr...
    寫前端的大叔閱讀 174評(píng)論 0 0
  • 我的前端學(xué)習(xí)跟很多小白一樣,從W3School起步蒋失,然后看了不少阮一峰前輩的博客返帕,這篇文章是我很早以前根據(jù)阮的教程...
    Even_Cyw閱讀 357評(píng)論 0 0
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個(gè)人版提純! babel babel負(fù)責(zé)將JS高級(jí)語(yǔ)法轉(zhuǎn)義篙挽,...
    Devildi已被占用閱讀 1,972評(píng)論 0 4