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