javascript字符串变量的字符限制

时间:2012-12-04 06:47:00

标签: php javascript

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

3 个答案:

答案 0 :(得分:16)

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

  

6.1.4字符串类型

     

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

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

答案 1 :(得分:7)

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

我认为有一些可能的情况。

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

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

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

希望这会有所帮助。

答案 2 :(得分:1)

我认为问题是问实际限制,而不是规格限制。而且,不,它并不总是您拥有的 RAM 量。我有运行 Linux Mint 的 x86_64 24GB PC,带有 x86_64 Firefox 和 x86_64 Chrome,我遇到的限制是:

  • Firefox 84 中的 1,073,741,822 个限制
  • Chrome 87 中的 536,870,888 限制

任何更高,Firefox 会抛出 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);