Error.stackTraceLimit 跨浏览器

inf*_*rno 1 javascript error-handling stack-trace

支持哪些浏览器Error.stackTraceLimit,来自哪些版本?是否有任何替代 API 来限制堆栈跟踪长度?

AFAIK。IE10 和当前的 V8:Node、Chrome 都支持它,但我对此知之甚少。我想它与错误 API 的其他部分一样是非标准的。我没有找到任何关于在不同浏览器中设置跟踪长度的替代方法。所以我需要更多关于这个功能的信息,但我没有找到太多使用谷歌...

inf*_*rno 6

很难找到这个话题的相关资料,至少google没有帮到我,所以只好写了一个简单的测试。

function testStackTraceLimitSupport(){
    Error.stackTraceLimit = 2;

    function firstFunction(){
        secondFunction();
    }
    function secondFunction(){
        thirdFunction();
    }
    function thirdFunction(){
        fourthFunction();
    }
    function fourthFunction(){
        throw new Error("xxxx");
    }

    try {
        firstFunction();
    } catch (error){
        return !/firstFunction/.test(error.stack) 
            && !/secondFunction/.test(error.stack) 
            && /thirdFunction/.test(error.stack) 
            && /fourthFunction/.test(error.stack);
    }
}


console.log("Error.stackTraceLimit support: ", testStackTraceLimitSupport());
Run Code Online (Sandbox Code Playgroud)

据我所知,没有其他方法可以从 javascript 代码设置跟踪长度限制。如果您希望堆栈更短,您可以做的所有事情都是对堆栈进行切片。

我在以下环境中测试了该功能。

  • 节点 - 在 4.2.1 上测试,支持。我没有找到版本数据,可能在 Chromium 文档中。
  • Chrome - 在 52.0.2743.116 m 上测试,支持。我没有找到版本数据,可能在 Chromium 文档中。
  • Firefox - 在 48.0.2 上测试,不支持。
  • Internet Explorer - 在 11.0.9600.18426 上测试,它被支持。IE10+ 和 Edge 也支持它https://msdn.microsoft.com/en-us/library/s4esdbwz(v=vs.94).aspx
  • Opera - 在 39.0.2256.71 上测试,支持。我没有找到任何 JavaScript 开发人员的 Opera 文档。
  • PhantomJS - 在 2.1.1 上测试,不支持。