Javascript:生成唯一数字字符串的最佳方法是什么?

Javascript:生成唯一数字字符串的最佳方法是什么?,javascript,string,unique,numeric,Javascript,String,Unique,Numeric,以下选项中的最佳方法是什么: 备选案文1: var d=新日期(); uniqueString=d.getTime() 备选案文2: uniqueString=Math.random()通过使用日期(连续的,而不是随机的),两个不同的实例可能会重合(尽管不太可能) Math.random()的重叠几率要低得多(同样可能,但可能性不大)。通过使用日期(连续的,而不是随机的),两个不同的实例可能会重合(但可能性不大) 与Math.random()重叠的几率要低得多(同样可能,尽管可能性不大)。在这两

以下选项中的最佳方法是什么:

备选案文1:
var d=新日期();
uniqueString=d.getTime()

备选案文2:
uniqueString=Math.random()

通过使用日期(连续的,而不是随机的),两个不同的实例可能会重合(尽管不太可能)

Math.random()的重叠几率要低得多(同样可能,但可能性不大)。

通过使用日期(连续的,而不是随机的),两个不同的实例可能会重合(但可能性不大)


与Math.random()重叠的几率要低得多(同样可能,尽管可能性不大)。

在这两个选项中,我选择第二个选项

虽然
getTime()
将产生13位数字,其中大多数在几周内保持不变,
random()
将随机产生一个大约16位的数字


请注意,如果您所说的数字仅指数字,那么您需要多做一些工作,以去除随机数的
0.
部分。

在这两个选项中,我选择第二个选项

虽然
getTime()
将产生13位数字,其中大多数在几周内保持不变,
random()
将随机产生一个大约16位的数字


请注意,如果您所说的数字仅指数字,那么您需要多做一些工作,以消除随机数的
0.
部分。

相关:“以下选项中的一个”:我认为这将是两者的组合。这些都不是非常独特的。请添加更多关于“独特”定义的详细信息。您正在寻找会话id吗?数据库的主键?可用于关联请求和响应的请求id?取决于你想做什么,要么都不起作用。在真空中,我不会使用上述任何一种方法。@事实上,它们甚至可能“不够独特”。如果
Math.random()
返回一个64位浮点
double
,则在生成600万个键后,发生冲突的几率约为100万分之一。如果键的作用域是暂时的,这可能就足够了。如果您存储的是一个大型web应用程序的审核日志,它可能不会。相关:“以下选项中的任意一个”:我认为这将是两者的组合。这些都不是非常独特的。请添加更多关于“独特”定义的详细信息。您正在寻找会话id吗?数据库的主键?可用于关联请求和响应的请求id?取决于你想做什么,要么都不起作用。在真空中,我不会使用上述任何一种方法。@事实上,它们甚至可能“不够独特”。如果
Math.random()
返回一个64位浮点
double
,则在生成600万个键后,发生冲突的几率约为100万分之一。如果键的作用域是暂时的,这可能就足够了。如果您正在为一个大型web应用程序存储审计日志,它可能不会。时间戳不太可能重合。如果生成两个时中间没有任何长时间运行的操作,处理器迟早会变得足够快,以使两个连续生成的时间戳相同。但Math.random()在不同时间使用时有可能返回相同的字符串。从统计上讲,时间重合的可能性更大(正如millimoose明智地指出的那样,随着处理器速度的提高,可能性越来越大)而不是Math.random()。正如emdevtec所说,您可以获得更高的十进制精度(日期仅为一毫秒,然后不是随机的,而是顺序的,随机的小数点后16位,所有这些都是随机的)时间戳不太可能重合。如果生成两个时间戳之间没有任何长时间运行的操作,处理器迟早会变得足够快,使两个连续生成的时间戳相同。但是有一个机会Math.random()在不同的时间使用时返回相同的字符串。在统计上,重合时间比Math.random()更可能(正如millimoose明智地指出的那样,随着处理器速度的提高,重合时间变得更可能)。正如emdevtec所述,小数精度更高(日期只有一毫秒,然后不是随机的,而是连续的,随机的是16位小数,所有这些都是随机的)是的,我指的是数字。是的,我指的是数字。