我在JavaScript中有这个简洁的小功能非常有用和干净:
CreateGuid: function () {
var guid = '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);
});
return guid;
},
Run Code Online (Sandbox Code Playgroud)
我想略微修改它,以便能够随机生成字母数字序列.
我没有表现出这个功能的唯一部分是:
r : (r & 0x3 | 0x8)
Run Code Online (Sandbox Code Playgroud)
除了它是三元运算符这是什么呢?
如果你看一下0x3和0x8的二进制写法,可能会更清楚:
0x3.toString(2) => 11
0x8.toString(2) => 1000
Run Code Online (Sandbox Code Playgroud)
我们在这里做的是按位操作:
第一个and与11在位级(截断为只有最后两个位,即是做%4),
然后or与1000(设定一个比特,添加8).
整个可能不会直接写成混乱
var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
.replace(/x/g, function(){
return (Math.random()*16|0).toString(16)
})
.replace(/y/, function(){
return (Math.random()*4+8|0).toString(16)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1092 次 |
| 最近记录: |