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

标签 javascript arrays internet-explorer stack-overflow

我有一个(生成的)页面,其中有一个非常大的锯齿状数组。它不会在 IE11 中初始化;我得到 SCRIPT28: Out of stack spaceSCRIPT2343: Stack overflow at line: 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 - 在 Internet Explorer 11 中加载巨大的数组导致堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23737596/

相关文章:

javascript - Mapbox 行车路线

javascript - ESLint 在实例化变量然后赋值时给出 'no-unused-vars' 错误

javascript - &lt;textarea&gt; 中的行与 JQuery 链接

javascript - 检查一个字符在字符串中出现了多少次

javascript - 验证码在 ie7 中显示未定义?

javascript - 我不应该在 ES6 中使用 var 吗?

c - vector : Static versus Dynamic 的赋值

c++ - 将特定索引处的 char 数组的内容与 char 文字进行比较 - cpp

css - IE 中的高度显示与 Firefox 不同

html - CSS 导致 UL 在 IE 中缩进太多