Javascript 以36为基数到BigInt?

Javascript 以36为基数到BigInt?,javascript,bigint,Javascript,Bigint,假设我想将base-36编码字符串转换为BigInt,我可以这样做: BigInt(parseInt(x,36)) 但是,如果我的字符串超出了允许的范围怎么办?e、 g 然后我开始失去精确度 是否有任何方法可以直接解析为BigInt?不确定是否有内置的方法,但是base-X到BigInt非常容易实现: function parseBigInt( numberString, keyspace = "0123456789abcdefghijklmnopqrstuvwxyz", ) {

假设我想将base-36编码字符串转换为
BigInt
,我可以这样做:

BigInt(parseInt(x,36))
但是,如果我的字符串超出了允许的范围怎么办?e、 g

然后我开始失去精确度


是否有任何方法可以直接解析为
BigInt

不确定是否有内置的方法,但是base-X到BigInt非常容易实现:

function parseBigInt(
  numberString,
  keyspace = "0123456789abcdefghijklmnopqrstuvwxyz",
) {
  let result = 0n;
  const keyspaceLength = BigInt(keyspace.length);
  for (let i = numberString.length - 1; i >= 0; i--) {
    const value = keyspace.indexOf(numberString[i]);
    if (value === -1) throw new Error("invalid string");
    result = result * keyspaceLength + BigInt(value);
  }
  return result;
}

console.log(parseInt("zzzzzzz", 36));
console.log(parseBigInt("zzzzzzz"));
console.log(parseBigInt("zzzzzzzzzzzzzzzzzzzzzzzzzz"));
输出

78364164095
78364164095n
29098125988731506183153025616435306561535n

默认的
keyspace
相当于base 36使用的
parseInt
,但是如果您需要其他东西,该选项就在那里。:)

您可以将数字转换为
bigint
类型

函数转换(值,基数){
返回[…value.toString()]
.reduce((r,v)=>r*BigInt(基数)+BigInt(parseInt(v,基数)),0n;
}

log(转换('zzzzz',36).toString())
在撰写本文时,答案是否定的:在(第3阶段草案,2019年2月11日)中没有提到任何与
parseInt
等效的内容。提案中提到的字符串的唯一转换是
BigInt()
函数本身,但它只包含基数2、8、10和16。非常好。我不知道parseInt函数也可以在半径大于16的情况下工作。半径>36的情况如何?这有文件记录吗?(在MDN上找不到…)别介意我的问题。MDN表示它接受2到36之间的半径对于更大的半径,您需要一个自定义字符集和一个自己的函数。我想知道我们是否可以将其分为11个字符的块进行批处理?(
Number.MAX\u SAFE\u INTEGER.toString(36.length
)。。呃,我想是10。
78364164095
78364164095n
29098125988731506183153025616435306561535n