查看javascript类型我试图找出某些数据类型的最大存储大小。例如,我设置了一个快速的递归算法来增加var大小,直到浏览器崩溃,最终在我现有版本的chrome上的字符串接近128mb(或者可能是256)。
我一直在做这个痛苦的方式,因为我找不到任何关于此的规格,但是持续的浏览器崩溃使得这是一个痛苦的试验(尝试捕获因某些原因在这个特定问题上似乎无用)。
我正在寻找有关其他类型的最大存储空间大小的信息(数组,对象,函数,字符串,数字,bool ......)
EMCA-262第8.4节对此有些含糊其辞
String的长度是其中的元素数(即16位值)。空String的长度为零,因此不包含任何元素。
...所以也许这需要在浏览器中实现?
然而,ECMA会告诉我们有关数字的信息,例如,Number类型具有18437736874454810627(即2 ^ 64-2 ^ 53 + 3)个值,表示IEEE标准二进制浮点运算中指定的双精度64位格式IEEE 754值,除了IEEE标准的9007199254740990(即2 ^ 53-2)不同的“非数字”值在ECMAScript中表示为单个特殊的NaN值。
但后来我没有看到任何关于物体的事情。
我可以期待在浏览器中使用什么?是否有任何代码库可以帮助管理非常大的对象和字符串?
我可以在一个脚本中分配多少内存?
答案 0 :(得分:7)
正如您已经说过的那样,除了Number
之外,规范不规定了类型的任何大小限制/要求。
所以这绝对是留给实现的。
例如,Chrome对字符串的限制似乎是硬编码在512mb左右(而在32bit上则更少)。
这最大限度地限制了 32位版本的2 ^ 27-1中可能的分配请求。最大扁平字符串 长度为~2 ^ 28(512MB空间),最大字符串长度为2 ^ 29-1,因此两者都不是 这些限制可以解决问题(如果是,我们会抛出一个Out-Of-Memory异常 他们做了。)
请参阅:http://code.google.com/p/v8/issues/detail?id=362#c9
就其他浏览器而言,这需要一些研究,例如:研究Firefox的代码。但我怀疑我们可以为IE / Opera做同样的事情。
答案 1 :(得分:5)
ECMA第6.1.4节明确说明了这一点。
" String类型是零个或多个16位无符号整数值(“元素”)的所有有序序列的集合,最大长度为2 ^ 53-1个元素"
答案 2 :(得分:0)
我列出了another answer中字符串的一些典型限制。基本上,您处于安全区域,字符串长度为2 27 字符。