22

JavaScript 字符串可以存储 10 万个字符吗?我编写了一个脚本,其中来自 PHP 的字符串被传递给 JavaScript 中的变量。当它被缩短到近一万个字符时它工作正常,但在尝试传递长度略大于 100K 的整个字符串时会破坏脚本。虽然没有发现任何错误。对于增加 JavaScript 变量字符限制的任何方式,有什么解决方案吗?我只是一个初学者。希望有人可以为此找到解决方案。

4

3 回答 3

32

ECMAScript 标准ECMA-262(第 6 版,2015 年 6 月)说

6.1.4 字符串类型

String 类型是由零个或多个 16 位无符号整数值(“元素”)组成的所有有序序列的集合,最大长度为 2 53 -1 个元素。

所以不要计划使用超过 9,007,199,254,740,991 或大约 9 万亿个字符。当然,您应该为无法分配 18 PB 内存块的系统做好准备,因为这不是符合 ECMAScript 实现的要求。

于 2015-11-17T22:53:44.653 回答
12

我认为问题是询问实际限制,而不是规格限制。而且,不,它并不总是你拥有的 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);

于 2021-01-04T22:31:30.123 回答
7

JS 或 PHP 对其字符串的大小没有理论上的限制。

我认为有几种可能的情况。

首先,检查您是否没有通过 HTTP GET 发送您的字符串。GET 有一个最大大小,我认为它取决于您的 Web 服务器。

其次,如果您确实使用 POST,请在 php.ini 中检查 post_max_size 并查看它是否小于您发送给它的字符串大小以及您的 .htacccess 文件以查看 php_value post_max_size 是否太小。

第三,检查 php.ini 中的 memory_limit 是否限制脚本可以使用的内存大小。

希望这可以帮助。

于 2012-12-04T07:36:32.710 回答