# getAllKeys

# Description

获取 object 所有可枚举属性,包括可枚举的 symbol

# Params

{Object} object

# Return

Array

# Depend

import getSymbols from './getSymbols.js'
import keys from '../keys.js'

getSymbols 源码分析

keys 源码分析

# Code

function getAllKeys(object) {
  const result = keys(object)
  if (!Array.isArray(object)) {
    result.push(...getSymbols(object))
  }
  return result
}

# Analyze

  1. 首先通过 keys 拿到 所有的可枚举属性,不包括原型链上
  2. 判断 传入的 object 是否为 数组,如果不是数组,则使用 getSymbols 拿到可枚举的 symbol 属性,并 pushresult 数组

# Remark

  1. Array.isArray MDN (opens new window)
  2. 展开语法 MDN (opens new window)

# Example

const a = {a: 1, b:2, c:3}

;[1,2,3,4,5].forEach(k => {
  Object.defineProperty(a, Symbol(k), {
    'enumerable': true,
    'value': k,
  })
})

Object.defineProperty(a, Symbol(6), {
  'value': 6,
})

console.log(getAllKeys(a)) // ['a', 'b', 'c', Symbol(1), Symbol(2), Symbol(3), Symbol(4), Symbol(5)]