Inc*_*ito 13 javascript cross-browser ecma262
查看javascript类型我试图找出某些数据类型的最大存储大小.例如,我设置了一个快速递归算法来增加var大小,直到浏览器崩溃,最终在我现有版本的chrome上的字符串接近128mb(或者可能是256).
我一直在做这个痛苦的方式,因为我找不到任何关于此的规格,但是持续的浏览器崩溃使得这是一个痛苦的试验(尝试捕获因某些原因在这个特定问题上似乎无用).
我正在寻找有关其他类型的最大存储大小的信息(数组,对象,函数,字符串,数字,bools ......)
EMCA-262第8.4节对此持模糊态度
String的长度是其中的元素数(即16位值).空String的长度为零,因此不包含任何元素.
...所以也许这是需要在浏览器中实现的东西?
然而,ECMA会告诉我们有关数字的信息,例如
Number类型具有18437736874454810627(即2 ^ 64-2 ^ 53 + 3)值,表示IEEE标准二进制浮点运算中指定的双精度64位格式IEEE 754值,但9007199254740990(即,2 ^ 53-2)IEEE标准的不同"非数字"值在ECMAScript中表示为单个特殊NaN值.
但后来我没有看到任何关于物体的东西.
我可以期待在浏览器中使用什么?是否有任何代码库可以帮助管理非常大的对象和字符串?
我可以在一个脚本中分配多少内存?
正如您已经说过的那样,规范没有规定任何类型的尺寸限制/要求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做同样的事情.