Java Script
Java Script
Java Script
han surgido para extender las capacidades del lenguaje HTML (lenguaje para el diseo de
pginas de Internet). Al ser la ms sencilla, es por el momento la ms extendida.
JavaScript no es un lenguaje de programacin propiamente dicho como C, C++, Delphi,
etc. Es un lenguaje script u orientado a documento, como pueden ser los lenguajes de
macros que tienen muchos procesadores de texto y planillas de clculo. No se puede
desarrollar un programa con JavaScript que se ejecute fuera de un Navegador, aunque en
este momento comienza a expandirse a otras reas como la programacin en el servidor
con Node.js
JavaScript es un lenguaje interpretado que se embebe en una pgina web HTML. Un
lenguaje interpretado significa que a las instrucciones las analiza y procesa el navegador
en el momento que deben ser ejecutadas.
Nuestro primer programa ser el famoso "Hola Mundo", es decir un programa que
muestre en el documento HTML el mensaje "Hola Mundo".
<html>
<head>
</head>
<body>
<script type="text/javascript">
document.write('Hola Mundo');
</script>
</body>
</html>
<script type="text/javascript">
</script>
Para imprimir caracteres sobre la pgina debemos llamar al comando 'write' del objeto
document. La informacin a imprimirse debe ir entre comillas y encerrada entre
parntesis. Todo lo que indicamos entre comillas aparecer tal cual dentro de la pgina
HTML.
Es decir, si pedimos al navegador que ejecute esta pgina mostrar el texto 'Hola Mundo'.
Cada vez que escribimos una instruccin finalizamos con el carcter punto y coma.
Variables.
Las variables son nombres que ponemos a los lugares donde almacenamos
la informacin. En JavaScript, deben comenzar por una letra o un
subrayado (_), pudiendo haber adems dgitos entre los dems caracteres.
Una variable no puede tener el mismo nombre de una palabra clave del
lenguaje.
Una variable se define anteponindole la palabra clave var:
var dia;
se pueden declarar varias variables en una misma lnea:
var dia, mes, anio;
a una variable se la puede definir e inmediatamente inicializarla con un
valor:
var edad=20;
o en su defecto en dos pasos:
var edad;
edad=20;
Juan
10
1.92
false
Para la entrada de datos por teclado tenemos la funcin prompt. Cada vez
que necesitamos ingresar un dato con esta funcin, aparece una ventana
donde cargamos el valor. Hay otras formas ms sofisticadas para la entrada
de datos en una pgina HTML, pero para el aprendizaje de los conceptos
bsicos de JavaScript nos resultar ms prctica esta funcin.
Para ver su funcionamiento analicemos este ejemplo:
<html>
<head>
</head>
<body>
<script type="text/javascript">
var nombre;
var edad;
nombre=prompt('Ingrese su nombre:','');
edad=prompt('Ingrese su edad:','');
document.write('Hola ');
document.write(nombre);
document.write(' asi que tienes ');
document.write(edad);
document.write(' aos');
</script>
</body>
</html>
La sintaxis de la funcin prompt es:
<variable que recibe el dato>=prompt(<mensaje a mostrar en la
ventana>,<valor
inicial a mostrar en la ventana>);
La funcin prompt tiene dos parmetros: uno es el mensaje y el otro el valor
inicial a mostrar.
Estructuras secuenciales de programacin.
Decimos que una estructura condicional es anidada cuando por la rama del
verdadero o el falso de una estructura condicional hay otra estructura
condicional.
Ejemplo: Confeccionar un programa que pida por teclado tres notas de un
alumno, calcule el promedio e imprima alguno de estos mensajes:
Si el promedio es >=7 mostrar "Promocionado".
Si el promedio es >=4 y <7 mostrar "Regular".
Si el promedio es <4 mostrar "Reprobado".
Solucin:
<html>
<head>
</head>
<body>
<script type="text/javascript">
var nota1,nota2,nota3;
nota1=prompt('Ingrese 1ra. nota:','');
nota2=prompt('Ingrese 2da. nota:','');
nota3=prompt('Ingrese 3ra. nota:','');
//Convertimos los 3 string en enteros
nota1=parseInt(nota1);
nota2=parseInt(nota2);
nota3=parseInt(nota3);
var pro;
pro=(nota1+nota2+nota3)/3;
if (pro>=7)
{
document.write('promocionado');
}
else
{
if (pro>=4)
{
document.write('regular');
}
else
{
document.write('reprobado');
}
}
</script>
</body>
</html>
Analicemos el siguiente programa. Se ingresan tres string por teclado que
representan las notas de un alumno, se transformas a variables enteras y se
obtiene el promedio sumando los tres valores y dividiendo por 3 dicho
resultado.
Primeramente preguntamos si el promedio es superior o igual a 7, en caso
afirmativo por la rama del verdadero de la estructura condicional mostramos
un mensaje que indique 'Promocionado' (con comillas indicamos un texto
que debe imprimirse en pantalla).
En caso que la condicin nos de falso, por la rama del falso aparece otra
estructura condicional, porque todava debemos averiguar si el promedio del
alumno es superior o igual a cuatro o inferior a cuatro.
Por ltimo, hay que decir que la ejecucin de la sentencia break dentro de
cualquier parte del bucle provoca la salida inmediata del mismo.
Sintaxis:
for (<Inicializacin> ; <Condicin> ; <Incremento o Decremento>)
{
<Instrucciones>
}
Esta estructura repetitiva tiene tres argumentos: variable de inicializacin,
condicin y variable de incremento o decremento.
Funcionamiento:
- Primero se ejecuta por nica vez el primer argumento .
Por lo general se inicializa una variable.
- El segundo paso es evaluar la (Condicin), en caso de ser
verdadera se ejecuta el bloque,
en caso contrario contina el programa.
- El tercer paso es la ejecucin de las instrucciones.
- El cuarto paso es ejecutar el tercer argumento (Incremento o
Decremento).
- Luego se repiten sucesivamente del Segundo al Cuarto Paso.
Este tipo de estructura repetitiva se utiliza generalmente cuando sabemos la
cantidad de veces que deseamos que se repita el bloque.
<script type="text/javascript">
var f;
for(f=1;f<=10;f++)
{
document.write(f+" ");
}
</script>
</body>
</html>
Inicialmente f se la inicializa con 1. Como la condicin se verifica como
verdadera se ejecuta el bloque del for (en este caso mostramos el contenido
de la variable f y un espacio en blanco). Luego de ejecutar el bloque pasa al
tercer argumento del for (en este caso con el operador ++ se incrementa en
uno el contenido de la variable f, existe otro operador -- que decrementa en
uno una variable), hubiera sido lo mismo poner f=f+1 pero este otro
operador matemtico nos simplifica las cosas.
Importante: Tener en cuenta que no lleva punto y coma al final de los tres
argumentos del for. El disponer un punto y coma provoca un error lgico y
no sintctico, por lo que el navegador no avisar.
Funciones
'Cuidado'
'Ingrese su documento correctamente'
'Cuidado'
'Ingrese su documento correctamente'
La solucin sin emplear funciones es:
<html>
<head>
</head>
<body>
<script type="text/javascript">
document.write("Cuidado<br>");
document.write("Ingrese su documento
correctamente<br>");
document.write("Cuidado<br>");
document.write("Ingrese su documento
correctamente<br>");
document.write("Cuidado<br>");
document.write("Ingrese su documento
correctamente<br>");
</script>
</body>
</html>
Empleando una funcin:
<html>
<head>
</head>
<body>
<script type="text/javascript">
function mostrarMensaje()
{
document.write("Cuidado<br>");
document.write("Ingrese su documento
correctamente<br>");
}
mostrarMensaje();
mostrarMensaje();
mostrarMensaje();
</script>
</body>
</html>
Recordemos que JavaScript es sensible a maysculas y minsculas. Si
fijamos como nombre a la funcin mostrarTitulo (es decir la segunda palabra
con mayscula) debemos respetar este nombre cuando la llamemos a dicha
funcin.
Es importante notar que para que una funcin se ejecute debemos llamarla
desde fuera por su nombre (en este ejemplo: mostrarMensaje()).
Cada vez que se llama una funcin se ejecutan todas las lneas contenidas
en la misma.
Si no se llama a la funcin, las instrucciones de la misma nunca se
ejecutarn.
A una funcin la podemos llamar tantas veces como necesitemos.
Las funciones nos ahorran escribir cdigo que se repite con frecuencia y
permite que nuestro programa sea ms entendible.
Funciones con parmetros.
function mostrarComprendidos(x1,x2)
{
var inicio;
for(inicio=x1;inicio<=x2;inicio++)
{
document.write(inicio+' ');
}
}
var valor1,valor2;
valor1=prompt('Ingrese valor inferior:','');
valor1=parseInt(valor1);
valor2=prompt('Ingrese valor superior:','');
valor2=parseInt(valor2);
mostrarComprendidos(valor1,valor2);
</script>
</body>
</html>
El programa de JavaScript empieza a ejecutarse donde definimos las
variables valor1 y valor2 y no donde se define la funcin. Luego de cargar
los dos valores por teclado se llama a la funcin mostrarComprendidos y le
enviamos las variables valor1 y valor2. Los parmetros x1 y x2 reciben los
contenidos de las variables valor1 y valor2.
Es importante notar que a la funcin la podemos llamar la cantidad de veces
que la necesitemos.
Los nombres de los parmetros, en este caso se llaman x1 y x2, no
necesariamente se deben llamar igual que las variables que le pasamos
cuando la llamamos a la funcin, en este caso le pasamos los valores valor1
y valor2.
Al igual que en la mayor parte de los lenguajes de programacin, en JavaScript podemos trabajar con arrays
(tambin llamados arreglos, vectores o matrices). Los arrays son de gran importancia ya que permiten organizar
series de datos que comparten el mismo nombre pero se diferencian por un ndice.
La declaracin de un array se hace de misma forma que se declara cualquier variable: var nombreDelArray;
El array adquiere condicin de tal cuando la variable se inicializa con forma de array, bien como array con un
contenido inicial o bien como array vaco:
var pais;
pais = ['Mexico', 'Espaa', 'Argentina', 'Chile', 'Colombia', 'Venezuela', 'Per', 'Costa Rica'];
var pais = ['Mexico', 'Espaa', 'Argentina', 'Chile', 'Colombia', 'Venezuela', 'Per', 'Costa Rica'];
En este ejemplo decimos que hemos declarado un array de 8 elementos. Cada elemento tiene un ndice,
comenzando los ndices por el nmero 0. Por tanto los 8 elementos del array anterior son: pais[0], pais[1],
pais[2], pais[3], pais[4], pais[5], pais[6] y pais[7].
Ambas expresiones tienen el mismo efecto: crean un array vaco. En este caso se entiende que se aadirn
contenidos a posteriori. Por ejemplo fruta[3] = 'manzana';
Podemos dar valor a un elemento de un array sin que los anteriores elementos estn definidos como hemos
hecho en el ejemplo, declarando el elemento de ndice 3 sin haber definido los ndices 0, 1 y 2. Los elementos
no definidos toman valor undefined. En este ejemplo fruta[0] no ha sido definido por lo que si intentamos
invocarlo su valor es undefined.
Para que JavaScript comprenda que una variable es un array hay que indicrselo explcitamente. Es vlido: var
pais = []; pais[0] = 'Mexico';
Sin embargo no es vlido: var pais; pais[0] = 'Mexico'; Por qu? Porque en este cdigo no hemos declarado
explcitamente que pais sea un array. Si no lo hemos declarado, no podemos empezar a usar ndices asociados
a la variable como si se tratara de un array. Si lo hacemos se entiende como un error en el cdigo, lo que dar
lugar a que JavaScript no se ejecute.
Un array puede inicializarse dejando ciertos ndices sin un contenido definido. Para ello, se deja un espacio
separado por comas como en este ejemplo:
Esta declaracin supone que el array tiene 3 elementos. Ciudad[0] que tiene valor Buenos Aires, ciudad[1] que
tiene valor undefined, y ciudad [2] que tiene valor Madrid.
Esta declaracin supone que el array capital tiene 4 elementos que son ciudad[0] con valor undefined, ciudad[1]
con valor Mxico D.F., ciudad[2] con valor undefined y ciuedad[3] con valor Santiago.
En este caso la coma final es ignorada y el array sigue teniendo 4 elementos. Si queremos definir el array con
un quinto elemento vaco se recomienda hacerlo as:
Tambin sera posible hacerlo dejando una coma final libre pero esto es menos recomendable y en algunos
navegadores puede dar lugar a errores:
En otros lenguajes de programacin, intentar acceder a un ndice de array inexistente devuelve un error, pero
en JavaScript no es as. Si escribimos pais[40] cuando slo hemos definido hasta el ndice 7, el resultado es que
pais[40] devuelve undefined. A diferencia de en otros lenguajes, los arrays en JavaScript no tienen un nmero
fijo de elementos, sino que el nmero de elementos del array se ajusta dinmicamente segn las necesidades.
Los arrays son de gran utilidad para automatizar los clculos y procesos, por lo que siempre algo pueda
expresarse con un nombre seguido de un ndice, ser preferible usar un array a usar variables independientes.
Los arrays por defecto siempre empiezan por el ndice 0, pero en determinadas ocasiones algunos
programadores prescinden de ese ndice. Por ejemplo var mes = []; mes[0] = undefined; mes[1] = 'enero';
mes[2]='febrero'; mes[3]='marzo'; mes[4] = 'abril'; mes[5]='mayo'; mes[6] = 'junio'; mes[7]='julio';
mes[8]='agosto'; mes[9]='septiembre'; mes[10]='octubre'; mes[11]='noviembre'; mes[12]='diciembre';
Hemos definido mes[0] como undefined. Por qu? Porque en general es preferible dejar constancia de que si
mes[0] tiene valor undefined es porque el programador ha decidido que sea as, de esta manera no hay duda
respecto a que pueda ser un error o un olvido.
Tambin sera posible definir doce variables como mes1, mes2, mes3, mes4, mes5, mes6, mes7, mes8, mes9,
mes10, mes11, mes12. Sin embargo esto es algo que desde el punto de vista de la programacin es en general
indeseable, ya que estas doce variables funcionan como variables que no tienen relacin entre s. Por tanto
cuando tengamos que recorrer los meses no podremos hacerlo de forma automatizada usando ndices, ya que
aqu no existen ndices (aunque el nombre de la variable lleve un nmero eso no significa que ese nmero sea
un ndice).
En otros lenguajes de programacin un array contiene un tipo de datos y se dice que el array es de ese tipo.
Por ejemplo un array puede ser un array de enteros, o un array de cadenas de texto. Pero no pueden existir
arrays que contengan indistintamente elementos de distinto tipo. Esto s es posible en JavaScript, y por ello se
dice que los arrays en JavaScript no tienen tipo. Por ejemplo se admite algo como esto: var datos = ['Fro', 33,
false, 'nube', -11.22, true, 3.33, 'variado'];
En este array el elemento de ndice cero es de tipo texto, el de ndice 1 es un valor numrico, el elemento de
ndice tres es un valor booleano, etc.
Normalmente los arrays contendrn elementos de un tipo, por ejemplo valores numricos, pero en ocasiones
nos interesar que contengan elementos de distintos tipos.
JavaScript admite que los elementos de un array sean elementos de naturaleza compleja (objetos), o incluso
que un elemento de un array sea otro array.
La propiedad length de un array indica el nmero mximo de elementos en el array de acuerdo con el ndice
mximo existente (independientemente de que los elementos del array tengan contenido o no). Por ejemplo si
definimos var oficina = []; oficina[25] = 'Oficial Jos Vargas Corononado; la propiedad oficina.length devuelve
26, nmero de elementos para el array (de 1 a 25 ms el correspondiente al 0).
MS SOBRE LOS ARRAYS
Los arrays son elementos de gran importancia dentro de JavaScript y an queda mucho que estudiar sobre ellos.
De momento el conocimiento adquirido nos sirve para seguir avanzando, pero ms adelante volveremos a
explicar ms cosas relacionadas con los arrays.
EJEMPLO
Escribe el siguiente cdigo y gurdalo en un archivo de extensin html (puedes cambiar la ruta de la imagen si
lo deseas):
Visualiza el resultado y comprueba que la pgina web se muestra con normalidad y que JavaScript se ejecuta
con normalidad cuando haces click sobre la imagen.
Fjate en las siguientes cuestiones: un array en JavaScript puede contener elementos de distintos tipos. El
contenido de un elemento no definido es undefined. Un array puede tener elementos intermedios no definidos.
Cuando tratamos de mostrar por pantalla un array, se produce una conversin automtica a texto. Esto no
significa que el array se un texto ni un tipo String, sino simplemente que el intrprete hace una conversin
automtica para tratar de ofrecer un resultado. En el caso de elementos no definidos, al mostrarse el array se
muestran espacios separados por comas.
Son comunes los casos donde una funcin, luego de hacer un proceso,
retorne un valor.
Ejemplo 1: Confeccionar una funcin que reciba un valor entero
comprendido entre 1 y 5. Luego retornar en castellano el valor recibido.
<html>
<head>
</head>
<body>
<script type="text/javascript">
function convertirCastellano(x)
{
if (x==1)
return "uno";
else
if (x==2)
return "dos";
else
if (x==3)
return "tres";
else
if (x==4)
return "cuatro";
else
if (x==5)
return "cinco";
else
return "valor incorrecto";
}
var valor;
valor=prompt("Ingrese un valor entre 1 y
5","");
valor=parseInt(valor);
var r;
r=convertirCastellano(valor);
document.write(r);
</script>
</body>
</html>
Podemos ver que el valor retornado por una funcin lo indicamos por medio
de la palabra clave return. Cuando se llama a la funcin, debemos asignar
el nombre de la funcin a una variable, ya que la misma retorna un valor.
Una funcin puede tener varios parmetros, pero slo puede retornar un
nico valor.
La estructura condicional if de este ejemplo puede ser remplazada por la
instruccin switch, la funcin queda codificada de la siguiente manera:
function convertirCastellano(x)
{
switch (x)
{
case 1:return "uno";
case 2:return "dos";
case 3:return "tres";
case 4:return "cuatro";
case 5:return "cinco";
default:return "valor incorrecto";
}
}
Esta es una forma ms elegante que una serie de if anidados. La instruccin
switch analiza el contenido de la variable x con respecto al valor de cada
caso. En la situacin de ser igual, ejecuta el bloque seguido de los 2 puntos
hasta que encuentra la instruccin return o break.
Ejemplo 2: Confeccionar una funcin que reciba una fecha con el formato de
da, mes y ao y retorne un string con un formato similar a: "Hoy es 10 de
junio de 2013".
<html>
<head>
</head>
<body>
<script type="text/javascript">
function formatearFecha(dia,mes,ao)
{
var s='Hoy es '+dia+' de ';
switch (mes) {
case 1:s=s+'enero ';
break;
case 2:s=s+'febrero ';
break;
case 3:s=s+'marzo ';
break;
case 4:s=s+'abril ';
break;
case 5:s=s+'mayo ';
break;
case 6:s=s+'junio ';
break;
case 7:s=s+'julio ';
break;
case 8:s=s+'agosto ';
break;
case 9:s=s+'septiembre ';
break;
case 10:s=s+'octubre ';
break;
case 11:s=s+'noviembre ';
break;
case 12:s=s+'diciembre ';
break;
} //fin del switch
s=s+'de '+ao;
return s;
}
document.write(formatearFecha(11,6,2013));
</script>
</body>
</html>
Propiedades y mtodos.
Para acceder a los mtodos y propiedades de un objeto debemos utilizar la
siguiente sintaxis:
objeto.propiedad
objeto.metodo(parametros)
Conceptos Bsicos.
Objetos
Son todas las cosas con identidad propia. Se relacionan entre si. Poseen
caractersticas (atributos) y tienen responsabilidades (funciones, mtodos)
que deben cumplir. Son ejemplares (instancias) de una clase y conocen a la
clase a la cual pertenecen.
Atributos o propiedades
Son las caractersticas, cualidades distintivas de cada objeto. Deben ser
mnimos para poder realizar todas las operaciones que requiere la
aplicacin.
Clases
Una clase es un molde para objetos que poseen las mismas caractersticas
(que pueden recibir los mismos mensajes y responden de la misma
manera).
Una clase es una representacin de una idea o concepto. Unidad que
encapsula cdigos y datos para los mtodos (operaciones).
Todos los ejemplares de una clase se comportan de forma similar (invocan
el mismo mtodo) en respuesta a mensajes similares.
La clase a la cual pertenece un objeto determina el comportamiento del
objeto.
Una clase tiene encomendadas actividades que ejecutan los mtodos.
Las clases estn definidas por:
- Atributos (Propiedades),
- Comportamiento (operaciones o mtodos) y
- Relaciones con otros objetos.
Una aplicacin es un conjunto de objetos de determinadas clases.
Clase Date
<SCRIPT type="text/javascript">
function mostrarFechaHora()
{
var fecha
fecha=new Date();
document.write('Hoy es ');
document.write(fecha.getDate()+'/');
document.write((fecha.getMonth()+1)+'/');
document.write(fecha.getFullYear());
document.write('<br>');
document.write('Es la hora ');
document.write(fecha.getHours()+':');
document.write(fecha.getMinutes()+':');
document.write(fecha.getSeconds());
}
//Llamada a la funcin
mostrarFechaHora();
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
Clase Array
function calcularGastos(sueldos)
{
var total=0;
var f;
for(f=0;f<sueldos.length;f++)
{
total=total+sueldos[f];
}
document.write('Listado de sueldos<br>');
for(f=0;f<sueldos.length;f++)
{
document.write(sueldos[f]+'<br>');
}
document.write('Total de gastos en
sueldos:'+total);
}
var sueldos;
sueldos=new Array(5);
cargar(sueldos);
calcularGastos(sueldos);
</script>
</body>
</html>
Recordemos que el programa comienza a ejecutarse a partir de las lneas
que se encuentran fuera de la funciones:
var sueldos;
sueldos=new Array(5);
cargar(sueldos);
calcularGastos(sueldos);
Lo primero, definimos una variable y posteriormente creamos un objeto de
la clase Array, indicndole que queremos almacenar 5 valores.
Llamamos a la funcin cargar envindole el vector. En la funcin, a travs
de un ciclo for recorremos las distintas componentes del vector y
almacenamos valores enteros que ingresamos por teclado.
Para conocer el tamao del vector accedemos a la propiedad length de la
clase Array.
En la segunda funcin sumamos todas las componentes del vector,
imprimimos en la pgina los valores y el total de gastos.
<script type="text/javascript">
function mostrarFecha(meses,dias)
{
var num;
num=prompt('Ingrese nmero de mes:','');
num=parseInt(num);
document.write('Corresponde al
mes:'+meses[num-1]);
document.write('<br>');
document.write('Tiene '+dias[num-1]+'
das');
}
var meses;
meses=new Array(12);
meses[0]='Enero';
meses[1]='Febrero';
meses[2]='Marzo';
meses[3]='Abril';
meses[4]='Mayo';
meses[5]='Junio';
meses[6]='Julio';
meses[7]='Agosto';
meses[8]='Septiembre';
meses[9]='Octubre';
meses[10]='Noviembre';
meses[11]='Diciembre';
var dias;
dias=new Array(12);
dias[0]=31;
dias[1]=28;
dias[2]=31;
dias[3]=30;
dias[4]=31;
dias[5]=30;
dias[6]=31;
dias[7]=31;
dias[8]=30;
dias[9]=31;
dias[10]=30;
dias[11]=31;
mostrarFecha(meses,dias);
</script>
</body>
</html>
En este problema definimos dos vectores, uno para almacenar los meses y
otro los das. Decimos que se trata de vectores paralelos porque en la
componente cero del vector meses almacenamos el string 'Enero' y en el
vector dias, la cantidad de das del mes de enero.
Es importante notar que cuando imprimimos, disponemos como subndice el
valor ingresado menos 1, esto debido a que normalmente el operador de
nuestro programa carga un valor comprendido entre 1 y 12. Recordar que
los vectores comienzan a numerarse a partir de la componente cero.
document.write('Corresponde al mes:'+meses[num-1]);
Clase Math
<script type="text/javascript">
var selec=prompt('Ingrese un valor entre 1 y
10','');
selec=parseInt(selec);
var num=parseInt(Math.random()*10)+1;
if (num==selec)
document.write('Gan el nmero que se
sorte es el '+ num);
else
document.write('Lo siento se sorte el
valor '+num+' y usted eligi el '+selec);
</script>
</body>
</html>
Clase String
Propiedad length
Retorna la cantidad de caracteres de un objeto String.
var nom='Juan';
document.write(nom.length); //Resultado 4
Mtodos
charAt(pos)
Retorna el carcter del ndice especificado. Comienzan a numerarse de la
posicin cero.
var nombre='juan';
var caracterPrimero=nombre.charAt(0);
substring (posinicial, posfinal)
Retorna un String extrada de otro, desde el carcter 'posinicial' hasta el
'posfinal'-1:
cadena3=cadena1.substring(2,5);
En este ejemplo, "cadena3" contendr los caracteres 2, 3, 4 sin incluir el 5
de cadena1 (Cuidado que comienza en cero).
indexOf (subCadena)
Devuelve la posicin de la subcadena dentro de la cadena, o -1 en caso de
no estar.
Tener en cuenta que puede retornar 0 si la subcadena coincide desde el
primer carcter.
var nombre='Rodriguez Pablo';
var pos=nombre.indexOf('Pablo');
if (pos!=-1)
document.write ('Est el nombre Pablo en la variable nombre');
toUpperCase()
Convierte todos los caracteres del String que invoca el mtodo a
maysculas:
cadena1=cadena1.toUpperCase();
Luego de esto, cadena1 tiene todos los caracteres convertidos a
maysculas.
toLowerCase()
Convierte todos los caracteres del String que invoca el mtodo a
minsculas:
cadena1=cadena1.toLowerCase();
Luego de esto, cadena1 tiene todos los caracteres convertidos a
minsculas.
Ejemplo: Cargar un string por teclado y luego llamar a los distintos mtodos
de la clase String y la propiedad length.
<html>
<head>
</head>
<body>
<script type="text/javascript">
var cadena=prompt('Ingrese una cadena:','');
document.write('La cadena ingresada
es:'+cadena);
document.write('<br>');
document.write('La cantidad de caracteres
son:'+cadena.length);
document.write('<br>');
document.write('El primer carcter
es:'+cadena.charAt(0));
document.write('<br>');
document.write('Los primeros 3 caracteres
son:'+cadena.substring(0,3));
document.write('<br>');
if (cadena.indexOf('hola')!=-1)
document.write('Se ingres la subcadena
hola');
else
document.write('No se ingres la subcadena
hola');
document.write('<br>');
document.write('La cadena convertida a
maysculas es:'+cadena.toUpperCase());
document.write('<br>');
document.write('La cadena convertida a
minsculas es:'+cadena.toLowerCase());
document.write('<br>');
</script>
</body>
</html>
Formularios y Eventos.
<script type="text/javascript">
var contador=0;
function incrementar()
{
contador++;
alert('El contador ahora vale :' + contador);
}
</script>
<form>
<input type="button" onClick="incrementar()"
value="incrementar">
</form>
</body>
</html>
A los eventos de los objetos HTML se les asocia una funcin, dicha funcin
se ejecuta cuando se dispara el evento respectivo. En este caso cada vez
que presionamos el botn, se llama a la funcin incrementar, en la misma
incrementamos la variable contador en uno. Hay que tener en cuenta que a
la variable contador la definimos fuera de la funcin para que no se inicialice
cada vez que se dispara el evento.
La funcin alert crea una ventana que puede mostrar un mensaje.
Hasta ahora hemos visto como crear un formulario con controles de tipo
BUTTON. Agregamos un control de tipo TEXT (permite al operador cargar
caracteres por teclado).
Ahora veremos la importancia de definir un id a todo control de un
formulario.
Con un ejemplo veremos estos controles: Confeccionar un formulario que
permita ingresar el nombre y edad de una persona:
<html>
<head></head>
<body>
<script type="text/javascript">
function mostrar()
{
var
nom=document.getElementById('nombre').value;
var ed=document.getElementById('edad').value;
alert('Ingres el nombre:' + nom);
alert('Y la edad:' + ed);
}
</script>
<form>
Ingrese su nombre:
<input type="text" id="nombre"><br>
Ingrese su edad:
<input type="text" id="edad"><br>
<input type="button" value="Confirmar"
onClick="mostrar()">
</form>
</body>
</html>
En este problema tenemos cuatro controles: 1 FORM, 1 BUTTON, 2 TEXT.
El evento que se dispara al presionar el botn se llama mostrar.
La funcin 'mostrar' accede a los contenidos de los dos controles de tipo
TEXT:
var nom=document.getElementById('nombre').value;
var ed=document.getElementById('edad').value;
Para hacer ms clara la funcin guardamos en dos variables auxiliares los
contenidos de los controles de tipo TEXT.
La propiedad "id" es un identificar nico para cualquier marca HTML que
luego nos permite desde Javascript acceder a dicho elemento.
El mtodo getElementById nos retorna una referencia del objeto HTML que
le pasamos como parmetro. a partir de este objeto accedemos a la
propiedad value que almacena el valor ingresado por el operador en el
control TEXT.
Luego de extraer los valores ingresados por el operador los mostramos
utilizando la funcin alert:
var nom=document.getElementById('nombre').value;
var ed=document.getElementById('edad').value;
alert('Ingres el nombre:' + nom);
alert('Y la edad:' + ed);
Control PASSWORD
Ejemplo: Codificar una pgina que permita ingresar una password y luego
muestre una ventana de alerta si tiene menos de 5 caracteres.
<html>
<head>
</head>
<body>
<script type="text/javascript">
function verificar()
{
var
clave=document.getElementById('clave').value;
if (clave.length<5)
{
alert('La clave no puede tener menos de 5
caracteres!!!');
}
else
{
alert('Largo de clave correcta');
}
}
</script>
<form>
Ingrese una clave:
<input type="password" id="clave">
<br>
<input type="button" value="Confirmar"
onClick="verificar()">
</form>
</body>
</html>
En este problema debemos observar que cuando ingresamos caracteres
dentro del campo de edicin slo vemos asteriscos, pero realmente en
memoria se almacenan los caracteres tipeados. Si queremos mostrar los
caracteres ingresados debemos acceder mediante el mtodo
getElementById a la marca HTML clave:
var clave=document.getElementById('clave').value;
Normalmente, a este valor no lo mostraremos dentro de la pgina, sino se
perdera el objetivo de este control (ocultar los caracteres tipeados).
Si necesitamos saber la cantidad de caracteres que tiene un string
accedemos a la propiedad length que retorna la cantidad de caracteres.
if (clave.length<5)
Control SELECT
Este otro objeto visual que podemos disponer en un FORM permite realizar
la seleccin de un string de una lista y tener asociado al mismo un valor no
visible. El objetivo fundamental en JavaScript es determinar qu elemento
est seleccionado y qu valor tiene asociado. Esto lo hacemos cuando
ocurre el evento onChange.
<script type="text/javascript">
function cambiarColor()
{
var
seleccion=document.getElementById('select1');
document.getElementById('text1').value=seleccio
n.selectedIndex;
document.getElementById('text2').value=seleccio
n.options[seleccion.selectedIndex].text;
document.getElementById('text3').value=seleccio
n.options[seleccion.selectedIndex].value;
}
</script>
<form>
<select id="select1"
onChange="cambiarColor()">
<option value="0xff0000">Rojo</option>
<option value="0x00ff00">Verde</option>
<option value="0x0000ff">Azul</option>
</select>
<br>
Nmero de ndice seleccionado del objeto
SELECT:<input type="text" id="text1"><br>
Texto seleccionado:<input type="text"
id="text2"><br>
Valor asociado:<input type="text"
id="text3"><br>
</form>
</body>
</html>
Se debe analizar en profundidad este problema para comprender
primeramente la creacin del objeto SELECT en HTML, y cmo acceder
luego a sus valores desde Javascript.
Es importante para el objeto SELECT definir qu funcin llamar cuando
ocurra un cambio: onChange="cambiarColor()".
Por cada opcin del objeto SELECT tenemos una lnea:
Control CHECKBOX
<script type="text/javascript">
function contarSeleccionados()
{
var cant=0;
if
(document.getElementById('checkbox1').checked)
{
cant++;
}
if
(document.getElementById('checkbox2').checked)
{
cant++;
}
if
(document.getElementById('checkbox3').checked)
{
cant++;
}
if
(document.getElementById('checkbox4').checked)
{
cant++;
}
alert('Conoce ' + cant + ' lenguajes');
}
</script>
<form>
<input type="checkbox"
id="checkbox1">JavaScript
<br>
<input type="checkbox" id="checkbox2">PHP
<br>
<input type="checkbox" id="checkbox3">JSP
<br>
<input type="checkbox" id="checkbox4">VB.Net
<br>
<input type="button" value="Mostrar"
onClick="contarSeleccionados()">
</form>
</body>
</html>
Cuando se presiona el botn se llama a la funcin Javascript
contarSeleccionados(). En la misma verificamos uno a uno cada control
checkbox accediendo a la propiedad checked del elemento que almacena
true o false segn est o no seleccionado el control:
Disponemos un 'if' para cada checkbox:
if (document.getElementById('checkbox1').checked)
{
cant++;
}
Como la propiedad checked almacena un true o false podemos utilizar dicho
valor directamente como valor de la condicin en lugar de codificar:
if (document.getElementById('checkbox1').checked==true)
{
cant++;
}
Al contador 'cant' lo definimos e inicializamos en cero previo a los cuatro if.
Mostramos finalmente el resultado final.
Control RADIO
<script type="text/javascript">
function mostrarSeleccionado()
{
if
(document.getElementById('radio1').checked)
{
alert('no tienes estudios');
}
if
(document.getElementById('radio2').checked)
{
alert('tienes estudios primarios');
}
if
(document.getElementById('radio3').checked)
{
alert('tienes estudios secundarios');
}
if
(document.getElementById('radio4').checked)
{
alert('tienes estudios universitarios');
}
}
</script>
<form>
<input type="radio" id="radio1"
name="estudios">Sin estudios
<br>
<input type="radio" id="radio2"
name="estudios">Primarios
<br>
<input type="radio" id="radio3"
name="estudios">Secundarios
<br>
<input type="radio" id="radio4"
name="estudios">Universitarios
<br>
<input type="button" value="Mostrar"
onClick="mostrarSeleccionado()">
</form>
</body>
</html>
Es importante notar que todos los objetos de tipo RADIO tienen definida la
propiedad name con el mismo valor (esto permite especificar que queremos
que los radios estn relacionados entre si)
Luego podemos acceder a cada elemento mediante el mtodo
getElementById para consultar la propiedad checked:
if (document.getElementById('radio1').checked)
{
alert('no tienes estudios');
}
Igual que el checkbox, la propiedad checked retorna true o false, segn est
o no seleccionado el control radio.
Control TEXTAREA
<script type="text/javascript">
function controlarCaracteres()
{
if
(document.getElementById('curriculum').value.le
ngth>2000)
{
alert('curriculum muy largo');
}
else
{
alert('datos correctos');
}
}
</script>
<form>
<textarea id="curriculum" rows="10" cols="50"
></textarea>
<br>
<input type="button" value="Mostrar"
onClick="controlarCaracteres()">
</form>
</body>
</html>
Para saber el largo de la cadena cargada:
if (document.getElementById('curriculum').value.length>2000)
accedemos a la propiedad length.
<html>
<head></head>
<body>
<script type="text/javascript">
function vaciar(control)
{
control.value='';
}
function verificarEntrada(control)
{
if (control.value=='')
alert('Debe ingresar datos');
}
</script>
<form>
<input type="text" id="nombre"
onFocus="vaciar(this)"
onBlur="verificarEntrada(this)"
value="nombre"><br>
<input type="text" id="edad"
onFocus="vaciar(this)"
onBlur="verificarEntrada(this)" value="mail">
<br>
<input type="button" value="Confirmar">
</form>
</body>
</html>
A cada control de tipo TEXT le inicializamos los eventos onFocus y onBlur.
Tambin cargamos las propiedad value para mostrar un texto dentro del
control. Le indicamos, para el evento onFocus la funcin vaciar, pasando
como parmetro la palabra clave this que significa la direccin del objeto
que emiti el evento. En la funcin propiamente dicha, accedemos a la
propiedad value y borramos su contenido. Esto nos permite definir una
nica funcin para vaciar los dos controles.
De forma similar, para el evento onBlur llamamos a la funcin
verificarEntrada donde analizamos si se ha ingresado algn valor dentro del
control, en caso de tener un string vaco procedemos a mostrar una ventana
de alerta.
<html>
<head></head>
<body>
<script type="text/javascript">
function pintar(col)
{
document.bgColor=col;
}
</script>
<a href="pagina1.html"
onMouseOver="pintar('#ff0000')"
onMouseOut="pintar('#ffffff')">Rojo</a>
-
<a href="pagina1.html"
onMouseOver="pintar('#00ff00')"
onMouseOut="pintar('#ffffff')">Verde</a>
-
<a href="pagina1.html"
onMouseOver="pintar('#0000ff')"
onMouseOut="pintar('#ffffff')">Azul</a>
</body>
</html>
Las llamadas a las funciones las hacemos inicializando las propiedades
onMouseOver y onMouseOut:
<a href="pagina1.html" onMouseOver="pintar('#ff0000')"
onMouseOut="pintar('#ffffff')">Rojo</a>
La funcin 'pintar' recibe el color e inicializa la propiedad bgColor del objeto
document.
function pintar(col)
{
document.bgColor=col;
}
Otro problema que podemos probar es pinta de color el interior de una
casilla de una tabla y regresar a su color original cuando salimos de la
misma:
<html>
<head></head>
<body>
<script type="text/javascript">
function pintar(objeto,col)
{
objeto.bgColor=col;
}
</script>
<table border="1">
<tr>
<td onMouseOver="pintar(this,'#ff0000')"
onMouseOut="pintar(this,'#ffffff')">rojo</td>
<td onMouseOver="pintar(this,'#00ff00')"
onMouseOut="pintar(this,'#ffffff')">verde</td>
<td onMouseOver="pintar(this,'#0000ff')"
onMouseOut="pintar(this,'#ffffff')">azul</td>
</tr>
</table>
</body>
</html>
La lgica es bastante parecida a la del primer problema, pero en ste, le
pasamos como parmetro a la funcin, la referencia a la casilla que
queremos que se coloree (this):
<td onMouseOver="pintar(this,'#ff0000')"
onMouseOut="pintar(this,'#ffffff')">rojo</td>
Evento onLoad
<html>
<head></head>
<body onLoad="activarPrimerControl()">
<script type="text/javascript">
function activarPrimerControl()
{
document.getElementById('nombre').focus();
}
</script>
<form>
Ingrese su nombre:
<input type="text" id="nombre"><br>
Ingrese su edad:
<input type="text" id="edad"><br>
<input type="button" value="Confirmar">
</form>
</body>
</html>
En la marca body inicializamos el evento onLoad con la llamada a la funcin
activarPrimerControl:
<body onLoad="activarPrimerControl()">
La funcin da el foco al control text donde se cargar el nombre:
function activarPrimerControl()
{
document.getElementById('nombre').focus();
}
El objeto window.
Al objeto window lo hemos estado usando constantemente. Representa la
ventana del navegador.
window es un objeto global y tiene los siguienes mtodos:
alert: Muestra un dilogo de alerta con un mensaje
(a esta responsabilidad la hemos utilizado desde los primeros
temas)
prompt: Muestra un dilogo para la entrada de un valor de tipo string
(utilizado desde el primer momento)
confirm: Muestra un dilogo de confirmacin con los botones Confirmar y
Cancelar.
open y close: abre o cierra una ventana del navegador.
Podemos especificar el tamao de la ventana, su contenido, etc.
[Variable=][window.]open(URL, nombre, propiedades)
Permite crear (y abrir) una nueva ventana. Si queremos tener
acceso a ella
desde la ventana donde la creamos, deberemos asignarle una
variable,
sino simplemente invocamos el mtodo: el navegador automticamente
sabr
que pertenece al objeto window.
El parmetro URL es una cadena que contendr la direccin de la
ventana
que estamos abriendo: si est en blanco, la ventana se abrir con
una pgina
en blanco.
Las propiedades son una lista, separada por comas, de algunos de
los
siguientes elementos:
? toolbar[=yes|no]
? location[=yes|no]
? directories[=yes|no]
? status[=yes|no]
? menubar[=yes|no]
? scrollbars[=yes|no]
? resizable[=yes|no]
? width=pixels
? height=pixels
Es bueno hacer notar que a todas estas funciones las podemos llamar
anteponindole el nombre del objeto window, seguida del mtodo o en
forma resumida indicando solamente el nombre del mtodo (como lo hemos
estado haciendo), esto es posible ya que el objeto window es el objeto de
mximo nivel.
Ej:
valor=window.prompt("Ingrese valor","");
o
valor=prompt("Ingrese valor","");
Para reducir la cantidad de caracteres que se tipean normalmente
encontraremos los programas tipeados de la segunda forma.
El siguiente programa muestra varios de los mtodos disponibles del objeto
window:
<html>
<head></head>
<body>
<script type="text/javascript">
function abrir()
{
var ventana=open();
ventana.document.write("Estoy escribiendo
en la nueva ventana<br>");
ventana.document.write("Segunda linea");
}
function abrirParametros()
{
var
ventana=open('','','status=yes,width=400,height
=250,menubar=yes');
ventana.document.write("Esto es lo primero
que aparece<br>");
}
function mostrarAlerta()
{
alert("Esta ventana de alerta ya la
utilizamos en otros problemas.");
}
function confirmar()
{
var respuesta=confirm("Presione alguno de
los dos botones");
if (respuesta==true)
alert("presion aceptar");
else
alert("presion cancelar");
}
function cargarCadena()
{
var cad=prompt("cargue una cadena:","");
alert("Usted ingreso "+cad);
}
</script>
<html>
<head>
</head>
<body>
<script type="text/javascript">
function verificarEntrada()
{
if (window.confirm('Desea salir del sitio e
ingresar al peridico La Nacin?'))
{
window.location='http://www.lanacion.com.ar';
}
else
{
window.alert('No hay problema');
}
}
</script>
<a
href="javascript:verificarEntrada()">Ingresar a
La Nacin</a>
</body>
</html>
Lo primero que tenemos que indicar es que para llamar a una funcin de
javascript desde un hipervnculo debemos anteceder la palabra javascript
seguida de dos puntos y por ltimo, el nombre de la funcin:
<a href="javascript:verificarEntrada()">Ingresar a La Nacin</a>
La funcin verificarEntrada() muestra la ventana con los botones confirmar y
cancelar (recordar que el mtodo confirm del objeto window hace esto en
forma automtica).
Si se presiona el botn confirmar, la funcin confirm retorna true y por lo
tanto se ejecuta el verdadero del if:
if (window.confirm('Desea salir del sitio e ingresar al peridico La
Nacin?'))
{
window.location='http://www.lanacion.com.ar';
}
else
{
window.alert('No hay problema');
}
Propiedad history del objeto window
El objeto history almacena todas las pginas que visitamos. Luego, con una
serie de funciones, podemos extraer de la memoria de la computadora las
pginas ya visitadas, sin tener que pedirlas nuevamente al servidor.
Cuenta con las siguientes funciones:
window.history.back(); //Retrocede a la pgina anterior
window.history.forward(); //Avanza a la pgina siguiente almacenada en
la
cache de la mquina.
window.history.go(); //Avanza o retrocede en la lista de pginas
visitadas.
Llamar a la funcin back, tiene el mismo comportamiento que presionar el
botn "Atrs" del navegador.
El siguiente ejemplo nos permite cargar una segunda pgina y luego
retroceder a la primera pgina sin tener que solicitarla nuevamente al
servidor:
<html>
<head>
<title>Problema</title>
<script type="text/javascript">
function avanzar()
{
window.history.go(1);
}
</script>
</head>
<body>
<a href="pagina2.html">Ir a la pgina 2</a>
<br>
<br>
<a href="javascript:avanzar()">Extraer del
cache la segunda pgina</a>
</body>
</html>
En esta primera pgina, la primera vez, debemos cargar la segunda pgina
seleccionando el hipervnculo pagina2.
La segunda pgina:
<html>
<head>
<title>Problema</title>
<script type="text/javascript">
function retornar()
{
window.history.go(-1);
}
</script>
</head>
<body>
<a href="javascript:retornar()">Retornar</a>
</body>
</html>
En la segunda pgina, mediante el mtodo go y pasndole un valor
negativo, retrocedemos a la primera pgina sin tener la necesidad de
recargarla.
Podemos mejorar el ejemplo accediendo al atributo length (almacena la
cantidad de pginas de la lista) del objeto history:
if (window.history.length>0)
{
window.history.go(1);
}
else
{
alert('no hay otra pgina en la cache hacia adelante');
}
<html>
<head>
<title>Problema</title>
</head>
<body>
<script type="text/javascript">
document.write('Valores de las propiedades
del objeto screen:<br>');
document.write('availHeight :' +
screen.availHeight + '<br>');
document.write('availWidth :' +
screen.availWidth + '<br>');
document.write('height :' + screen.height +
'<br>');
document.write('width :' + screen.width +
'<br>');
document.write('colorDepth :' +
screen.colorDepth);
</script>
</body>
</html>
No olvidar que el objeto screen es una propiedad del objeto window, por lo
que haber dispuesto la sintaxis: window.screen.width etc. es la forma ms
completa, pero ms tediosa de escribir (recordar que el objeto window es el
principal y lo podemos obviar cuando accedemos a sus propiedades o
mtodos)
<html>
<head>
<title>Problema</title>
</head>
<body>
<script type="text/javascript">
document.write('Valores de las propiedades
del objeto navigator:<br>');
document.write('appName :' +
navigator.appName + '<br>');
document.write('appVersion :' +
navigator.appVersion + '<br>');
document.write('cookieEnabled :' +
navigator.cookieEnabled + '<br>');
document.write('plugins :' +
navigator.plugins.length + '<br>');
</script>
</body>
</html>
function retornarHora()
{
var fecha
fecha=new Date();
var
cadena=fecha.getHours()+':'+fecha.getMinutes()+':'+fecha.getSeconds();
return cadena;
}
2 - Creamos un archivo html que utilizar las funciones contenidas en el
archivo *.js:
<html>
<head>
<title>Problema</title>
<script type="text/javascript" src="funciones.js"></script>
</head>
<body>
<script type="text/javascript">
document.write('La fecha de hoy es:'+retornarFecha());
document.write('<br>');
document.write('La hora es:'+retornarHora());
</script>
</body>
</html>
Es decir debemos disponer el siguiente cdigo para importar el archivo *.js:
<script type="text/javascript" src="funciones.js"></script>
Mediante la propiedad src indicamos el nombre del archivo a importar.
Luego, podemos llamar dentro de la pgina HTML, a las funciones que
contiene el archivo externo *.js; en nuestro ejemplo llamamos a las
funciones retornarFecha() y retornarHora().
Como podemos ver, el archivo html queda mucho ms limpio.
Tipear los dos archivos y los almacenamos en una carpeta del disco duro:
funciones.js
function depositar(dinero)
{
this.saldo=this.saldo+dinero;
}
function extraer(dinero)
{
this.saldo=this.saldo-dinero;
}
El nombre de la clase coincide con el nombre de la funcin principal que
implementamos (tambin llamado constructor de la clase):
function cliente(nombre,saldo)
{
this.nombre=nombre;
this.saldo=saldo;
this.depositar=depositar;
this.extraer=extraer;
}
A esta funcin llegan como parmetro los valores con que queremos
inicializar los atributos. Con la palabra clave 'this' diferenciamos los atributos
de los parmetros (los atributos deben llevar la palabra clave this)
this.nombre=nombre;
this.saldo=saldo;
Tambin en el constructor inicializamos la referencia a todos los mtodos
que contendr la clase (esto es muy importante y necesario para entender
porque las otras dos funciones pertenecen a esta clase):
this.depositar=depositar;
this.extraer=extraer;
Por ltimo, implementamos todos los mtodos de la clase:
function depositar(dinero)
{
this.saldo=this.saldo+dinero;
}
function extraer(dinero)
{
this.saldo=this.saldo-dinero;
}
De nuevo recordemos que diferenciamos los atributos de la clase por la
palabra clave this.
Ahora veamos el archivo HTML completo donde adems definiremos un
objeto de la clase planteada:
<html>
<head>
<title>Problema</title>
<script type="text/javascript">
function Cliente(nombre,saldo)
{
this.nombre=nombre;
this.saldo=saldo;
this.depositar=depositar;
this.extraer=extraer;
}
function depositar(dinero)
{
this.saldo=this.saldo+dinero;
}
function extraer(dinero)
{
this.saldo=this.saldo-dinero;
}
</script>
</head>
<body>
<script type="text/javascript">
var cliente1;
cliente1=new Cliente('diego',1200);
document.write('Nombre del cliente:'+cliente1.nombre+'<br>');
document.write('Saldo actual:'+cliente1.saldo+'<br>');
cliente1.depositar(120);
document.write('Saldo luego de depositar $120----
>'+cliente1.saldo+'<br>');
cliente1.extraer(1000);
document.write('Saldo luego de extraer $1000----
>'+cliente1.saldo+'<br>');
</script>
</body>
</html>
<html>
<head>
<title>Problema</title>
<script type="text/javascript">
//clase Numeroquiniela
***********************************************
*
function Numeroquiniela(nombre)
{
this.nombre=nombre;
this.cargarnumero=cargarnumero;
this.verificarsigano=verificarsigano;
}
function cargarnumero()
{
this.numero=prompt("Que nmero de quiniela
quiere?","");
}
function verificarsigano(num)
{
if (this.numero==num)
return true;
else
return false;
}
//clase Bolillero
***********************************************
*
function Bolillero()
{
this.numero=-1;
this.sortear=sortear;
}
function sortear()
{
this.numero=parseInt(Math.random()*10)+1;
}
</script>
</head>
<body>
<script type="text/javascript">
var numeroquiniela1;
numeroquiniela1=new Numeroquiniela("juan");
numeroquiniela1.cargarnumero();
var numeroquiniela2;
numeroquiniela2=new Numeroquiniela("ana");
numeroquiniela2.cargarnumero();
var bolillero;
bolillero=new Bolillero();
bolillero.sortear();
document.write('Numero sorteado:' +
bolillero.numero + '<br>');
document.write(numeroquiniela1.nombre + '
eligi ' + numeroquiniela1.numero +'<br>');
document.write(numeroquiniela2.nombre + '
eligi ' + numeroquiniela2.numero +'<br>');
if
(numeroquiniela1.verificarsigano(bolillero.nume
ro))
{
document.write(numeroquiniela1.nombre + ' a
ganado <br>');
}
if
(numeroquiniela2.verificarsigano(bolillero.nume
ro))
{
document.write(numeroquiniela2.nombre + ' a
ganado <br>');
}
</script>
</body>
</html>
Al constructor de la clase Numeroquiniela llega como parmetro el nombre
de la persona que la compra (podamos cargarlo por teclado al nombre
tambin).
Al nmero que selecciona lo cargamos por teclado. La clase
Numeroquiniela adems tiene otra responsabilidad, que es avisarnos si a
ganado segn el nmero sorteado.
Por otro lado en la pgina html definimos dos objetos de la clase
Numeroquiniela y uno de la clase Bolillero:
<script type="text/javascript">
function Hipervinculo(direccion,titulo)
{
this.direccion=direccion;
this.titulo=titulo;
this.retornarhipervinculo=retornarhipervinculo;
}
function retornarhipervinculo()
{
var cadena;
cadena='<a href=' + this.direccion + '>' +
this.titulo + '</a>';
return cadena;
}
</script>
<script type="text/javascript">
var vector=new Array(3);
vector[0]=new
Hipervinculo('http://www.google.com','google');
vector[1]=new
Hipervinculo('http://www.msn.com','msn');
vector[2]=new
Hipervinculo('http://www.yahoo.com','yahoo');
for(var f=0;f<vector.length;f++)
{
document.write(vector[f].retornarhipervinculo()
);
document.write('<br>');
}
</script>
Creamos un objeto de la clase Array y luego guardamos en cada
componente un objeto de la clase hipervnculo (pasndole como parmetros
al constructor, la direccin del sitio y el texto a mostrar en la pgina. Luego
recorremos con un 'for' las componentes del vector e imprimimos en la
pgina cada hipervnculo.
Veremos ahora otra forma muy utilizada en Javascript para definir objetos.
Esta forma se la llama Objetos literales
<html>
<head>
</head>
<body>
<script type="text/javascript">
var cliente1= {
nombre: 'Juan',
deposito: 0,
imprimir: function ()
{
document.write(this.nombre+'<br>');
document.write(this.deposito+'<br>');
},
depositar: function(monto) {
this.deposito=this.deposito+monto;
},
extraer: function(monto) {
this.deposito=this.deposito-monto;
}
};
cliente1.imprimir();
cliente1.depositar(1000);
document.write('Estado luego de depositar
1000 pesos</br>');
cliente1.imprimir();
cliente1.extraer(200);
document.write('Estado luego de extraer 200
pesos</br>');
cliente1.imprimir();
</script>
</body>
</html>
Del lado izquierdo de los dos puntos indicamos el nombre de la funcin y del
lado derecho utilizamos la palabra clave function junto con los parmetros.
Ahora solo nos falta hacer la llamada a las funciones del objeto cliente1:
cliente1.imprimir();
cliente1.depositar(1000);
document.write('Estado luego de depositar 1000 pesos</br>');
cliente1.imprimir();
cliente1.extraer(200);
document.write('Estado luego de extraer 200 pesos</br>');
cliente1.imprimir();
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vector2=[];
vector2[0]=1;
document.write(vector1[0]+'<br>');
document.write(vector2[0]+'<br>');
document.write(vector3[0]+'<br>');
document.write(vector4[0]+'<br>');
document.write(vector5[0]+'<br>');
</script>
</body>
</html>
Array: densos
Todos los vectores donde almacenamos en forma contigua todos sus
elementos son llamados array densos.
Una propiedad de suma utilidad trabajando los vectores sin dejar subndices
sin utilizar es la propiedad length. La propiedad length almacena la cantidad
de componentes que tiene el vector.
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vec=[];
var valor;
var indice=0;
do {
valor=prompt('Ingrese un valor entero (0
para finalizar)','');
valor=parseInt(valor);
if (valor!=0)
{
vec[indice]=valor;
indice++;
}
} while (valor!=0);
var f;
var suma=0;
for(f=0;f<vec.length;f++)
{
suma=suma+vec[f];
}
document.write('Se ingresaron '+vec.length+'
valores<br>');
document.write('La suma de los valores
ingresados es:'+suma);
</script>
</body>
</html>
Hasta ahora siempre que inicializamos los array no dejamos espacios sin
utilizar. Javascript permite crear array e inicializar componentes no
contiguas.
Este tipo de array se los llama array dispersos ya que no tenemos todas las
componentes contiguas ocupadas. Veamos con un ejemplo que pasa con la
propiedad length y cuando accedemos a componentes que no existen en el
vector:
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vec=[];
vec[5]=100;
vec[10]=200;
document.write('Atributo
length:'+vec.length+'<br>');
var f;
for(f=0;f<vec.length;f++)
{
document.write(vec[f]+'<br>');
}
</script>
</body>
</html>
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
var depositos=[];
var nro,monto;
do {
nro=prompt('Ingrese nro de cliente','');
nro=parseInt(nro);
if (nro!=0)
{
monto=prompt('Ingrese monto a
depositar','');
monto=parseInt(monto);
depositos[nro]=monto;
}
} while (nro!=0);
var suma=0;
var canti=0;
for(var f=0;f<depositos.length;f++)
{
if (depositos[f]!==undefined)
{
suma=suma+depositos[f];
canti++;
}
}
document.write('Cantidad de
depsitos:'+canti+'<br>');
document.write('Total depositado por todos
los clientes:'+suma);
</script>
</body>
</html>
Como vemos el do/while finaliza cuando ingresamos un 0, cuando
ingresamos en la variable nro un valor distinto a cero procedemos a
almacenar en el vector en la posicin indicada por nro el valor cargado en
monto:
do {
nro=prompt('Ingrese nro de cliente','');
nro=parseInt(nro);
if (nro!=0)
{
monto=prompt('Ingrese monto a depositar','');
monto=parseInt(monto);
depositos[nro]=monto;
}
} while (nro!=0);
Cuando sale del do/while mediante un ciclo for analizamos cada una de las
componentes posibles del vector verificando si el valor es distinto a
undefined (es importante notar que debemos utilizar el operador relacionar
!== en lugar de != ya que no funcionara cuando una componente almacene
null):
for(var f=0;f<depositos.length;f++)
{
if (depositos[f]!==undefined)
{
suma=suma+depositos[f];
canti++;
}
}
Como los Array en Javascript son objetos, los mismos tienen una serie de
mtodos que nos facilitan trabajar con ellos.
Para insertar elementos en un vector hemos visto que con solo asignar un
valor al vector en un determinado ndice el dato queda almacenado y
eventualmente el atributo length modificado:
var vec=[];
vec[0]=10;
vec[1]=20;
document.write(vec.length); //imprime 2
Esta sintaxis tenemos que tener cuidado como variamos el subndice para
no dejar componentes vacas si queremos implementar un array denso.
Una variante para resolver este mismo problema es utilizar el mtodo push
del objeto Array. Este mtodo aade el valor al final del vector:
var vec=[];
vec.push(10);
vec.push(20);
document.write(vec.length); //imprime 2
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
var sueldos=[];
var monto;
do {
monto=prompt('Ingrese el sueldo (0 para
finalizar):','');
monto=parseInt(monto);
if (monto!=0)
{
sueldos.push(monto);
}
} while (monto!=0);
var suma=0;
for(var f=0;f<sueldos.length;f++)
{
suma=suma+sueldos[f];
}
document.write('El total en sueldos ingresado
es:'+suma);
</script>
</body>
</html>
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vec=[];
var f;
var valor;
do {
valor=prompt('Ingresar un valor (0 para
finalizar):','');
valor=parseInt(valor);
if (valor<100)
{
vec.unshift(valor);
}
else
{
vec.push(valor);
}
} while (valor!=0);
vec.shift();
for(f=0;f<vec.length;f++)
{
document.write(vec[f]+'<br>');
}
</script>
</body>
</html>
Fuera del do/while procedemos a extraer el primer elemento del vector que
es el cero:
vec.shift();
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vec=[];
var f;
for(f=0;f<10;f++)
{
var valor=parseInt(Math.random()*1000);
vec.push(valor);
}
document.write('Vector antes de borrar<br>');
for(f=0;f<10;f++)
{
document.write(vec[f]+'<br>');
}
for(f=0;f<10;f=f+2)
{
delete vec[f];
}
document.write('Vector luego de borrar las
posiciones pares<br>');
for(f=0;f<10;f++)
{
document.write(vec[f]+'<br>');
}
</script>
</body>
</html>
Otro mtodo muy til de la clase Array es sort. La sintaxis ms sencilla y por
defecto es para ordenar una lista de string:
<html>
<head>
</head>
<body>
<script type="text/javascript">
var
nombres=['marcos','ana','luis','jorge','carlos'
];
var f;
document.write('Vector antes de
ordenarlo<br>');
for(f=0;f<nombres.length;f++)
{
document.write(nombres[f]+'<br>');
}
nombres.sort();
document.write('Vector despus de
ordenarlo<br>');
for(f=0;f<nombres.length;f++)
{
document.write(nombres[f]+'<br>');
}
</script>
</body>
</html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
var vec=[100,5,60,3,90];
var f;
document.write('Vector antes de
ordenarlo<br>');
for(f=0;f<vec.length;f++)
{
document.write(vec[f]+'<br>');
}
vec.sort(function(v1,v2) {
if (v1>v2)
return 1;
else
return 0;
});
document.write('Vector despus de
ordenarlo<br>');
for(f=0;f<vec.length;f++)
{
document.write(vec[f]+'<br>');
}
</script>
</body>
</html>
Como vemos al mtodo sort hemos pasado una funcin que retorna un 1 o
0:
vec.sort(function(v1,v2) {
if (v1>v2)
return 1;
else
return 0;
});
Problema
<html>
<head>
</head>
<body>
<script type="text/javascript">
</script>
</body>
</html>
El resultado de ejecutar el programa es: