Tho*_*ell 3 javascript arrays floating-point
我对JavaScript比较熟悉,最近我被告知JavaScript数组包含一个length类型的变量Number.当数组更新为数组中的元素数时,此长度会自动更新.
但是,我也被告知在内部,JavaScript为其Number类使用64位浮点表示.我们知道浮点运算不能精确地表示其范围内的所有整数.
所以我的问题是,大型数组会发生什么,哪些length + 1不能完全代表序列中的下一个最大整数?
根据这个数组的最大长度是4,294,967,295.Number.MAX_SAFE_INTEGER就是9,007,199,254,740,991这样,你将不必担心,因为引擎不会让你走到这一步,例如:
new Array(4294967296); // RangeError: Invalid array length
Run Code Online (Sandbox Code Playgroud)
规范的相关部分:
- C.设newLen为ToUint32(Desc.[[Value]]).
湾 如果newLen不等于ToNumber(Desc.[[Value]]),则抛出RangeError异常
所以给出我们的示例长度4294967296:
var length = 4294967296;
var int32length = length >>> 0; // Convert to int32
int32length === 0; // Can't represent this as int32
length !== int32length; // Therefore RangeException
Run Code Online (Sandbox Code Playgroud)