
es-toolkit/compat stubObject 使用指南让每个调用都返回全新空对象的零参数工具函数【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkitstubObject是 es-toolkit 兼容层es-toolkit/compat提供的一个零参数工具函数每次调用都会返回一个全新的空对象。它在需要空对象作为默认值、或在函数式编程中需要恒定返回值constant value的场景下非常实用。读完本文你将掌握stubObject的导入方式、典型使用场景、与 Lodash 的对应关系以及为什么官方文档建议多数情况下直接用{}代替它。stubObject 是什么stubObject是一个不接受任何参数、总是返回一个新的空对象的函数。其全部逻辑可以概括为一句源码src/compat/util/stubObject.ts/** * Returns an empty object. * * returns An empty object. * example * stubObject() // Returns {} */ export function stubObject(): any { return {}; }从源码结构看它就是{ return {}; }这样一个极简封装——每次调用都会执行一次对象字面量创建因此每次返回的都是独立的对象实例而绝不是同一个共享引用。这一点正是它区别于直接使用常量对象的关键行为特征。stubObject属于es-toolkit/compat兼容层而非核心es-toolkit包目的是与 Lodash 的接口和行为保持 1:1 对齐方便已有 Lodash 代码库在不改写调用点的情况下平滑迁移参见 compat 模块说明。它从兼容层入口 src/compat/compat.ts 统一导出。导入方式与其他 compat 函数一样stubObject支持两种导入方式。方式一从es-toolkit/compat整体导入import { stubObject } from es-toolkit/compat;方式二按函数单独导入推荐与lodash/stubObject类似每个 compat 函数都有独立的入口文件只加载该函数自身依赖的代码而不是整个es-toolkit/compat模块import stubObject from es-toolkit/compat/stubObject;这在无法利用 tree-shaking 的环境中尤其有价值例如 CommonJS 的require()调用、React Native 环境或不经打包器直接在 Node.js 上运行的代码依据 compat 模块说明const stubObject require(es-toolkit/compat/stubObject);使用场景作为默认值使用空对象作为默认值是stubObject最典型的应用。由于每次调用都会生成新对象在解构、展开等操作中不会出现共享引用带来的意外副作用import { stubObject } from es-toolkit/compat; function processData(data stubObject()) { return { ...data, processed: true }; } console.log(processData()); // { processed: true } console.log(processData({ name: John })); // { name: John, processed: true }当data参数缺省时默认值表达式stubObject()会求值并生成一个全新空对象随后通过展开运算符...data被安全消费。在函数式编程中提供恒定返回值某些高阶函数如映射、归并、策略分发等需要一个无论输入是什么都返回空对象的回调。此时stubObject可以作为恒等值constant来源import { stubObject } from es-toolkit/compat; const createEmpty () stubObject(); const obj createEmpty(); obj.newProperty value; // 因为是全新对象可以安全地添加属性因为每个回调调用点拿到的都是独立实例向其写入属性不会污染其他调用方的数据。每次调用都返回新实例这是stubObject语义上最重要的保证每次调用返回不同实例。官方文档docs/ja/compat/reference/util/stubObject.md给出了明确的验证示例import { stubObject } from es-toolkit/compat; const obj1 stubObject(); const obj2 stubObject(); console.log(obj1 obj2); // false不同实例 console.log(typeof obj1); // object console.log(Object.keys(obj1).length); // 0obj1 obj2恒为false因为它对应源码中每次都执行return {}的字面量创建行为。同时返回对象是真正的空对象Object.keys()的长度恒为 0。这一行为也有测试用例背书。src/compat/util/stubObject.spec.ts 中通过 Vitest 断言import { describe, expect, it } from vitest; import { stubObject } from ./stubObject; describe(stubObject, () { it(should return an empty object, () { expect(stubObject()).toEqual({}); }); });API 签名项目说明函数名stubObject参数无返回值any—— 一个新的空对象参数stubObject不接受任何参数对应文档 パラメータはありません / None。返回值类型声明为any实际值是一个全新的空对象。为什么官方文档建议直接用{}在stubObject的官方文档开头明确给出了一个醒目的警告warning请直接使用{}。这个stubObject函数只是返回空对象的简单包装函数属于不必要的抽象。请改用更快、更直接的{}。这一建议与源码事实完全一致stubObject内部只是return {};。直接书写{}在语义上完全等价同样每次求值产生新对象却少了一层函数调用开销执行更快、代码更直白。因此新代码优先直接使用{}无需引入stubObject迁移场景从 Lodash 迁移到 es-toolkit 时若现有代码调用了 Lodash 的_.stubObject()可以原样替换为es-toolkit/compat的stubObject保持行为一致后续再视情况清理为字面量{}。这正体现了 es-toolkit 兼容层的定位——为兼容已有 Lodash 代码库而保留这些多余的函数同时通过文档明确告知开发者它们并非推荐写法依据 compat 模块说明 中关于废弃/多余函数保留在 compat 层以便迁移的设计说明。与同类 stub 函数的关系stubObject并非孤例它属于 compat 层 util 目录下的一组固定值 stub函数均位于 src/compat/util/用于在需要恒定返回值的场合提供语义清晰的调用点函数每次调用返回对应源码stubObject()新的空对象{}src/compat/util/stubObject.tsstubArray()新的空数组[]src/compat/util/stubArray.tsstubTrue()truesrc/compat/util/stubTrue.tsstubFalse()falsesrc/compat/util/stubFalse.tsstubString()src/compat/util/stubString.ts例如 src/compat/util/stubArray.ts 的实现与stubObject如出一辙export function stubArray(): any[] { return []; }这组函数共同覆盖了返回空引用类型容器 / 布尔常量 / 空字符串这几类最常见的恒定值需求使用时可根据所需返回类型选择对应函数。小结stubObject()零参数、每次调用返回全新空对象可通过es-toolkit/compat或独立入口es-toolkit/compat/stubObject导入适用场景作为函数默认值、函数式编程中的恒定返回值核心语义每次调用生成独立实例比较为false由源码 src/compat/util/stubObject.ts 与测试 src/compat/util/stubObject.spec.ts 共同保证官方立场新代码请直接使用{}stubObject主要为 Lodash 兼容迁移而保留。该函数的英文参考文档见 docs/compat/reference/util/stubObject.md另提供韩文与简体中文版本可对照查阅。【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考