JavaScript 字符串可以存储 10 万个字符吗?我编写了一个脚本,其中来自 PHP 的字符串被传递给 JavaScript 中的变量。当它被缩短到近一万个字符时它工作正常,但在尝试传递长度略大于 100K 的整个字符串时会破坏脚本。虽然没有发现任何错误。对于增加 JavaScript 变量字符限制的任何方式,有什么解决方案吗?我只是一个初学者。希望有人可以为此找到解决方案。
3 回答
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 24GB PC 运行 Linux Mint 和 x86_64 Firefox 和 x86_64 Chrome,我遇到的限制是:
- Firefox 84 中的 1,073,741,822 限制
- Chrome 87 中的 536,870,888 限制
任何更高,Firefox 抛出 a Uncaught RangeError: repeat count must be less than infinity and not overflow maximum string size
,而 Chrome 抛出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);
JS 或 PHP 对其字符串的大小没有理论上的限制。
我认为有几种可能的情况。
首先,检查您是否没有通过 HTTP GET 发送您的字符串。GET 有一个最大大小,我认为它取决于您的 Web 服务器。
其次,如果您确实使用 POST,请在 php.ini 中检查 post_max_size 并查看它是否小于您发送给它的字符串大小以及您的 .htacccess 文件以查看 php_value post_max_size 是否太小。
第三,检查 php.ini 中的 memory_limit 是否限制脚本可以使用的内存大小。
希望这可以帮助。