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

相关推荐
前端程序猿i5 分钟前
彻底搞懂防抖(Debounce)与节流(Throttle):源码实现与应用场景
开发语言·前端·javascript·vue.js·ecmascript
Nicholas689 分钟前
Dart锁机制之synchronized源码解析Lock、BasicLock、objectMakeLock、objectSynchronized(一)
前端
pandarking10 分钟前
[CTF]攻防世界:ics-05
开发语言·javascript·web安全·网络安全·ecmascript
武子康11 分钟前
AI研究-133 Java vs Kotlin/Go/Rust/Python/Node:2025 详细对比分析 定位与取舍指南
java·javascript·python·golang·rust·kotlin·node
小帆聊前端14 分钟前
深度解读虚拟列表:从原理到实战,解决长列表渲染性能难题
前端·javascript
在下历飞雨15 分钟前
Kuikly基础之动画实战:让孤寡青蛙“活”过来
前端·ios·harmonyos
2***c43519 分钟前
nginx服务器实现上传文件功能_使用nginx-upload-module模块
服务器·前端·nginx
p***930322 分钟前
Java进阶之泛型
android·前端·后端
木易 士心25 分钟前
Element UI 多级菜单缩进的动态控制:从原理到工程化实践
前端·vue.js·ui
狮子座的男孩29 分钟前
js函数高级:03、详解原型与原型链(原型、显式原型与隐式原型、原型链、原型链属性、探索instanceof、案例图解)及相关面试题
前端·javascript·经验分享·显示原型与隐式原型·原型链及属性·探索instanceof·原型与原型链图解