如何在JavaScript中确定当前行号?

132
JavaScript 有一种机制可以确定当前执行语句的行号吗?如果有,它是什么?

11个回答

-3
如果您的代码是JavaScript + PHP,则当前PHP行号在JavaScript中可用作文字常量,因为它在PHP中可用作<?= __LINE__ ?>(假设您已启用PHP短标签)。
例如,在JavaScript中,您可以这样说:
this_php_line_number = <?= __LINE__ ?>;

然而,如果你不小心的话,PHP行号可能会与JavaScript行号不同,因为PHP在浏览器看到它们之前“吃掉”了源代码行。所以问题就变成了确保你的PHP和JavaScript行号是相同的。如果它们不同,那么使用浏览器的JavaScript调试器就会变得更加困难。

你可以通过包含一个PHP语句来确保行号相同,该语句写入所需的正确数量的换行符,以同步服务器端(PHP)和浏览器端(JavaScript)的行号。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<!-- Copyright 2016, 2017, me and my web site -->
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="initial-scale=1, user-scalable=yes">

<?php

...lots of PHP stuff here, including all PHP function definitions ...

echo str_repeat("\n",__LINE__-6); # Synchronize PHP and JavaScript line numbers
?>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->

  <title>My web page title</title>

...lots of HTML and JavaScript stuff here...

</body>
</html>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->

关键是这个 PHP 语句:

echo str_repeat("\n",__LINE__-6);

这段代码会输出足够多的换行符,使得 JavaScript 中的行号与 PHP 中的行号相同。所有的 PHP 函数定义等都在该行之前。

在该行之后,我限制了自己使用不会改变行号的 PHP 代码。

"-6" 是因为我的 PHP 代码从第 8 行开始。如果你的 PHP 代码比我更早开始,那么这个数字就会减少。有些人把他们的 PHP 代码放在最顶部,甚至在 DOCTYPE 之前。

(meta viewport 行禁用了 Android Chrome 的 "字体增强",参见 Stack Overflow Q&A:Chrome on Android resizes font。将其视为每个网页都需要的样板文件。)

以下一行只是为了验证我没有犯错。在浏览器的调试器中查看,或通过右键单击 / 保存网页,它将成为一个 HTML 注释,显示正确的源文件名和行号:

<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->

变成:

<!-- *** this is line 1234 of my_file.php *** -->

现在,无论是在错误消息还是 JavaScript 调试器中看到的行号,都是正确的。PHP 行号和 JavaScript 行号始终保持一致并且相同。


1
这不是一个糟糕的答案。考虑到所问的内容,它是有效的。问题没有指定环境的任何细节。 - JΛYDΞV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接