Curso de Javascript - Javascript Ya



Comments



Description

JavaScript desde CEROJavaScript JavaScript desde CERO El tutorial está pensado para que pueda ser desarrollado por una persona que no conoce lenguajes de programación, es decir "JavaScript mi primer lenguaje". El objetivo de este sitio es poder aprender JavaScript en forma sencilla viendo un concepto teórico, luego algunos ejercicios resueltos y por último y lo más importante, efectuar una serie de ejercicios. Puede resolver los ejercicios en el sitio, probarlos y ver los resultados. Se recomienda primero ver el detalle del tema, pasar posteriormente a la ejecución de problemas ya resueltos del tema tratado (podemos hacer modificaciones sobre dicho problema) y finalmente resolver los ejercicios propuestos. 1 - Conceptos de Algoritmo, Programa y Lenguaje de Programación. 2 - Qué es JavaScript? 3 - Variables. 4 - Entrada de datos por teclado. 5- Estructuras secuenciales de programación. 6 - Estructuras condicionales simples. 7 - Estructuras condicionales compuestas. 8 - Estructuras condicionales anidadas. 9 - Operadores lógicos && (y) en las estructuras condicionales. 10 - Operadores lógicos || (o) en las estructuras condicionales. 11 - Estructuras switch. 12 - Estructura repetitiva (while) 13 - Concepto de acumulador. 14 - Estructura repetitiva (do/while) 15 - Estructura repetitiva (for) 16 - Funciones 17 - Funciones con parámetros. 18 - Funciones que retornan un valor. 19 - Programación orientada a objetos. 20 - Clase Date 21 - Clase Array 22 - Clase Math 23 - Clase String. 24 - Formularios y Eventos. 25 - Controles FORM, BUTTON y TEXT. 26 - Control PASSWORD 27 - Control SELECT 28 - Control CHECKBOX 29 - Control RADIO 30 - Control TEXTAREA 31 - Eventos onFocus y onBlur 32 - Eventos onMouseOver y onMouseOut 33 - Evento onLoad 34 - El objeto window. 35 - Propiedad location del objeto window 36 - Propiedad history del objeto window 37 - Propiedad screen del objeto window 38 - Propiedad navigator del objeto window 39 - Archivo JavaScript externo (*.js) 40 - Programación orientada a objetos en JavaScript. 41 - Definición de varias clases. 42 - Vectores con componentes de tipo objeto. JavaScript desde CERO JavaScript 1 - Conceptos de Algoritmo, Programa y Lenguaje de Programación. Algoritmo: Son los pasos a seguir para resolver un problema. Programa: Conjunto de instrucciones que entiende un ordenador para realizar una actividad. Todo programa tiene un objetivo bien definido: un procesador de texto es un programa que permite cargar, modificar e imprimir textos, un programa de ajedrez permite jugar al ajedrez contra el ordenador u otro contrincante humano. La actividad fundamental del programador es resolver problemas empleando el ordenador como herramienta fundamental. Para la resolución de un problema hay que plantear un algoritmo. Lenguaje de programación: Conjunto de instrucciones que son interpretadas por una computadora para realizar operaciones, mostrar datos por pantalla, sacar listados por impresora, entrar datos por teclado, etc. Nosotros aprenderemos a programar utilizando el lenguaje de programación JavaScript. Para desarrollar este curso no requerimos ningún conocimiento de otro lenguaje. 2 - Qué es JavaScript? JavaScript, al igual que Flash, Visual Basic Script, es una de las múltiples maneras que han surgido para extender las capacidades del lenguaje HTML (lenguaje para el diseño de páginas de Internet). Al ser la más sencilla, es por el momento la más extendida. JavaScript no es un lenguaje de programación 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 cálculo. No se puede desarrollar un programa con JavaScript que se ejecute fuera de un Navegador. JavaScript es un lenguaje interpretado que se embebe en una página 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 language="javascript"> document.write('Hola Mundo'); </script> </body> </html> El programa en JavaScript debe ir encerrado entre la marca script e inicializada la propiedad languaje con la cadena javascript: <script language="javascript"> </script> Para imprimir caracteres sobre la página debemos llamar al comando 'write' del objeto document. La información a imprimirse debe ir entre comillas y encerrada entre paréntesis. Todo lo que indicamos entre comillas aparecerá tal cual dentro de la página HTML. Es decir, si pedimos al navegador que ejecute esta página mostrará el texto 'Hola Mundo'. Cada vez que escribimos una instrucción finalizamos con el caracter punto y coma. ES IMPORTANTISIMO TENER EN CUENTA QUE JavaScript es SENSIBLE A MAYUSCULAS Y MINUSCULAS. NO ES LO MISMO ESCRIBIR: document.write que DOCUMENT.WRITE (la primera forma es la correcta, la segunda forma provoca un error de sintaxis). JavaScript desde CERO JavaScript Nos acostumbraremos a prestar atención cada vez que escribamos en minúsculas o mayúsculas para no cometer errores sintácticos. Ya veremos que los nombres de funciones llevan letras en mayúsculas. 3 - Variables. Una variable es un depósito donde hay un valor. Consta de un nombre y pertenece a un tipo (númerico, cadena de caracteres, etc.). Tipos de variable: Una variable puede almacenar: Valores Enteros (100, 260, etc.) Valores Reales (1.24, 2.90, 5.00, etc.) Cadenas de caracteres ("Juan", "Compras", "Listado", etc.) Valores lógicos (true,false) Existen otros tipos de variables que veremos más adelante. Las variables son nombres que ponemos a los lugares donde almacenamos la información. En JavaScript, deben comenzar por una letra o un subrayado (_), pudiendo haber además dígitos entre los demás caracteres. Una variable no puede tener el mismo nombre de una palabra clave del lenguaje. Una variable se define anteponiéndole la palabra clave var: var dia; se pueden declarar varias variables en una misma línea: 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; Elección del nombre de una variable: Debemos elegir nombres de variables representativos. En el ejemplo anterior los nombres dia, mes, anio son lo suficientemente claros para darnos una idea acabada sobre su contenido, una mala elección de nombres hubiera sido llamarlas a,b y c. Podemos darle otros buenos nombres. Otros no son tan representativos, por ejemplo d, m, a. Posiblemente cuando estemos resolviendo un problema dicho nombre nos recuerde que almacenamos el dia, pero pasado un tiempo lo olvidaríamos. Impresión de variables en una página HTML. Para mostrar el contenido de una variable en una página utilizamos el objeto document y llamamos a la función write. En el siguiente ejemplo definimos una serie de variables y las mostramos en la página: <html> <head> </head> <body> <script language="JavaScript"> var nombre='Juan'; var edad=10; var altura=1.92; var casado=false; document.write(nombre); document.write('<br>'); document.write(edad); document.write('<br>'); document.write(altura); document.write('<br>'); JavaScript desde CERO JavaScript document.write(casado); </script> </body> </html> Cuando imprimimos una variable, no la debemos disponer entre simples comillas (en caso de hacer esto, aparecerá el nombre de la variable y no su contenido) Los valores de las variables que almacenan nombres (es decir, son cadenas de caracteres) deben ir encerradas entre comillas simples. Los valores de las variables enteras (en este ejemplo la variable edad) y reales no deben ir encerradas entre comillas. Cada instrucción finaliza con un punto y coma. Las variables de tipo boolean pueden almacenar solo dos valores: true o false. El resultado al visualizar la página debe ser 4 líneas similares a éstas: Juan 10 1.92 false Es decir que se muestran los contenidos de las 4 variables. Una variable es de un tipo determinado cuando le asignamos un valor: var edad=10; Es de tipo entera ya que le asignamos un valor entero. var nombre='juan'; Es de tipo cadena. Para mostrar el contenido de una variable en una página debemos utilizar la función 'write' que pertenece al objeto document. Recordemos que el lenguaje JavaScript es sensible a mayúsculas y minúsculas y no será lo mismo si tipeamos: Document.Write(nombre); Esto porque no existe el objeto 'Document' sino el objeto 'document' (con d minúscula), lo mismo no existe la función 'Write' sino 'write', este es un error muy común cuando comenzamos a programar en JavaScript 4 - Entrada de datos por teclado. Para la entrada de datos por teclado tenemos la función prompt. Cada vez que necesitamos ingresar un dato con esta función, aparece una ventana donde cargamos el valor. Hay otras formas más sofisticadas para la entrada de datos en una página HTML, pero para el aprendizaje de los conceptos básicos de JavaScript nos resultará más práctica esta función. Para ver su funcionamiento analicemos este ejemplo: <html> <head> </head> <body> <script language="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(' años'); </script> </body> </html> var valor2. debemos llamar a la función parseInt y pasarle como parámetro las variables valor1 y valor2 sucesivamente.Estructuras secuenciales de programación.JavaScript desde CERO JavaScript La sintaxis de la función prompt es: <variable que recibe el dato>=prompt(<mensaje a mostrar en la ventana>. var suma=parseInt(valor1)+parseInt(valor2). 5. document. La función prompt tiene dos parámetros: uno es el mensaje y el otro el valor incial a mostrar. document.''). requiere mucho más cuidado cuando operamos con sus contenidos. entradas y salidas se la denomina estructura secuencial. Cuando hay que tomar una decisión aparecen las estructuras condicionales.write('<br>'). No todos los problemas pueden resolverse empleando estructuras secuenciales.write(suma). Con esto logramos que el operador más. luego hacemos dos operaciones y por último mostramos los resultados. En JavaScript.''). En nuestra vida diaria se nos presentan situaciones donde debemos decidir. var producto=valor1*valor2. Ejemplo de otro algoritmo con estructura secuencial: Realizar la carga de dos números por teclado e imprimir su suma y su producto: <html> <head> <script language="JavaScript"> var valor1. 6 . document. Cuando empleamos el operador * para el producto. Este problema es secuencial ya que ingresamos dos valores por teclado. como no podemos indicarle de qué tipo es la variable. sume las variables como enteros y no como cadenas de caracteres. Si por ejemplo sumamos 1 + 1 sin utilizar la función parseInt el resultado será 11 en lugar de 2. sólo para el operador + debemos utilizarla).<valor inicial a mostrar en la ventana>). donde se ingresa el nombre de una persona y su edad se trata de una estructura secuencial.write(producto). Cuando en un problema sólo participan operaciones.write('El producto es '). ¿Elijo la carrera A o la carrera B ? ¿Me pongo este pantalón ? . El problema anterior. valor2=prompt('Ingrese segundo número'. ya que el operador + concatena las dos cadenas. valor1=prompt('Ingrese primer número:'. document. document.write('La suma es '). ya no es obligatorio utilizar la función parseInt (es decir. </script> </head> <body> </body> </html> Lo primero que debemos tener en cuenta es que si queremos que el operador + sume los contenidos de los valores numéricos ingresados por teclado.Estructuras condicionales simples. JavaScript desde CERO JavaScript ¿Entro al sitio A o al sitio B ? Para ir al trabajo. Con esto hacemos más corto la cantidad de líneas de nuestro programa. ¿elijo el turno mañana. Mostrar un mensaje que aprobó si tiene una nota mayor o igual a 4: <html> <head> </head> <body> <script language="javascript"> var nombre. Cuando se presenta la elección tenemos la opción de realizar una actividad o no realizarla. recordemos que veníamos haciéndolo de la siguiente forma: document. Cuando se presenta la elección tenemos la opción de realizar una actividad u otra.''). document.write(nombre). nombre=prompt('Ingrese nombre:'. En una estructura CONDICIONAL SIMPLE por el camino del verdadero hay actividades y por el camino del falso no hay actividades.''). entradas y salidas. ¿elijo el camino A o el camino B ? Al cursar una carrera. if (nota>=4) { document.write(nota).Estructuras condicionales compuestas. inclusive ya veremos que puede haber otras estructuras condicionales. Es decir tenemos actividades por el verdadero y por el falso de la condición. } </script> </body> </html> Aparece la instrucción if en el lenguaje JavaScript.write(nombre+' esta aprobado con un '+nota). var nota. document. Si la condición se verifica verdadera se ejecuta todas las instrucciones que se encuentran encerradas entre las llaves de apertura y cerrado seguidas al if. Por el camino del verdadero pueden existir varias operaciones. Ejemplo: Realizar la carga de una nota de un alumno. tarde o noche ? Por supuesto que en un problema se combinan estructuras secuenciales y condicionales. nota=prompt('Ingrese su nota:'. Para disponer condiciones en un if podemos utilizar alguno de los siguientes operadores relacionales: − < mayor − >= mayor o igual − < menor − <= menor o igual − != distinto − == igual Siempre debemos tener en cuenta que en la condición del if deben intervenir una variable un operador relacional y otra variable o valor fijo.write(' esta aprobado con un '). Otra cosa que hemos incorporado es el operador + para cadenas de caracteres: document. Lo más importante que . 7 . La condición debe ir entre paréntesis.write(nombre+' esta aprobado con un '+nota). tanto por la rama del verdadero como por la rama del falso. 8 . Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades por la rama del verdadero y del falso. operaciones. salidas. NUNCA se realizan las actividades de las dos ramas. num2=parseInt(num2). Ejemplo: Confeccionar un programa que pida por teclado tres notas de un alumno. } </script> </body> </html> La función prompt retorna un string por lo que debemos convertirlo a entero cuando queremos saber cual de los dos valores es mayor numéricamente. calcule el promedio e imprima alguno de estos mensajes: . num2=prompt('Ingrese el segundo número:'.''). num1=prompt('Ingrese el primer número:'.write('el mayor es '+num1). En una estructura condicional compuesta tenemos entradas. En el lenguaje JavaScript una variable puede ir cambiando el tipo de dato que almacena a lo largo de la ejecución del programa. Decimos que una estructura condicional es anidada cuando por la rama del verdadero o el falso de una estructura condicional hay otra estructura condicional. Si la condición del if es verdadera se ejecuta el bloque que aparece después de la condición.JavaScript desde CERO JavaScript hay que tener en cuenta es que se realizan las actividades de la rama del verdadero o las del falso. } else { document.''). La estructura condicional compuesta tiene la siguiente codificación: if (<condición>) { <Instruccion(es)> } else { <Instruccion(es)> } Es igual que la estructura condicional simple salvo que aparece la palabra clave “else” y posteriormente un bloque { } con una o varias instrucciones. if (num1>num2) { document.num2. en caso que la condición resulte falsa se ejecuta la instrucción o bloque de instrucciones que indicamos después del else. Más adelante veremos qué sucede cuando preguntamos cuál de dos string es mayor.write('el mayor es '+num2). num1=parseInt(num1).Estructuras condicionales anidadas. Ejemplo: Realizar un programa que lea dos números distintos y muestre el mayor de ellos: <html> <head> </head> <body> <script language="javascript"> var num1. 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. Si el promedio es <4 mostrar "Reprobado". Si el promedio es >=4 y <7 mostrar "Regular". 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). nota:'. var pro.JavaScript desde CERO JavaScript Si el promedio es >=7 mostrar "Promocionado". } } </script> </body> </html> Analicemos el siguiente programa.''). porque todavía debemos averiguar si el promedio del alumno es superior/ igual a cuatro o inferior a cuatro. nota2=prompt('Ingrese 2da. Primeramente preguntamos si el promedio es superior o igual a 7. nota1=prompt('Ingrese 1ra. //Convertimos los 3 string en enteros nota1=parseInt(nota1). nota3=parseInt(nota3).write('regular'). pro=(nota1+nota2+nota3)/3.''). if (pro>=7) { document.''). */ .write('promocionado'). nota2=parseInt(nota2). } else { if (pro>=4) { document. nota:'. Solución: <html> <head> </head> <body> <script language="javascript"> var nota1. En caso que la condición nos de falso. etc.write('reprobado').nota3. Los comentarios en JavaScript los hacemos disponiendo dos barras previas al comentario: //Convertimos los 3 string en enteros Si queremos disponer varias líneas de comentarios tenemos como alternativa: /* linea de comentario 1. por la rama del falso aparece otra estructura condicional.nota2. linea de comentario 2. } else { document. nota:'. nota3=prompt('Ingrese 3ra. El operador &&.'').write('el mayor es el '+num3).''). .num2. Recordemos que la condición debe ir entre paréntesis en forma obligatoria. traducido se lo lee como "Y". } else { document.JavaScript desde CERO Es decir encerramos el bloque con los caracteres /* */ JavaScript 9 . num2=prompt('Ingrese segundo número:'.write('el mayor es el '+num2). analizamos el contenido de num2 y num3 para ver cual tiene un valor mayor.write('el mayor es el '+num1). } } </script> </body> </html> Podemos leerla de la siguiente forma: Si el contenido de la variable num1 es mayor al contenido de la variable num2 Y si el contenido de la variable num1 es mayor al contenido de la variable num3 entonces la CONDICION COMPUESTA resulta Verdadera. la CONDICION COMPUESTA da Falso y continúa por la rama del falso. Veamos un ejemplo: Confeccionar un programa que lea por teclado tres números distintos y nos muestre el mayor de ellos.Operadores lógicos && (y) en las estructuras condicionales. Si una de las condiciones simples da falso. num3=prompt('Ingrese tercer número:'.''). num3=parseInt(num3). En caso de ser Falsa la condición de la rama del falso. } else { if (num2>num3) { document. num2=parseInt(num2). <html> <head> </head> <body> <script language="javascript"> var num1. num1=parseInt(num1). La utilización de operadores lógicos permiten en muchos casos.num3. plantear algoritmos más cortos y comprensibles. Es decir que se mostrará el contenido de num1 si y sólo si num1>num2 y num1>num3. Cuando vinculamos dos o más condiciones con el operador "&&" las dos condiciones deben ser verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama del verdadero de la estructura condicional. Se emplea cuando en una estructura condicional se disponen dos condiciones. if (num1>num2 && num1>num3) { document. num1=prompt('Ingrese primer número:'. Confeccionar un programa que solicite que ingrese un valor entre 1 y 5.Operadores lógicos || (o) en las estructuras condicionales. valor=prompt('Ingrese un valor comprendido entre 1 y 5:'. febrero o marzo). . mes=prompt('Ingrese mes:'.año.write('uno'). <html> <head> </head> <body> <script language="javascript"> var dia. Con un ejemplo sencillo veremos cual es su sintaxis.''). dia=prompt('Ingrese día:'.JavaScript desde CERO JavaScript En esta segunda estructura condicional. Luego mostrar en castellano el valor ingresado.''). mes y año. De todos modos se puede aplicar en ciertas situaciones donde la condición se verifica si es igual a cierto valor. al haber una condición simple. ingresamos las variables dia. mes y año por separado. con que una de las dos condiciones sea Verdadera alcanza para que el resultado de la condición compuesta sea Verdadero.'). 11 . mes y año) por teclado. Mostrar un mensaje si corresponde al primer trimestre del año (enero. valor=parseInt(valor). año=parseInt(año). Traducido se lo lee como "O". Si la condición 1 es Verdadera o la condición 2 es Verdadera. La instrucción switch es una alternativa para remplazar los if/else if.write('corresponde al primer trimestre del año.mes. //Convertimos a entero switch (valor) { case 1: document. dia=parseInt(dia). 10 . <html> <head> </head> <body> <script language="javascript"> var valor. No podemos preguntar por mayor o menor.''). Cargar por teclado el valor numérico del día. Cuando vinculamos dos o más condiciones con el operador "O". if (mes==1 || mes==2 || mes==3) { document.''). luego ejecutar la rama del Verdadero. } </script> </body> </html> La carga de una fecha se hace por partes. año=prompt('Ingrese año:'. mes=parseInt(mes). no se requieren operadores lógicos.Estructuras switch. break. Mostrar un mensaje de error en caso de haber ingresado un valor que no se encuentre en dicho rango. Ejemplo: Se carga una fecha (día. case 3: document.JavaScript desde CERO JavaScript case 2: document. Cada valor que se analiza debe ir luego de la palabra clave 'case' y seguido a los dos puntos.write('tres'). las instrucciones a ejecutar. } </script> </body> </html> Cuando verificamos cadenas debemos encerrarlas entre comillas el valor a analizar: case 'rojo': document. Es importante disponer la palabra clave 'break' al finalizar cada caso. break. en caso de verificar dicho valor la variable que analiza el switch.write('dos'). break. verde o azul). en este caso al valor de rojo le asignamos ff (255 en decimal) es decir el valor máximo posible.''). De todos modos el default es opcional en esta instrucción. case 'azul': document.bgColor='#ff0000'. verde y azul).html">Ver segundo problema</a> </body> </html> Debemos tener en cuenta que la variable que analizamos debe ir después de la instrucción switch entre paréntesis.bgColor='#00ff00'.bgColor='#ff0000'. break. switch (col) { case 'rojo': document. break. . azul)' . } </script> <A href="pagina2. break. case 'verde': document.bgColor='#0000ff'. verde. Para cambiar el color de fondo de la ventana debemos asignarle a la propiedad bgColor del objeto document el color a asignar (el color está formado por tres valores hexadecimales que representan la cantidad de rojo.write('cinco').write('cuatro'). break. La instrucciones que hay después de la palabra clave 'default' se ejecutan en caso que la variable no se verifique en algún case. break. col=prompt('Ingrese el color con que se quiere pintar el fondo de la ventana (rojo. Ingresar por teclado el nombre de un color (rojo. Plantearemos un segundo problema para ver que podemos utilizar variables de tipo cadena con la instrucción switch. luego 00 para verde y azul (podemos utilizar algún software de graficación para que nos genere los tres valores).').write('debe ingresar un valor comprendido entre 1 y 5. case 5: document. luego pintar el fondo de la ventana con dicho color: <html> <head> </head> <body> <script language="javascript"> var col. case 4: document. default:document. break. La operación x = x + 1 se lee como "en la variable x se guarda el contenido de x más 1".La o las sentencias que se repiten. Se imprime el contenido de x y seguidamente se incrementa la variable x en uno. Una ejecución repetitiva de sentencias se caracteriza por: . Inicializamos una variable con el valor 1. nunca finalizará el programa. retorna VERDADERO. Existe otro tipo de estructuras tan importantes como las anteriores que son las estructuras REPETITIVAS. uno en cada línea. si x contiene 1 luego de ejecutarse esta operación se almacenará en x un 2. se ejecuta el bloque de instrucciones. Es decir. finaliza el programa. Ejemplo: Realizar un programa que imprima en pantalla los números del 1 al 100. Al ejecutarse la condición. En caso que la condición sea Falsa continua con la instrucción siguiente al bloque de llaves.write(x). El bloque se repite MIENTRAS la condición sea Verdadera. se sale de la estructura repetitiva y continúa el algoritmo. x=1. se verifica nuevamente la condición de la estructura repetitiva y se repite el proceso explicado anteriormente. Importante: Si la condición siempre retorna verdadero estamos en presencia de un ciclo repetitivo infinito. en este caso. document. Una estructura repetitiva permite ejecutar una instrucción o un conjunto de instrucciones varias veces.JavaScript desde CERO JavaScript 12 . x=x+1. agregamos la marca HTML de <br>. Al ser la condición verdadera se ejecuta el bloque de instrucciones que contiene la estructura while. <html> <head> </head> <body> <script language="javascript"> var x. El bloque de instrucciones contiene dos salidas al documento y una operación. Mientras la condición retorne verdadero. si la misma resulta verdadera se ejecutan las operaciones que indicamos entre las llaves que le siguen al while. while (x<=100) { document. incrementamos nuevamente la variable y así sucesivamente. se lee MIENTRAS la variable x sea menor o igual a 100. . . que motivará que se repitan o no las sentencias. Funcionamiento del while: En primer lugar se verifica la condición. } </script> </body> </html> Para que se impriman los números. seguidamente comienza la estructura repetitiva while y disponemos la siguiente condición ( x <= 100). Dicha situación es un error de programación. Es muy importante analizar este programa: La primera operación inicializa la variable x en 1. luego imprimimos la variable. al retornar falso la verificación de la condición.write('<br>'). Sin conocer las estructuras repetitivas podemos resolver el problema empleando una estructura secuencial.Estructura repetitiva (while) Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES.El test o prueba de condición antes de cada repetición. porque el contenido de x (1) es menor o igual a 100. Al finalizar el bloque de instrucciones que contiene la estructura repetitiva. . valor=parseInt(valor).Imprimir los números del 50 al 100. . Problema: Desarrollar un programa que permita la carga de 5 valores por teclado y nos muestre posteriormente la suma. 13 . sino que se logra con una práctica continua. para ello podemos hacer un seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la ejecución: x 1 2 3 4 . en este caso finaliza el diagrama.8 . disponemos la condición x >=100 ( si x es mayor o igual a 100) no provoca ningún error sintáctico pero estamos en presencia de un error lógico porque al evaluarse por primera vez la condición retorna falso y no se ejecuta el bloque de instrucciones que queríamos repetir 100 veces.Concepto de acumulador. Importante: Podemos observar que el bloque repetitivo puede no ejecutarse si la condición retorna falso la primera vez.4. 2. while (x<=5) { valor=prompt('Ingrese valor:'. La variable x debe estar inicializada con algún valor antes que se ejecute la operación x = x + 1. var suma=0.6.. Explicaremos el concepto de un acumulador con un ejemplo. 4. por ejemplo.. solucionando problemas. No existe una RECETA para definir una condición de una estructura repetitiva. 3.Imprimir los números del 1 al 500. <html> <head> </head> <body> <script language="javascript"> var x=1. La variable x recibe el nombre de CONTADOR.100). Un contador es un tipo especial de variable que se incrementa o decrementa con valores constantes durante la ejecución del programa. Observar que si. var valor.JavaScript desde CERO JavaScript Lo más difícil es la definición de la condición de la estructura while y qué bloque de instrucciones se va a repetir. Una vez planteado el programa debemos verificar si el mismo es una solución válida al problema (en este caso se deben imprimir los números del 1 al 100 en la página).''). El contador x nos indica en cada momento la cantidad de valores impresos en la página.. x=x+1. suma=suma+valor. Probemos algunas modificaciones de este programa y veamos qué cambios se deberían hacer para: 1.Imprimir los números del 2 al 100 pero de 2 en 2 (2.Imprimir los números del -50 al 0. 100 101 Cuando x vale 101 la condición de la estructura repetitiva retorna falso. por ello la necesidad de ir almacenando en la variable suma los valores ingresados. a diferencia del while que está en la parte superior.write("La suma de los valores es "+suma+"<br>"). document. Finalizar el programa cuando se cargue el valor 0. También aparece el concepto de ACUMULADOR (un acumulador es un tipo especial de variable que se incrementa o decrementa con valores variables durante la ejecución del programa). Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo menos una vez se ejecutará el bloque repetitivo.''). Cada ciclo que se repita la estructura repetitiva. el valor anterior 5 se pierde. 14 . </script> </body> </html> En este problema. Hemos dado el nombre de suma a nuestro acumulador.JavaScript desde CERO JavaScript } document. valor=parseInt(valor). Problema: Escribir un programa que solicite la carga de un número entre 0 y 999. y nos muestre un mensaje de cuántos dígitos tiene el mismo.write('El valor '+valor+' tiene '). La condición de la estructura está abajo del bloque a repetir. es decir igual que el while. Los números que toma la variable valor dependerá de qué cifras cargue el operador durante la ejecución del programa. <html> <head> </head> <body> <script language="javascript"> var valor.write('Tiene 1 digitos'). la variable suma se incrementa con el contenido ingresado en la variable valor. Finaliza la ejecución del bloque repetitivo cuando la condición retorna falso. la cual ejecuta al menos una vez su bloque repetitivo. al cargarse el segundo valor (16). 5 5 1 16 21 2 7 28 3 10 38 4 2 40 5 Este es un seguimiento del programa planteado. if (valor<10) { document. do { valor=prompt('Ingrese un valor entre 0 y 999:'. .Estructura repetitiva (do/while) La sentencia do/while es otra estructura repetitiva. a semejanza de los anteriores. llevamos un CONTADOR llamado x que nos sirve para contar las vueltas que debe repetir el while. a diferencia del while que puede no ejecutar el bloque. Hay que tener en cuenta que cuando en la variable valor se carga el primer valor (en este ejemplo es el valor 5). La prueba del diagrama se realiza dándole valores a las variables: valor suma x 0 0 (Antes de entrar a la estructura repetitiva estos son los valores). <Incremento o Decremento>) { <Instrucciones> } Esta estructura repetitiva tiene tres argumentos: variable de inicialización. en caso contrario se trata de un valor de tres dígitos. − Luego se repiten sucesivamente del Segundo al Cuarto Paso. Ejemplo: Mostrar por pantalla los números del 1 al 10.JavaScript desde CERO JavaScript } else { if (valor<100) { document. 15 . Sintaxis: for (<Inicialización> . Por último.Por lo general se inicializa una variable. </script> </body> </html> En este problema por lo menos se carga un valor.write('<br>'). en caso contrario continúa el programa. ingresar 5 notas de alumnos. } } document. Conocemos de antemano la cantidad de veces que queremos que el bloque se repita. Funcionamiento: − Primero se ejecuta por única vez el primer argumento. Pero hay otra estructura repetitiva cuyo planteo es más sencillo en ciertas situaciones. Esta estructura se emplea en aquellas situaciones en las cuales CONOCEMOS la cantidad de veces que queremos que se ejecute el bloque de instrucciones.write('Tiene 2 digitos').Estructura repetitiva (for) Cualquier problema que requiera una estructura repetitiva se puede resolver empleando la estructura while. Este tipo de estructura repetitiva se utiliza generalmente cuando sabemos la cantidad de veces que deseamos que se repita el bloque. si es mayor a 10 pero menor a 100 se trata de un valor de dos dígitos. − El segundo paso es evaluar la (Condición). condición y variable de incremento o decremento. etc. − El cuarto paso es ejecutar el tercer argumento (Incremento o Decremento). } else { document. Si se carga un valor menor a 10 se trata de un número de una cifra. <html> <head> .write('Tiene 3 digitos'). <Condición> . Este bloque se repite mientras se ingresa en la variable 'valor' un número distinto a 0. − El tercer paso es la ejecución de las instrucciones. Ejemplo: cargar 10 números. hay que decir que la ejecución de la sentencia break dentro de cualquier parte del bucle provoca la salida inmediata del mismo. en caso de ser verdadera se ejecuta el bloque. } while(valor!=0). La función realizará alguna operación con los parámetros que le enviamos. argumento2. es decir. Una función es un conjunto de instrucciones que resuelven una parte del problema y que puede ser utilizado (llamado) desde diferentes partes de un programa.. Un programa es una cosa compleja de realizar y por lo tanto es importante que esté bien ESTRUCTURADO y también que sea inteligible para las personas. etc.write(f+" "). Hasta ahora hemos visto como resolver un problema planteando un único algoritmo. consultarla. Tienen la siguiente estructura: function <nombre de función>(argumento1. Incluso los programas más sencillos tienen la necesidad de fragmentarse. Importante: Tener en cuenta que no lleva punto y coma al final de los tres argumentos del for. . es escribir aquellos grupos de sentencias una sola y única vez bajo la forma de una FUNCION.. reducir y dividir el trabajo en programación.f<=10. La herramienta más potente con que se cuenta para facilitar. 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. imprimirla. Con funciones podemos segmentar un programa en varias partes.JavaScript desde CERO JavaScript </head> <body> <script language="javascript"> var f. modificarla. Las funciones son los únicos tipos de subprogramas que acepta JavaScript. Consta de un nombre y parámetros. existe otro operador -. ya sea en un mismo programa o en otros programas. éste puede constar de pequeños algoritmos.. El disponer un punto y coma provoca un error lógico y no sintáctico. planteamos un algoritmo. por lo que el navegador no avisará.que decrementa en uno una variable). Si un grupo de sentencias realiza una tarea bien definida. Como la condición 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). hubiera sido lo mismo poner f=f+1 pero este otro operador matemático nos simplifica las cosas. Los parámetros son valores que se envían y son indispensables para la resolución del mismo. 16 . Podemos cargar una variable. Con el nombre llamamos a la función.f++) { document. Veremos que una . Frente a un problema. aunque resulte que sólo se le llame o use una vez. tal vez deberíamos llamarla centrarTitulo). for(f=1.Funciones En programación es muy frecuente que un determinado procedimiento de cálculo definido por un grupo de sentencias tenga que repetirse varias veces. } </script> </body> </html> Inicialmente f se la inicializa con 1. argumento n) { <código de la función> } Debemos buscar un nombre de función que nos indique cuál es su objetivo (Si la función recibe un string y lo centra. lo cual implica que se tenga que escribir tantos grupos de aquellas sentencias como veces aparezca dicho proceso. entonces puede estar justificado el aislar estas sentencias formando una función. hacemos referencia a la misma. document. document. Las funciones nos ahorran escribir código que se repite con frecuencia y permite que nuestro programa sea más entendible.write("Ingrese su documento correctamente<br>").write("Cuidado<br>"). . retornar un valor. document. puede tener o no parámetros. las instrucciones de la misma nunca se ejecutarán. Cada vez que se llama una función se ejecutan todas las líneas contenidas en la misma. mostrarMensaje(). Si no se llama a la función.write("Cuidado<br>").write("Ingrese su documento correctamente<br>"). Si fijamos como nombre a la función mostrarTitulo (es decir la segunda palabra con mayúscula) debemos respetar este nombre cuando la llamemos a dicha función. document.write("Ingrese su documento correctamente<br>"). mostrarMensaje(). Es importante notar que para que una función se ejecute debemos llamarla desde fuera por su nombre (en este ejemplo: mostrarMensaje()).write("Cuidado<br>"). </script> </body> </html> Recordemos que JavaScript es sencible a mayúsculas y minúsculas. Ejemplo: Mostrar un mensaje que se repita 3 veces en la página con el siguiente texto: 'Cuidado' 'Ingrese su documento correctamente' 'Cuidado' 'Ingrese su documento correctamente' 'Cuidado' 'Ingrese su documento correctamente' La solución sin emplear funciones es: <html> <head> </head> <body> <script language="javascript"> document.JavaScript desde CERO JavaScript función puede variar bastante en su estructura. A una función la podemos llamar tantas veces como necesitemos. etc. } mostrarMensaje().write("Ingrese su documento correctamente<br>"). document. document.write("Cuidado<br>"). </script> </body> </html> Empleando una función: <html> <head> </head> <body> <script languaje="javascript"> function mostrarMensaje() { document. 18 . Luego de cargar los dos valores por teclado se llama a la función mostrarComprendidos y le enviamos las variables valor1 y valor2. luego de hacer un proceso. Cargar por teclado esos dos valores.inicio++) { document.JavaScript desde CERO JavaScript 17 . Luego retornar en castellano el valor recibido. } } var valor1. valor1=parseInt(valor1). Explicaremos con un ejemplo.''). else if (x==2) return "dos".Funciones con parámetros. <html> <head> </head> <body> <script language="javascript"> function mostrarComprendidos(x1. for(inicio=x1.valor2).'').x2) { var inicio. valor2=prompt('Ingrese valor superior:'. Ejemplo: Confeccionar una función que reciba dos números y muestre en la página los valores comprendidos entre ellos de uno en uno. </script> </body> </html> El programa de JavaScript empieza a ejecutarse donde definimos las variables valor1 y valor2 y no donde se define la función.valor2. else if (x==3) return "tres".inicio<=x2. Es importante notar que a la función la podemos llamar la cantidad de veces que la necesitemos. valor2=parseInt(valor2). Ejemplo 1: Confeccionar una función que reciba un valor entero comprendido entre 1 y 5. una función que tiene datos de entrada. retorne un valor.write(inicio+' '). Los parámetors x1 y x2 reciben los contenidos de las variables valor1 y valor 2. mostrarComprendidos(valor1. . Son comunes los casos donde una función.Funciones que retornan un valor. valor1=prompt('Ingrese valor inferior:'. <html> <head> </head> <body> <script language="javascript"> function convertirCastellano(x) { if (x==1) return "uno". Una función puede tener varios parámetros. break. La instrucción switch analiza el contenido de la variable x con respecto al valor de cada caso. case 2:s=s+'febrero '. ya que la misma retorna un valor. JavaScript } var valor. Ejemplo 2: Confeccionar una función que reciba una fecha con el formato de día. break. valor=prompt("Ingrese un valor entre 1 y 5". } } Esta es una forma más elegante que una serie de if anidados. mes y año y retorne un string con un formato similar a: "Hoy es 10 de junio de 2003".año) { var s='Hoy es '+dia+' de '. valor=parseInt(valor). case 3:return "tres". else if (x==5) return "cinco".write(r). r=convertirCastellano(valor). La estructura condicional if de este ejemplo puede ser remplazada por la instrucción switch.JavaScript desde CERO else if (x==4) return "cuatro". var r. pero sólo puede retornar un único valor.mes. else return "valor incorrecto". debemos asignar el nombre de la función a una variable. case 2:return "dos". case 4:return "cuatro". En la situación de ser igual.""). case 5:return "cinco". default:return "valor incorrecto". document. la función queda codificada de la siguiente manera: function convertirCastellano(x) { switch (x) { case 1:return "uno". <html> <head> </head> <body> <script language="javascript"> function formatearFecha(dia. </script> </body> </html> Podemos ver que el valor retornado por una función lo indicamos por medio de la palabra clave return. switch (mes) { case 1:s=s+'enero '. ejecuta el bloque seguido de los 2 puntos hasta que encuentra la instrucción return o break. Cuando se llama a la función. . write(fec). } //fin del switch s=s+'de '+año.Programación orientada a objetos.6. A partir de esta estructura se ha creado un nuevo modelo de programación (la programación orientada a objetos) que atribuye a los mismos propiedades como herencia o polimorfismo. break. break. break. 19 . case 11:s=s+'noviembre '. document.6. break. si el parámetro mes tiene un uno. Cuando se llama a la función directamente. Definimos e inicializamos una variable con: var s='Hoy es '+dia+' de '. Observemos como acumulamos lo que tiene 's' más el string 'enero '. JavaScript simplifica en algo este modelo y hace una programación híbrida entre la programación estructurada y la programación orientada a objetos. case 4:s=s+'abril '. case 9:s=s+'septiembre '. break. Esto último lo podemos hacer en dos pasos: var fec= formatearFecha(11. al valor devuelto se lo enviamos a la función write del objeto document.2006). case 10:s=s+'octubre '. } document. Un objeto es una estructura que contiene tanto las variables (llamadas propiedades) como las funciones que manipulan dichas variables (llamadas métodos). break. return s. Luego le concatenamos o sumamos el mes: s=s+'enero '. case 6:s=s+'junio '. case 8:s=s+'agosto '.write(formatearFecha(11. En caso de hacer s='enero ' perderíamos el valor previo que tenía la variable s. Llegan tres parámetros con el día.2006)). mes y año. Por último concatenamos el año: s=s+'de '+año. case 12:s=s+'diciembre '. break.JavaScript desde CERO JavaScript case 3:s=s+'marzo '. Esto. El modelo de la programación orientada a objetos normal y corriente separa los mismos en dos: clases e instancias (objetos). break. case 7:s=s+'julio '. Las primeras son entes más abstractos que definen un . Guardamos en la variable 'fec' el string devuelto por la función. break. </script> </body> </html> Analicemos un poco la función formatearFecha. break. Como veremos. case 5:s=s+'mayo '. Para acceder a los métodos y propiedades de un objeto debemos utilizar la siguiente sintaxis: − objeto. Es un algoritmo (conjunto de operaciones) que se ejecuta en respuesta a un mensaje. . seguridad. cualidades distintivas de cada objeto. La interpretación de un mensaje (selección del método ejecutado) depende del receptor y puede variar con distintos receptores. Clases Una clase es una agrupación de objetos que comparten las mismas propiedades y comportamientos.achicarse etc. cerrarse. responsabilidades: abrirse. Ejemplos de objetos del mundo de la programación: .Casa: atributos: tamaño. etc.Atributos (Propiedades).. ancho. respuestas a mensajes para satisfacer peticiones. responsabilidades: mostrar título. La clase a la cual pertenece un objeto determina el comportamiento del objeto. Una clase tiene encomendadas actividades que ejecutan los métodos. puede variar de una clase a otra. cantidad de habitaciones. largo.Mesa: atributos: altura. Son ejemplares (instancias) de una clase y conocen a la clase a la cual pertenecen. Unidad que encapsula códigos y datos para los métodos (operaciones). Es un molde para objetos que poseen las mismas características (que pueden recibir los mismos mensajes y responden de la misma manera). es decir. poseyendo las mismas propiedades que la clase a la cual pertenecen. Deben ser mínimos para poder realizar todas las operaciones que requiere la aplicación. Propiedades y métodos. Una clase es una representación de una idea o concepto. • Atributos o propiedades Son las características. • Responsabilidades o Métodos. responsabilidades: comodidad. El nombre del método identifica una operación que se ejecuta. métodos) que deben cumplir.Ventana: atributos: tamaño. etc. Un método consiste en el nombre de la operación y sus argumentos. Un método está determinado por la clase del objeto receptor. Todos los ejemplares de una clase se comportan de forma similar (invocan el mismo método) en respuesta a mensajes similares. .metodo(parametros) Conceptos Básicos. Ejemplos de objetos del mundo real: .. Se relacionan entre si. • Objetos Son todas las cosas con identidad propia. Poseen características (atributos) y tienen responsabilidades (funciones.. todos los objetos de una clase usan el mismo método en respuesta a mensajes similares. responsabilidades: contener elementos. . precio.Ventana: atributos: tamaño. etc. El objetivo de un método es ejecutar las actividades que tiene encomendada la clase..propiedad − objeto. etc. Son las responsabilidades que debe cumplir la clase.JavaScript desde CERO JavaScript conjunto determinado de objetos. Las clases están definidas por: . color. color. Las segundas son miembros de una clase. etc. etc. 11.getMonth()+1)+'/'). minuto y segundo de la fecha.write('Hoy es '). entre otros. JavaScript 20 . ya que siempre devuelven números con todos sus dígitos. como puede ser el manejo de vectores o el de fechas. Una aplicación es un conjunto de objetos de determinadas clases. segundo). En caso contrario hay que tener en cuenta que los meses comienzan por cero. mes. en cuyo caso devolverá las dos últimas cifras. Éste se devuelve como número de 4 dígitos excepto en el caso en que esté entre 1900 y 1999. .Comportamiento (operaciones o métodos) y . minuto. Así. 25) El objeto Date dispone. <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function mostrarFechaHora() { var fecha fecha=new Date(). getDay() Devuelve el día de la semana de la fecha en forma de número que va del 0 (domingo) al 6 (sábado) Ejemplo: Mostrar en una página la fecha y la hora actual.write(fecha. el objeto fecha contendrá la fecha y hora actuales.getDate()+'/'). respectivamente. dia. de los siguientes métodos: getYear() setYear(año) Obtiene y coloca. obtenidas del reloj de nuestra computadora. hora. Esta clase nos permitirá manejar fechas y horas. día. getMonth() setMonth(mes) getDate() setDate(dia) getHours() setHours(horas) getMinutes() setMinutes(minutos) getSeconds() setSeconds(segundos) Obtienen y colocan. pero sin tanta complicación. fecha = new Date(año. document. mes. dia). document. el año de la fecha. Si no utilizamos parámetros.Clase Date JavaScript dispone de varias clases predefinidos para acceder a muchas de las funciones normales de cualquier lenguaje. Se invoca así: fecha = new Date().JavaScript desde CERO . hora.write((fecha. por ejemplo: navidad06 = new Date(2006. document. getFullYear() setFullYear(año) Realizan la misma función que los anteriores. respectivamente.Relaciones con otros objetos. el mes.//creación de un objeto de la clase Date fecha = new Date(año. document.getSeconds()).write(sueldos[f]+'<br>'). </SCRIPT> </HEAD> <BODY> </BODY> </HTML> En este problema hemos creado un objeto de la clase Date.<nombre de método>(parámetros) 21 . Con un único nombre se define un vector y por medio de un subíndice hacemos referencia a cada elemento del mismo (componente).f<sueldos. var f.f++) { var v.write('Es la hora '). v=prompt('Ingrese sueldo:'. for(f=0.JavaScript desde CERO JavaScript document.length. <HTML> <HEAD> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"> function cargar(sueldos) { var f. for(f=0.'').f<sueldos.write('Listado de sueldos<br>'). document.write(fecha.f++) { total=total+sueldos[f].length.getMinutes()+':').write(fecha. .write(fecha.length. document.f<sueldos.write(fecha. sueldos[f]=parseInt(v). Ejemplo 1: Crear un vector para almacenar los cinco sueldos de operarios y luego mostrar el total de gastos en sueldos (cada actividad en una función). for(f=0. Luego llamamos una serie de métodos que nos retornan datos sobre la fecha y hora actual del equipo de computación donde se está ejecutando el navegador. document. } document. document. } } function calcularGastos(sueldos) { var total=0.getHours()+':').write('<br>').f++) { document.Clase Array Un vector es una estructura de datos que permite almacenar un CONJUNTO de datos. } //Llamada a la función mostrarFechaHora(). Es bueno notar que para llamar a los métodos disponemos: <nombre de objeto>.getYear()). } var sueldos. <HTML> <HEAD></HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"> function mostrarFecha(meses. calcularGastos(sueldos). meses[4]='Mayo'. num=parseInt(num). num=prompt('Ingrese número de mes:'.write('Total de gastos en sueldos:'+total). imprimimos en la página los valores y el total de gastos. Almacenar los meses de año. meses[0]='Enero'. En la función. Mostrar a qué mes corresponde y cuántos días tiene dicho mes. a través de un ciclo for recorremos las distintas componentes del vector y almacenamos valores enteros que ingresamos por teclado. document.JavaScript desde CERO JavaScript } document. } var meses. Ejemplo 2: Crear un vector con elementos de tipo string. sueldos=new Array(5). meses[2]='Marzo'. cargar(sueldos). </SCRIPT> </BODY> </HTML> Recordemos que el programa comienza a ejecutarse a partir de las líneas que se encuentran fuera de la funciones: var sueldos. definimos una variable y posteriormente creamos un objeto de la clase Array. cargar(sueldos). meses[11]='Diciembre'. meses[10]='Noviembre'. sueldos=new Array(5). document. . En la segunda función sumamos todas las componentes del vector.write('Corresponde al mes:'+meses[num-1]). indicándole que queremos almacenar 5 valores. calcularGastos(sueldos). meses[7]='Agosto'. En otra función solicitar el ingreso de un número entre 1 y 12. meses[3]='Abril'. meses[1]='Febrero'. meses=new Array(12). document. meses[5]='Junio'.write('<br>'). meses[8]='Septiembre'. Lo primero. meses[9]='Octubre'.dias) { var num. Para conocer el tamaño del vector accedemos a la propiedad length de la clase Array.write('Tiene '+dias[num-1]+' días').''). meses[6]='Julio'. Llamamos a la función cargar enviándole el vector. min(2.write('Corresponde al mes:'+meses[num-1]).JavaScript desde CERO JavaScript var dias. dias[2]=31. document. la cantidad de días del mes de enero. siendo el primer pow argumento la base y el segundo el Math. </SCRIPT> </BODY> </HTML> En este problema definimos dos vectores. Funciones trigonométricas inversas Math.round(round -3 argumento 2. Es importante notar que cuando imprimimos.7) Devuelve el menor (o mayor) de sus dos min. dias[9]=31.57 atan Math. log Exponenciación y logaritmo.Clase Math Esta clase no está construido para que tengamos nuestras variables Math.E y Math.cos(Math. Recordar que los vectores comienzan a numerarse a partir de la componente cero. dias[3]=30. tan -1 argumento en radianes I) asin.P sin.ceil(-2. Decimos que se trata de vectores paralelos porque en la componente cero del vector meses almacenamos el string 'Enero' y en el vector dias. 22 .7) -2 igual al argumento Devuelve el entero más grande menor o floor Math.PI) y los siguientes métodos matemáticos: Expresión de Resultado Método Descripción ejemplo del ejemplo abs Valor absoluto Math. dias[4]=31. dias[1]=28. base E 1 ) Devuelve el entero más pequeño mayor o ceil Math. acos.E exp.log(Math.3) 8 exponente .dias). cos. dias[6]=31.asin(1) 1.7) -3 igual al argumento Devuelve el entero más cercano o igual al Math. max Math. dias[8]=30. dias[5]=30. uno para almacenar los meses y otro los días. dias[10]=30.abs(-2) 2 Funciones trigonométricas. reciben el Math. disponemos como subíndice el valor ingresado menos 1. dias[11]=31. esto debido a que normalmente el operador de nuestro programa carga un valor comprendido entre 1 y 12. mostrarFecha(meses. sino como un contenedor que tiene diversas constantes (como Math. dias[7]=31. dias=new Array(12).floor(-2. dias[0]=31.pow(2.4) 2 argumentos Exponenciación. else document. obtenemos sólo la parte entera. //Resultado 4 Métodos • charAt(pos) Retorna el caracter del índice especificado.'').substring(2. var nom='Juan'.7345 Ejemplo: Confeccionar un programa que permita cargar un valor comprendido entre 1 y 10.length). </script> </body> </html> Para generar un valor aleatorio comprendido entre 1 y 10 debemos plantear lo siguiente: var num=parseInt(Math. Concatenación de cadenas (+) JavaScript permite concatenar cadenas utilizando el operador +. Luego generar un valor aleatorio entre 1 y 10.write('Ganó el número que se sorteó es el '+ num).'.JavaScript desde CERO sqrt random Raíz cuadrada Genera un valor aleatorio comprendido entre 0 y 1. var num=parseInt(Math. El siguiente fragmento de código concatena tres cadenas para producir su salida: var final='La entrada tiene ' + contador + ' caracteres.random()*10)+1.5). Math. La del medio es un entero que automáticamente se convierte a cadena y luego se concatena con las otras.charAt(0).random() por 10. desde el caracter 'posinicial' hasta el 'posfinal'-1: cadena3=cadena1.sqrt(25) Math. document. El valor que cargó el operador se encuentra en: var selec=prompt('Ingrese un valor entre 1 y 10'. . • substring (posinicial. Comienzan a numerarse de la posición cero.random()*10)+1.'').Clase String. var caracterPrimero=nombre. Propiedad length Retorna la cantidad de caracteres de un objeto String. 0. Al multiplicar Math.write('Lo siento se sorteó el valor '+num+' y usted eligió el '+selec). var nombre='juan'. posfinal) Retorna un String extraída de otro. if (num==selec) document. Finalmente sumamos uno. mostrar un mensaje con el número sorteado e indicar si ganó o perdió: <html> <head> </head> <body> <script language="JavaScript"> var selec=prompt('Ingrese un valor entre 1 y 10'. luego. nos genera un valor aleatorio comprendido entre un valor mayor a 0 y menor a 10. con la función parseInt.random() JavaScript 5 Ej. Un string consiste en uno o más caracteres encerrados entre simple o doble comillas. Dos de las cadenas concatenadas son cadenas literales. Con un simple if validamos si coinciden los valores (el generado y el ingresado por teclado). 23 . selec=parseInt(selec).write(nom. Tener en cuenta que puede retornar 0 si la subcadena coincide desde el primer caracter. document.Formularios y Eventos.toLowerCase(). • indexOf (subCadena) Devuelve la posición de la subcadena dentro de la cadena. if (cadena. o -1 en caso de no estar. document. Suponemos que conoce las marcas para la creación de formularios en una página web: . Luego de esto.write('<br>'). <html> <head> </head> <body> <script language="JavaScript"> var cadena=prompt('Ingrese una cadena:'.write('El primer caracter es:'+cadena.toLowerCase()). var nombre='Rodriguez Pablo'. document.write('La cadena convertida a minúsculas es:'+cadena.write('Se ingresó la subcadena hola').write('<br>').''). document.write('Los primeros 3 caracteres son:'+cadena.write('La cantidad de caracteres son:'+cadena. document.indexOf('Pablo'). 4 sin incluir el 5 de cadena1 (Cuidado que comienza en cero).charAt(0)).length). if (pos!=-1) document. document. </script> </body> </html> 24 .write('No se ingresó la subcadena hola'). var pos=nombre. Luego de esto.JavaScript desde CERO JavaScript En este ejemplo. • toUpperCase() Convierte todos los caracteres del String que invoca el método a mayúsculas: cadena1=cadena1. Esta posibilidad de hacer pequeños programas que se ejecutan en el navegador. El uso de JavaScript en los formularios HTML se hace fundamentalmente con el objetivo de validar los datos ingresados.write('<br>').substring(0.toUpperCase(). document.write('<br>').3)). document.write('La cadena ingresada es:'+cadena). document. "cadena3" contendrá los caracteres 2. document.toUpperCase()). evitan intercambios innecesarios entre el cliente y el servidor (navegador y sitio web).write('<br>'). cadena1 tiene todos los caracteres convertidos a mayúsculas.write('<br>'). cadena1 tiene todos los caracteres convertidos a minúsculas.write('La cadena convertida a mayúsculas es:'+cadena. Ejemplo: Cargar un string por teclado y luego llamar a los distintos métodos de la clase String y la propiedad length. document.write ('Está el nombre Pablo en la variable nombre'). Se hace esta actividad en el cliente (navegador) para desligar de esta actividad al servidor que recibirá los datos ingresados por el usuario. • toLowerCase() Convierte todos los caracteres del String que invoca el método a minúsculas: cadena1=cadena1. document. else document. 3.write('<br>'). document.indexOf('hola')!=-1) document. dicha función se ejecuta cuando se dispara el evento respectivo. La función alert crea una ventana que puede mostrar un mensaje. Nuestra actividad en JavaScript es procesar los eventos que generan estos controles (un evento es una acción que se dispara. </SELECT> hidden <INPUT TYPE="hidden"> El navegador crea un objeto por cada control visual que aparece dentro de la página. </TEXTAREA> button <INPUT TYPE="button"> submit <INPUT TYPE="submit"> reset <INPUT TYPE="reset"> checkbox <INPUT TYPE="checkbox"> radio <INPUT TYPE="radio"> select <SELECT> . etc.JavaScript desde CERO JavaScript form <FORM> . alert('El contador ahora vale :' + contador). Ahora veremos la importancia de definir un NAME a todo control de un formulario.. Vamos a hacer en problema muy sencillo empleando el lenguaje JavaScript. Nosotros podemos acceder posteriormente desde JavaScript a dichos objetos.. 25 . TEXTAREA (editor de varias líneas). Hasta ahora hemos visto como crear un formulario con controles de tipo BUTTON. Hay que tener en cuenta que a la variable contador la definimos fuera de la función para que no se inicialice cada vez que se dispara el evento. function incrementar() { contador++. por ejemplo si se presiona un botón). </FORM> text <INPUT TYPE="text"> password <INPUT TYPE="password"> textarea <TEXTAREA> . Con un ejemplo veremos estos controles: Confeccionar un formulario que permita ingresar el nombre y edad de una persona: <html> <head></head> <body> <script language="JavaScript"> . se llama a la función incrementar. Agregamos un control de tipo TEXT (permite al operador cargar caracteres por teclado). dispondremos un botón y cada vez que se presione. } </script> <form> <input type="button" onClick="incrementar()" value="incrementar"> </form> </body> </html> A los eventos de los objetos HTML se les asocia una función.. En este caso cada vez que presionamos el botón. BUTTON y TEXT.. El objeto principal es el FORM que contendrá todos los otros objetos: TEXT (editor de líneas)... en la misma incrementamos la variable contador en uno. mostraremos un contador: <html> <head> </head> <body> <script language="JavaScript"> var contador=0.Controles FORM. La diferencia fundamental es que cuando se carga un texto en el campo de edición sólo muestra asteriscos en pantalla. alert('Ingreso el nombre:' + nom). Hay que tener en cuenta que a nuestra página la accedemos por medio del objeto: document.edad.JavaScript desde CERO JavaScript function mostrar() { var nom=document.text1. <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function validar() { if (document.length<5) { alert("Ingrese al menos 5 caracteres"). luego.value. El evento que se dispara al presionar el botón se llama mostrar. var ed=document.nombre. es fundamental para el ingreso de claves y para que otros usuarios no vean los caracteres que tipeamos. document.value. alert('Y la edad:' + ed). Para hacer más clara la función guardamos en dos variables auxiliares los contenidos de los controles de tipo TEXT.value.form1.form1.text1.form1. al formulario que hemos creado.Control PASSWORD Esta marca es una variante de la de tipo "TEXT". Pero podemos en el cliente (es decir en el navegador) verificar si ha ingresado una cantidad correcta de caracteres. para acceder a las cadenas cargadas debemos indicar la propiedad value. 1 BUTTON. 2 TEXT. 26 .value.value="". } </script> <form name="form1"> Ingrese su nombre: <input type="text" name="nombre"><br> Ingrese su edad: <input type="text" name="edad"><br> <input type="button" value="Confirmar" onClick="mostrar()"> </form> </body> </html> En este problema tenemos cuatro controles: 1 FORM. luego.form1.value.form1.nombre.form1. La función 'mostrar' accede a los contenidos de los dos controles de tipo TEXT: var nom=document. var ed=document. en este caso: form1. Por último. es decir: nombre y edad respectivamente. lo accedemos nuevamento por su NAME. a cada control que contiene el formulario. } } </SCRIPT> </HEAD> <BODY> . Ejemplo: Codificar una página que permita ingresar una password y luego muestre una ventana de alerta si tiene menos de 5 caracteres. es decir.edad. lo accedemos por el NAME que le dimos al formulario. por ejemplo. La mayoría de las veces este dato se procesa en el servidor. Esto lo hacemos cuando ocurre el evento OnChange. document.text1.JavaScript desde CERO JavaScript <FORM NAME="form1"> Ingrese clave(al menos 5 caracteres): <INPUT TYPE="password" NAME="text1"> <INPUT TYPE="button" ONCLICK="validar()" VALUE="Enviar"> </FORM> </BODY> </HTML> En este problema debemos observar que cuando ingresamos caracteres dentro del campo de edición sólo vemos asteriscos.selectedIndex. Y por último con esta expresión accedemos al valor asociado al string: document.selectedIndex].Control SELECT Este otro objeto visual que podemos disponer en un FORM permite realizar la selección de un string de una lista y tener asociado al mismo un valor no visible. sino se perdería el objetivo de este control (ocultar los caracteres tipeados).form1.text1.options[document.text3.form1.value.selectedIndex]. a este valor no lo mostraremos dentro de la página.select1. a la que accedemos por medio de un subíndice. Si necesitamos saber la cantidad de caracteres que tiene un string accedemos a la propiedad length que retorna la cantidad de caracteres.value = document.form1.form1.length<5) 27 .form1.select1.form1. Hay problemas en los que solamente necesitaremos el string almacenado en el objeto SELECT y no el valor asociado (no es obligatorio asociar un valor a cada string).text Es decir que el objeto select1 tiene otra propiedad llamada options.form1.select1.text1.value Normalmente. numerando a partir de cero).value Un ejemplo completo que muestra el empleo de un control SELECT es: <html> <head> </head> <body> <script language="JavaScript"> function cambiarColor() { document.form1. pero realmente en memoria se almacenan los caracteres tipeados.value = document.select1.text. if (document.select1.form1. Si queremos mostrar los caracteres ingresados debemos acceder a: document.selectedIndex].selectedIndex Considerando que el objeto SELECT se llama select1 accedemos a la propiedad selectedIndex (almacena la posición del string seleccionado de la lista. Para determinar el string seleccionado: document. Para determinar la posición del índice seleccionado en la lista: document.form1.select1.value = document.options[document.form1.value.text2.form1.options [document.select1.select1.options[document.selectedIndex]. El objetivo fundamental en JavaScript es determinar qué elemento está seleccionado y qué valor tiene asociado.form1. } </script> <form name="form1"> <select size="1" name="select1" ONCHANGE="cambiarColor()"> <option value="0xff0000">Rojo</option> <option value="0x00ff00">Verde</option> . document. al string de una determinada posición.form1.select1.select1.form1. Luego mostrar un mensaje indicando la cantidad de lenguajes que ha seleccionado el operador. Para conocer su funcionamiento y ver como podemos acceder a su estado desde JavaScript haremos un pequeña página. if (document. if (document.JavaScript desde CERO JavaScript <option value="0x0000ff">Azul</option> </select></p> <br> Número de índice seleccionado del objeto SELECT:<input type="text" name="text1"><br> Texto seleccionado:<input type="text" name="text2"><br> Valor asociado:<input type="text" name="text3"><br> </form> </body> </html> Se debe analizar en profundidad este problema para comprender primeramente la creación del objeto SELECT en HTML. if (document. Ejemplo: Confeccionar una página que muestre 4 lenguajes de programación que el usuario puede seleccionar si los conoce. 28 .lenguaje4.checked) cant++. y cómo acceder luego a sus valores desde JavaScript.checked) cant++.form1. alert('Conoce ' + cant + ' lenguajes').lenguaje3. Es importante para el objeto SELECT definir qué función llamar cuando ocurra un cambio: onChange="cambiarColor()". <html> <head> </head> <body> <script language="JavaScript"> function contarSeleccionados() { var cant=0.form1.form1.lenguaje2.Control CHECKBOX El control CHECKBOX es el cuadradito que puede tener dos estados (seleccionado o no seleccionado).lenguaje1. } </script> <form name="form1"> <input type="checkbox" name="lenguaje1">JavaScript <br> <input type="checkbox" name="lenguaje2">PHP <br> .checked) cant++. Analizando la función cambiarColor() podemos ver cómo obtenemos los valores fundamentales del objeto SELECT.form1. if (document.checked) cant++. Por cada opción del objeto SELECT tenemos una línea: Rojo Donde Rojo es el string que se visualiza en el objeto SELECT y value es el valor asociado a dicho string. estudios[3].Control RADIO Los objetos RADIO tienen sentido cuando disponemos varios elementos. 29 . if (document.Net <br> <input type="button" value="Mostrar" onClick="contarSeleccionados()"> </form> </body> </html> Cuando se presiona el botón se llama a la función JavaScript contarSeleccionados(). if (document.form1.lenguaje1.form1.estudios[0]. Ejemplo: Mostrar cuatro objetos de tipo RADIO que permitan seleccionar los estudios que tiene un usuario: <html> <head> </head> <body> <script language="JavaScript"> function mostrarSeleccionado() { if (document. Sólo uno puede estar seleccionado del conjunto.checked) cant++. Al contador 'cant' lo definimos e inicializamos en cero previo a los cuatro if.JavaScript desde CERO JavaScript <input type="checkbox" name="lenguaje3">JSP <br> <input type="checkbox" name="lenguaje4">VB. En la misma verificamos uno a uno cada control checkbox accediendo a la propiedad checked que almacena true o false según esté o no seleccionado el control.checked) alert('tienes estudios primarios'). } </script> <form name="form1"> <input type="radio" name="estudios" value="sin estudios">Sin estudios <br> <input type="radio" name="estudios">Primarios <br> <input type="radio" name="estudios">Secundarios <br> <input type="radio" name="estudios">Universitarios <br> <input type="button" value="Mostrar" onClick="mostrarSeleccionado()"> </form> </body> </html> .checked) alert('no tienes estudios'). Mostramos finalmente el resultado final.estudios[1].form1. Disponemos un 'if' para cada checkbox: if (document.estudios[2].checked) alert('tienes estudios secundarios').form1.checked) alert('tienes estudios universitarios').form1. if (document. value=''./textarea&gt. mostrar un mensaje de alerta si el mismo está vacío.form1. <br> <input type="button" value="Mostrar" onClick="controlarCaracteres()"> </form> </body> </html> Para saber el largo de la cadena cargada: if (document. Mostrar un mensaje si el curriculum supera los 2000 caracteres.form1. . al abandonar el mismo.textarea name=&quot.form1. <html> <head></head> <body> <script language="JavaScript"> function vaciar(control) { control. rows="10" cols="50" &gt. La marca TEXTAREA en HTML tiene dos propiedades: rows y cols que nos permiten indicar la cantidad de filas y columnas a mostrar en pantalla. salvo que permite el ingreso de muchas líneas de texto.checked) alert('no tienes estudios'). la propiedad checked retorna true o false.Control TEXTAREA Este control es similar al control TEXT.Eventos onFocus y onBlur El evento onFocus se dispara cuando el objeto toma foco y el evento onBlur cuando el objeto pierde el foco.curriculum&quot.length>2000) alert('curriculum muy largo').estudios[0]. else alert('datos correctos'). <html> <head> </head> <body> <script language="JavaScript"> function controlarCaracteres() { if (document. 31 . según esté o no seleccionado el control radio.&lt.curriculum. Cuando el control tome foco borrar el contenido actual. Igual que el checkbox. Ejemplo: Solicitar la carga del mail y el curriculum de una persona.length>2000) accedemos a la propiedad length. Luego podemos acceder a cada elemento por medio de un subíndice: if (document.value.value. 30 . } </script> <form name="form1"> &lt.curriculum. Ejemplo: Implementar un formulario que solicite la carga del nombre y la edad de una persona.JavaScript desde CERO JavaScript Es importante notar que todos los objetos de tipo RADIO tienen el mismo name. 32 . En la función propiamente dicha.bgColor=col. Implementaremos una función que cambie el color con un valor que llegue como parámetro. para el evento onBlur llamamos a la función verificarEntrada donde analizamos si se ha ingresado algún valor dentro del control.html" onMouseOver="pintar('#0000ff')" onMouseOut="pintar('#ffffff')">Azul</a> <br> <br> <br> .JavaScript desde CERO JavaScript } function verificarEntrada(control) { if (control.value=='') alert('Debe ingresar datos'). para el evento onFocus la función vaciar. pasando como parámetro la palabra clave this que significa la dirección del objeto que emitió el evento. } </script> <a href="pagina1.Eventos onMouseOver y onMouseOut El evento onMouseOver se ejecuta cuando pasamos la flecha del mouse sobre un hipervínculo y el evento onMouseOut cuando la flecha abandona el mismo. Para probar estos eventos implementaremos una página que cambie el color de fondo del documento. } </script> <form name="form1"> Ingrese su nombre: <input type="text" name="nombre" onFocus="vaciar(this)" onBlur="verificarEntrada(this)"><br> Ingrese su edad: <input type="text" name="edad" onFocus="vaciar(this)" onBlur="verificarEntrada(this)"><br> <input type="button" value="Confirmar"> </form> </body> </html> A cada control de tipo TEXT le inicializamos los eventos onFocus y onBlur. De forma similar.html" onMouseOver="pintar('#ff0000')" onMouseOut="pintar('#ffffff')">Rojo</a> <a href="pagina1. accedemos a la propiedad value y borramos su contenido. Le indicamos. Cuando retiramos la flecha del mouse volvemos a pintar de blanco el fondo del documento: <html> <head></head> <body> <script language="JavaScript"> function pintar(col) { document. en caso de tener un string vacío procedemos a mostrar una ventana de alerta.html" onMouseOver="pintar('#00ff00')" onMouseOut="pintar('#ffffff')">Verde</a> <a href="pagina1. Uno de los usos más frecuentes es para fijar el foco en algún control de un formulario. } </script> <table border="1"> <tr> <td onMouseOver="pintar(this.'#ff0000')" onMouseOut="pintar(this.JavaScript desde CERO JavaScript <a href="pagina2. para que el operador no tenga que activar con el mouse dicho control. le pasamos como parámetro a la función. Este evento está asociado a la marca body.'#ffffff')">rojo</td> <td onMouseOver="pintar(this.focus().bgColor=col. La página completa es: <html> <head></head> <body onLoad="activarPrimerControl()"> <script language="JavaScript"> function activarPrimerControl() { document.html">ver segundo problema</a> </body> </html> Las llamadas a las funciones las hacemos inicializando las propiedades onMouseOver y onMouseOut: <a href="pagina1. la referencia a la casilla que queremos que se coloree (this): <td onMouseOver="pintar(this.'#ff0000')" onMouseOut="pintar(this. } </script> <form name="form1"> Ingrese su nombre: .col) { objeto. function pintar(col) { document. pero en éste.'#ffffff')">rojo</td> 33 .nombre.'#ffffff')">azul</td> </tr> </table> </body> </html> La lógica es bastante parecida a la del primer problema.html" onMouseOver="pintar('#ff0000')" onMouseOut="pintar('#ffffff')">Rojo</a> La función 'pintar' recibe el color e inicializa la propiedad bgColor del objeto document. } El segundo problema pinta de color el interior de una casilla de una tabla y lo regresa a su color original cuando salimos de la misma: <html> <head></head> <body> <script language="JavaScript"> function pintar(objeto.form1.'#ffffff')">verde</td> <td onMouseOver="pintar(this.bgColor=col.Evento onLoad El evento onLoad se ejecuta cuando cargamos una página en el navegador.'#0000ff')" onMouseOut="pintar(this.'#00ff00')" onMouseOut="pintar(this. } JavaScript 34 . Si queremos tener acceso a ella desde la ventana donde la creamos. la ventana se abrirá con una página en blanco. propiedades) Permite crear (y abrir) una nueva ventana.focus(). window es un objeto global y tiene los siguienes métodos: − alert: Muestra un diálogo de alerta con un mensaje (a esta responsabilidad la hemos utilizado desde los primeros temas) − prompt: Muestra un diálogo para la entrada de un valor de tipo string (utilizado desde el primer momento) − confirm: Muestra un diálogo de confirmación con los botones Confirmar y Cancelar. Podemos especificar el tamaño de la ventana. etc. El parámetro URL es una cadena que contendrá la dirección de la ventana que estamos abriendo: si está en blanco. su contenido. [Variable=][window. nombre.nombre. o valor=prompt("Ingrese valor".""). Ej: valor=window.form1. deberemos asignarle una variable. esto es posible ya que el objeto window es el objeto de máximo nivel.JavaScript desde CERO <input type="text" name="nombre"><br> Ingrese su edad: <input type="text" name="edad"><br> <input type="button" value="Confirmar"> </form> </body> </html> En la marca body inicializamos el evento onLoad con la llamada a la función activarPrimerControl: <body onLoad="activarPrimerControl()"> La función da el foco al control text donde se cargará el nombre: function activarPrimerControl() { document."").]open(URL.prompt("Ingrese valor". sino simplemente invocamos el método: el navegador automáticamente sabrá que pertenece al objeto window. Al objeto window lo hemos estado usando constantemente. − open y close: abre o cierra una ventana del navegador. Las propiedades son una lista. .El objeto window. seguida del método o en forma resumida indicando solamente el nombre del método (como lo hemos estado haciendo). 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 anteponiéndole el nombre del objeto window. Representa la ventana del navegador. ventana.""). else alert("presionó cancelar"). // podemos escribir window. El siguiente programa muestra varios de los métodos disponibles del objeto window: <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function cerrar() { close().height=250. } </SCRIPT> </HEAD> <BODY> Este programa permite analizar la llamada a distintas responsabilidades del objeto window.write("Segunda linea").close().menubar=yes').document.write("Estoy escribiendo en la nueva ventana<br>"). } function abrir() { var ventana=open(). ventana.''.document.write("Esto es lo primero que aparece<br>").<br> <FORM> <input type="button" value="close()" onClick="cerrar()"> <br><br> <input type="button" value="open()" onClick="abrir()"> <br><br> <input type="button" value="open con parámetros" onClick="abrirParametros()" > <br><br> <input type="button" value="alert" onClick="mostrarAlerta()"> <br><br> <input type="button" value="confirm" onClick="confirmar()"> . } function cargarCadena() { var cad=prompt("cargue una cadena:".width=400. } function confirmar() { var respuesta=confirm("Presione alguno de los dos botones").JavaScript desde CERO JavaScript Para reducir la cantidad de caracteres que se tipean normalmente encontraremos los programas tipeados de la segunda forma.document. if (respuesta==true) alert("presionó aceptar"). alert("Usted ingreso "+cad)."). ventana. } function mostrarAlerta() { alert("Esta ventana de alerta ya la utilizamos en otros problemas. } function abrirParametros() { var ventana=open(''.'status=yes. Implementaremos un pequeño ejemplo para ver la utilidad de esta propiedad: Supongamos que tenemos un hipervínculo que al ser presionado muestre una vetana de confirmación. redireccionamos a otra página. el nombre de la función: . en caso contrario mostramos un mensaje: <html> <head> </head> <body> <script language="javascript"> function verificarMayorEdad() { if (window. else window.html'. el navegador redirecciona a dicha página.alert('Cuando sea mayor de edad podrá ingresar'). si queremos ingresar a un sitio para mayores.location='pagina2.JavaScript desde CERO <br><br> <input type="button" value="prompt" onClick="cargarCadena()"> </FORM> </BODY> </HTML> JavaScript 35 . En caso que el visitante presione el botón afirmativo.confirm('Es mayor de edad?')) window.Propiedad location del objeto window El objeto location colabora directamente con el objeto window: Cuando le asignamos una nueva dirección a la propiedad location del objeto window. } </script> <a href="javascript:verificarMayorEdad()">Ingresar al sitio para mayores</a> </body> </html> Lo primero que tenemos que indicar es que para llamar a una función de javascript desde un hipervínculo debemos anteceder la palabra javascript seguida de dos puntos y por último. Llamar a la función back. Luego. Si se presiona el botón confirmar.html">Ir a la página 2</a> <br> <br> <a href="javascript:avanzar()">Extraer del cache la segunda página</a> </body> </html> En esta primera página.alert('Cuando sea mayor de edad podrá ingresar'). else window. tiene el mismo comportamiento que presionar el botón "Atrás" del navegador.history.forward().history. //Avanza a la página siguiente almacenada en la cache de la máquina. . sin tener que pedirlas nuevamente al servidor. debemos cargar la segunda página seleccionando el hipervínculo pagina2.html'. //Avanza o retrocede en la lista de páginas visitadas.JavaScript desde CERO JavaScript <a href="javascript:verificarMayorEdad()"> La función verificarMayorEdad muestra la ventana con los botones confirmar y cancelar (recordar que el método confirm del objeto window hace esto en forma automática). window. la primera vez. //Retrocede a la página anterior window.back(). } </script> </head> <body> <a href="pagina2. </body> </html> 36 .location='pagina2. la función confirm retorna true y por lo tanto se ejecuta el verdadero del if: if (window. Recordar que anteceder la palabra window a estas funciones y propiedades es opcional.confirm('Es mayor de edad?')) window. Cuenta con las siguientes funciones: window.go(). podemos extraer de la memoria de la computadora las páginas ya visitadas. El siguiente ejemplo nos permite cargar una segunda página y luego retroceder a la primera página sin tener que solicitarla nuevamente al servidor: <html> <head> <title>Problema</title> <script language="javascript"> function avanzar() { window.history.Propiedad history del objeto window El objeto history colabora directamente con el objeto window: El objeto history almacena todas las páginas que visitamos. con una serie de funciones.history. Por último la página que se redirecciona es: <html> <head> <title>Problema</title> </head> <body> Bienvenido al sitio para adultos.go(1). mediante el método go y pasándole un valor negativo.availHeight + '<br>'). retrocedemos a la primera página sin tener la necesidad de recargarla.go(-1). 37 .write('width :' + screen.write('height :' + screen.height + '<br>').write('availHeight :' + screen. document.history.go(1). La propiedades principales del objeto screen son: availHeight : El alto de la pantalla en pixeles disponible para el navegador. El siguiente programa muestra el valor almacenado en las cinco propiedades que tiene el objeto screen: <html> <head> <title>Problema</title> </head> <body> <script language="javascript"> document. Podemos mejorar el ejemplo accediendo al atributo length (almacena la cantidad de páginas de la lista) del objeto history: if (window.width + '<br>'). height : El alto de la pantalla en pixeles. availWidth : El ancho de la pantalla en pixeles disponible para el navegador. </script> </body> </html> .Propiedad screen del objeto window El objeto screen colabora directamente con el objeto window: El objeto screen ofrece información acerca del monitor donde se está ejecutando el navegador. document. else alert('no hay otra página en la cache hacia adelante').write('colorDepth :' + screen. document.history. document.availWidth + '<br>'). width : El ancho de la pantalla en pixeles.write('availWidth :' + screen.length>0) window.JavaScript desde CERO JavaScript La segunda página: <html> <head> <title>Problema</title> <script languge="javascript"> function retornar() { window. colorDepth : Representa el número de bits usados para representar los colores.write('Valores de las propiedades del objeto screen:<br>'). document.history.colorDepth). } </script> </head> <body> <a href="javascript:retornar()">Retornar</a> </body> </html> En la segunda página. ) Las propiedades comunes a estos navegadores son: − appName : almacena el nombre oficial del navegador. } function retornarHora() { var fecha fecha=new Date(). Opera.getYear(). Esto trae muchos beneficios: − Reutilización de funciones en muchos archivos. return cadena.getMonth()+1)+'/'+fecha. − cookieEnabled : almacena si las cookies están activas en el navegador.appName + '<br>').write('cookieEnabled :' + navigator. document.plugins. − platform : almacena la plataforma donde el navegador se está ejecutando. No tenemos que copiar y pegar sucesivamente las funciones en las páginas en las que necesitamos.length + '<br>'). pero más tediosa de escribir (recordar que el objeto window es el principal y lo podemos obviar cuando accedemos a sus propiedades o métodos).screen.getDate()+'/'+(fecha.Propiedad navigator del objeto window Contiene información sobre el navegador web. document. </script> </body> </html> 39 .write('plugins :' + navigator. FireFox.Archivo JavaScript externo (*.appVersion + '<br>'). etc.write('appVersion :' + navigator.js y tipear las funciones en la misma: function retornarFecha() { var fecha fecha=new Date().js) El lenguaje JavaScript permite agrupar funciones y disponerlas en un archivo separado a la página HTML. − plugins : almacena un array de los plugin cargados en el navegador. document. − Facilita el mantenimiento de las funciones al encontrarse en archivos separados. La implementación de este objeto varía entre navegadores (IExplorer. document. . por lo que haber dispuesto la sintaxis: window. es la forma más completa.JavaScript desde CERO JavaScript No olvidar que el objeto screen es una propiedad del objeto window. var cadena=fecha. − appVersion : almacena la versión del navegador.cookieEnabled + '<br>').write('Valores de las propiedades del objeto navigator:<br>').write('appName :' + navigator. 38 . La mecánica para implementar estos archivos externos en JavaScript es: 1 . − Nos obliga a ser más ordenados. Este pequeño programa muestra los valores de las propiedades antes anunciadas: <html> <head> <title>Problema</title> </head> <body> <script language="javascript"> document.width etc.Crear un archivo con extensión *. es decir la herencia. Finalmente nos permite definir objetos de estas clases. </script> </body> </html> Es decir debemos disponer el siguiente código para importar el archivo *. en nuestro ejemplo llamamos a las funciones retornarFecha() y retornarHora(). return cadena. Pero el otro pilar de la programación orientada a objetos.getHours()+':'+fecha. 40 .saldo+dinero.js"></script> </head> <body> <script language="javascript"> document. Desarrollaremos una clase que represente un cliente de un banco.Creamos un archivo html que utilizará las funciones contenidas en el archivo *.Programación orientada a objetos en JavaScript. Luego.js' que contiene la clase cliente con sus métodos (funciones) y sus atributos (variables): function cliente(nombre. a las funciones que contiene el archivo externo *.saldo=this. La clase cliente tiene como atributos: nombre saldo y las responsabilidades o métodos de la clase son: Constructor (inicializamos los atributos del objeto) depositar extraer Para acostumbrarnos a trabajar en un archivo separado.write('La fecha de hoy es:'+retornarFecha()).js: <html> <head> <title>Problema</title> <script language="javascript" type="text/javascript" src="pagina2. El lenguaje JavaScript no es un lenguaje orientado a objetos completo.extraer=extraer.js"></script> Mediante la propiedad src indicamos el nombre del archivo a importar. document.write('La hora es:'+retornarHora()). Veremos la sintaxis para la declaración de una clase y la posterior definición de objetos de la misma.nombre=nombre. podemos llamar dentro de la página HTML.js: <script language="javascript" type="text/javascript" src="pagina2.getSeconds(). implementamos 'pagina2. } 2 . no está implementada en el lenguaje. } function depositar(dinero) { this.depositar=depositar.js.getMinutes()+':'+fecha. } .write('<br>').saldo=saldo.JavaScript desde CERO JavaScript var cadena=fecha.saldo) { this. this. document. this. Como podemos ver. this. el archivo html queda mucho más limpio. pero permite definir clases con sus atributos y responsabilidades. saldo=this.JavaScript desde CERO JavaScript function extraer(dinero) { this.saldo) { this. this. Con la palabra clave 'this' diferenciamos los atributos de los parámetros (los atributos deben llevar la palabra clave this) this.nombre+'<br>'). cliente1. this.saldo+'<br>'). implementamos todos los métodos de la clase: function depositar(dinero) { this. document.saldo=this. </script> </body> </html> . } function extraer(dinero) { this. Por último.saldo+dinero.extraer=extraer.js" type="text/javascript"> </script> </head> <body> <script language="javascript"> var cliente1.saldo-dinero.saldo-dinero.saldo=saldo.nombre=nombre.extraer=extraer.depositar(120). this. this. } El nombre de la clase coincide con el nombre de la función principal que implementamos (también llamado constructor de la clase): function cliente(nombre. } De nuevo recordemos que diferenciamos los atributos de la clase por la palabra clave this. this.1200). cliente1.write('Saldo actual:'+cliente1. document.depositar=depositar. } A esta función llegan como parámetro los valores con que queremos inicializar los atributos.saldo+'<br>').extraer(1000). document.nombre=nombre. document.depositar=depositar. cliente1=new cliente('diego'.write('Nombre del cliente:'+cliente1. También en el constructor inicializamos la referencia a todos los métodos que contendrá la clase: this.saldo=this.write('Saldo luego de depositar $120---->'+cliente1. Ahora veamos el archivo HTML que incorpora el archivo JS y define un objeto de la clase planteada: <html> <head> <title>Problema</title> <script language="javascript" src="pagina2.write('Saldo luego de extraer $1000---->'+cliente1.saldo+'<br>').saldo=saldo. nombre+'<br>'). else return false. entendibles y fundamentalmente.write('Saldo luego de depositar $120---->'+cliente1.extraer(1000).numero=-1. 41 . this. cliente1. document. según lo visto en conceptos anteriores.numero==num) return true.Definición de varias clases. De ahí en más podemos acceder a los atributos y llamar a los métodos del objeto cliente1 de la clase cliente: document.1200).cargarnumero=cargarnumero.js" type="text/javascript"> Luego. } function verificarsigano(num) { if (this. document. la sintaxis para la creación de un objeto de la clase cliente es: var cliente1.write('Nombre del cliente:'+cliente1. Plantearemos una clase numeroquiniela que representa una persona que elige un número de quiniela y además registra su nombre. } function sortear() .write('Saldo luego de extraer $1000---->'+cliente1. cliente1=new cliente('diego'. document. es importar el archivo *. Por otra parte crearemos una clase bolillero que sortee un valor aleatorio entre 0 y 9 (que representa el valor extraido del bolillero).depositar(120).JavaScript desde CERO JavaScript Recordemos que lo primero que hacemos. } //clase bolillero ************************************************ function bolillero() { this. El constructor retorna una referencia del objeto que se almacena en la variable cliente1. La codificación de las dos clases es: //clase numeroquiniela ************************************************ function numeroquiniela(nombre) { this. Vamos a desarrollar un programa que contenga dos clases. Podemos decir que la ventaja que podemos obtener con el planteo de clases es hacer nuestros programas mucho más organizados. la clase tiene por objetivo la carga por el teclado del número deseado.nombre=nombre. cliente1. En JavaScript podemos definir varias clases en un mismo archivo *.numero=prompt("Que número de quiniela quiere?".saldo+'<br>'). } function cargarnumero() { this.write('Saldo actual:'+cliente1.js.saldo+'<br>').""). Con el operador new se crea un objeto de la clase cliente y se llama inmediatamente el constructor de la clase.saldo+'<br>').js: <script language="javascript" src="pagina2. Similar a conceptos anteriores cuando definiamos objetos de la clase Date o Array. poder reutilizar clases en distintos proyectos. write(numeroquiniela1. numeroquiniela2=new numeroquiniela("ana"). if (numeroquiniela1. numeroquiniela1=new numeroquiniela("juan"). if (numeroquiniela2.cargarnumero().numero==bolillero.direccion=direccion.numero=Math. Desarrollaremos una clase que represente un hipervínculo y luego definiremos un vector con componentes de tipo hipervinculo. Al número que selecciona lo cargamos por teclado.retornarhipervinculo=retornarhipervinculo.numero + '<br>').js" type="text/javascript"> </script> </head> <body> <script language="javascript"> var numeroquiniela1. Podemos crear vectores con componente de tipo objeto.numero +'<br>').titulo=titulo. numeroquiniela2. var bolillero. var numeroquiniela2.nombre + ' a ganado <br>').write(numeroquiniela1.sortear(). this. } function retornarhipervinculo() { .numero) document. Por otro lado en la página html definimos dos objetos de la clase numeroquiniela y uno de la clase bolillero: <html> <head> <title>Problema</title> <script language="javascript" src="pagina2.nombre + ' eligió ' + numeroquiniela1.write(numeroquiniela2.numero +'<br>').Vectores con componentes de tipo objeto. this.numero==bolillero. Con un ejemplo veremos la sintaxis para trabajar con los mismos. bolillero=new bolillero().JavaScript desde CERO JavaScript { this. bolillero. document. } Al constructor de la clase numeroquiniela llega como parámetro el nombre de la persona que la compra (podíamos cargarlo por teclado al nombre también).nombre + ' eligió ' + numeroquiniela2.cargarnumero(). que es avisarnos si a ganado según el número sorteado.write(numeroquiniela2. numeroquiniela1. document.random()*11.numero) document.titulo) { this. </script> </body> </html> 42 .write('Numero sorteado:' + bolillero. La clase hipervínculo es: function hipervinculo(direccion. La clase numeroquiniela además tiene otra responsabilidad. document.nombre + ' a ganado <br>'). 'google').write('<br>'). vector[1]=new hipervinculo('http://www. vector[0]=new hipervinculo('http://www. Luego recorremos con un 'for' las componentes del vector e imprimimos en la página cada hipervínculo.JavaScript desde CERO JavaScript var cadena.com'. vector[2]=new hipervinculo('http://www.titulo + '</a>'.'yahoo'). } Luego el archivo html que hace uso de la clase hipervínculo es: <html> <head> <title>Problema</title> <script language="javascript" src="pagina2. cadena='<a href=' + this.yahoo. } </script> </body> </html> Creamos un objeto de la clase Array y luego guardamos en cada componente un objeto de la clase hipervínculo (pasándole como parámetros al constructor.js" type="text/javascript"></script> </head> <body> <script language="javascript"> var vector=new Array().google.write(vector[f].retornarhipervinculo()).com'. document. for(f=0.f<vector.msn. la dirección del sitio y el texto a mostrar en la página.f++) { document.direccion + '>' + this.length. return cadena.com'. .'msn').
Copyright © 2024 DOKUMEN.SITE Inc.