Javascript物件如何循環遍歷?以下這篇文章給大家詳細介紹5種JS物件遍歷方法,並淺顯對比一下這5種方法,希望對大家有幫助!
#for ... in
#Object.keys(), Object.values(), Object.entries()
Reflect.ownKeys()
二、物件屬性遍歷次序規則以上5種方法遍歷物件的屬性時都遵守同樣的屬性遍歷次序規則
屬性名稱為數值,依照數值
升序排序產生時間升序排序
屬性名稱為Symbol,依照
產生時間
三、遍歷方法詳解
#1. for in
#for…in 主要用於循環物件屬性。循環中的程式碼每執行一次,就會對物件的屬性進行一次操作。其語法如下:
for (var in object) { 执行的代码块 }
其中兩個參數:
var:必須。指定的變數可以是數組元素,也可以是物件的屬性。
object:必須。指定迭代的的物件。
var obj = {a: 1, b: 2, c: 3}; for (var i in obj) { console.log('键名:', i); console.log('键值:', obj[i]); }
輸出結果:
键名:a 键值:1 键名:b 键值:2 键名:c 键值:3
2. Object.keys()、Object.values()、Object.entries()
##這三個方法都用來遍歷對象,它會傳回一個由給定對象的自身可枚舉屬性(不含繼承的和Symbol屬性)組成的數組,數組元素的排列順序和正常循環遍歷該對象時返回的順序一致,這個三個元素傳回的值分別如下:Object.values():傳回包含物件鍵值的陣列;
let obj = { id: 1, name: 'hello', age: 18 }; console.log(Object.keys(obj)); // 输出结果: ['id', 'name', 'age'] console.log(Object.values(obj)); // 输出结果: [1, 'hello', 18] console.log(Object.entries(obj)); // 输出结果: [['id', 1], ['name', 'hello'], ['age', 18]
可列舉的屬性,不包含繼承來的屬性。
3. Object.getOwnPropertyNames()#Object.getOwnPropertyNames()
方法與不可枚舉的屬性。
let a = ['Hello', 'World']; Object.keys(a) // ["0", "1"] Object.getOwnPropertyNames(a) // ["0", "1", "length"]
var obj = { 0: "a", 1: "b", 2: "c"}; Object.getOwnPropertyNames(obj) // ["0", "1", "2"] Object.keys(obj).length // 3 Object.getOwnPropertyNames(obj).length // 3
4. Object.getOwnPropertySymbols()#5 . Reflect.ownKeys() | Reflect.ownKeys() 傳回一個數組,包含物件本身的所有屬性。它和Object.keys()類似,Object.keys()傳回屬性key,但不包含不可列舉的屬性,而Reflect.ownKeys()會傳回所有屬性key: | 注意: | Object.keys() :相當於傳回物件屬性陣列; | |||
---|---|---|---|---|---|---|
。 | 四、遍歷方法對比 | 遍歷方法 | 自身屬性 | 繼承屬性 | ||
會遍歷原型鏈 | ||||||