Lodash源码阅读-baseGetAllKeys

Lodash 源码阅读-baseGetAllKeys

概述

baseGetAllKeys 是 Lodash 中一个内部工具函数,用于获取对象的所有可枚举属性名(包括普通属性和 Symbol 属性)。它是 _.keys_.keysIn 等函数的基础实现。

前置学习

依赖函数

  • isArray:判断值是否为数组
  • arrayPush:将数组元素添加到目标数组中
  • keysFunc:获取对象可枚举属性名的函数(如 Object.keys
  • symbolsFunc:获取对象 Symbol 属性名的函数(如 Object.getOwnPropertySymbols

技术知识

  • JavaScript 对象属性类型(普通属性、Symbol 属性)
  • 可枚举性(enumerable)概念
  • 数组操作
  • 对象属性遍历方法

源码实现

javascript 复制代码
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
  var result = keysFunc(object);
  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
}

实现思路

baseGetAllKeys 函数的实现思路是:

  1. 首先获取对象的所有可枚举属性名
  2. 然后根据对象类型决定是否添加 Symbol 属性名
  3. 如果是数组,直接返回属性名数组
  4. 如果不是数组,将 Symbol 属性名添加到结果数组中

源码解析

参数说明

javascript 复制代码
function baseGetAllKeys(object, keysFunc, symbolsFunc)
  • object:要获取属性名的对象
  • keysFunc:获取普通属性名的函数(如 Object.keys
  • symbolsFunc:获取 Symbol 属性名的函数(如 Object.getOwnPropertySymbols

获取普通属性名

javascript 复制代码
var result = keysFunc(object);
  • 调用传入的 keysFunc 获取对象的所有可枚举属性名
  • 结果存储在 result 数组中

条件判断和 Symbol 属性处理

javascript 复制代码
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
  • 使用三元运算符判断对象是否为数组
  • 如果是数组,直接返回 result
  • 如果不是数组,使用 arrayPush 将 Symbol 属性名添加到 result

总结

实现特点

  1. 灵活性:通过参数传入不同的属性获取函数,支持不同的属性获取策略
  2. 类型区分:对数组和普通对象采用不同的处理方式
  3. 完整性:同时获取普通属性和 Symbol 属性
  4. 性能优化:避免对数组进行不必要的 Symbol 属性处理

设计原则

  1. 单一职责原则:专注于获取对象的所有属性名
  2. 开闭原则:通过参数传入不同的函数,支持扩展不同的属性获取方式
  3. 代码复用:作为基础函数被多个上层函数使用
相关推荐
lbh5 分钟前
简单文本编辑器:基于原生JavaScript的智能文本选择工具栏
前端·javascript
Jackson__7 分钟前
高效 AI 对话:如何写出更好的 Prompt
前端
典学长编程11 分钟前
前端开发(HTML,CSS,VUE,JS)从入门到精通!第三天(JavaScript)
前端·javascript·css·html·前端开发
德育处主任18 分钟前
p5.js 用 beginGeometry () 和 endGeometry () 打造自定义 3D 模型
前端·前端框架·canvas
文火冰糖的硅基工坊29 分钟前
[硬件电路-124]:模拟电路 - 信号处理电路 - 测量系统的前端电路详解
前端·嵌入式硬件·fpga开发·架构·信号处理·电路
爷_1 小时前
手把手教程:用腾讯云新平台搞定专属开发环境,永久免费薅羊毛!
前端·后端·架构
狂炫一碗大米饭1 小时前
如何在 Git 中检出远程分支
前端·git·github
东风西巷2 小时前
猫眼浏览器:简约安全的 Chrome 内核增强版浏览器
前端·chrome·安全·电脑·软件需求
太阳伞下的阿呆2 小时前
npm安装下载慢问题
前端·npm·node.js
pe7er2 小时前
Tauri 应用打包与签名简易指南
前端