js中forEach宁玫,for in粗恢,for of循環(huán)的用法

一、一般的遍歷數(shù)組的方法:

var array = [1,2,3,4,5,6,7];?

? ? for(var i = 0; i < array.length; i) {?

? ? ? ? console.log(i,array[i]);?

? ? }?

二欧瘪、用for in的方遍歷數(shù)組

for(let index in array) {?

? ? ? ? console.log(index,array[index]);?

? ? };?

三眷射、for Each

array.forEach (v=>{? console.log(v);? });

array.forEach(function(v){?

? ? console.log(v);?

});


四、用for in不僅可以對數(shù)組,也可以對enumerable對象操作

var A = {a:1,b:2,c:3,d:"hello world"};? for(let k in A) {?

? ? console.log(k,A[k]);?

}

五佛掖、在ES6中,增加了一個for of循環(huán),使用起來很簡單

for(let v of array) {? ? ? ? ? console.log(v);? ? ? };

let?s?="helloabc";?

????? for(let?c?of?s)?{??

?? ?? console.log(c);?

???? }


總結(jié)來說:for in總是得到對像的key或數(shù)組,字符串的下標(biāo),而for of和forEach一樣,是直接得到值

結(jié)果for of不能對象用

對于新出來的Map,Set上面

var set =new Set();?

? ? set.add("a").add("b").add("d").add("c");?

? ? var map =new Map();?

? ? map.set("a",1).set("b",2).set(999,3);?

? ? for (let v of set) {?

? ? ? ? console.log(v);?

? ? }?

? ? console.log("--------------------");?

? ? for(let [k,v] of map) {?

? ? ? ? console.log(k,v);?

? ? }?

javascript遍歷對象詳細(xì)總結(jié)

1.原生javascript遍歷

(1)for循環(huán)遍歷

let array1 = ['a','b','c'];for(let i = 0;i < array1.length;i++){

? console.log(array1[i]);? // a? b? c }

(2)JavaScript 提供了 foreach()? map() 兩個可遍歷 Array對象 的方

forEach和map用法類似妖碉,都可以遍歷到數(shù)組的每個元素,而且參數(shù)一致芥被;

Array.forEach(function(value , index , array){//value為遍歷的當(dāng)前元素欧宜,index為當(dāng)前索引,array為正在操作的數(shù)組//do something},thisArg)//thisArg為執(zhí)行回調(diào)時的this值

不同點:

? forEach()?方法對數(shù)組的每個元素執(zhí)行一次提供的函數(shù)拴魄∪呷祝總是返回undefined;

? map() 方法創(chuàng)建一個新數(shù)組匹中,其結(jié)果是該數(shù)組中的每個元素都調(diào)用一個提供的函數(shù)后返回的結(jié)果蚀狰。返回值是一個新的數(shù)組;


對于類似數(shù)組的結(jié)構(gòu)职员,可先轉(zhuǎn)換為數(shù)組麻蹋,再進行遍歷

let divList = document.querySelectorAll('div');//divList不是數(shù)組,而是nodeList//進行轉(zhuǎn)換后再遍歷[].slice.call(divList).forEach(function(element,index){

? element.classList.add('test')

})

Array.prototype.slice.call(divList).forEach(function(element,index){ //偽數(shù)組轉(zhuǎn)成數(shù)組

? element.classList.remove('test')

})

[...divList].forEach(function(element,index){//<strong>ES6寫法</strong>//do something})

(3)for ··· in ···???? /????? for ··· of ···

for...in語句以任意順序遍歷一個對象的可枚舉屬性焊切。對于每個不同的屬性扮授,語句都會被執(zhí)行。每次迭代時专肪,分配的是屬性名  

補充 : 因為迭代的順序是依賴于執(zhí)行環(huán)境的刹勃,所以數(shù)組遍歷不一定按次序訪問元素。?因此當(dāng)?shù)切┰L問次序重要的 arrays 時用整數(shù)索引去進行for循環(huán)?(或者使用Array.prototype.forEach()for...of循環(huán)) 嚎尤。

let array2 = ['a','b','c']

let obj1 = {

? name : 'lei',

? age : '16'}

for(var i in array2){//i ?為 index?

console.log(i )//0 1 2}

for(var i in obj1){//i為屬性名

console.log(i)//name age}

ES6新增了 遍歷器(Iterator)機制荔仁,為不同的數(shù)據(jù)結(jié)構(gòu)提供統(tǒng)一的訪問機制。只要部署了Iterator的數(shù)據(jù)結(jié)構(gòu)都可以使用 for ··· of ··· 完成遍歷操作? (?Iterator詳解 : ?http://es6.ruanyifeng.com/#docs/iterator ),每次迭代分配的是?屬性值

?原生具備 Iterator 接口的數(shù)據(jù)結(jié)構(gòu)如下:

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

let array2 = ['a','b','c']

let obj1 = {

? name : 'lei',

? age : '16'

}

for(variable? of array2){//<strong>variable? 為 value</strong>console.log(variable )//'a','b','c'}

for(variable? of obj1){//<strong>普通對象不能這樣用</strong>console.log(variable)// 報錯 : main.js:11Uncaught TypeError: obj1[Symbol.iterator] is not a function}

let divList = document.querySelectorAll('div');

for(element of divlist){//可遍歷所有的div節(jié)點<br>  //do something <br>

}

如何讓普通對象可以用for of 進行遍歷呢乏梁?? http://es6.ruanyifeng.com/#docs/iterator? 一書中有詳細(xì)說明了次洼!


  除了迭代時分配的一個是屬性名、一個是屬性值外遇骑,for in 和 for of 還有其他不同????(MDN文檔: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...of)

    for...in循環(huán)會遍歷一個object所有的可枚舉屬性卖毁。

   ?? for...of會遍歷具有iterator接口的數(shù)據(jù)結(jié)構(gòu)

for...in遍歷(當(dāng)前對象及其原型上的)每一個屬性名稱,而for...of遍歷(當(dāng)前對象上的)每一個屬性值

Object.prototype.objCustom =function () {};

Array.prototype.arrCustom =function () {};

let iterable = [3, 5, 7];

iterable.foo = "hello";

for(let i? in iterable) {

? console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"}

for (let i of iterable) {

? console.log(i); // logs 3, 5, 7}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市落萎,隨后出現(xiàn)的幾起案子亥啦,更是在濱河造成了極大的恐慌,老刑警劉巖练链,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翔脱,死亡現(xiàn)場離奇詭異,居然都是意外死亡媒鼓,警方通過查閱死者的電腦和手機碍侦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隶糕,“玉大人,你說我怎么就攤上這事站玄∶蹲ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵株旷,是天一觀的道長再登。 經(jīng)常有香客問我,道長晾剖,這世上最難降的妖魔是什么锉矢? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮齿尽,結(jié)果婚禮上沽损,老公的妹妹穿的比我還像新娘。我一直安慰自己循头,他們只是感情好绵估,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卡骂,像睡著了一般国裳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上全跨,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天缝左,我揣著相機與錄音,去河邊找鬼。 笑死渺杉,一個胖子當(dāng)著我的面吹牛蛇数,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播少办,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼苞慢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了英妓?” 一聲冷哼從身側(cè)響起挽放,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔓纠,沒想到半個月后辑畦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡腿倚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年纯出,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敷燎。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡暂筝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硬贯,到底是詐尸還是另有隱情焕襟,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布饭豹,位于F島的核電站鸵赖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拄衰。R本人自食惡果不足惜它褪,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翘悉。 院中可真熱鬧茫打,春花似錦、人聲如沸妖混。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽源葫。三九已至诗越,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間息堂,已是汗流浹背嚷狞。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工块促, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人床未。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓竭翠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薇搁。 傳聞我的和親對象是個殘疾皇子斋扰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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

  • 在ECMAScript5(簡稱 ES5)中,有三種 for 循環(huán)啃洋,分別是: 簡單for循環(huán) for-in forE...
    l4u閱讀 557評論 0 0
  • *node下用express框架传货,實現(xiàn)一個簡單的mvc *構(gòu)建工具:gulp / babel / webpack ...
    韓娜愛吃辣_前端程序媛閱讀 1,088評論 0 1
  • 靜謐的軍訓(xùn)場上 當(dāng)空烈日 滴答 汗水從指尖溜走 帶去我的思念
    南瓜酒館閱讀 164評論 0 2
  • 讀簡叔的《寫作者,讓我請你喝杯咖啡》宏娄,印象最深的不是免費的咖啡屋问裕,而是其中一句平淡而霸氣的話:“等簡書融了下一輪,...
    逸之閱讀 1,217評論 32 25
  • 今天去接寶貝放學(xué)時孵坚,跟她說寶貝粮宛,今天回家后快點寫作業(yè),快點吃飯卖宠,我們今晚去啤酒節(jié)玩巍杈!寶貝聽了別提多高興了...
    劉禹諾媽媽閱讀 89評論 0 0