生成uuid的方法为啥先&0x3后|0x8???

function guid() {

    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);

    });

}

代码如上,为啥先&0x3后|0x8???


富国沪深
浏览 1689回答 2
2回答

慕神8447489

//上面的代码等效为下面的function guid() {    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {        var r = Math.random()*16|0;//这里其实还有一个作用就是把r变成了整数        var v = (c == 'x') ? r : (r&0x3|0x8);// 其实就是说x直接替换,y另外的用经过特殊处理的,这里的特殊处理就是 r&0x3|0x8 ,因为位运算有顺序,这样的值就限定在一个范围了,其范围就是二进制 1000-1011这样4个数字了,然后输出为8,9,A,B这样4个字符了。        return v.toString(16);    });}这样处理可能是用于校验、检测等等目的。

海绵宝宝撒

个人感觉,它其实是想保证返回的值是[8,A]这个区间的。r------& 0011------| 1010
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript