工做中遍歷對象是屢見不鮮了,遍歷數組的方法五花八門, 然而不少小夥伴是否是和我以前同樣只會用for ...in....es6
來遍歷對象呢, 今天給你們介紹五種遍歷對象屬性的方法:數組
- 它能夠便利對象自己及其繼承自原型上的可枚舉屬性,
- 過濾掉原型上的屬性能夠用hasOwnProperty(屬性名)來判斷是不是自己的屬性,
- 對象的每個屬性都有它的描述,能夠用Object.getOwnPropertyDescriptors(對象, 屬性名)來查看對象的某個屬性的描述,能夠知道其是不是可枚舉, 可寫,可配置
- 是否是有點眼熟,和數組的keys方法很像, 返回一個數組
- 這個數組包含自身的全部可枚舉屬性,不包含原型鏈上的屬性以及Symbol屬性
- 這個數組是可迭代的,也就是部署了iterator接口,能夠用for...of遍歷
- 3, Object.getOwnPropertyNames(obj)
- 返回一個數組
- 包含自身的全部屬性,包括不可枚舉的屬性,但不包括Symbol屬性
- 4 Object.getOwnPropertySymbols(obj)
- 返回一個數組
- 包含自身的全部Symbol屬性
- 返回一個數組
- 通常不會用, 包含自身的全部屬性, 無論是否爲Symbol屬性, 也無論是否可枚舉
插播 : Symbol 是 es6 新增的一種基本數據類型, es5的基本數據有5種, 因此新增後有6種基本數據類型es5
在Symbol出現以前,對象的屬性名只能爲字符串, 容易形成屬性名衝突, 而Symbol 是獨一無二的,對象
因此用Symbol 做爲屬性名必定不會衝突。繼承
格式 const s = Symbol() , 切記前面不用加new, 由於new 操做符會返回一個對象,而Symbol是接口
原始值。Symbol() === Symbol() // false.ip
拓展題: typeof 1234n = ? 原型鏈