存储小于Number.MAX_SAFE_INTEGER的数值时,何时应选用BigInt64Array而非Float64Array?
存储小于Number.MAX_SAFE_INTEGER的数值时,何时应选用BigInt64Array而非Float64Array?
咱们先明确一下:JavaScript里有两个能存储较大数值的类型数组构造函数:
const longs = new BigInt64Array() const doubles = new Float64Array()
它们分别对应64位有符号整数数组和64位浮点数数组。
那问题来了:如果我要存储的数值都不超过Number.MAX_SAFE_INTEGER,还有必要选用BigInt64Array吗?
你想到的那个点确实是BigInt64Array为数不多的优势——它可以强制存储整数类型,一旦你试图存入浮点数,构造函数会直接抛出错误,帮你避免意外的类型混入:
const arr = new BigInt64Array([900719925.4534]); // Uncaught TypeError: Cannot convert 900719925.4534 to a BigInt
不过对应的,它的使用成本也更高:
- 如果是已知的整数值,你得记得给每个数加上
n后缀,像这样:const arr = new BigInt64Array([523235n, 1093n, 3238n]); - 如果数值是运行时动态获取的,还得手动用
BigInt(value)函数转换类型:const arr = new BigInt64Array([BigInt(a), BigInt(b), BigInt(c)]);
反观Float64Array就省心多了,它直接兼容原生JavaScript数字,不需要加任何后缀或者调用转换函数,开箱即用。
你的推理其实完全正确。总结来说:只有当你需要严格确保数组中只能存储整数(不能容忍浮点数混入),并且能接受额外的类型转换成本时,BigInt64Array才是值得考虑的选择;如果更看重使用的便捷性,Float64Array显然是更优的方案。
备注:内容来源于stack exchange,提问作者user3163495
相关产品推荐
相关产品推荐

