首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨浏览器随机字符串(Math.random()*1e32).toString(36)

跨浏览器随机字符串(Math.random()*1e32).toString(36)
EN

Stack Overflow用户
提问于 2015-09-17 08:26:23
回答 2查看 1.1K关注 0票数 12

我使用(Math.random()*1e32).toString(36)作为一个简单的随机字符串生成器。它非常简单,工作良好,满足了我的需要(用于ids的时间随机,等等)

在chrome中,safari、firefox和ie Math.random()*1e32生成数字,如:8.357963780872523e+31 :-)

  • 在chrome、safari和firefox中,这样的数字被转换成字符串(8.357963780872523e+31).toString(36) -> 221fr2y11ebk4cog84wok,这正是我想要的。
  • 然而,在ie11中,字符串的结果是6.936gwtrpf69(e+20)

如何以跨浏览器的方式从221fr2y11ebk4cog84wok中获得相同的字符串8.357963780872523e+31

顺便说一句:我从这个线程中知道了这个随机字符串:Random alpha-numeric string in JavaScript?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-17 08:54:26

请记住,Math.random()返回0到1之间的值(排它),并且JavaScript中的数字有53位尾数,按照IEEE-754的要求,获得随机整数的一种安全方法是

代码语言:javascript
复制
Math.random() * Math.pow(2, 54)

因此,可以从

代码语言:javascript
复制
(Math.random() * Math.pow(2, 54)).toString(36)

请注意,没有关于字符数量的保证,根据随机值的大小顺序,字符数可以介于1到11之间。

票数 3
EN

Stack Overflow用户

发布于 2015-09-17 08:34:17

正如我所看到的,你不需要把随机数乘以这么大的数字。试试这个:

代码语言:javascript
复制
Math.random().toString(36).slice(2)

够了吗?这是一个略短的字符串,但在所有浏览器中都是一致的(我测试过)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32625702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档