理解基础16中的Javascript函数

Cal*_*ton 3 javascript hex

我在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)

除了它是三元运算符这是什么呢?

Den*_*ret 5

如果你看一下0x3和0x8的二进制写法,可能会更清楚:

 0x3.toString(2) => 11
 0x8.toString(2) => 1000
Run Code Online (Sandbox Code Playgroud)

我们在这里做的是按位操作:

  • 第一个and11在位级(截断为只有最后两个位,即是做%4),

  • 然后or1000(设定一个比特,添加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)

  • @beez`Math.random()`在`[0-1 [`.它不能是1.所以`Math.random()*16`在`[0-15 [`.它不能是16. (2认同)