JavaScript 是否具有确定当前执行语句的行号的机制(如果有,它是什么)?
如何确定 JavaScript 中的当前行号?
IT技术
javascript
line-numbers
2021-02-03 07:42:09
6个回答
var thisline = new Error().lineNumber
如果这在您使用的任何环境中都不起作用,您可以尝试:
var stack = new Error().stack
然后在堆栈中寻找行号。
您可以使用:
function test(){
console.trace();
}
test();
在不同浏览器和浏览器版本之间更具可移植性(应该适用于 Firefox、Chrome 和 IE10+):
function ln() {
var e = new Error();
if (!e.stack) try {
// IE requires the Error to actually be throw or else the Error's 'stack'
// property is undefined.
throw e;
} catch (e) {
if (!e.stack) {
return 0; // IE < 10, likely
}
}
var stack = e.stack.toString().split(/\r\n|\n/);
// We want our caller's frame. It's index into |stack| depends on the
// browser and browser version, so we need to search for the second frame:
var frameRE = /:(\d+):(?:\d+)[^\d]*$/;
do {
var frame = stack.shift();
} while (!frameRE.exec(frame) && stack.length);
return frameRE.exec(stack.shift())[1];
}
你可以尝试解析一个函数的源来寻找一些标记。
这是一个简单的例子(是的,它有点混乱)。
function foo()
{
alert(line(1));
var a;
var b;
alert(line(2));
}
foo();
function line(mark)
{
var token = 'line\\(' + mark + '\\)';
var m = line.caller.toString().match(
new RegExp('(^(?!.*' + token + '))|(' + token + ')', 'gm')) || [];
var i = 0;
for (; i < m.length; i++) if (m[i]) break;
return i + 1;
}
将以下代码段注入您的代码:
console.debug("line:", /\(file:[\w\d/.-]+:([\d]+)/.exec(new Error().stack)[1]);