1. 程式人生 > 實用技巧 >NO --- 25 Object.keys()

NO --- 25 Object.keys()

大家在遍歷物件時經常會用到Object.keys()這個方法,但是有時候遍歷出來的keys會排序,而有時候卻按照物件中的順序來出現,先看下面兩個例子:

// 例子1
const obj = { 100: '一百', 2: '二', 7: '七' } Object.keys(obj) // ["2", "7", "100"]
// 例子2 const obj = { c: 'c', a: 'a', b: 'b' } Object.keys(obj) // ["c", "a", "b"]

這時就會發現兩個例子的區別,例子1中的key會排序,例子2中則原樣輸出,這是為什麼呢?

答案:

對於上面那個問題先給出結論,Object.keys

在內部會根據屬性名key的型別進行不同的排序邏輯。分三種情況:

  1. 如果屬性名的型別是Number,那麼Object.keys返回值是按照key從小到大排序
  2. 如果屬性名的型別是String,那麼Object.keys返回值是按照屬性被建立的時間升序排序。
  3. 如果屬性名的型別是Symbol,那麼邏輯同String相同

這就解釋了上面的問題。

具體原因可以參考:https://github.com/berwin/Blog/issues/24