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

相关推荐
白兰地空瓶1 小时前
🏒 前端 AI 应用实战:用 Vue3 + Coze,把宠物一键变成冰球运动员!
前端·vue.js·coze
Liu.7742 小时前
vue3使用vue3-print-nb打印
前端·javascript·vue.js
松涛和鸣3 小时前
Linux Makefile : From Basic Syntax to Multi-File Project Compilation
linux·运维·服务器·前端·windows·哈希算法
dly_blog3 小时前
Vue 逻辑复用的多种方案对比!
前端·javascript·vue.js
万少3 小时前
HarmonyOS6 接入分享,原来也是三分钟的事情
前端·harmonyos
烛阴4 小时前
C# 正则表达式:量词与锚点——从“.*”到精确匹配
前端·正则表达式·c#
wyzqhhhh4 小时前
京东啊啊啊啊啊
开发语言·前端·javascript
JIngJaneIL4 小时前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
想学后端的前端工程师4 小时前
【Java集合框架深度解析:从入门到精通-后端技术栈】
前端·javascript·vue.js
VcB之殇4 小时前
git常用操作合集
前端·git