my TypeScript utilities中有一个基于JavaScript GUID生成器的实现.
以下是代码:
class Guid {
static newGuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
}
// Example of a bunch of GUIDs
for (var i = 0; i < 100; i++) {
var id = Guid.newGuid();
console.log(id);
}
请注意以下几点:
C#guid保证是唯一的.这个解决方案是独一无二的."非常可能"和"保证"之间有巨大的差距,你不想跌破这一差距.
JavaScript生成的guid很适合用作临时键,在等待服务器响应时使用,但我不一定相信它们是数据库中的主键.如果要依赖JavaScript生成的GUID,我会在每次创建GUID时判断一个寄存器,以确保没有重复的GUID(在某些情况下,Chrome浏览器会出现这个问题).