我有这个代码:
function getSessionGUID() {
return (S4()+S4());
}
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
它显然返回一个字符串,但如果你多次运行它,你会注意到它有时会返回无穷大。
for (var i = 0; i < 100000; i++){ if(getSessionGUID() == Infinity) console.log("INFINITY"); }
871 x INFINITY
然后我注意到,如果您删除 |0,它可以解决问题:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
结果:
for (var i = 0; i < 100000; i++){ if(getSessionGUID() == Infinity) console.log("INFINITY"); }
undefined
为什么会这样?在这两种情况下,值都会更改为字符串。