javascript – 在Internet Explorer 11中加载巨大的数组导致堆栈溢出

前端之家收集整理的这篇文章主要介绍了javascript – 在Internet Explorer 11中加载巨大的数组导致堆栈溢出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个(生成的)页面,有一个非常大的锯齿状数组.它没有在IE11中初始化;我得到了SCRIPT28:堆栈空间不足和SCRIPT2343:堆栈溢出:1.我已经将有问题的页面减少到最小的随机数据,这就是它的样子:
<html><body>
    <div id="info">
        Loading...
    </div>
    <script>

        var d = [];
        var i = 0;

        d[i++] = [
        "XHC_14",0
        ];

        d[i++] = [
        "ZXS_26","UVT_27","QML_3149","MJO_3150",15993327
        ];

        d[i++] = [
        "VKG_3156","ZEA_3157","KZG_3159","MNA_3162","AKX_3163","KLK_3164",618601
        ];

        // more array initialization ...

        info.innerHTML = "<h1>Ready!</h1>"; // this will only show if the initialization succeeded
    </script>
</body></html>

实际文件是~500k行,重复数组初始化约~14k次.真实档案可在此处获取ie11_stack_overflow_problem.zip

它只会在阵列初始化足够大时崩溃.我有各种各样的变体,包括把它放在一个函数中给它自己的范围,但无济于事.它适用于我测试的所有其他浏览器,包括XP上的IE8.我的配置是Win7与IE 11.0.9600.17107(完全更新).

任何人都可以弄明白为什么会这样吗?

解决方法

那个文件很可怕,是Visual Studio和Notepad ……以及IE11的死亡之吻.你搞砸了翻译.

我通过使用这个工作

JSON.serialize(d)

在另一个浏览器中,然后将输出作为字符串粘贴到源文件中.

然后:

var jsonStr = '[[blablabla...I go on foreeeeeever]]';
var d=JSON.parse(jsonStr);

现在它在IE11中加载.

因此,解决方案是将您的数据结构作为JSON字符串编写并解析它.

猜你在找的JavaScript相关文章