在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在IE10中已经新加入了Error.stack 的支持,可以加快开发人员的脚本调试,并更正错误。尤其是一些难以重现的错误,如异步操作等。以下内容来自于微软IE团队,对于这个特性描述的非常详细。 调试应用程序JavaScript 中的结构化错误处理依赖于 让我们一同来查看一个简单的脚本,并以此展开深入讨论。该脚本试图计算 复制代码 代码如下:(function () { 'use strict'; function squareRoot(n) { if (n < 0) throw new Error('Cannot take square root of negative number.'); return Math.sqrt(n); } function square(n) { return n * n; } function pointDistance(pt1, pt2) { return squareRoot((pt1.x - pt2.x) + (pt1.y - pt2.y)); } function sample() { var pt1 = { x: 0, y: 2 }; var pt2 = { x: 12, y: 10 }; console.log('Distance is: ' + pointDistance(pt1, pt2)); } try { sample(); } catch (e) { console.log(e.stack); } })(); 该脚本中包含一个缺陷,其未调整组件间的差异。因此,对于某些输入而言, pointDistance 函数将返回错误的结果;而在其他情况中,该脚本将导致错误发生。为了理解堆栈跟踪的含义,让我们一同来查看 F12 开发人员工具中的错误,并查看其脚本选项卡:
堆栈跟踪将转储至 调试过程中, 此前,我曾注意到被引发的对象必须为 即便对象为 DOM 异常,它们也不包含可导致 复制代码 代码如下:function causesDomError() { try { var div = document.createElement('div'); div.appendChild(div); } catch (e) { throw new Error(e.toString()); } } 然而,您可能将考虑是否要使用该模式。这可能是最适用于实用工具库开发的模式,特别是在您考虑代码的意图是否为隐藏 DOM 操作或简单地实施某一任务的时候。如果其目的为隐藏 DOM 操作,那么合并操作并引发 Error 可能是我们需要选择的正确方式。
性能注意事项
堆栈跟踪的构造始于错误对象被引发之时;构造堆栈跟踪需要查看当前执行堆栈。为了防止遍历特大堆栈过程中出现性能问题(甚至可能出现的递归堆栈链),默认情况下,IE 仅将收集前十位的堆栈帧。然而该设置可通过将静态属性 当某一堆栈是由异步回调(例如 复制代码 代码如下:(function () { 'use strict'; function squareRoot(n) { if (n < 0) throw new Error('Cannot take square root of negative number.'); return Math.sqrt(n); } function square(n) { return n * n; } function pointDistance(pt1, pt2) { return squareRoot((pt1.x - pt2.x) + (pt1.y - pt2.y)); } function sample() { var pt1 = { x: 0, y: 2 }; var pt2 = { x: 12, y: 10 }; console.log('Distance is: ' + pointDistance(pt1, pt2)); } setTimeout(function () { try { sample(); } catch (e) { console.log(e.stack); } }, 2500); })(); 一旦执行该代码段,您将发现堆栈跟踪将出现稍许延迟。此时,您将同时发现堆栈底部并非全局性代码 ,而是Anonymous function 。事实上,这并非同一匿名函数,而是传递至 setTimeout 的回调函数。由于您丢失了与挂起回调有关的上下文,因此您可能无法确定调用回调的内容。如果在某一应用场景中,系统注册了某一回调来处理许多不同按钮的 click 事件,那么您将无法分辨注册将引用哪一回调。话虽如此,这一限制作用毕竟有限,因为在大多数情况中,堆栈顶部可能将突出显示问题区域。
观看体验演示
了解 Windows 8 Consumer Preview 中 IE10 的使用情况。您可在 如欲查看参考材料,请浏览有关 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论