富國滬深
2019-03-14 14:15:09
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???
2 回答

慕神8447489
TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊
//上面的代碼等效為下面的
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 ,因為位運(yùn)算有順序,這樣的值就限定在一個范圍了,其范圍就是二進(jìn)制 1000-1011這樣4個數(shù)字了,然后輸出為8,9,A,B這樣4個字符了。
return v.toString(16);
});
}
這樣處理可能是用于校驗、檢測等等目的。
添加回答
舉報
0/150
提交
取消