私はこのコードを持っています:
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
なぜこれが起こるのですか?どちらの場合も、値は文字列に変更されます。