唯一标识符
guid(length = 32, firstU = true, radix = 62) 该函数可以生产一个全局唯一、随机的 guid,默认首字母为 u,可以用于当做元素的 id 或者 class 名等需要唯一,随机字符串的地方,因为 id 或者 class 不能以数字开头。
- length
<Number | null>
guid 的长度,默认为 32,如果取值 null,则按 rfc4122 标准生成对应格式的随机数 - firstU
<Boolean>
首字母是否为"u",如果首字母为数字情况下,不能用作元素的 id 或者 class,默认为 true - radix
<Number>
生成的基数,默认为 62,用于生成随机数字符串为"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 如果取 2,那么返回的结果就是前两位 0 和 1(可以理解为二进制)的随机结果,如果为 7,返回的字符串就是 0-7(理解为八进制)之间, 10 为十进制,以此类推。
说明:这个方法三个参数都有默认的值,所以您调用的时候,可以无需传递任何参数也是可以的,并且建议您这样做。
js
function guid(len = 32, firstU = true, radix = null) {
const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
const uuid = []
radix = radix || chars.length
if (len) {
// 如果指定 uuid 长度,只是取随机的字符,0|x 为位运算,能去掉 x 的小数位,返回整数位
for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
} else {
let r
// rfc4122 标准要求返回的 uuid 中,某些位为固定的字符
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
uuid[14] = '4'
for (let i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | (Math.random() * 16)
uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
}
}
}
// 移除第一个字符,并用 u 替代,因为第一个字符为数值时,该 guuid 不能用作 id 或者 class
if (firstU) {
uuid.shift()
return `u${uuid.join('')}`
}
return uuid.join('')
}