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 类型的精确检测。

相关推荐
wayhome在哪2 分钟前
用 fabric.js 搞定电子签名拖拽合成图片
javascript·产品·canvas
JayceM1 小时前
Vue中v-show与v-if的区别
前端·javascript·vue.js
HWL56791 小时前
“preinstall“: “npx only-allow pnpm“
运维·服务器·前端·javascript·vue.js
咪咪渝粮1 小时前
JavaScript 中constructor 属性的指向异常问题
开发语言·javascript
德育处主任2 小时前
p5.js 掌握圆锥体 cone
前端·数据可视化·canvas
mazhenxiao2 小时前
qiankunjs 微前端框架笔记
前端
无羡仙2 小时前
事件流与事件委托:用冒泡机制优化前端性能
前端·javascript
秃头小傻蛋2 小时前
Vue 项目中条件加载组件导致 CSS 样式丢失问题解决方案
前端·vue.js
CodeTransfer2 小时前
今天给大家搬运的是利用发布-订阅模式对代码进行解耦
前端·javascript
阿邱吖2 小时前
form.item接管受控组件
前端