当前位置: 首页 > news >正文

踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!一行代码搞定

前言

做过电商 PC 端开发的兄弟估计都懂:经常得弄个「绝不会跟别的重样的编号(ID)」—— 比如给弹窗、临时加的商品条目、页面里动态蹦出来的元素做标识,免得代码把东西搞混。这事看着好像随手就能写,但真要做到百分百不重复,可比想的要坑。

今天就唠唠大伙常踩的俩坑,再给你说个浏览器自带的、一行代码搞定的靠谱法子。

一、先踩第一个坑:拿时间戳加随机数凑数

好多人(不管是刚入门的还是干了俩年的)第一反应都是:把当前时间加个随机数不就行了?比如会写这么一段代码:

function generateNaiveId() { return Date.now().toString(36) + Math.random().toString(36).substr(2); }

出来的结果大概是l6n7f4v2am50k9m7o4这种,看着好像既有时间的 “独一份”,又有随机数的变化,挺好用?但真放到正经的生产环境里,这就是个定时炸弹:

  • 时间戳精度不够
    Date.now()只能精确到毫秒,要是在同一毫秒里连续调用两次这个函数 —— 比如用户点按钮点的特别快,或者页面一下子要生成好几个 ID—— 那 ID 的前半段就会完全一样
  • 随机数不靠谱
    Math.random()那玩意生的不是啥 “靠谱随机数”,运气背的时候,短时间内可能跑出一模一样的序列

说白了,这种法子也就用在半天用一次的场景里凑活,真要讲 “绝对不重复”,差得远了。

二、再踩第二个坑:用自增的计数器

还有人想的更简单:整个全局的数字,每次生成 ID 就把数字加 1,从 0 开始往上排不就得了?但这个法子的问题更离谱:

  • 浏览器是 “没记性” 的,用户一刷新页面,这个计数器直接就归零重来了
  • 要是用户开了俩同款页面,每个页面的计数器都是从零开始算,生成的 ID 会直接撞车

三、别瞎折腾了:用浏览器自带的正经法子

其实现在的现代浏览器(还有
Node.js14 以上的版本),早就给咱们内置了靠谱的工具 ——crypto.randomUUID(),一行代码就能生成绝对靠谱的唯一 ID:

const uniqueId = crypto.randomUUID();

出来的结果是这种格式:3a6c4b2a-4c26-4d0f-a4b7-3b1a2b3c4d5e为啥说这个是王者?

  1. 基本不可能撞号
    这个 ID 是用 122 位的随机数生成的,能组合出来的数字多到离谱 —— 比地球上的沙子总数还多,撞号的概率约等于你连续中三次头奖
  2. 随机数够安全
    它用的是浏览器里专门搞加密的随机数生成工具,不是Math.random()那种随便凑的,没法被轻易猜到
  3. 大家都认
    生成的是全球通用的标准格式,不管是后端存数据库、还是和别的系统对接,都能直接用
  4. 省心还高效
    不用装任何第三方的库,浏览器自带的,调用起来贼快

而且现在主流的新浏览器都支持这个方法:Chrome92 以上、Firefox90
以上、Safari15.4 以上都能用,要是你做的是新项目,直接用这个就行,再也不用自己瞎写凑数的 ID 生成器了。

http://www.rkmt.cn/news/122395.html

相关文章:

  • 用Dify搭建企业级知识库(详细教程)小白到精通,一篇全掌握!
  • 构建敏捷时代的高效能测试团队:理念、架构与实践路径
  • ESD9L5.0ST5G SOD923封装单向低容静电保护器件 DL0501D9 DL0301D9
  • 2025年12月呼和浩特交通事故/婚姻家庭纠纷/民间借贷律师口碑榜单 - 2025年品牌推荐榜
  • 2025十大可下载图片素材网站推荐,找图库素材必看! - 品牌2026
  • vue 甘特图 vxe-gantt table 依赖线的使用,配置连接线
  • 2025十大私藏图库!旅游金融大数据等行业高清素材图库推荐 - 品牌2026
  • OpenCV(二十七):中值滤波 - 详解
  • 【题解】Luogu P10289 [GESP样题 八级] 小杨的旅游
  • 2025年获客系统品牌排行榜,有了它商机线索不用愁 - 品牌策略主理人
  • KOReader完整指南:如何在Kindle等设备上打造完美的电子书阅读体验
  • 国产蒸馏水器/实验室蒸馏水器/全自动蒸馏水器推荐工厂/厂家/制造商 - 品牌推荐大师
  • 最新发布!2025年国内实心钢棒现货厂家TOP5榜单,实心钢棒/不锈钢无缝实心钢棒生产加工怎么选择 - 品牌推荐师
  • 2025年12月U型科氏质量流量计企业推荐:大连美天测控、三角型科氏质量流量计、微弯型科氏质量流量计、直管型科氏质量流量计、科氏质量流量计推荐指南 - 海棠依旧大
  • 群晖DSM系统入门:新手必看的10个设置
  • Day33分辨率与视口与二倍图使用方法
  • 2025年12月切片蜡块柜推荐榜:密集型/高容量密集型/智能/病理/防潮防腐/多层抽屉式/实验室/切片蜡块柜,安全高效存储新标杆,北京中宝元五星领跑实验室装备市场 - 海棠依旧大
  • 2025年12月发膜品牌推荐榜:8秒液体/蛋白/修护/发膜,玛丝兰领衔修护新标杆,从发芯强韧开始,让枯发重获新生 - 海棠依旧大
  • 替代LM74610_120V理想二极管控制器
  • ABAP调用CDS AMDP:数据库存储过程封装
  • 2025年12月株洲靠谱的搬家公司首选:株洲旺成搬家,株洲搬迁公司、株洲企业搬迁、株洲长途搬家、株洲居民搬家、专业团队护航全程无忧 - 海棠依旧大
  • 2025年12月内蒙古呼和浩特驾校/摩托车驾校推荐榜单 - 2025年品牌推荐榜
  • 5分钟搞定AI字幕生成:ComfyUI终极配置完整指南 [特殊字符]
  • Sketch 2025.3文件夹管理更新解析:支持无限嵌套与灵活组织
  • CentOS 7+ 安装 GreatSQL 8.0.32-26
  • Amazon EC2 实例类型命名约定
  • P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
  • 精通Java LaTeX渲染:JLaTeXMath实战应用全解析
  • 2026年仪器信息平台/仪器网站发展前景及网站推荐 - 品牌推荐大师1
  • 2026年仪器信息平台/仪器网站发展前景及网站推荐 - 品牌推荐大师1