首页 > 解决方案 > JavaScript 中 GUID/UUID 函数的语法解释

问题描述

我对 JS 很陌生,并且正在查看生成 GUID / UUID 的代码。

这是我在这个 Stackoverflow问题中找到的代码

function uuidv4() {
  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);
  });
}

console.log(uuidv4());

我遇到的问题是理解这种语法:

var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);

有人可以通过逐步解释它的作用来帮助我吗?

非常感谢您的支持。

问候

标签: javascriptfunctionuuid

解决方案


var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);

是相同的

var r = Math.random() * 16 | 0;

即,在0-15(或十六进制的0-f)范围内创建一个不带小数位的随机数。你也可以把这一行写成

var r = Math.floor(Math.random() * 16) 

| 0可能更快......而且

var v = c == 'x' ? r : (r & 0x3 | 0x8);

即,根据要替换的当前字符的值(即“x”或“y”)使用rr | 0x3 | 0x8作为当前位置的值。后者是因为 UUID 版本 4 的规范,某些位必须具有某些值。有关详细信息,请参阅规格

您可以按如下方式重写此行

var v = 0;
if (c == 'x') v = r;
else v = r & 0x3 | 0x8 

所以v仍然是一个介于 0 和 15 之间的值,然后将其转换为十六进制字符 (0 - f)v.toString(16)


推荐阅读