110 votes

Comment déterminer le numéro de ligne actuel en JavaScript ?

JavaScript dispose-t-il d'un mécanisme permettant de déterminer le numéro de ligne de l'instruction en cours d'exécution (et si oui, quel est-il) ?

75voto

z5h Points 8029

var thisline = new Error().lineNumber

Si cela ne fonctionne pas dans l'environnement que vous utilisez, vous pouvez essayer :

var stack = new Error().stack

Recherchez ensuite le numéro de ligne dans la pile.

54voto

baligena Points 1007

Vous pouvez utiliser :

function test(){
    console.trace();
}

test();

31voto

jwatt Points 126

Un peu plus portable entre les différents navigateurs et versions de navigateurs (devrait fonctionner avec Firefox, Chrome et 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];
}

5voto

Mikhail Nasyrov Points 326

Vous pouvez essayer d'analyser la source d'une fonction pour obtenir des notes.
Voici un exemple rapide (oui, c'est un peu brouillon).

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;
}

3voto

crishushu Points 31

Injectez l'extrait suivant dans votre code :

console.debug("line:", /\(file:[\w\d/.-]+:([\d]+)/.exec(new Error().stack)[1]);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X