sirve que parse para number isnan funcion cual javascript line-numbers

que - ¿Cómo puedo determinar el número de línea actual en JavaScript?



parsefloat javascript (7)

¿Tiene JavaScript un mecanismo para determinar el número de línea de la instrucción que se está ejecutando actualmente (y, de ser así, qué es)?


Puedes intentar analizar una fuente de una función para buscar algunas marcas.
Aquí hay un ejemplo rápido (sí, está un poco desordenado).

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


Si su código es javascript + PHP, entonces el número de línea de PHP actual está disponible en javascript como una constante literal, porque está disponible en PHP como <?= __LINE__ ?>

(Eso es asumiendo que tienes las etiquetas cortas de PHP habilitadas, obviamente).

Así, por ejemplo, en javascript puedes decir:

this_php_line_number = <?= __LINE__ ?>;

Sin embargo, si no tiene cuidado, el número de línea de PHP puede ser diferente del número de línea de javascript, porque PHP "come" las líneas de origen antes de que el navegador las vea. Entonces, el problema se convierte en asegurar que sus números de línea de PHP y JavaScript sean iguales. Si son diferentes, hace que el uso del depurador javascript del navegador sea mucho menos agradable.

Puede asegurarse de que los números de línea sean iguales al incluir una declaración de PHP que escriba la cantidad correcta de líneas nuevas necesarias para sincronizar los números de línea del lado del servidor (PHP) y del lado del navegador (javascript).

Así es como se ve mi código:

<!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 ...lottsa 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> ...lottsa HTML & Javascript stuff here... </body> </html> <!-- *** this is line <?php echo __LINE__ . '' of '' . basename(__FILE__); ?> *** -->

La clave es esta declaración de PHP:

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

Eso escupe suficientes líneas nuevas para hacer que el número de línea visto por javascript sea el mismo que el número de línea de PHP. Todas las definiciones de funciones de PHP, etc. están en la parte superior, delante de esa línea.

Después de esa línea, restrinjo mi uso de PHP al código que no cambia los números de línea.

El "-6" explica el hecho de que mi código PHP comienza en la línea 8. Si inicia su código PHP antes, reducirá ese número. Algunas personas ponen su PHP justo en lo más alto, incluso por delante del DOCTYPE.

(La línea de meta viewport inhabilita el "aumento de fuente" de Chrome de Android según esta Q&A de : Chrome en Android cambia el tamaño de la fuente . Considérelo repetitivo, que cada página web necesita)

La siguiente línea es solo para verificar que no he cometido un error. Visto en el depurador del navegador, o haciendo clic con el botón derecho / guardar página web, se convierte en un comentario HTML que muestra el nombre del archivo fuente y el número de línea correctos:

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

se convierte en:

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

Ahora, dondequiera que vea un número de línea, ya sea en un mensaje de error o en el depurador de JavaScript, es correcto. Los números de línea de PHP y los números de línea de javascript son siempre consistentes e idénticos.


Un poco más portátil entre diferentes navegadores y versiones de navegador (debería funcionar en Firefox, Chrome e 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]; }


inyecte el siguiente fragmento de código en su código:

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


puedes probar:

window.onerror = handleError; function handleError(err, url, line){ alert(err + ''/n on page: '' + url + ''/n on line: '' + line); }

luego lance un error donde desee saberlo (no lo desea demasiado, pero podría ayudarlo si está realizando una depuración).

Nota: window.onerror no está definido / manejado en WebKit u Opera (la última vez que lo verifiqué)


puedes usar

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


var thisline = new Error().lineNumber

Si eso no funciona en el entorno que estés usando, puedes probar:

var stack = new Error().stack

Luego busca en la pila el número de línea.