Lodash源码阅读-isWeakMap

baseGetTag 是 getTag 的默认实现。

源码实现

js 复制代码
function isWeakMap(value) {
  return isObjectLike(value) && getTag(value) == weakMapTag;
}

实现原理解析

1. 对象特性检查

函数首先通过 isObjectLike 进行初步筛选:

  • 确保传入值为对象类型(typeof value === 'object')
  • 排除 null 值(value !== null)

2. 类型标签判断

函数使用 getTag 获取并比对类型标签:

js 复制代码
getTag(value) == weakMapTag; // weakMapTag 为 '[object WeakMap]'

这个判断的特点:

  • 通过 getTag 函数获取内部 [[Class]] 属性,确保类型判断的准确性
  • 能正确识别原生 WeakMap 实例和继承自 WeakMap 的对象
js 复制代码
// 原生 WeakMap 实例
const map1 = new WeakMap();
isWeakMap(map1); // => true

// 继承自 WeakMap 的对象
class CustomWeakMap extends WeakMap {}
const map2 = new CustomWeakMap();
isWeakMap(map2); // => true

// 非 WeakMap 对象
const obj = { key: "value" };
isWeakMap(obj); // => false

总结

isWeakMap 函数通过组合使用 isObjectLike 和 getTag,实现了对 WeakMap 类型的精确检测。

相关推荐
陈随易20 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
冰暮流星20 小时前
javascript之事件代理/事件委托
前端
陈随易1 天前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
里欧跑得慢1 天前
17. Flutter Hero动画实现:让界面过渡更加优雅
前端·css·flutter·web
IT_陈寒1 天前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
cn_mengbei1 天前
用React Native开发OpenHarmony应用:Reanimated共享元素过渡
javascript·react native·react.js
kyriewen1 天前
前端测试:别为了100%覆盖率而写测试,那是自欺欺人
前端·javascript·单元测试
去伪存真1 天前
我自己写的第一个skills--project-core-standards
前端·agent
Data_Journal1 天前
如何使用cURL更改User Agent
大数据·服务器·前端·javascript·数据库
掌心向暖RPA自动化1 天前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa