在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 生成uuid的方法為啥先&0x3后|0x8???

生成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???

回答
編輯回答
耍太極

個人感覺,它其實是想保證返回的值是[8,A]這個區(qū)間的。

r
------
& 0011
------
| 1010
2018年3月25日 12:10
編輯回答
愛礙唉
//上面的代碼等效為下面的
function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random()*16|0;//這里其實還有一個作用就是把r變成了整數(shù)
        var v = (c == 'x') ? r : (r&0x3|0x8);// 其實就是說x直接替換,y另外的用經(jīng)過特殊處理的,這里的特殊處理就是 r&0x3|0x8 ,因為位運算有順序,這樣的值就限定在一個范圍了,其范圍就是二進制 1000-1011這樣4個數(shù)字了,然后輸出為8,9,A,B這樣4個字符了。
        return v.toString(16);
    });
}

這樣處理可能是用于校驗、檢測等等目的。

2017年2月13日 00:40