前言
开发过程中我们可能需要一些不重复的数字或字符串,根据使用场景的不同我们可以使用不同的方式。
UUID
在JavaScript中,原生的API并没有直接提供生成UUID(Universally Unique Identifier,通用唯一识别码)的方法。
但是,你可以使用一些第三方库来生成UUID,或者编写一个简单的函数来生成。
UUID库
如果你希望使用第三方库,uuid
是一个流行的选择。
你可以通过npm或yarn来安装它:
1 | npm install uuid |
然后在你的代码中这样使用:
1 | import { v4 as uuidv4 } from 'uuid'; |
简单函数生成
如果你不想使用外部库,也可以通过编写一个简单的函数来生成UUID,尽管这种方法可能不会生成完全符合RFC 4122标准的UUID。
以下是一个简单的UUID生成函数的示例:
1 | function generateUUID() { |
请注意,这个简单的函数生成的UUID可能与RFC 4122标准不完全一致,特别是在版本和变体字段上,但它对于许多应用程序来说可能已经足够了。
如果你需要严格符合标准的UUID,建议使用uuid
库。
crypto
现代浏览器和Node.js环境中提供了 crypto
模块,可以生成更高质量的随机数,确保生成的UUID具有更好的唯一性。具体有两种方式:
使用 crypto.randomUUID()
(现代浏览器支持):
如果目标环境支持,这是最简单且符合RFC 4122标准的方式:
1 | const uuid = crypto.randomUUID(); |
使用 crypto.getRandomValues()
:
对于不支持 crypto.randomUUID()
的较旧环境,可以使用 getRandomValues()
方法配合Uint8Array生成UUID:
1 | function generateUUID() { |
两者结合
优化后
1 | function generateUUID () { |
时间戳
不太适用与保证唯一的地方,但是比如页面添加参数来禁用缓存的时候可以使用时间戳。
毫秒
在 JavaScript 中,你可以使用 Date.now()
方法来获取当前的时间戳。
它返回自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来经过的毫秒数。
以下是一个示例:
1 | var timestamp = Date.now(); |
这将在控制台输出当前的时间戳。
秒
要获取当前的时间戳(以秒为单位),你可以使用 Math.floor()
函数将毫秒时间戳除以 1000 并向下取整。
下面是一个示例:
1 | var timestampInSeconds = Math.floor(Date.now() / 1000); |
这将输出当前的时间戳(以秒为单位)到控制台。请注意,Date.now()
返回的是当前的毫秒时间戳,通过除以 1000 并向下取整,可以将其转换为以秒为单位的时间戳。
时间戳+随机字符串
基本也能保证唯一,并且好处在于前8位是按照时间排序的,性能相比于UUID会高一点。
不适用于要保证完全唯一的场景。
1 | function getRandomStr(){ |
测试一下
1 | let mSet = new Set();; |
我这里测试了一万次基本上不会重复。