javascript 字符串变量的字符限制
2022-08-30 17:01:18
JavaScript 字符串可以存储 100K 个字符吗?我写了一个脚本,其中PHP中的字符串被传递到JavaScript中的变量。当它被缩短到近一万个字符时,它可以正常工作,但是当尝试传递长度略大于100K的整个字符串时会破坏脚本。但是找不到任何错误。对于增加JavaScript变量的字符限制,是否有任何解决方案?我只是一个初学者。如果有人能找到解决这个问题,将不胜感激。
JavaScript 字符串可以存储 100K 个字符吗?我写了一个脚本,其中PHP中的字符串被传递到JavaScript中的变量。当它被缩短到近一万个字符时,它可以正常工作,但是当尝试传递长度略大于100K的整个字符串时会破坏脚本。但是找不到任何错误。对于增加JavaScript变量的字符限制,是否有任何解决方案?我只是一个初学者。如果有人能找到解决这个问题,将不胜感激。
ECMAScript 标准 ECMA-262(第 6 版,2015 年 6 月)说
6.1.4 字符串类型
String 类型是零个或多个 16 位无符号整数值(“元素”)的所有有序序列的集合,最大长度为 2个 53-1 个元素。
因此,不要计划使用超过9,007,199,254,740,991或大约9千万亿个字符。当然,您应该为无法分配 18 PB 内存块的系统做好准备,因为符合 ECMAScript 实现不需要这样做。
我认为问题是关于实际限制,而不是规格限制。而且,不,它并不总是您拥有的RAM量。我有x86_64台运行Linux Mint的24GB PC,x86_64 Firefox和x86_64 Chrome,我遇到的限制是:
任何更高的,Firefox 会抛出一个 ,而 Chrome 会抛出 。使用以下代码段在浏览器中运行最大字符串长度的二进制搜索:Uncaught RangeError: repeat count must be less than infinity and not overflow maximum string size
Uncaught RangeError: Invalid string length
for (var startPow2 = 1; startPow2 < 9007199254740992; startPow2 *= 2)
try {" ".repeat(startPow2);} catch(e) {
break;
}
var floor = Math.floor, mask = floor(startPow2 / 2);
while (startPow2 = floor(startPow2 / 2))
try {
" ".repeat(mask + startPow2);
mask += startPow2; // the previous statement succeeded
} catch(e) {}
console.log("The max string length for this browser is " + mask);