Ir directamente al contenido de esta página
eval
Supongamos que presento una lista de variables como la siguiente:
var personaje_01 = "Cloud Strife";
var personaje_02 = "Sephiroth";
var personaje_03 = "Vincent Valentine";
var personaje_04 = "Cid Hightwind";
y pido al usuario que introduzca en un campo de texto el nombre de una variable para mostrar su valor en una alerta. Podría pensar que por medio de document.getElementById('caja_texto').value
puedo recoger la entrada del usuario y emplearla como argumento para alert
, más o menos así:
function lanzar_alerta(){
var variable = document.getElementById('caja_texto').value;
alert(variable);
}
Si el usuario entroduce «personaje_02», parece que la alerta debería ser «Sephiroth», pero si lo comprobamos…
…lo que aparece en el cuadro de diálogo es literalmente la entrada del usuario. ¿Por qué? Porque para JavaScript en el ejemplo propuesto la entrada «personaje_02» no es más que una cadena literal, no es el nombre de una variable en el contexto de un script. Para que lo sea, tenemos que pedir que la interprete como si se tratase de un argumento o instrucción de JavaScript, con lo que la función sería:
function lanzar_alerta(){
var variable = document.getElementById('caja_texto').value;
alert(eval(variable));
}
Así la entrada del usuario deja de ser una cadena sin más y se convierte en el nombre de una variable.
encodeURI
, encodeURIComponent
, decodeURI
y decodeURIComponent
Al trabajar con JavaScript, podemos en algún momento querer crear y emplear URL. Para que el navegador las comprenda, hay que codificarlas, lo que se hace por medio de encodeURI
.
Supongamos que estamos trabajando con un URL que creamos para enviar valores a otra página, algo como:
http://www.pagina_destino.org/procesar.php?idioma=es&horario=mañana&comentario=confirmación de la reserva
Esta dirección contiene caracteres que nos son válidos para un URL, como por ejemplo la «ñ», los espacios en blanco o la «ó». Por ello, la codificamos:
encodeURI('http://www.pagina_destino.org/procesar.php?idioma=es&horario=mañana&comentario=confirmación de la reserva');
El resultado .
encodeURIComponent
funciona de la misma manera, pero no respeta caracteres especiales de URL —como ?
, &
o =
—, sino que codifica estos también. Ese es el motivo por el que encodeURIComponent
se emplea para fragmentos de URL, y no para URL completos.
Como se podrá adivinar, decodeURI
y decodeURIComponent
realizan la operación inversa, decodificar URL completas o secciones respectivamente.
parseInt
y parseFloat
No lo hemos visto, pero el objeto Number tiene un método que es toString
, que permite convertir un numeral en una cadena literal si se da la necesidad. Sin embargo, no existe un método toNumber
de String que convierta la cadena «15» en el número 15.
Los que sí existen son dos métodos de Global que convierten una cadena en un número entero —parseInt
— o en un número con parte decimal —parseFloat
—. Veamos un código:
var a = '3';
var b = 4;
var c = a + b;
Como sabemos, en este caso JavaScript concatenaría las dos variables, con lo que c sería igual a 34, pero si lo rehacemos de esta manera:
var a = '3';
var b = 4;
var c = parseInt(a) + b;
la variable a se convierte en un valor numérico, con lo que c ahora es 7, la suma de ambos.
parseFloat
funcionaría de la misma manera:
var a = '3';
var b = '.';
var c = '5';
var d = a + b + c;
var e = parseFloat(d) + 2;
Aquí e valdría 5.5.
¿Y que ocurre si cualquiera de los métodos se aplica a una cadena que no puede convertirse en un numeral? Pues que el resultado de la conversión es el valor NaN
, Not a Number.
(cc) CodexExempla.org, 2007–2024 Mapa del sitio | XHTML | CSS | AA