Professional Documents
Culture Documents
¿Qué es JavaScript?
JavaScript, al igual que Java o VRML, es una de las múltiples maneras que han surgido
para extender las capacidades del lenguaje HTML.Al ser la más sencilla, es por el momento
la más extendida. Antes que nada conviene aclarar lo siguiente:
Ejemplo:
Cuando la página HTML es un formulario que permite acceder a una anuario telefónico, se
puede insertar un script que verifique la validez de los parámetros proporcionados por el
usuario. Esta prueba se efectúa localmente y no necesita un acceso a la red.
Por otro lado, también se podrá utilizar JavaScript para efectuar varias opciones a la vez;
por ejemplo, acompañar el acceso a un documento HTML de la visualización de un vídeo o
la ejecución de un applet de Java...
<SCRIPT>
Código del script
</SCRIPT>
LANGUAGE="JavaScript"
Precisa el lenguaje del script. Este atributo es obligatorio en ausencia del
atributo SRC.
SRC=url
El atributo SRC precisa el URL del script a insertar en el documento. Este
atributo es opcional, porque el script puede insertarse directamente en un
documento HTML.
<SCRIPT LANGUAGE="JavaScript">
<-- Disimula el contenido del script para navegadores
no compatibles
Código del script
//-->
</SCRIPT>
Por último, comentar otra forma de introducir scripts en documentos HTML, y es incluir
estos script como controladores de eventos de algunas marcas, como pueden ser la marcas
de imágenes, anclas, links, botonoes, etc. Veamos a continuación un ejemplo:
Como puede verse, dentro de la marca, como atributo de esta, se pone un controlador de
eventos y después del signo igual y entre comillas se incluye el código de JavaScript. Ahora
bien, también es posible llamar a una función del HEAD del documento. Se recomienda
esta segunda opción ya que es una manera más limpia y clara de escribir páginas. Se
conseguiría lo mismo que en el ejemplo anterior de esta forma:
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<-- Disimula el contenido del script para navegadores incompatibles
function alerta() {
alert(" Ir al índice");
}
//-->
</SCRIPT>
...
</HEAD>
<BODY>
<A HREF="index.htm" OnClick="alerta()">
Ir al índice
</A>
...
</BODY>
En cuanto a Microsoft Internet Explorer en su versión 3.0 interpreta JScript, que es muy
similar a JavaScript 1.0 pero con algunas incompatibilidades. Pero ya su versión 4.0 soporta
sin nigún problema, la versión 1.1 de JavaScript.
LANGUAGE="JavaScript1.1"
Los comentarios en el código permiten insertar observaciones observaciones del autor del
código para describir las distintas partes del programa. El interprete JavaScript los ignora y
posee por ello una sintaxis particular.
Se distinguen los comentarios en una sola línea, precedidos por la barra oblicua doble // y
los comentarios en varias líneas delimitados por los símbolos /* y por */. Por ejemplo:
Identificadores en JavaScript.
Num_linea
aux1
_exit
Primeramente decir que las palabras reservadas son palabras especiles que se utilizan para
aumentar la legibilidad y separar las entidades sintácticas. Estas palabras no pueden usarse
como identificadores.
Como primer ejemplo no hay nada mejor que el clásico programa ¡Hola mundo!. Éste
mostrará una ventana conteniendo el famoso mensaje cuando se pulse sobre el botón
ejemplo1. Para ello debemos generar el siguiente código fuente.
<CENTER>
<FORM>
<INPUT Type="button" Value=" ejemplo1 " onClick="Alert(' ¡Hola
mundo! ')">
</FORM>
</CENTER>
Este ejemplo define una función que calcula el cuadrado de un número y visualiza el
resultado en una ventana parecida a la anterior. Esto se llevará a cabo cuando se pulse sobre
el bot´n ejemplo2.
Como sabemos la función se tendrá que definir entre las marcas (<SCRIPT>,</SCRIPT>)
que se encuentran dentro de la cabecara (HEAD) del documento.
...
<HEAD>
...
<SCRIPT Laguage="JavaScript">
<!--
function Cuadrado(numero) {
return numero * numero;
}
//-->
</SCRIPT>
...
</HEAD>
<BODY>
...
<CENTER><FORM>
El cuadrado de 5 es:
<INPUT Type="button" Value=" ejemplo2 "
onClick="alert(Cuadrado(5))">
</FORM></CENTER>
El cuadrado de 5 es:
Ejemplo 3: Interacción con un formulario.
Este ejemplo es refleja la interacción de un script con un formulario, esta es una de las
aplicaciones en la que los programadores de páginas Web echan mano de JavaScript.
Concretemante en este ejemplo el usuario introducirá una expresión aritmética en un campo
de texto del formulario y el script le pedirá al usuario que la confirme antes de pasar a
evaluarla.
Se comprobará si de verdad la expresión está bien o mal, es decir, no se limitará a
preguntarle al usuario y a fiarse de su respuesta.
...
<HEAD>
...
<SCRIPT Laguage="JavaScript">
<!--
function evalua(form) {
if (confirm("¿Está seguro?"))
form.result.value = eval (form.expr.value);
else
alert("Inténtelo de nuevo.");
}
//-->
</SCRIPT>
...
</HEAD>
<BODY>
...
<CENTER><FORM>
Introduzca la expresión:
<INPUT Type="text" name="expr" Size=10>
Resultado:
</FORM></CENTER>
Introduzca la expresión:
Resultado:
Los tipos de datos
Antes de empezar este capítulo hay que aclarar que más que tipos de datos, lo que
JavaScript reconoce son tipos de valores, ya que como veremos más adelante JavaScript no
requiere que las variables tengan un tipo determinado en su declaración, pues que
JavaScript trata a todos los tipos por igual realizando una conversión automática de los
mismos. Ejemplo:
Por lo tanto, más que de tipos de datos, en JavaScript se habla de representación de datos.
Tipos numéricos.
Los tipos numéricos los podemos dividir en reales y enteros.
Hexadecimal: enteros en base 16. Se coloca antes del número en base 16 0x o 0X.
Ejemplo: Estas tres variables númericas tendrán un entero con el mismo valor.
var1 = 20;
var2 = 0x14;
var3 = 024;
Los reales se componen de una parte entera y otra fraccionaria separada por un punto de la
anterior. La parte fraccionaria puede estar compuesta por un indicador de exponente E o e
seguido de un número entero que indica el valor del exponente. A continuación se
mostrarón algunos ejemplos:
25.478
2.3e45
5.6E-2
-3.789
...
Las strings.
Una string es una ristra de caracteres delimitadas por comillas. Las comillas serán simples o
dobles atendiendo a una determinada regla.
Por defecto se usarán comillas dobles ("), pero si alguna sentencia a de ir incluida entre
dichas comillas, si esa sentencia contiene una string o a su vez otra sentencia que también
deba ir delimitada por dichas comillas, estas comillas serán entonces comillas simples (').
Ejemplo:
confirm("¿Estas seguro?");
OnMouseOver = "confirm('¿Estas seguro?');
Por otro lado, hay que tener en cuenta la escritura de caracteres especiales en lo que
denominamos secuencias de escape. La secuencia de escape comienza siempre con el
carácter \ y acontinuación se escribe otro carácter que representa el código especial o el
número en octal o hexadecimal de su código ASCII. Las secuencias de escape representan
un único carácter en las strings en donde aparecen.
Tipo booleano.
El tipo booleano simplemente distingue entre dos estados, un estado de éxito o de activado
valor verdadero true, y un estado de fracaso o de desactivado, valor false.
El valor nulo.
En JavaScript a las variables se les puede asignar un valor que indica el vacío, este valor es
el valor null.
La conversión de datos.
Antes que nada, recordar que JavaScript no es un lenguaje con tipos; por consiguiente,
cuando se declara una variable no es necesario precisar su tipo. El contenido de la variable
se convertirá automáticamente en el transcurso del programa según su uso.
x = una_string + un_numero;
y = una_numero + una_string;
La coversión de tipos no puede hacerse en todos los casos posibles: ciertas cadenas de
caracteres no pueden convertirse en número. Tales conversiones generan un error. Por
ejemplo:
Para crear un array es necesario definirnos una función como la que veremos a
continuación:
function CreaArray(n)
{
this.length = n;
for (var i=1; i<=n; i++)
this[i] = 0;
return this;
}
Comentar sobre la función que la palabra reservada this hace referencia a la variable a
actual, es decir, a la variable que contendrá el array. Por otro lado, observar que los array
tienen una propiedad length que nos muestra la longitud de dicho array. Por último mostrar
el uso de dicha función:
En este ejemplo se permitirá que el cliente que esté navegando por la página inicialice un
vector con un número de elementos determinado (máximo 9). El usuario podrá ir insertando
los elementos y ver el estado del vector en el momento que lo crea oportuno. El valor
inicial de los elementos del vector es cero. Los elementos que se pasan al vector sólo puede
tener tres caracteres como mucho.
El código fuente de esta página será el siguiente:
<HEAD>
...
<SCRIPT>
<!--
//Variables globales
var numele=0; // Numero de elementos del vector
var pos=1; // Posición a insertar el elemento actual
var vector; // Variable que contendrá el vector
//-->
</SCRIPT>
...
</HEAD>
<BODY>
...
<FORM>
<CENTER>
<H3><U>Inserta elementos en un vector>/U></H3>
</CENTER>
<TABLE>
<tr><td>Introducir el número de elementos del vector:
<input type="text" name="number" size=1
onChange="numele=Inicia(this.form);
pos=1">
<!-- onChange: Se activa cuando cambia el
contenido del text.//-->
</tr>
<tr>
<td>Elementos:
<input type="text" name="elemets" size=3>
<td>
<input type="button" value=" insertar "
onClick="alert('Insertar elemento '+pos);
AsignaElemento(this.form,vector,pos);
pos++">
</tr>
<tr><tr>
<input type="text" name="valores" size=45>
<td>
<input type="button" value=" Mostrar Vector "
onClick="this.form.valores.value=Mostrar(vector)">
</tr>
</TABLE>
</FORM>
...
.
Para hacer uso de las propiedades de un objeto basta con utilizar la siguiente notación:
mi_objeto.propiedad
Esto se verá con más claridad en el siguiente ejemplo en el cual tenemos un objeto
Universitario en el que tenemos las propiedades Nombre, Apellido, Edad y Facultad.
Suponiendo que tenemos una variable Uni1 que contienen en un momento determinado un
objeto Universitario:
Uni1.Nombre = "Pedro";
Uni1.Apellido = "Navarro";
Uni1.Edad = 13;
Uni1.Facultad = "Telecomunicaciones";
Pero no sólo podemos acceder a las propiedades de un objeto mediante la notación expuesta
anteriormente, ya que, existe una relación entre los objetos y los arrays, puesto que
podemos acceder a un objeto como si este fuera un array y sus elementos fueran los
propiedades de dicho objeto en el orden en que se definieron. Ejemplo:
Uni1[1] = "Pedro";
Uni1[2] = "Navarro";
Uni1[3] = 13;
Uni1[4] = "Telecomunicaciones";
Uni1["Nombre"] = "Pedro";
Uni1["Apellido"] = "Navarro";
Uni1["Edad"] = 13;
Uni1["Facultad"] = "Telecomunicaciones";
Los métodos.
Objeto.nombreDelMétodo = NombreFunción;
Podemos observar que, nombre del método es la manera en la que queremos nombrar a la
función dentro del objeto.
Objeto.nombreDelMétodo(parámetros);
La palabra reservada this permite referenciar al objeto actual. Por ejemplo, supongamos
que la función validate permite validar las propiedades de un objeto mediante un mínimo y
un máximo asociados; tendremos:
La creación de objetos.
Las propiedades de un objeto puedean describirse mediante otros objetos. Por ejemplo:
Hacemos que el objeto universitario tenga un propiedad del objeto Nota_Media por tanto:
alumno.expediante.final
alumno.dni = 44567234
Ahora la propiedad dni pertenece a la instancia del objeto contenido en alumno. Esta
modificación no afectará a los otros objetos del tipo universitario, ya que para añadir una
pripiedad a un tipo de objeto esta debe figurar en la definición del mismo.
function Datos() {
var ristra = this.nombre + " " + this.apellido + " "
+ this.dni + " " + this.edad + " "
+ this.expediente.curso1 + " " +
this.expediente.curso2
+ " " + this.expediente.curso3 + "
" + this.expediente.final;
alert(ristra);
}
//this: objeto al que pertenece el método.
alumno.Datos()
Operadores
JavaScript posee una amplia variedad de operadores. Estos operadores los podemos
distinguir en dos grupos: binarios, que actú sobre dos operandos y unarios, que sólo
requieren un operando. Así, su sintaxis general es:
operando1 operador_unario
operador_unario operando1
Operadores aritméticos
JavaScript suministra las operaciones básicas con el único añadido del operador que
devuelve el resto de la división entre el operador izquierdo y el derecho. Se carece de
operadores más complejos, aunque el objeto Math definido en JavaScript posee dichas
tareas.
Nota: El operador + aplicado strings, concatena ambas strings en una sola.
Operadores relacionales
Se emplean típicamente en las expresiones condicionales. Los operadores relacionales
devuelven valores booleanos. Los operandos pueden ser tanto númericos como strings.
Operadores lógicos.
Los operandos ló está relacionados con los relacionales ya que normalmente los operandos
que usan son resultado de expresiones relacionales. Los valores resultantes son booleanos.
Operadores de asignación.
La asignación también es un operador que devuelve la variable modificada. El operador de
asignación en JavaScript es =. Los operadores de asignación que se muestran a
continuación no son sino abreviaturas que hacen más cómoda y simples las expresiones,
aunque a veces sean más ilegibles.
Otros operadores.
Operador de selección.
Este operador se utiliza para ejecutar una operación u otra dependiendo de la condición. El
formato es el siguiente:
i = (x!=y)?6:(k+1)
El operador new.
Este operador se va a utilizar para crear una instacia de un tipo de objetos previamente
definido. La sintaxis a seguir es la siguiente:
Estos parámetros son los que se le pasan al constructor de dicho objeto en cuestión.
El operador typeof.
Este operador aplicado a una variable devuelve el tipo de objeto al que pertenece el dato
contenido por dicha variable. Su sintaxis es:
typeof(variable)
Precedencia.
La precedencia de los operadores va a determinar el orden en que se ejecuten en una
expresión determinada. Usando paréntesis controlaremos que las operaciones se lleven a
cabo según nosotros queramos. En JavaScript la precedencia de los operadores de mayor a
menor es la siguiente:
Estructuras de control
JavaScript posee las sentencias de control típicas de los lenguajes de alto nivel. A
continuación veremos la sintaxis de las mismas.
Declaración de variables.
En cuanto a las variables en JavaScript decir que no se les asigna un tipo predefinido. En
JavaScript el tipo de las variables dependen del valor que contengan las mismas en cada
momento. Por tanto se realiza una conversión automática de tipos.
var mi_variable;
Es posible asignarle el valor cuando la declaramos, por ejemplo:
var mi_entero = 124;
La sentencia if.
La sentencia if tiene la forma:
{
Instrucción 1;
Instrucción 2;
...
Instrucción N;
}
La sentencia while.
La sentencia while tiene la forma:
La sentencia for.
En cuando a dicha sentencia, en JavaScript podemos distinguir dos variantes:
Este bucle, como a continuación podremos ver, tiene una sintaxis muy parecida a la de
C/C++.
Condición: lo que se debe cumplir para que el bucle se ejecute. Depende de la variable
índice.
El bucle for/in.
Esta estructura itera una variable var sobre todas las propiedades de un objeto obj que se le
pasa. Así para cada valor de var se ejecutaran las sentencias del bucle. Por lo tanto, el bucle
tendrá tantas iteraciones como propiedades el objeto y en cada iteración la variable tendrá
el valor de la propiedad del objeto correspondiente con dicha iteración. Su sintaxis es:
La sentencia break.
La sentencia break se puede colocar dentro de un bucle o bucles anidados. Cuando se
ejecuta la sentencia break se abandona el bucle más interno. A todos los efectos la
sentencia break actúa como un salto a la instrucción siguiente al bucle en el que se ejecuta.
La sentencia continue.
La sentencia continue, no abandona el bucle si no hace que se ejecute la siguiente
iteración. En el bucle while la ejecución del continue hace que el flujo del programa salte a
la condición. En el bucle for la ejecución del continue hace que la expresión de
incremento, para después continuar normalmente con la condición. Es decir, la ejecución
del continue evita que se ejecute el resto del cuerpo del bucle.
La sentencia switch.
Hace que se seleccione un grupo de sentencias entre varias posibles. Su sintaxis es:
switch ( Expresión )
{
case Valor 1: Instrucción o bloque de instrucciones;
[break;]
case Valor 2: Instrucción o bloque de instrucciones;
[break;]
case Valor 3: Instrucción o bloque de instrucciones;
[break;]
...
case Valor N: Instrucción o bloque de instrucciones;
[break;]
[default:]Instrucción o bloque de instrucciones;
}
La expresión entre paréntesis del switch debe ser entera. Su resultado se comparará con los
distintos valores del case. Si coincide con uno de ellos se pasará a la instrucción siguiente
al case con dicho valor y se seguirán ejecutando las instrucciones consecutivas hasta
encontrar una instrucción break o alcanzar el cierra llaves del switch. En caso de que el
resultado de la expresión no coincida con ningún valor se pasará la ejecución a la
instrucción siguiente de la etiqueta default, si la hubiera, y se continuará como un case. Los
valores en los case pueden ser una expresión constante. No puede haber dos case con el
mismo valor.
Las funciones
Definición de funciones.
La instrucción function permite la definición de funciones. Después de esta palabra
reservada se coloca el nombre de la función seguido de una lista de argumentos delimitados
por paréntesis y separados por comas.
La sentencia return.
La sentencia return es la que permite devolver el resultado de una función. En el ejemplo
que se verá a continuación, se muestra una función que devuelve el área de un cuadrado de
lado l.
function Area(lado){
return lado*lado;
}
Propiedades de las funciones.
JavaScript asocia a cada función dos propiedades: arguments y caller. Estas propiedades
permiten respectivamente la gestión de los parámetros opcionales y la identificacíón de la
función que llama.
La propiedad caller.
Muestra el nombre de la función que llama, por lo tanto, esta propiedad devolverá una
cadena de caracteres.
La propiedad arguments.
Es un array que contiene los parámetros que le son pasados a la función. Por ejemplo, la
función suma definida como:
function Suma(x){
var sumandos = suma.arguments;
var num_op = suma.arguments.length;
var resultado = 0;
for (var i=0; i<num_op; i++)
resultado += sumandos[i];
return resultado;
}
Vemos como esta función permite calcular la suma de los números pasados como
argumentos. Así, Suma(4,5,7) devuelve 16 y Suma(56) devuelve 56.
La función eval tiene como argumento una expresión y devuelve el valor de la misma. Esta
función resulta útil para evaluar una cadena de caracteres que representa una expresión
numérica. La edición efectuada mediante un campo de formulario es una cadena de
caracteres que a veces es necesario convertir en valor numérico. El código siguiente ilustra
este ejemplo permitiendo al usuario introducir una expreción numérica y visualiza a
continuación el valor de la expresión.
<SCRIPT>
function calcula(obj){
obj.result.value = eval(obj.expr.value)
}
</SCRIPT>
<FORM NAME="evalua">
Introducir expresión:
<INPUT TYPE="text" NAME="expr" SIZE=20>
<br>
Resultado:
<INPUT TYPE="text" NAME="result" SIZE=20>
<br>
<INPUT TYPE="button" VALUE="evalua"
onClick="calcula(this.form)">
</FORM>
Introducir expresión:
Resultado:
Estas dos funciones permiten codificar cadenas de caracteres en formato URL. Esta
codificación es necesaria en la creación automática de enlaces de hipertexto o en la
definición de propiedades persistentes como los Cookies. Ejemplo:
Ejemplo
<form>
Introducir carácter en formato URL o normal:
<input type="text" name="char" size=5>
<br>
<INPUT type="radio" name="codificacion" value="normal"
onClick="this.form.char.value=escape(this.form.char.value)">
formato estándar a URL<br>
<INPUT type="radio" name="codificacion" value="URL"
onClick="this.form.char.value=unescape(this.form.char.value)">
formato URL a estándar<br>
</form>
Introducir carácter en formato URL o normal:
formato estándar a URL
formato URL a estándar
La función isNaN.
Función que comprueba si el valor pasado por parámetros es númerico o no. El resultado de
esta función es un booleano. Es decir, evalúa un argumento para ver si es NaN: Not
Number.
isNaN(valor de entrada)
Ejemplo
<SCRIPT>
function Comprueba(form){
var number = parseFloat(form.valor.value);
if (isNaN(number)==true)
alert("No es numérico");
else
form.valor.value = number;
alert("Es numérico");
}
</SCRIPT>
...
<form>
Introducir un valor numérico:
<input type="text" name="valor">
<br>
<input type="button" value=" Comprobar " onClick="Comprueba(this.form)">
</form>
Convierte una string a un número en punto flotante. Si se encuentra otros caracteres que no
sean números, el signo '+', el '-' o un exponente, devuelve el valor encontrado hasta ese
punto. Del mismo modo, si el primer caracter no se puede convertir a número devolverá
cero.
parseFloat(cadena de caracteres)
Ejemplo
<form>
Convierte a real:
<input type="text" name="float">
<br>
<input type="button" value=" Convierte "
onClick="this.form.float.value=parseFloat(this.form.float.value)">
</form>
Convierte a real:
Convierte una cadena de caracteres de entrada a un número entero con una base
especificada. La base puede ser 8, 10 ó 16. Si se encuentra otros caracteres que no sean
números, el signo '+', el '-' o un exponente, devuelve el valor encontrado hasta ese punto.
Del mismo modo, si el primer caracter no se puede convertir a número devolverá cero.
//base es opcional.
parseInt(ristra,base)
Ejemplo
Introducir entero:
<input type="text" name="int">
<br>
<INPUT type="radio" name="conversion" value="decimal"
onClick="this.form.int.value=parseInt(this.form.int.value,
10)">
Expresar entero en decimal<br>
<INPUT type="radio" name="conversion" value="hexadecimal"
onClick="this.form.int.value=parseInt(this.form.int.value,
16)">
Expresar entero en hexadecimal<br>
<INPUT type="radio" name="conversion" value="octal"
onClick="this.form.int.value=parseInt(this.form.int.value,
8)">
Expresar entero en octal<br>
</form>
Introducir entero:
Expresar entero en decimal
Expresar entero en hexadecimal
Expresar entero en octal