精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript中的遍歷詳解

開發 前端
編程這么多年,要是每次寫遍歷代碼時都用 for 循環,真心感覺對不起 JavaScript 語言~

編程這么多年,要是每次寫遍歷代碼時都用 for 循環,真心感覺對不起 JavaScript 語言~

[[185880]]

對象遍歷

為了便于對象遍歷的測試,我在下面定義了一個測試對象 obj

測試對象

// 為 Object 設置三個自定義屬性(可枚舉)
Object.prototype.userProp = 'userProp';
Object.prototype.getUserProp = function() {
    return Object.prototype.userProp;
};
// 定義一個對象,隱式地繼承自 Object.prototype
var obj = {
    name: 'percy',
    age: 21,
    [Symbol('symbol 屬性')]: 'symbolProp',
    unEnumerable: '我是一個不可枚舉屬性',
    skills: ['html', 'css', 'js'],
    getSkills: function() {
        return this.skills;
    }
};
// 設置 unEnumerable 屬性為不可枚舉屬性
Object.defineProperty(obj, 'unEnumerable', {
    enumerable: false
});

ES6 之后,共有以下 5 種方法可以遍歷對象的屬性。

for…in: 遍歷對象自身的和繼承的可枚舉屬性(不含 Symbol 類型的屬性)

for (let key in obj) {
    console.log(key);
    console.log(obj.key);    // wrong style
    console.log(obj[key]);   // right style
}

不要使用 for…in 來遍歷數組,雖然可以遍歷,但是如果為 Object.prototype 設置了可枚舉屬性后,也會把這些屬性遍歷到,因為數組也是一種對象。

Object.keys(obj):返回一個數組,包括對象自身的(不含繼承的)所有可枚舉屬性(不含 Symbol 類型的屬性)

Object.keys(obj);  
// ["name", "age", "skills", "getSkills"]
Object.getOwnPropertyNames(obj):返回一個數組,包含對象自身的所有屬性(不含 Symbol 類型的屬性,不包含繼承屬性,但是包括不可枚舉屬性)
Object.getOwnPropertyNames(obj);
// ["name", "age", "unEnumerable", "skills", "getSkills"]
Object.getOwnPropertySymbols(obj):返回一個數組,包含對象自身的所有 Symbol 類型的屬性(不包括繼承的屬性)
Object.getOwnPropertySymbols(obj);
// [Symbol(symbol 屬性)]
Reflect.ownKeys(obj):返回一個數組,包含對象自身的所有屬性(包含 Symbol 類型的屬性,還有不可枚舉的屬性,但是不包括繼承的屬性)
Reflect.ownKeys(obj);
// ["name", "age", "unEnumerable", "skills", "getSkills", Symbol(symbol 屬性)]

以上的5種方法遍歷對象的屬性,都遵守同樣的屬性遍歷的次序規則

  • 首先遍歷所有屬性名為數值的屬性,按照數字排序
  • 其次遍歷所有屬性名為字符串的屬性,按照生成時間排序
  • ***遍歷所有屬性名為Symbol值的屬性,按照生成時間排序

如何判斷某個屬性是不是某個對象自身的屬性呢?

用 in 操作符(不嚴謹,它其實判定的是這個屬性在不在該對象的原型鏈上)

'age' in obj;        // true
'userProp' in obj;   // true (userProp 是 obj 原型鏈上的屬性)
'name' in Object;    // true 
// 上面這個也是 true 的原因是,Object 是一個構造函數,而函數恰巧也有一個 name 屬性
Object.name;         // 'Object'
Array.name;          // 'Array'
用 hasOwnProperty(),這個方法只會檢測某個對象上的屬性,而不是原型鏈上的屬性。
obj.hasOwnProperty('age');      // true
obj.hasOwnProperty('skills');   // true
obj.hasOwnProperty('userProp'); // false
但是它還是有不足之處的。舉例~
// 利用 Object.create() 新建一個對象,并且這個對象沒有任何原型鏈
var obj2 = Object.create(null, {
    name: { value: 'percy' },
    age: { value: 21 },
    skills: { value: ['html', 'css', 'js'] }
});
obj2.hasOwnProperty('name');    // 報錯 
obj2.hasOwnProperty('skills');  // 報錯

針對上面的情況,我們用一個更完善的解決方案來解決。

使用 Object.prototype.hasOwnProperty.call(obj,’prop’…)

Object.prototype.hasOwnProperty.call(obj2,'name');     // true
Object.prototype.hasOwnProperty.call(obj2,'skills');   // true
Object.prototype.hasOwnProperty.call(obj2,'userProp'); // false

數組遍歷

數組實際上也是一種對象,所以也可以使用上面對象遍歷的任意一個方法(但要注意尺度),另外,數組還擁有其他遍歷的方法。

  • 最基本的 for 循環、while 循環遍歷(缺陷是多添加了一個計數變量)
  • ES6 引入:for…of ,這下就沒有這個計數變量了,但是也不夠簡潔(這里不做詳細介紹,以后寫)
for(let value of arr){
    console.log(value);
}

下面說幾種數組內置的一些遍歷方法

Array.prototype.forEach(): 對數組的每個元素執行一次提供的函數

Array.prototype.forEach(callback(currentValue, index, array){
    // do something
}[,thisArg]);
// 如果數組在迭代時被修改了,則按照索引繼續遍歷修改后的數組
var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
  console.log(word);
  if (word === "two") {
    words.shift();
  }
});
// one
// two
// four
Array.prototype.map(): 返回一個新數組,每個元素都是回調函數返回的值
Array.prototype.map(callback(currentValue, index, array){
      // do something 
}[,thisArg]);
```  ```js
// map 的一個坑
[1,2,3].map(parseInt); // [1, NaN, NaN]
// 提示   map(currentValue,index,array)
//        parseInt(value,base)
一些有用的數組內置方法(類似 map,回調函數的參數都是那 3 個)
  • Array.prototype.every(callback[,thisArg]): 測試數組的各個元素是否通過了回調函數的測試,若都通過,返回 true,否則返回 false(說地本質點兒,就是如果回調函數每次返回的值都是 true 的話,則 every() 返回 true,否則為 false)
  • Array.prototype.filter(callback[,thisArg]): 返回一個新數組,數組的元素是原數組中通過測試的元素(就是回調函數返回 true 的話,對應的元素會進入新數組)
  • Array.prototype.find(callback[,thisArg]): 返回***個通過測試的元素
  • Array.prototype.findIndex(callback[,thisArg]): 與上面函數類似,只不過這個是返回索引
  • Array.prototype.some(callback[,thisArg]): 類似 find() ,只不過它不返回元素,只返回一個布爾值。只要找到一個通過測試的,就返回 true
  • Array.prototype.reduce(callback,[initialValue]): 習慣性稱之為累加器函數,對數組的每個元素執行回調函數,***返回一個值(這個值是***一次調用回調函數時返回的值)
    • 這個函數的回調函數有 4 個參數
      • accumulator: 上一次調用回調函數返回的值
      • currentValue: 當前在處理的值
      • currentIndex
      • array
    • initialValue: 可選項,其值用于***次調用 callback 的***個參數
  • Array.prototype.reduceRight(callback[, initialValue]): 用法和上面的函數一樣,只不過遍歷方向正好相反
// 一些相關的案例
// 對數組進行累加、累乘等運算
[1,10,5,3,8].reduce(function(accumulator,currentValue){
    return accumulator*currentValue;
});  // 1200
// 數組扁平化
[[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
    return a.concat(b);
});  // [0, 1, 2, 3, 4, 5]
[[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
    return a.concat(b);
});  // [4, 5, 2, 3, 0, 1]

總結一下上面這些函數的共性

  • 都是通過每次的回調函數的返回值進行邏輯操作或判斷的
  • 回調函數都可以寫成更簡潔的箭頭函數(推薦)
  • 都可以通過形如 Array.prototype.map.call(str,callback) 的方式來操作字符串
var str = '123,hello';
// 反轉字符串
Array.prototype.reduceRight.call(str,function(a,b){
    return a+b;
});  // olleh,321
// 過濾字符串,只保留小寫字母
Array.prototype.filter.call('123,hello', function(a) {
    return /[a-z]/.test(a);
}).join('');  // hello
// 利用 map 遍歷字符串(這個例子明顯舉得不太好 *_*)
Array.prototype.map.call(str,function(a){
    return a.toUpperCase();
});  // ["1", "2", "3", ",", "H", "E", "L", "L", "O"]

最下面的文章想說的就是讓我們用更簡潔的語法(比如內置函數)遍歷數組,從而消除循環結構。

責任編輯:張燕妮 來源: Percy
相關推薦

2015-11-10 09:34:58

JavaScript方式

2013-05-08 10:36:07

JavaScriptJS詳解JavaScrip

2009-09-21 16:59:29

Array擴展

2016-10-11 20:33:17

JavaScriptThisWeb

2021-06-15 10:01:27

JavaScript數組遍歷Entries

2021-06-18 10:05:14

JavaScript數組遍歷

2016-12-27 10:19:42

JavaScriptindexOf

2010-09-08 15:13:09

Node節點Node屬性

2009-10-26 15:07:12

checkbox樹

2024-04-26 08:27:15

JavaScriptCSSHTML元素

2016-08-12 11:04:17

JavaScript物聯網應用

2020-11-18 09:06:02

JavaScript開發技術

2009-11-06 13:28:19

Javascript框

2010-10-09 09:56:51

JavaScriptObject對象

2015-12-24 10:05:39

JavaScripttypeofinstanceof

2010-09-13 14:24:17

JavaScript

2012-02-14 09:45:02

JavaScript

2023-06-28 08:34:02

Bind()函數JavaScript

2012-06-27 09:44:28

ibmdw

2009-10-20 14:58:15

Javascript事
點贊
收藏

51CTO技術棧公眾號

在线免费精品视频| 床上的激情91.| 日韩网站免费观看高清| 1314成人网| av人人综合网| 国产精品乱码一区二区三区软件 | 亚洲在线欧美| 精品久久久无码中文字幕| 亚洲影院免费| 久热在线中文字幕色999舞| 艳妇乳肉亭妇荡乳av| 懂色aⅴ精品一区二区三区| 亚洲在线视频网站| 日韩伦理一区二区三区av在线| 国产精品欧美亚洲| 亚洲影音一区| 欧美二区乱c黑人| 精品一区二区三区蜜桃在线| caoporn成人| 欧美日韩精品三区| 国产肥臀一区二区福利视频| fc2ppv国产精品久久| 成人美女视频在线观看18| 国产精品免费看久久久香蕉| 久久久久久激情| 99精品在线观看| 亚洲毛片在线免费观看| 久草福利在线观看| 四虎国产精品永久在线国在线| 精品福利樱桃av导航| 国产又粗又大又爽的视频| 国产裸舞福利在线视频合集| 波多野结衣中文字幕一区二区三区| 国产精品入口尤物| 亚洲乱码国产乱码精品| 亚洲最黄网站| 欧美激情视频一区| 午夜激情福利网| 日韩中文在线电影| 亚洲人成电影网| 亚洲欧美在线不卡| 国产精品一区二区三区美女| 日韩免费在线观看| 欧美日韩久久婷婷| 2020国产精品小视频| 欧美熟乱第一页| 亚洲精品中文字幕无码蜜桃| 国产美女精品写真福利视频| 香蕉久久一区二区不卡无毒影院 | 丁香花在线观看完整版电影| 亚洲欧美在线视频观看| 一本一道久久久a久久久精品91| 国产在线视频网站| 久久这里只精品最新地址| 国产女人水真多18毛片18精品| а√中文在线资源库| 国产在线播放一区二区三区| 91理论片午午论夜理片久久| 国产一区二区三区视频免费观看| 日韩av一级电影| 国产精品免费一区豆花| 国产精品无码粉嫩小泬| 免费高清成人在线| 成人黄在线观看| av天堂一区二区三区| 懂色av一区二区三区免费看| 国产91精品入口17c| 日韩性xxxx| 久久综合九色综合久久久精品综合| 久久99精品久久久久子伦 | 北条麻妃99精品青青久久| 多男操一女视频| 欧美国产先锋| 91tv亚洲精品香蕉国产一区7ujn| 中文字幕一区在线播放| 日本不卡视频在线| 91网站免费看| 日本成人动漫在线观看| 久久久午夜精品理论片中文字幕| 日韩片电影在线免费观看| av天在线观看| 一区二区三区四区蜜桃| 无码人妻丰满熟妇区96| julia一区二区三区中文字幕| 欧美狂野另类xxxxoooo| 人妻av一区二区三区| 天堂俺去俺来也www久久婷婷 | 国产99在线播放| 视频午夜在线| 国产精品对白交换视频| 欧美高清中文字幕| 欧美xxx视频| 91精品国产入口| 亚洲一区二区三区无码久久| 国产成人精品一区二区免费看京 | 肉色欧美久久久久久久免费看| 欧美丝袜丝交足nylons图片| 97超碰免费在线观看| 亚洲亚洲免费| 久久在线精品视频| 午夜毛片在线观看| 九九精品视频在线看| 国产精品日韩二区| 午夜毛片在线| 精品高清美女精品国产区| 不用播放器的免费av| 欧美日韩导航| 久久中文字幕在线视频| 国产欧美一区二区三区在线看蜜臂| 久久国产精品72免费观看| 国产精品区一区二区三在线播放| 日本精品一区二区三区在线播放| 午夜精品久久久久久久99樱桃| 中文字幕视频三区| 久久97视频| 欧美激情一级欧美精品| 亚洲特级黄色片| 久久青草国产手机看片福利盒子 | h片在线观看视频免费| 欧美日韩一区在线| 亚洲精品女人久久久| 欧美日韩视频一区二区三区| 国产精品久久久久久久久久尿 | 久久一区二区三区四区| 国产911在线观看| 欧美精品资源| 亚洲精品一区二三区不卡| 久久网一区二区| 激情综合色综合久久| 日本视频一区在线观看| 国产自产自拍视频在线观看| 日韩精品一区在线| 小早川怜子一区二区的演员表| 肉丝袜脚交视频一区二区| 精品久久中出| 国产色播av在线| 亚洲精品一区二区三区福利| 日本老熟俱乐部h0930| 麻豆精品蜜桃视频网站| 日韩电影天堂视频一区二区| 欧美一级鲁丝片| 亚洲精品成a人在线观看| 国产大片中文字幕| 成人综合激情网| 国产又粗又猛又爽又黄的网站| 国产精品2区| 久久夜色精品亚洲噜噜国产mv| 国产尤物视频在线观看| 中文字幕日韩精品一区| 特黄视频免费观看| 亚洲精品一二三区区别| 成人在线视频网站| 国产调教视频在线观看| 6080yy午夜一二三区久久| 我要看一级黄色录像| 精品制服美女丁香| 在线免费观看成人网| 国产日韩欧美中文在线| 欧美精品手机在线| 亚洲乱熟女一区二区| 亚洲成人av一区| 99久久人妻精品免费二区| 免费视频一区二区三区在线观看| 欧美一区观看| 国产一区高清| 欧美久久精品午夜青青大伊人| aaa一区二区三区| 午夜激情综合网| 亚洲黄色免费视频| 久久激情综合网| 日韩精品免费一区| 精品淫伦v久久水蜜桃| 欧美诱惑福利视频| av中文字幕一区二区三区| 欧美日韩1234| 豆国产97在线 | 亚洲| 91视频精品在这里| 999精品视频在线| 2023国产精品久久久精品双| 国产伦精品一区二区三区照片91 | 久操视频在线观看| 欧美成人三级电影在线| 亚洲日本视频在线观看| 中文字幕不卡三区| 国产人妖在线观看| 久久久久久9| 超级碰在线观看| 在线日韩一区| 亚洲专区国产精品| 亚洲插插视频| 久久国产精品久久久久久久久久| 日批视频免费播放| 欧美三级日韩三级| 免费毛片一区二区三区| 欧美国产97人人爽人人喊| aaaaa黄色片| 日本视频在线一区| 欧美亚洲色图视频| 日韩欧美伦理| 久久精品一二三区| 免费精品一区二区三区在线观看| 日本亚洲欧洲色α| 欧美草逼视频| 色黄久久久久久| 亚洲欧美色视频| 欧美高清视频一二三区 | 毛片不卡一区二区| 搞av.com| 欧美影院一区| 亚洲一区二区在线免费观看| 天堂在线精品| 国产成人精品福利一区二区三区 | 精品国产91乱码一区二区三区 | 亚洲欧美一区二区三区四区| 精品女同一区二区三区| 欧美日韩一级片网站| 日韩不卡视频在线| 亚洲综合精品久久| 国产午夜精品理论片在线| 久久久国产精华| 少妇户外露出[11p]| 成人性生交大合| 亚洲精品在线网址| 久久99国产精品免费| 97国产精东麻豆人妻电影| 国产一区亚洲| 国产卡一卡二在线| 91欧美在线| 婷婷久久青草热一区二区 | 成人午夜激情片| 999热精品视频| 精品一区二区三区久久| 美女一区二区三区视频| 午夜在线精品偷拍| 日韩欧美一区三区| 在线 亚洲欧美在线综合一区| 手机看片日韩国产| 天天做天天爱天天综合网| 亚洲不卡1区| 日韩电影在线视频| 午夜一区二区三视频在线观看| 国产99久久久国产精品成人免费| 九色综合婷婷综合| 老司机成人在线| 精品国产区在线| 9999久久久久| 国产精华一区| 久久久久久久久久久久久久久久久久久久| 97人人模人人爽人人少妇| 国产一区二区三区| 亚洲最大的成人网| 一区二区在线视频观看| 国产富婆一区二区三区| 国产精品久久久久av蜜臀| 国产欧美韩日| 全国精品免费看| 日本视频一区二区不卡| 日韩精品永久网址| 曰韩不卡视频| 欧美日韩天堂| 国产精品视频一区二区三区四区五区| 香蕉视频成人在线观看| 男女爽爽爽视频| 国精产品一区一区三区mba视频| 精产国品一二三区| 成人精品免费视频| 六月婷婷七月丁香| 国产精品久久久久久久久久免费看 | 久久影院免费观看| 国产网红在线观看| 热re91久久精品国99热蜜臀| 成人国产综合| 亚洲一区二区三区香蕉| 国产一区调教| 日韩中文一区| 欧美~级网站不卡| 大肉大捧一进一出好爽视频| 美国av一区二区| 日本少妇一级片| 久久久亚洲高清| 国产日产精品一区二区三区的介绍| 亚洲自拍偷拍欧美| 婷婷激情五月综合| 欧美一个色资源| 欧美女子与性| 久久综合伊人77777| 国产在线看片免费视频在线观看| 国产精品久久久久秋霞鲁丝| 日韩黄色av| 色乱码一区二区三在线看| 欧美91福利在线观看| 日本精品www| 国产福利不卡视频| 一区二区三区伦理片| 一区二区三区四区不卡在线 | 国产乱码午夜在线视频| 国产精品美女久久久久久免费| 亚洲不卡在线| 色一情一乱一伦一区二区三区| 中文字幕一区二区av| 妞干网在线免费视频| 国产高清精品久久久久| 中文字幕被公侵犯的漂亮人妻| 亚洲精品国产无套在线观| 成年人晚上看的视频| 亚洲国产成人一区| 久操视频在线免费播放| 国产不卡在线观看| 2020国产精品极品色在线观看| 西游记1978| 久久成人国产| 88av在线播放| 亚洲美腿欧美偷拍| 日韩xxx视频| 亚洲精品中文字| av在线小说| 96久久精品| 亚洲91视频| 亚洲综合av在线播放| 久久久九九九九| 日本黄色片视频| 精品国产乱码久久| 成人高清免费在线| 成人黄色av网站| 日韩午夜电影网| 日本久久精品一区二区| www激情久久| 少妇一级淫片免费放中国| 精品乱码亚洲一区二区不卡| fc2ppv国产精品久久| 91视频国产精品| 国产精品不卡| www午夜视频| 国产精品乱码一区二区三区软件 | 极品少妇xxxx精品少妇| 级毛片内射视频| 在线一区二区视频| 麻豆av电影在线观看| 欧美中文在线观看| 天美av一区二区三区久久| 欧美日韩亚洲一| 久久综合国产精品| 无码日韩精品一区二区| 日韩精品欧美国产精品忘忧草| 第四色日韩影片| 国产免费一区二区三区| 亚洲理伦在线| 国产精品麻豆入口| 精品美女久久久久久免费| 天天干天天操av| 91a在线视频| 精品精品久久| 午夜视频在线网站| 亚洲欧洲中文日韩久久av乱码| 精品人妻一区二区三区换脸明星 | 欧美色网一区| 日日噜噜噜噜夜夜爽亚洲精品| 麻豆精品视频在线| 三级在线观看免费大全| 日韩欧美www| 蜜桃视频动漫在线播放| 久久久久久国产精品免费免费| 久久国产高清| 呻吟揉丰满对白91乃国产区| 欧美肥胖老妇做爰| 黄页网站在线| 乱一区二区三区在线播放| 天堂资源在线中文精品| 东京热无码av男人的天堂| 欧美一区二区视频网站| av第一福利在线导航| 欧美日韩一区二| 久久精品国产精品青草| 青娱乐国产盛宴| 亚洲精品美女在线| 日本综合视频| 国产精品igao激情视频| 91美女视频网站| 超碰在线免费97| 欧美激情videos| 教室别恋欧美无删减版| 天天爽夜夜爽视频| 精品日韩视频在线观看| 日本视频在线播放| 国产精品一区二区欧美黑人喷潮水| 久久精品91| 91精品国产高清一区二区三蜜臀| 日韩的一区二区| 97久久精品一区二区三区的观看方式| 国产精彩视频一区二区| 中文字幕欧美激情| 亚洲精品成人电影| 国产成人精品网站| 欧美.www| 你懂得视频在线观看| 亚洲国产精品va在线| 国产精品777777在线播放| 国产美女三级视频| 亚洲综合一区二区三区| 成人精品一区二区三区免费|