JavaScript es un lenguaje compacto, y basado en objetos, diseñado para el desarrollo de aplicaciones cliente-servidor a través de Internet. Netscape Navigator 2.0 es capaz de interpretar sentencias JavaScript embedidas en programas CGI (Script del lado de servidor).
En una aplicación cliente para un browser, las sentencias JavaScript embedidas en un documento HTML pueden reconocer y responder a eventos generados por el usuario, como clicks del mouse, información en formularios y navegación de documento a documento.
Por ejemplo, se puede escrubir una función JavaScript que
verifique que la información ingresada por el usuario sea
correcta. Sin que haya transmisión de datos por la red.
Un documento HTML con JavaScript embedido es capaz de interpretar
la información ingresada por el usuario, verificar que sea
correcta y alertar al usuario en caso que no lo sea. Se puede
también ejecutar archivos de audio, applet's o comunicar con una
extensión de Netscape (plug-in's) en respuesta a la apertura o
cierre de una página.
El lenguaje JavaScript imita a Java, pero sin verificación estática de tipos ni restricciones fuertes en tiempo de ejecución. JavaScript soporta la mayoría de las expresiones y sintaxis válidas en Java, así como las sentencias de control de flujo de Java. En contraste con el sistema de clases definidas en tiempo de compilación en Java, Javascript trabaja en base a un simple sistema en tiempo de ejecución, el cual permite el uso de tipos de datos básicos como enteros, números de punto flotante, booleanos y strings. JavaScript soporta un sistema simple de objetos basado en instancias (no en clases), que provee capacidades significativas.
Además, JavaScript soporta funciones, pero de nuevo sin ningún requerimiento especial al declararlas. Estas funciones pueden ser propiedades de objetos (aunque el usuario no puede definir clases), y se ejecutan como métodos bastante flexibles debido a que no se verifican los tipos.
JavaScript complementa a Java al exponer muchas características de las applets en Java a los autores de HTML. JavaScript puede además obtener y establecer propiedades de las applets, esto es, sólo aquellas que alteran el estado de la applet o plug-in.
Java es un lenguaje de extensión diseñado, en particular, para ejecución rápida y seguridad de tipos, lo que se ve reflejado en la imposibilidad de transformar un entero en una referencia, por ejemplo.
Los programas en Java consisten exclusívamente de clases y sus métodos, lo que, junto a los requerimientos de declaraciones de clases, métodos y tipos hacen que la programación sea más compleja que en JavaScript. Otro punto imortante es que la herencia que provee Java crea jerarquías muy acopladas de objetos.
En contraste, JavaScript posee el espíritu de un lenguaje pequeño y verificado dinámicamente. Estos lenguajes ofrecen herramientas de programación a una audiencia mayor, ya que son más fáciles de utilizar, y proveen de una interface más especializada. Como consecuecia, necesitan sólo de un mínimo de requerimientos para creación de objetos.
La siguiente tabla compara y contrasta JavaScript con Java:
| JavaScript | Java |
|---|---|
|
|
|
|
|
|
|
|
|
|
| Ninguno puede escribir a archivos en disco. | |
JavaScript puede ser embedido en un documento HTML de dos maneras:
Una script embedida en HTML usando este elemento usa el formato:
<SCRIPT LANGUAGE="JavaScript"> sentencias; ... </SCRIPT>
El atributo opcional LANGUAGE especifica el lenguaje de la script. Nota: JavaScript diferencia entre mayúsculas y minúsculas.
Ejemplo 1: Una Script Sencilla
<HTML><HEAD>
</HEAD><BODY>
<SCRIPT LANGUAGE="JavaScript">
document.write("Hola mundo!!");
</SCRIPT>
</BODY></HTML>
Cuando un usuario utiliza un browser que no entiente scripts, éste despliega todo el texto que aparece entre los elementos < SCRIPT > y < /SCRIPT >. Para evitar lo anterior se debe ocultar el códico JavaScript de la siguiente manera:
<SCRIPT LANGUAGE="JavaScript"><!-- sentencias; ... // --></SCRIPT>
Scripts que se ubican entre los elementos < SCRIPT > y < /SCRIPT > se ejecutan inmediátamente luego de cargar la página, en cambio las funciones no se ejecutan hasta que sean llamadas.
Es importante entender la diferencia entre definir y llamar una función: Definirla sólo especifica un nombre para ella y qué hace cuando es llamada; Llamarla implica ejecutarla utilizando los parámetros que le son pasados por la sentencia JavaScript que la llama.
Ejemplo 2: Una Script con Función (Escondida)
<script language="JavaScript">
function cuadrado(i)
{ document.write("Se pasó el valor: ",i,"<br>");
return i * i;
}
document.write("La función retornó: "
+ cuadrado(5));
</script>
Generalmente se deben definir las funciones para una página en el encabezado del documento, esto es, dentro del elemento < HEAD >. Debido a que el encabezado es cargado primero, esta práctica asegura que las funciones sean cargadas antes que el usuario tenga oportunidad de hacer lago que provoque una llamada a función.
Ejemplo 3: Una Script con Dos Funciones
<HTML><HEAD>
<SCRIPT><!--
function barra()
{
document.write("<HR ALIGN='left' WIDTH=25%>")
}
function texto(titulo,nivel,text)
{
document.write("<H" + nivel + ">" + titulo
+ "</H" + nivel + ">");
document.write(text);
}
// --></SCRIPT>
</HEAD><BODY>
<SCRIPT><!--
texto("Hazme Grande",3,"Hazme común");
barra();
texto("Hazme Grande",4,"Hazme común");
// -->
</SCRIPT>
</BODY></HTML>
Se deben usar comillas simples (') para delimitar literales, de manera que el browser pueda distinguir entre las comillas dobles que envuelven los valores de los atributos de elementos HTML y los literales en JavaScript dentro de estos valores.
Ejemplo 4: JavaScript en Atributos de Elementos HTML
<FORM>
<INPUT TYPE="button" VALUE="Aprétame";
onClick="alert('Un mensaje cualquiera')">
</FORM>
Para usar JavaScript de manera adecuada, es importante entender de manera general cómo se hace es despliege del documento HTML, esto es, cómo se transforma un documento HTML (que es sólo texto) a un documento gráfico.
El despliege es generalmente secuencial, esto es, el browser comienza el despliegue leyendo el documento HTML desde el principio, calculando cómo desplegar el texto, imágenes y otros a medida que avanza hacia el final. Así, comienza con el encabezado del documento (elemento <HEAD>) para luego desplegar el cuerpo (elemento <BODY>).
Debido a este comportamiento, JavaScript sólo refleja los objetos del documento que ya han sido desplegados. Por ejemplo, si se define un formulario con un par de elementos de texto:
<FORM NAME="ff"> <input type="text" name="nombre" size=20> <input type="text" name="edad" size=3> </FORM>
Entonces se puede referenciar los elementos del formulario a
través de los objetos document.ff.nombre y document.ff.edad,
pero estas referencias sólo se pueden haces después que
el formulario esté definido. Así, no se pueden usar estos
objetos antes que se defina el formulario. Por ejemplo, la
script:
<SCRIPT> document.write(document.ff.nombre.value); document.write(document.ff.edad.value); </SCRIPT>
puede aparecer después de la definición del formulario, pero nunca antes.
De la misma manera, después de completado el despliegue, establecer el valor de una propiedad no afecta su apariencia en pantalla. Por ejemplo, si se define el título del documento como:
<TITLE>Mi Página JavaScript</TITLE>
no se puede modificar su valor usando:
document.title="Un Nuevo Título";
no cambiará el título desplegado ni generará ningún error.
Las aplicaciones JavaScript son manejadas por eventos. Los eventos son acciones que ocurren usualmente como resultado de algo que hace el usuario. Por ejemplo, cuando el usuario hace click sobre un objeto se genera un evento.
Existe un conjunto específico de eventos que es capaz de manejar JavaScript, los cuales son proveidos por el browser. Se pueden definir manejadores de eventos, que son scripts que se llaman automáticamente cuando ocurre un evento en particular.
Los manejadores de eventos están embedidos como atributos en los documentos HTML, a los cuales se les asigna el código de script a ejecutar. la sintaxis general es:
<ELEMENTO manejadorDeEvento="Código_JavaScript">
donde ELEMENTO es un elemento HTML y manejadorDeEvento
es el nombre de un evento.
Por ejemplo, supongamos que creamos una función en JavaScript
llamada computar(). Podemos hacer que hel browser
ejecute esta función cuando el usuario presione un botón. Esto
se hace asignando la función al evento onClick del
botón:
<INPUT TYPE="button" VALUE="Calcular"
onClick="computar()">
Es posible utilizar cualquier sentencia JavaScript dentro de
las comillas asignadas a onClick, las cuales serán
ejecutadas cuando el usuario haga click en el botón. Si se desea
incluir más de una sentencia, se deben separar con punto y coma
(";").
En general, es buena idea definir funciones para manejar eventos, ya que:
Los eventos posibles y los elementos en los que se pueden usar son:
onFocus, onBlur, onChange: campos de
texto, áreas de texto y selecciones; onClick: botones (normales, radio,
check, submit, reset) y referencias (elemento < A
>); onSelect: campos de texto y áreas de
texto; onMouseOver, onMouseOut: referencias
(elemento < A >). Muchos objetos poseen además métodos para simular eventos,
Por ejemplo, los botones poseen un método click()
que imita el evento de hacer click sobre el botón. Note:
La emulación de eventos no ejecuta a los manejadores de eventos.
Aún así, siempre es posible llamar directamente un manejador de
evento de manera explícita.
| Evento | Ocurre cuando... | Manejador |
|---|---|---|
| load | Se carga la página en el browser. | onLoad |
| unload | Se descarga la Página del browser. | onUnload |
| click | El usuario hace click sobre un elemento. | onClick |
| mouseover | El usuario mueve el mouse por sobre una referencia. | onMouseOver |
| mouseout | El usuario mueve el mouse fuera de una referencia. | onMouseOut |
| focus | El usuario enta a un campo de un formulario. | onFocus |
| blur | El usuario sale de un campo de un formulario. | onBlur |
| change | El usuario cambia el valos de un campo de texto, área de texto o selección. | onChange |
| select | El usuario selecciona un elementp de un campo de selección | onSelect |
| submit | El usuario envía un formulario. | onSubmit |
Ejemplo 1: Una Script como Manejador de Evento
<HTML><HEAD>
<SCRIPT LANGUAGE="JavaScript">
function computar(f)
{
if( confirm("Seguro?") )
f.result.value = eval(f.expr.value)
else
alert("Vuelve otra vez.")
}
</SCRIPT>
</HEAD><BODY>
<FORM>
Ingrese una expresión:
<INPUT TYPE="text" NAME="expr" SIZE=15>
<INPUT TYPE="button" VALUE="Calcular" ONCLICK="computar(this.form)">
<BR>
Resultado:
<INPUT TYPE="text" NAME="result" SIZE=15 >
</FORM>
</BODY></HTML>
Esta sección describe varias técnica útiles para programar en JavaScript.
JavaScript genera los resultados visibles desde arriba hacia abajo en una página, de manera que luego de desplegar algo, no se puede modificar más. La única manera de hacerlo es volver a cargar la página completa. Sin embargo, si se puede modificar otro frame desde un documento.
Otra manera de modificar un documento sin cargarlo es el cambiar una imágen desplegada por otra diferente, produciéndose un cambio inmediato en el despliegue.
No se puede imprimir la salida generada por una sentencia JavaScript. Por ejemplo, si se tiene lo siguiente en una página, no se imprime nada:
<SCRIPT>
document.write("Texto generado con JavaScript")
</SCRIPT>
Asegúrese de alternar comillas simples con comillas dobles, ya que como los manejadores de eventos en HTML deben encerrarse en comillas dobles, se deben delimitar los argumentos literales con comillas simples. Por ejemplo:
<FORM NAME="ff">
<INPUT TYPE="button" NAME="Boton1" VALUE="Abrete!"
onClick="window.open('stmtsov.html','ventana',
'toolbar=no,directories=no')">
</FORM>
Si se tienen problemas con las comillas se pede usar \' ó \".
Siempre es buena idea definir todas las funciones en el encabezado (< HEAD >) del documento HTML. De esta manera se previene que el usuario genera algún evento que provoque una llamada a una función que aún no ha sido definida, lo cual produciría un error.
Un arreglo es una lista ordenada de valores que se pueden referenciar a través del nombre del arreglo y un índice de posición. Por ejemplo, si se tiene un arreglo de empleados que contiene sus nombres, entonces emp[1] sería el nombre del primer empleado, emp[2] el del segundo, etc.
JavaScript no posee arreglos, pero debido al parecido entre arreglos y objetos, es fácil crear arreglos en JavaScript. Para crear un arreglo se deben utilizar la funciones:
Inicialización con Valores Iniciales:
function initArrayValues()
{ this.length = initArrayValues.arguments.length;
for( var i=0; i<this.length; i++ )
this[i+1] = initArrayValues.arguments[i];
}
Inicialización con Número de Elementos:
function initArrayCount(count,initValue)
{ this.length = count;
for( var i=0; i<this.length; i++ )
this[i+1] = initValue;
}
Estas funciones definen un arrego de manera que el primer elemento, indexado por un cero, contiene el largo del arreglo. Los demás elementos contienen los valores pasados a la primera función o el valor inicial pasado a la segunda.
Se puede crear un arreglo arbitrario de la siguiente manera:
arrA = new initArrayValues( "Uno", 2, "Tres", 4.44 ); arrB = new initArrayCount ( 10, "Hola" );
Página preparada por José Manuel Rodríguez R. como material de apoyo en la asignatura de Tercero de Informática de Gestión de la Universidad de Valladolid.
Ultima Actualización a 15 de Noviembre de 1998