BigInt公司
描述
const previouslyMaxSafeInteger=9007199254740991n; const alsoHuge=BigInt(9007199254740991); //9007199254740991年 const hugeString=BigInt(“9007199254740991”); //9007199254740991年 const hugeHex=BigInt(“0x1ffffffffff”); //9007199254740991年 const hugeOctal=BigInt(“0o377777777777”); //9007199254740991年 const hugeBin=BigInt( “0b111111111111111、1111111111、111111111和11111111111”, ); //9007199254740991年
类型信息
类型1n===“bigint”;// 真的 BigInt的类型(“1”)===“BigInt”;// 真的
对象类型(1n)===“对象”;// 真的
操作员
一元+( + ) 由于asm.js中的用法冲突,无法支持,因此已将其删除 为了不破坏asm.js . 无符号右移( >>> ) 是唯一不受支持的按位运算符,因为每个BigInt值都有符号。
添加( + )包含字符串,BigInt返回字符串。 部门( / )将分数分量截断为零,因为BigInt无法表示分数量。
const previousMaxSafe=BigInt(数字.MAX_SAFE_INTEGER);// 9007199254740991年 const maxPlusOne=上一个MaxSafe+1n;// 9007199254740992年 const the Future=前一个MaxSafe+2n;// 9007199254740993n,现在可以工作了! const multi=previousMaxSafe*2n;// 18014398509481982年 const subtr=多个-10n;// 18014398509481972年 const mod=多个%10n;// 2个 常量bigN=2n**54n;// 18014398509481984牛顿 bigN*-1n;//- 18014398509481984牛顿 预期常数=4n/2n;// 2个 常量截断=5n/2n;// 2n,而不是2.5n
比较
0n===0;// 假 0n==0;// 真的
1n<2;// 真的 2n>1;// 真的 2 > 2; // 假 2n>2;// 假 2n>=2;// 真的
混合常数=[4n,6,-12n,10,4,0,0n]; //[4n,6,-12n,10,4,0,0n] mixed.sort();// 默认排序行为 //[-12n,0,0n,10,4n,4,6] 混合排序(a,b)=>a-b); //因为减法不适用于混合类型,所以不起作用 //TypeError:无法将BigInt值转换为Number值 //使用适当的数字比较器进行排序 混合排序((a,b)=>(a<b?-1:a>b?1:0)); //[-12n,0,0n,4n,4,6,10]
对象(0n)===0n;// 假 对象(0n)===对象(0n);// 假 const o=对象(0n); o==o;// 真的
仅当值大于2时才使用BigInt值 53 是合理预期的。 不要强制使用BigInt值和Number值。
条件
密码学
在JSON中使用
BigInt.prototype.toJSON=函数(){ return{$bigint:this.toString()}; };
console.log(JSON.stringify({a:1n})); //{“a”:{“$bigint”:“1”}}
const replacer=(键,值)=> typeof value===“bigint”? {$bigint:value.toString()}:value; 常量数据={ 数量:1, 大:18014398509481982n, }; const stringified=JSON.stringify(数据,替换程序); console.log(字符串化); //{“数字”:1,“大”:{“$bigint”:“18014398509481982”}}
常数恢复器=(键,值)=> 值!== 空&& typeof value===“对象”&& 值为“$bigint”&& 值的类型$ bigint===“字符串” ? BigInt(值.$BigInt) :值; const payload='{“number”:1,“big”:{“$bigint”:“18014398509481982”}}'; const-parsed=JSON.parse(有效负载,恢复器); console.log(已解析); //{编号:1,大:18014398509481982n}
BigInt强制
BigInt作为-is返回。 未定义 和 无效的 扔一个 类型错误 . 真的 变成 1个 ; 假 变成 0个 . 字符串是通过将它们解析为包含一个整数文本来转换的。 任何分析失败都会导致 语法错误 。语法是 字符串数字文字 ,其中不允许使用小数点或指数指示符。 数字 扔一个 类型错误 以防止意外的隐式强制导致精度损失。 符号 扔一个 类型错误 . 对象是第一个 转换为基本体 通过致电他们 [Symbol.to Primitive]() (带有 “数字” 作为提示), 值() 、和 toString() 方法,按顺序。 然后将生成的原语转换为BigInt。
施工单位
BigInt() -
返回BigInt类型的基元值。 使用调用时引发错误 新的 .
静态方法
BigInt.asIntN() -
将BigInt值钳制为带符号的整数值,并返回该值。 BigInt.asUintN() -
将BigInt值箝位为无符号整数值,然后返回该值。
实例属性
BigInt.原型.constructor -
创建实例对象的构造函数。 对于 BigInt公司 实例,初始值为 BigInt公司 构造函数。 BigInt.原型[Symbol.toStringTag] -
的初始值 [Symbol.toStringTag] 属性是字符串 “BigInt” 。此属性用于 Object.prototype.toString() 然而,因为 BigInt公司 也有自己的 toString() 方法,除非调用 Object.protype.toString.call() 使用BigInt作为 这个Arg .
实例方法
BigInt.原型.toLocaleString() -
返回具有此BigInt值的语言敏感表示形式的字符串。 覆盖 Object.prototype.toLocaleString() 方法。 BigInt.prototype.toString() -
返回以指定基数(基数)表示此BigInt值的字符串。 覆盖 Object.prototype.toString() 方法。 BigInt.prototype.valueOf() -
返回此BigInt值。 覆盖 Object.prototype.valueOf() 方法。
示例
计算素数
//如果传递的BigInt值是质数,则返回true 函数isPrime(p){ for(设i=2n;i*i<=p;i++){ 如果(p%i===0n)返回false; } 返回true; } //以BigInt值作为参数,返回第n个质数作为BigInts值 函数nthPrime(nth){ 设maybePrime=2n; 设素数=0n; while(nth>=0n){ if(isPrime(可能是Prime)){ 第n个--; prime=可能是prime; } 可以是Prime++; } 返回素数; } 第n素数(20n); //730亿