【问题标题】:Why this snippet is giving me incorrect line numbers?为什么这个片段给了我不正确的行号?
【发布时间】:2021-02-26 15:46:00
【问题描述】:

我抛出一个错误,我注意到 Stackoverflow 和 JSFiddle 都在堆栈跟踪上给了我不正确的行号。

function foo () {
 let stackTrace = (new Error()).stack;
 
 console.log(stackTrace);
}

foo();

点击“运行代码 sn-p”给我这个输出,

Error
    at foo (https://stacksnippets.net/js:13:20)
    at https://stacksnippets.net/js:18:1 

正如您在输出中看到的,我的代码中没有 13 行。

是什么原因造成的?

我使用的是最新的 Chrome 浏览器版本。

【问题讨论】:

  • 很可能是因为这两个运行时环境都是沙盒环境。
  • @ScottMarcus 我检查了 JSFiddle 的 iFrame。它使用
  • 当你在控制台中点击js:13(真正的,不是sn-p下面的那个),你会看到行号。它从 HTML 的开头开始计数,而不是 <script> 标记的开头。
  • @Barmar 是的。我即将写一个答案来检测返回值是否被丢弃。这个问题对那个人有帮助。

标签: javascript


【解决方案1】:

行号从文件的开头开始计算,而不是脚本的开头。因此,当 JavaScript 在 <script> 标记而不是外部 .js 文件中时,行号从 HTML 文档的开头开始计算。这可确保当 HTML 中有多个脚本时,filename:linenumber 引用是唯一的。

Stack Snippets 将脚本放在这样的标签中,然后将其加载到 iframe 中,因此您可以获得更高的计数。

【讨论】:

  • 我尝试使用“document.documentElement.innerHTML”以编程方式解析行号,但它提供了 Devtools 没有的 CSS 部分。
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多