Javascript es un lenguaje interpretado basado en prototipos que no requiere de compilación ya que el lenguaje funciona del lado del cliente, los encargados de interpretar el código serán los navegadores.
La ventaja de Javascript, es que puede ser insertado en cualquier página web y para visualizarlo no necesita la instalaciín de otros programas. Podemos crear diferentes efectos e interactuar con los usuarios.
Cuando programamos en javascript, generalmente nos centramos en describir objetos, escribir funciones que respondan a deiferentes eventos como: movimientos del mouse, aperturas de páginas, intervención de teclas, cargas de páginas, relojes, contadores, calendarios, etc.
Resumiendo, se utiliza principalmente en su forma del lado del cliente (client-side), implementado como parte de un navegador web permitiendo mejoras en la interfaz de usuario y páginas web dinámicas, en bases de datos locales a navegadores.
Diciembre de 1995, JavaScript fue desarrollado originalmente por Brendan Eich de Netscape con el nombre de Mocha, el cuál fue renombrado posteriormente a LiveScript, para finalmente quedar como JavaScript.
SubirCuando un navegador no soporta JavaScript se mostrará el contenido de la etiqueta <script> como parte del documento HTML. Para evitar que esto ocurra utilizaremos el standard JavaScript (etiqueta de comentario HTML ('< !-- código javascript //-->') para ocultar al usuario nuestro código JavaScript.
Etiqueta para ocultar código JavaScript < !-- //-->
Colocamos < !-- antes de la primera instrucción de JavaScript y cerramos el comentario de esta manera //--> ya que las barras inclinadas // nos servirán para que la operación no se lleve a cabo.
// Ocultar código < !-- //--> <script type=text/javascript> <!-- ..................... código JavaScript ..................... //--> </script>
Etiqueta <noscript>
Esta etiqueta <noscript> proporciona un contenido alternativo para usuarios con navegadores que no soportan el este lenguaje o que tienen deshabilitada la ejecución de scripts.
Esta etiqueta <noscript> puede contener en su interior cualquiera de los elementos que podrían encontrarse entre la etiqueta <body> de un documento JavaScript. El contenido entre las etiquetas <noscript> y </noscript> se mostrará en el caso de que los scripts no sean soportados por el navegador o por tener deshabilitada la ejecución de scripts en su navegador.
// Mostrar mensaje cuando JavaScript este desactivado en nuestro navegador Etiqueta </noscript> <body> ....................... <noscript> Su navegador no soporta JavaScript, o bien, no lo activó en su navegador. </noscript> ....................... </body> // Prueba a desactivar Java en tu navegador: Camino orientativo para los diferentes navegadores: Firefox – Complementos - Plugins - desactivar el complemento Java(TM) Platform. Chrome - Herramientas - Extensiones - Configuración - Escribir JavaScript en el buscador - Configuración del contenido - desmarcar la casilla Permitir que todos los sitios ejecuten JavaScript. Internet Explorer - clicar el icono de engranaje (parte superior derecha) - administrar complementos - en la nueva ventana, a la izquierda, en Tipos de complementos - Mostrar - clicar en Todos los complementos - marcar todos los complementos que tengan el nombre Java(tm) - botón de desactivar. Opera - Pulsar el icono de Opera (parte superior derecha) - seleccionar Configuración o pulsar teclas de acceso rápido (Ctrl + F12), para Configuración - clicar en Sitios web - desmarcar casilla Permitir que los sitios ejecuten JavaScript. Safari - Pulsar icono de engranage - Preferencias - Seguridad - Desmarcar casilla de Permitir JavaScript.Subir
Una variable es un espacio en la memoria donde almacenamos temporalmente un dato que utilizaremos cuando sea necesario. var = nombre;.
Insertar una variable en la página
// Insertar una variable mediante "onclick" // ----------------- JavaScript ------------------ <script type="text/javascript"> function insertarVariable() { // Declaración explícita var var_1; // Cuando declaramos una variable // Declaración implícita var_1 = 'Hola, soy '; // Cuando la variable ya ha sido declarada // y va acompañada de un valor // Variable declarada explícitamente var nombre = 'Quim'; // Variable explícita con inicialización var usuario = (var_1 + ' ' + nombre + '.'); // Creo el nodo 'p'. var parrafo = document.createElement('p'); // Añado el contenido del nodo 'texto'. parrafo.appendChild(document.createTextNode('Párrafo añadido: ' + usuario)); /* [1] = colocará el nodo después del primer párrafo */ var pongoAqui = document.getElementById('añadirP').getElementsByTagName('p')[1]; var accion = document.getElementById('añadirP').insertBefore(parrafo, pongoAqui); // parrafo => Inserta el nodo 'p' y el contenido de 'variable párrafo', // pongoAqui => dentro del nodo con ID 'añadirP' y después del primer párrafo, [1]. } </script> // ----------------- HTML ------------------ <form> <input value='Insertar Variable' onclick='insertarVariable();' type='button'> </input> </form> <!-- ESPACIO RESERVADO PARA LA VARIABLE AÑADIDA --> <p id='añadirP '> </p><!--añadirP-->
Prueba, insertar variable en página:
Ámbito de una variable:
El ámbito de una variable (llamado "scope" en inglés) es la zona del programa en la que se define la variable. JavaScript define dos ámbitos para las variables: global y local.
Ámbito Local:
// LOCAL // Ámbito Local o Pribada: Solamente está definida dentro de la función. <script type="text/javascript"> function creaMensaje() { var mensaje = "Mensaje de prueba"; // Definición de la variable alert(mensaje ); } // Llamada a la función creaMensaje(); </script> // ----------------- HTML ------------------ <form> <input value='Variable Local' onclick='creaMensaje();' type='button'> </input> </form>
Si la variable está definida dentro de la función, y fuera de esta, queremos sacar un mensaje de alerta, no se ejecuta nada, ya que ha de estar dentro de la función.
// LOCAL // ----------------- JavaScript ------------------ <script type="text/javascript"> function creaMensajeFuera() { var mensaje = 'Mensaje de prueba'; // Definición de la variable } // Llamada a la función creaMensajeFuera(); // Insertamos el resultado dentro del párrafo con ID demoLocal document.getElementById('demoLocal').innerHTML = mensaje; /* Llama a mensaje que está dentro de la función 'LOCAL' por lo tanto no aparece nada en pantalla */ </script> // ----------------- HTML ------------------ <form> <input value='Variable Local' onclick='creaMensajeFuera();' type='button'> </input> </form>
Prueba, variable local:
Ámbito Global:
Las variables globales están disponibles en cualquier punto del programa (incluso dentro de cualquier función).
// GLOBAL // ----------------- JavaScript ------------------ <script type="text/javascript"> var mensaje = 'Mensaje de prueba'; // Definición de la variable function muestraMensaje() { // Insertamos el resultado dentro del párrafo con ID demoGlobal, definida fuera de la función document.getElementById('demoGlobal').innerHTML = mensaje; } </script> // ----------------- HTML ------------------ <form> <input value='Variable Global' onclick='muestraMensaje();' type='button'> </input> </form>
Prueba, variable global:
Sacar variables, ejemplo:
// Sacar variables // ----------------- JavaScript ------------------ <script type="text/javascript"> function variables(){ var miEdad; edad = '+ 30 años'; var nombre = 'Quim de '; var usuario = (nombre + edad); var parrafo = ('Aquí estoy¡'); // Insertamos el resultado dentro del párrafo con ID demoSacaVar document.getElementById('demoScaVar').innerHTML = 'Hola soy' + usuario + '<br />' + parrafo; } </script> // ----------------- HTML ------------------ <form> <input value='Variables' onclick='variables();' type='button'> </input> </form>
Prueba, sacar variables:
Sacar el área de un círculo, ejemplo:
// Sacar el área de un círculo // ----------------- JavaScript ------------------ <script type="text/javascript"> function areaCirculo(radio){ var pi = Math.PI; // Rádio dado por defecto en el parámetro de la función ==> 6 radio = radio * radio; // Insertamos el resultado dentro del párrafo con ID demoAreaCir document.getElementById('demoAreaCir').innerHTML = ' pi * radio; // Resultado 113.09733552923255 ; } </script> // ----------------- HTML ------------------ <form> <input value='Área de un círculo' onclick='areaCirculo(6);' type='button'> </input> </form>
Prueba, Sacar el área de un círculo:
Averiguar la raiz cuadrada, ejemplo:
// Raiz cuadrada // ----------------- HTML ------------------ <form name='formaraiz'> <input name='numero' type='text'> </input> <input value='Calcular raiz cuadrada' onclick='raizcuadrada()' type='button'> </input> </form> <form name='formaraiz1'> <label for='numero1'>La raiz cuadrada es :</label> <input title='Resultado' name='numero1' type='text'> </input> </form> // ----------------- JavaScript ------------------ <script type="text/javascript"> // Función function raizcuadrada(){ // Indico que aplique en el formulario con nombre, (name) formaraiz1, dentro del campo // con nombre, (name) numero1, la función Math.sqrt que se encarga de calcular // la raiz cuadrada del valor insertado en el formulario con nombre, (name) formaraiz // en su campo con nombre, (name) numero. document.formaraiz1.numero1.value = Math.sqrt(document.formaraiz.numero.value); } </script>
Prueba, raiz cuadrada:
Una constante es un dato cuyo valor NO puede ser modificado después de haver sido inicializado.
const = nombre;.
Las constantes también se pueden escribir en mayúsculas y separar las palabras mediante un guión bajo.
var VALOR_CONSTANTE = 256;.
Sacar Constantes
// Sacar Constantes // ----------------- JavaScript ------------------ <script type="text/javascript"> function constante(radio){ // Rádio dado por defecto en el parámetro de la función ==> 10 const pi = Math.PI; radio = radio * radio; // Insertamos el resultado dentro del párrafo con ID demoCons document.getElementById('demoCons').innerHTML = ' pi * radio; // Resultado 314.1592653589793 ; } </script> // ----------------- HTML ------------------ // Sacar área de un círculo <form> <input value='Constante' onclick='constante(10);' type='button'> </input> </form>
Prueba, Sacar Constantes:
Cuando tenemos dos variables declaradas con el mismo nombre, una local (dentro de la función) y la otra global (fuera de cualquier función), tendrá preferencia la local si se va ha usar dentro de esa misma función
// Prioridad de las variables // ----------------- JavaScript ------------------ <script type="text/javascript"> // Declaración de variable GLOBAL var num = 3; function numero(){ // Declaramos variable LOCAL var num = 7; return num; } // Utilizamos las variables con el mismo nombre alert(num + '\n' + numero() + '\n' + num); // La variable global tiene preferencia </script> // ----------------- HTML ------------------ // Prioridad de las variables <form> <input value='Prioridad variables' onclick='numero();' type='button'> </input> </form>
Prueba, prioridad de las variables:
No pasaría lo mismo si no declarásemos la variable local dentro de la función con la palabra reservada VAR, si es así, sí modificará la variable local.
// Declaración de variable GLOBAL // ----------------- JavaScript ------------------ var num2 = 3; function sinVariable(){ // Función sin variable LOCAL // Utilizamos la variable GLOBAL 'num2' num2 = 7; // Cambiamos el valor return num2; } // 'num' a adobtado el valor que se le a dado dentro de la función alert(num2 + '\n' + sinVariable() + '\n' + num2); // ----------------- HTML ------------------ // Declaración de variable GLOBAL <form> <input value='Función sin variables' onclick='sinVariable();' type='button'> </input> // Al volver a pulsar el botón veremos que la variable LOCAL a cojido el valor, "7" que se le ha dado dentro de la función. </form>
Prueba, Declaración de variable GLOBAL:
Al volver a pulsar el botón veremos que la variable LOCAL a cojido el valor, "7" que se le ha dado dentro de la función.Los operadores nos permiten realizar cálculos y acciones sobre las variables o datos de nuestro código retornando diferentes tipos de valor como resultado de una operación.
Tipos de operadores
+ ----> Suma - ----> Resta * ----> Multiplicación / ----> División % ---> Módulo ++ --> Incremento – ----> Decremento - ----> Negación (unario)
// Operadores de cálculo // ----------------- JavaScript ------------------ function suma(){ var suma_1 = 3; // (=) Operador de asignación var suma_2 = 5; var rslt = suma_1 + suma_2; // Insertamos el resultado dentro del párrafo con ID demoArit document.getElementById('demoArit').innerHTML = suma_1 + suma_2 + ' = ' + rslt; } // ----------------- HTML ------------------ <form> <input value='Aritmético' onclick='suma();' type='button'> </input> </form>
Prueba, operadores de cálculo:
// Incremento // ----------------- HTML ------------------ function increDecre(){ var num_1 =3; var num_2 =3; // Pre-incremento alert(++num_1); // Post-incremento alert(num_2++); } // ----------------- HTML ------------------ <form> <input value='Incremento' onclick='increDecre();' type='button'> </input> </form>
Prueba, incremento:
var a += 4; es igual que escribir: a = a + 4;
// Operadores aritméticos
// ABREVIADOS // ESTANDAR
var a +=4; => a = a + 4;
var b -=4; => b = b + 4;
var c *=4; => c = c + 4;
var d /=4; => d = d + 4;
var e %=4; => e = e + 4;
// Variable como operando // ----------------- JavaScript ------------------ function aritmetico(){ var a = 4; var b = 6; a += b; // a = a + b igual... // Insertamos el resultado dentro del párrafo con ID demoAritAbre document.getElementById('demoAritAbre').innerHTML = a; } // ----------------- HTML ------------------ <form> <input value='Abreviados' onclick='aritmetico();' type='button'> </input> </form>
Prueba, Variables como operando:
// ----------------- JavaScript ------------------ function sobreCadenas(){ var a = 'corre'; var b = 'caminos'; // Concatenamos las cadenas con el operador '+'. var rslt = a + b; // Insertamos el resultado dentro del párrafo con ID demoSobreCad document.getElementById('demoSobreCad').innerHTML = rslt; // El resultado es: correcaminos. } // ----------------- HTML ------------------ <form> <input value='Concatenar cadenas' onclick='sobreCadenas();' type='button'> </input> </form>El signo más (+) entre dos cadenas lo que hace es concatenarlas, (unirlas) como una sola.
Prueba, operador sobre cadenas (+):
var a = 4; var b = 5; var rslt = a != b; // Aquí preguntamos si son distintos, resultado true var rslt_2 = a == b; // Aquí preguntamos si son iguales , resultado false
var a = 7; var b = 7; // El resultado de rslt es true, mismo valor y los dos son de tipo numérico. var rslt = a === b; // El resultado de rslt_2 es false, ya que no son de distinto valor ni tipo. var rslt_2 = a !== b;
// Operadores condicionales o de comparación // ----------------- JavaScript ------------------ function comparacion(){ var x = 5; var r = 5; var rslt = x == r; // true var rslt_2 = x != r; // false var rslt_3 = x !== r; // false alert('Valor ' + x + ' es igual que ' + r + rslt); alert('Valor ' + x + ' es diferente que ' + r + rslt_2); alert('Valor y tipo ' + x + ' son diferentes que ' + r + rslt_3); } // ----------------- HTML ------------------ <form> <input value='Condicionales' onclick='comparacion();' type='button'> </input> </form>
Prueba, Operadores condicionales o de comparación:
var x = 2; var y = 4; // El resultado de rslt es false ya que el valor de x es menor que el de y. var rslt = x > y; // El resultado de rslt_2 es true ya que x es mayor que y. var rslt_2 = x < y;
// Operador Mayor/Menor // ----------------- JavaScript ------------------ function mayorMenor(){ var a = 'hola'; var b = 'Hola'; var c = 10; var d = 10; var rslt = a > b; // true var rslt_2 = a < b; // false var rslt_3 = c <= d; // true alert('El valor: ' + a + ' es mayor que ' + b + rslt); alert('El valor: ' + a + ' es menor que ' + b + rslt_2); alert('El valor: ' + c + ' es menor o igual que ' + d + rslt_3); } // ----------------- HTML ------------------ <form> <input value='Mayor/Menor' onclick='mayorMenor();' type='button'> </input> </form>
Prueba, Operador Mayor/Menor:
101111012 = (1 . 27) + (0 . 26) + (1 . 25) + (1 . 24) + (1 . 23) +
(1 . 22) + (0 . 21) + (1 . 20)
= (128) + (0) + (32) + (16) + (8) + (4) + (0) + (1)
= 18910
El valor hexadecimal 0x7777 se representa como número binario: 0111011101110111 La negación en modo bit del valor hexadecimal, ~0x7777, seria: 1000100010001000 El valor hexadecimal correspondiente es 0x8888. Por lo tanto, ~0x7777 es 0x8888.
// Operador NOT ~ (birgulilla) // ----------------- JavaScript ------------------ function notBirgulilla(){ var uno = 255; // 11111111 var dos = 9; // 00001001 var extracion = ~dos; alert(extracion); // Retorna -10 (cuenta del 9 al 0) uno &= extraccion; alert(uno); // Retorna 246 (descuenta 9 a 255) } // ----------------- HTML ------------------ <form> <input value='NOT' onclick='notBirgulilla();' type='button'> </input> </form>
Prueba, Operador NOT ~:
0 _________________ 0 _______________ 0 1 _________________ 0 _______________ 0 0 _________________ 1 _______________ 0 1 _________________ 1 _______________ 1 15 & 9 ---> (1111 & 1001 = 1001) resultado = 9La operación se hace bit a bit y el resultado de cada operación individual se guarda en la misma posición.
// Operador AND & // ----------------- JavaScript ------------------ function and(){ var une = 109; var deux = 38; var trois; trois = une & deux; // trois contiene 36 alert('Resultado de ' + une + ' AND ' + deux + ':\n\n\t' + trois + '\n\n 0 1 1 0 1 1 0 1 (109) ' + '\n\n 0 0 1 0 0 1 1 0 (38) ---> AND ' + '\n\n ---------------------------' + '\n\n 0 0 1 0 0 1 0 0 (36)'); } // ----------------- HTML ------------------ <form> <input value='AND' onclick='and();' type='button'> </input> </form>
Prueba, Operador AND &:
0 _________________ 0 _______________ 0 1 _________________ 0 _______________ 1 0 _________________ 1 _______________ 1 1 _________________ 1 _______________ 1 15 | 9 ---> (1111 | 1001 = 1111) resultado = 15
// Operador OR | // ----------------- JavaScript ------------------ function or(){ var one = 58; var two = 82; var three = one | two; // three contiene 122 alert('Resultado de ' + one + ' OR ' + two + ':\n\n\t' + three + '\n\n 0 0 1 1 1 0 1 0 (58)' + '\n\n 0 1 0 1 0 0 1 0 (82) ---> OR' + '\n\n ----------------------------' + '\n\n 0 1 1 1 1 0 1 0 (122)'); } // ----------------- HTML ------------------ <form> <input value='OR' onclick='or();' type='button'> </input> </form>
Prueba, Operador OR |:
0 _________________ 0 _______________ 0 1 _________________ 0 _______________ 1 0 _________________ 1 _______________ 1 1 _________________ 1 _______________ 0 15 ^ 9 ---> (1111 ^ 1001 = 0110) resultado = 6
// Operador XOR // ----------------- JavaScript ------------------ function xor(){ var uno = 58; var dos = 82; var tres; tres = uno | dos; // tres contiene 122 // 0 0 1 1 1 0 1 0 (58) //OR 0 1 0 1 0 0 1 0 (82) // ------------------------ // 0 1 1 1 1 0 1 0 (122) alert('Resultado de ' + uno + ' XOR ' + dos + ':\n\n\t' + tres + '\n\n 0 0 1 1 1 0 1 0 (58)' + '\n\n 0 1 0 1 0 0 1 0 (82) ---> OR' + '\n\n -----------------------------' + '\n\n 0 1 1 1 1 0 1 0 (122)'); } // ----------------- HTML ------------------ <form> <input value='XOR' onclick='xor();' type='button'> </input> </form>
Prueba, Operador XOR ^:
// Operador de desplazamiento a Izquierda // ----------------- JavaScript ------------------ function desplazaIzquierda(){ var num = 11; // Desplazamiento izquierda alert(num << 2); num = -11; // Asignamos valor // Desplazamiento izquierda alert(num << 2); } // ----------------- HTML ------------------ <form> <input value='Desplazamiento' onclick='desplazaIzquierda();' type='button'> </input> </form>
Prueba, Operador de desplazamiento a Izquierda:
// Operadores sobre bits abreviados: var z & = 8; --------------> var z = z & 8; var z | = 8; ---------------> var z = z | 8; var z ^ = 8; --------------> var z = z ^ 8; var z << = 5; ------------> var z = z << 5; var z >> = 8; ------------> var z = z >> 5; var z <<< = 8; ----------> var z = z <<< 5;
// Operador condicional (?) // ----------------- JavaScript ------------------ function condicional(){ var tiempo = new Date(); var decir = 'Buen' + ((tiempo.getHours() > 17) ? 'as tardes.' : 'os días.'); // Si mayor de 17 horas: condición 1, sino condición 2. alert(decir); } // ----------------- HTML ------------------ <form> <input value='Operador condicional' onclick='condicional();' type='button'> </input> </form>
Prueba, Operador condicional (?):
for (var i=0, j=9; i <= 9; i++, j--) document.writeln('a['+i+']['+j+']= ' + a[i][j])
// Operador coma (,) // ----------------- JavaScript ------------------ function coma(){ var k = 0, i, j = 0; for (i = 0; i < 7; i++, j++) // Se repite 7 veces el alert { /* 'j' es 1, 'i' es 1, trás el incremento */ k = i + j; // 'i' suma 1 a 'j' en cada vuelta alert('( j ) ahora vale:\n\n\t' + k); // 'k' cuenta de 2 en 2. } } // ----------------- HTML ------------------ <form> <input value='Operador coma' onclick='coma();' type='button'> </input> </form>
Prueba, Operador coma (,):
// Operador void (vacio) // ----------------- JavaScript ------------------ function vacio(){ var suma; suma = void(2 + 4); // Valor vacio alert('Con VOID: ' + suma); // Sin operador 'void' suma = (2 + 4); // Valor 6 alert('Sin VOID: ' + suma); } // ----------------- HTML ------------------ <form> <input value='Operador void' onclick='vacio();' type='button'> </input> </form>
Prueba, Operador void (vacio):
// Operador typeof var mes = Julio; var tipo = typeof(mes); alert(tipo); // Es de tipo string
// Operador typeof (de tipo) // ----------------- JavaScript ------------------ function tipo(){ var boleano = true; var numerico = 22; var numerico_flotante = 13.56; var texto = 'mi texto'; var fecha = new Date(); alert('El tipo de boleano es:\n\n\t' + typeof boleano); alert('El tipo de numerico es:\n\n\t' + typeof numerico); alert('El tipo de numerico_flotante es:\n\n\t' + typeof numerico_flotante); alert('El tipo de texto es:\n\n\t' + typeof texto); alert('El tipo de fecha es:\n\n\t' + typeof fecha) ; } // ----------------- HTML ------------------ <form> <input value='Operador typeof' onclick='tipo();' type='button'> </input> </form>
Prueba, Operador typeof (de tipo):
Operador | Descripción |
---|---|
. [ ] ( ) | Acceso a campos, índice de matrices y llamada a funciones. |
++ -- - ~ ! | Incremento +1, decremento -1, negativo, NOT, NOT lógico |
delete new typeof void | Borrado, crear objeto, mostrar tipo, indefinido |
* / % | Multiplicación, división, módulo de división (resto) |
+ - + | Suma, resta, concatenación de cadenas |
<< >> >>> | Bit shifting (desplazamiento) |
< <= > >= | menor que, menor que o igual, mayor que, mayor que o igual |
== != === !== | Igualdad, desigualdad, identidad, no identidad |
& | AND |
^ | XOR |
| | OR |
&& | AND lógico |
|| | OR lógico> |
?: | Condicional |
= | Asignación |
, | Evaluación múltiple |
( ) [ ] . | Paréntesis, corchetes y el operador punto que sirve para los objetos |
---|---|
! - ++ -- | negación, negativo e incrementos |
* / % | Multiplicación división y módulo |
+- | Suma y resta |
<< >> >>> | Cambios a nivel de bit |
< <= > >= | Operadores condicionales |
== != | Operadores condicionales de igualdad y desigualdad |
& ^ | | Lógicos a nivel de bit |
&& || | Lógicos boleanos |
= += -= *= /= %= <<= >>= >>>= &= ^= != | Asignación |
// delete Nombreobjeto delete Nombreobjeto.propiedad delete Nombreobjeto[índice] delete propiedad // legal únicamente dentro de una sentencia withUsaremos el operador delete para eliminar variables implícitamente declaradas pero no para las declaradas con la sentencia var.
// Operador delete // ----------------- JavaScript ------------------ /* ---- borrar un elemento de un Array ---- */ function borrar(){ var colores; colores = new Array('rojo', ' amarillo', ' verde', ' negro', ' blanco'); // Insertamos el resultado dentro del párrafo con ID demoDel document.getElementById('demoDel').innerHTML = colores; delete colores[2]; // Elimina el 2º índice del array, (verde) // Insertamos el resultado dentro del párrafo con ID demoDel_2 document.getElementById('demoDel_2').innerHTML = colores; } // ----------------- HTML ------------------ <form> <input value='Operador delete' onclick='borrar();' type='button'> </input> </form>
Prueba, Operador delete:
// Operador instanceof // ----------------- JavaScript ------------------ function instanciaDe(){ dia = new Date(2011, 02, 28); // instanceof determina si dia es un objeto Date if (dia instanceof Date) { // Insertar resultado en párrafo con ID 'demoInst' document.getElementById('demoInst').innerHTML = 'Instancia ==> ' + Date; } } // ----------------- HTML ------------------ <form> <input value='Operador instanceof' onclick='instanciaDe();' type='button'> </input> </form>
Prueba, Operador instanceof:
// Operador new miobjeto = new Object(); // Lo que equivale a hacer: miobjeto = {};
// Operador new (nuevo) // ----------------- JavaScript ------------------ function nuevo(){ // El operador 'new' crea un nuevo objeto de fecha y hora completa var fecha = new Date(); // Insertar resultado en párrafo con ID 'demoNew' document.getElementById('demoNew').innerHTML = fecha; /* El resultado que obtenemos es algo desordenado */ } // ----------------- HTML ------------------ <form> <input value='Operador new' onclick='nuevo();' type='button'> </input> </form>
Prueba, Operador new (nuevo):
// Operador this // ----------------- HTML ------------------ Nº entre el 10 y 50: <form> // Muestra si el nº introducido de este campo es válido: <input name='edad' size='3' onchange='valida(this, 10, 50)' type='text'> </input> </form> <form name='miFormulario'> // Muestra el nombre de este formulario: <input placeholder='Nombre del formulario' name='texto1' value='' type='text'> </input> <input id='btn' name='boton' value='Muéstame el nombre del formulario' title='Muestra el "name" del formulario' onclick='this.form.texto1.value=this.form.name' type='button'> // Lo que hace this es indicar que dentro de este mismo formulario en el campo con nombre texto1, se imprima el nombre de este mismo formulario. </input> </form> // ----------------- JavaScript ------------------ // Función con paso de parámetros // Los parámetros se corresponden con los pasados en el input function valida(objeto, valmin, valmax){ if ((objeto.value < valmin) || (objeto.value > valmax)) { alert('\t' + objeto.value + '\n\n es inválido!'); } else { alert('\t\t\t' + objeto.value + '\n\n Está dentro de los parámetros!'); } }
// Arrays arboles = new Array('cipres','pino','roble','eucalipto','yucatan') 0 in arboles; // devuelve true 3 in arboles; // devuelve true 6 in arboles; // devuelve false 'pino' in árboles; // devuelve false (se debe especificar el índice, // no el valor alojado en el índice) 'length' in arboles; // devuelve true (length es una propiedad de la clase Array) // Objetos predefinidos 'PI' in Math; // devuelve true miCadena = new String('coral'); 'length' in miCadena; // devuelve true // Objetos del usuario micarro = {fabricante:'Honda',modelo:'Accord',año:1998} 'fabricante' in micarro; // devuelve true 'modelo' in micarro; // devuelve true
// Operador in (en o dentro) // ----------------- JavaScript ------------------ function en(){ var componentIds = new Array(); componentIds['tabla'] = 'mi tabla de componentes'; componentIds['arbol'] = 'mi árbol de componentes'; containerComponent = function(compId) { // Compruebo si los elementos 'arbol', 'tabla', // están en mi Array 'componentIds'. if((compId in componentIds)) { return true; // Si están en mi Array } else { return false; // No están en mi Array } } // Comprobamos si existen algunos componentes del Array alert('arbol: en Array ? \n\t ' + containerComponent('arbol')); // true alert('miTabla: en Array ? \n\t ' + containerComponent('miArbol')); // false alert('tabla: en Array ? \n\t ' + containerComponent('tabla')); // true alert('mapa: en Array ? \n\t ' + containerComponent('mapa')); // false } // ----------------- HTML ------------------ <form> <input value='Operador in' onclick='en();' type='button'> </input> </form>
Prueba, Operador in (en o dentro):
// Ejemplos con Operador (.) punto: /* Accedemos a la propiedad fabricante de mi objeto fabricante, que habremos asociado previamente con el valor que nos pasaron como parámetro al crear el objeto en nuestro constructor. Ahora fab contiene la cadena 'AMD' */ var fab = miCPU.fabricante; // Cambiar valor propiedad miCPU.fabricante = 'Intel'; // Definir nuevas propiedades miCPU.precio = 120; // Objeto propiedad de otro miPC.cpu = miCPU; /* para acceder a una propiedad de un objeto que sea a su vez propiedad de otro objeto */ var precio = miPC.miCPU.precio;
// El operador punto accede a las propiedades de un elemento // ----------------- JavaScript ------------------ function punto() { // Frase a explorar var str = 'La pelota, bota y rebota por la patada de su bota.'; // devuelve como elementos de un Array, los fragmentos // iguales a los indicados entre paréntesis (ota) // La (g), busca iguales en minúscula, // La (gi), busca iguales sin distinción entre mayúsculas y minúsculas. var rslt = str.match(/ota/g); // Insertar resultado en párrafo con ID 'demoPunto' document.getElementById('demoPunto').innerHTML = rslt; } // ----------------- HTML ------------------ <form> <input value='Operador punto' onclick='punto();' type='button'> </input> </form>
Prueba, Operador punto (.):
frase: La pelota, bota y rebota por la patada de su bota.
// Operador corchete ([]) get = objeto[nombre_propiedad]; objeot[ 'nombre_propiedad' ] = set; /* nombre_propiedad es una cadena. La cadena no tiene que ser un identificador válido; puede tener cualquier valor, por ejemplo "1foo", "!bar!", o incluso " " (un espacio). */ document[ 'createElement' ]('pre');
Valor Cadena: Cadena de carácteres o string que consta de cualquier carácter: letras, números y símbolos escritos todos ellos entre comillas ("....") o ('....').
// Declaración de datos de tipo cadena o string var idioma = "español"; var dni ="12345678P"; var direccion = 'C/ Bruc 32'; var FICHERO = 'objeto.js'; // Las cadenas siempre van encerradas entre comillas simples ' ' o comillas dobles " "
Caracteres especiales: Puede ser un tabulador, un salto de línea, etc... estos carácteres especiales no los reconoce JavaScript.
Para que JS. los pueda reconocer habrá que escaparlos, es tan sencillo como ponerle una barra inversa (\) o backslash delante del carácter especial.
/* Lista de caracteres */ " comilla doble \' comillasimple \ barra inversa \n nueva línea \t tabulador \r retorno carro \b retroceso \f avance página \v tabulador vertical
// Caracteres especiales // ----------------- HTML ------------------ <form> <input value='Caracteres especiales Global' onclick='specials();' type='button'></input'> </form> // ----------------- JavaScript ------------------ function specials() { // \u00A9 => carácter UNICODE (C, encerrada en un círculo) en www.unicode.org // \n\n => dos saltos de línea y \t => una tabulación var cadena = 'El ar\u00A9hivo.css está \nen esta ruta: \n\n\t C:\\Documentos\\archivo.css'; // Insertamos el resultado dentro del párrafo con ID demoCarEspe document.getElementById('demoCarEspe').inneHTML = cadena; alert(cadena); }
Prueba, caracteres especiales:
Valor numérico: JavaScript se diferencia de otros lenguajes de programación ya que solo tiene un tipo de valor numérico, ya sea un número real, reales en notación científica, mediante el indicador de exponente E o e, o entero, será considerado del mismo tipo.
Los números también pueden ser representados en otros sistemas distintos al decimal (base 10)
Sistema hexadecimal (base 16), que consta de 16 dígitos:
Los comprendidos entre el 0 y el 9.
Los comprendidos entre la A y la F.
Se escribe con un cero y una equis (0x) delante del número.
/* Declaración de datos de tipo numérico */ var altura = 5; var precio = 12.65; var temperatura = -3.0; var PI = 3.141592; var seiscientos = 6E2; var sieteMilimetros = 7e-3; var MILLON_Y_MEDIO = 1.5e6; /* Sistema hexadecimal (base 16) */ 0x7F
Valor Lógico (booleano): Este tipo tan solo abarca dos valores posibles: verdadero true y falso false, que nos servirán para tomar decisiones a la hora de realizar una serie de acciónes o no en el código.
// Tipo booleano // ----------------- JavaScript ------------------ // 'prompt' muestra un cuadro de diálogo que solicita al usuario // que introduzca un valor antes de entrar en una página. var num = prompt ('Numero del 1 al 10'); if (num == 8){ alert ('Acertastes'); // Sería true } if (num < 8) { // Vuelve a llamar a la función alert ('Es mayor'); // Sería false } if (num > 8) { // Vuelve a llamar a la función alert ('Es menor'); // Sería false } // ----------------- HTML ------------------ <form> <input value='Valor Booleano' onclick='tipoBoolean();' type='button'></input> </form>
Prueba, Tipo booleano:
Una expresión regular o patrón nos permitirá buscar coincidencias dentro de un texto.
Las expresiones regulares se identifican escribiendo una barra (/) al principio y al final de la cadena que la forman.
Hay dos opciones para definir una erxpresión regular y encontrar las palabras a buscar:
/coma{2,4}/ => comaa, comaaa, comaaaa
/\d\d-\d\d-\d\d\d\d/ => digitos entre 0 y 9
/[^io]n/ => El circunflejo "^" dentro de un conjunto de caracteres hace que coincidan
con todos los caracteres excepto los indicados en el conjunto.
/^De/ => El circunflejo ^ colocado al principio del patrón, hace que este tenga que coincidir desde el inicio de la línea. /e$/ => Dolar $ colocado al final del patrón hace que este coincida hasta la parte final de la línea.
Cualquier cadena que coincida con la encerrada entre paréntesis en nuestro patrón, causará que se recuerde para así, poder recuperar sus valores más adelante, por ejemplo reemplazos de texto o partes del un texto sin modificar el resto.
/(pa)+/ => Coincidencias con la cadena patata y papagayo. // Obtendremos coincidencias con una o varias repeticiones del texto pa, papa, .....
/(\w+) (\w+)/ => Coincidencias con la cadena java script. // Busca uno o más caracteres alfanuméricos, seguido de un espacio // en blanco, seguido de otra vez uno o más caracteres alfanuméricos.
Modificadores o flags: Los flags, (banderas o indicadores) nos permite especificar modos de búsqueda de expresiones regulares
Nos ayudan a definir algunas características a tener en cuenta cuando buscamos coincidencias, podemos aplicar en un patrón tantos modificadores como sea necesario.
/(pi)+gi/ => pi, Pi, PiPi, PIPIPI, PIpiPIpi. // Palabra 'pi' repetida una o más veces, no distingue // entre mayúsculas y minúsculas y todas sus ocurrencias.
Flag | Explicación | Ejemplo sintaxis |
g | Búsqueda global de todas las coincidencias (no se detiene al encontrar la primera coincidencia) |
/as?.a/g new RegExp('as?.a', 'g') |
---|---|---|
i | No diferenciar entre mayúsculas y minúsculas |
/as?.a/i new RegExp('as?.a', 'i') |
m | Búsqueda multilínea. Para los indicadores de comienzo de cadena ^ y fin de cadena $, si se aplica esta bandera, se tienen en cuenta matches en todos los principios y finales de línea, no sólo al principio y final de cadena. |
/as?.a/m new RegExp('as?.a', 'm') |
Combinaciones | Se pueden especificar varios flags |
var miExpReg = /^i/mi Indica que hará match con cualquier comienzo de línea por una i minúscula ó I mayúscula (búsqueda multilínea y sin diferenciar mayúsculas y minúsculas). |
Método | Explicación | Ejemplo de uso |
exec | Ejecuta una búsqueda del patrón y devuelve un array cuyo índice 0 contiene el valor encontrado y los índices sucesivos los submatches correspondientes a paréntesis existentes en la expresión. Si está activado el flag g, la repetición de la búsqueda devuelve la siguiente coincidencia. |
var miExpReg = /p.sto/g var txt = 'el pasto es pisto pero no pesto'; var msg = ''; while ((matches = miExpReg.exec(txt)) !== null ) { msg = msg + 'Encontrado: '+matches[0]+'\n'; } alert(msg); // Encontrado: pasto, pisto, pesto var miExpReg = /p(.)sto/ var matches = miExpReg.exec(txt); daría lugar a que matches[0] contenga <<pasto>> y matches[1] contenga <<a>> |
---|---|---|
test | Comprueba si se verifica el patrón y devuelve true o false |
var miExpReg = /p.sto/g var txt = 'el pasto es pisto pero no pesto'; msg = ''; alert('Hay match: '+ miExpReg.test(txt)); // Hay match: true |
Método | Explicación | Ejemplo de uso |
match | Devuelve un array con las coincidencias encontradas, o null si no hay coincidencias. |
var miExpReg = /p.sto/g var txt = 'el pasto es pisto pero no pesto'; msg = ''; var matches = txt.match(miExpReg); if (matches != null) { for (var i=0; i<matches.length; i++){ msg = msg + 'Encontrado: '+matches[i]+'\n'; } }else {msg = 'No se encontraron coincidencias';} alert(msg); // Encontrado: pasto, Encontrado: pisto, Encontrado: pesto |
---|---|---|
search | Devuelve la posición de comienzo de la primera coincidencia dentro del string, o -1 si no hay coincidencia. Recordar que la primera posición posible es cero. |
var miExpReg = /p.sto/g var txt = 'el pasto es pisto pero no pesto'; msg = ''; var posicion = txt.search(miExpReg); if (posicion != -1) { msg = msg + 'Encontrado patrón en posición: '+posicion+'\n'; }else {msg = 'No se encontraron coincidencias';} alert(msg); // Encontrado patrón en posición: 3 |
replace | Devuelve un nuevo String (sin modificar el original) donde se reemplaza una o varias coincidencias por lo especificado (una cadena o una función que devuelve la cadena). |
var miExpReg = /p.sto/g var txt = 'el pasto es pisto pero no pesto'; msg = ''; var nuevoTxt = txt.replace(miExpReg, 'coco'); msg = 'txt vale ' + txt + ' y nuevoTxt vale ' +nuevoTxt; alert(msg); // txt vale el pasto es pisto pero no pesto y nuevoTxt vale el coco es coco pero no coco |
split | Devuelve un array con las subcadenas resultantes de dividir la cadena original en subcadenas delimitadas por el carácter separador especificado (que queda excluido). Si se indican unas comillas vacías se extraen todos los caracteres a un array. |
var miExpReg = /\d/g var txt = 'un 3 de bastos gana a un 5 de copas pero no a un 7 de oros'; msg = ''; var splits = txt.split(miExpReg); msg = 'splits contiene ' + splits; alert(msg); // splits contiene un , de bastos gana a un , de copas pero no a un , de oros |
Algunas expresiones útiles:
/\d{9}/ | numero de teléfono |
---|---|
/\d{8}{a-zA-Z}/ | Número de DNI |
/\d{2}-\d{2}-\d{}4]/ | Fecha (dia-mes-año) |
/([0][1-9]1[0-2]):[0-5]\d:[0-5]\d/ | Hora (hora:minutos:segundos, formato de 12 horas) |
/([01]\d|2[0-3]):[0-5]\d:[0-5]\d/ | Hora (hora:minutos:segundos formato de 24 horas) |
/\w+@\w+\.\w{2,3}/ | Correo electrónico |
escape()
Escapar carácteres: La función escape() codifica una cadena o caracteres especiales, a excepción de: * @ - _ +. /.
Esta función hace que una cadena portable, pueda ser transmitida a través de cualquier red a cualquier equipo que admite caracteres ASCII.
unescape():
Esta función descodifica una cadena codificada.
//Ejemplo de algunas expresiones Regulares function ValidaCampos(form){ // Expresion para teléfonos // permite campos vacios y guiones var tlf = /(^[0-9\s\+\-])+$/; // Expresion para emails var mail = /^(.+\@.+\..+)$/; // Comprueba telf // Metodo test if(!tlf.test(formu.tlf.value)) { alert('TEEFONO no válido.') return false // No submit } // Comprueba email // Metodo test if(!mail.test(formu.email.value)) { alert('EMAIL no válido.') return false // No submit } return true; // Pasa al submit }
Ejemplo, escapar caracteres:
Prueba a pasar caracteres especiales en el siguiete formulario, excepto estos: * @ - _ +. /
A veces es posible conbinar dos operadores de distinto tipo, por ejemplo; un operador tipo string con otro operador tipo number, este último puede ser interpretado como un string o el de tipo string puede ser interpretado como un tipo number, esto lo haremos posible gracias a la conversión interna entre tipos, pudiendo ser (implícita o explícita).
/* INTENTA CONVERTIR DISTINTOS TIPOS ( *, /, - ) */ /* --------------------JavaScript------------------- */ function intentarConvertir(){ var cadena2 = '2'; /* string */ var numero2 = 8; /* number */ /* Muestra el tipo del operador */ alert('Operador 'cadena2' es de tipo\n\n\t' + (typeof(cadena2))); alert('Operador 'numero2' es de tipo\n\n\t' + (typeof(numero2))); /* Operación */ alert('Implícita\n\n\t' + (numero2 - cadena2)); // 6 alert('Implícita\n\n\t' + (cadena2 * numero2)); // 16 alert('Implícita\n\n\t' + (numero2 / cadena2)); // 4 } /* --------------------HTML------------------- */ <form> <input value='Convertir' onclick='intentarConvertir();' type='button'> </input> </form>
Prueba, conbertir distintos tipos:
/* CONVERSIÓN EXPLÍCITA */ /* --------------------JavaScript------------------- */ // Funciones para poder sumar en javascript function explicita(){ var cadena = "10"; /* string */ var numero = 5; /* cadena */ // 'parseInt' => número entero, 'parseFloat' => número decimal o flotante alert(parseInt(cadena) + numero); alert(numero + parseInt(cadena)); } /* --------------------HTML------------------- */ <form> <input value='Conversión Explícita' onclick='explicita();' type='button'> </input> </form>
Prueba, conversión Explícita:
var cadena = "20"; /* string */ // Conversión Explícita a número entero cadena = parseInt(cadena); alert(cadena); // 20 => tipo number
parseFloat y parseInt: Pasa de valor 'cadena de texto' a 'numérico'.
.toString() / typeof(): Pasa de valor 'numérico' a '(string) cadena de texto'.
El valor 'NaN' es el acrónimo de 'Not A Number' que indica que el valor contenido por la variable no es válido.
Esto es debido a que resulta imposible realizar la conversión de la cadena 'hola' a un valor numérico válido.
isNaN: Comprueva si el tipo de valor de la variable es válido, osea si es alfanumérico (cadena de texto), mediante true (si es alfanumérico) o false (en caso contrario).
/* CONVERSIÓN DE VALORES */ /* --------------------JavaScript------------------- */ function converValor(){ /* CONVERTIR DE CADENA ALFANUMÉRICA A NUMÉRICO */ var valor1 = '10.5'; var valor2 = '10'; alert('Conversión Implícita concatena los operadores ' + valor1 + valor2 ); // Concatena y muestra 10.510 var numero1 = parseFloat(valor1); var numero2 = parseInt(valor2); alert('Conversión Explícita 'parseInt', ' parseFloat ' + (numero1 + numero2)); // Suma y muestra 20.5 /* CONVERTIR DE NUMÉRICO A CADENA ALFANUMÉRICA */ var valor = 123; var cadena = valor.toString(); alert('Comprobar el tipo de var 'valor': ' + typeof(valor)); // Muestra el mensaje 'Number' alert('Comprobar el tipo de var 'cadena': ' + typeof(cadena)); // Muestra el mensaje 'String' /* COMPROVACIÓN DE CONVERSIÓN */ var valor = 'hola'; var numero = parseInt(valor); // 'parseInt' convierte a valor numérico alert('var valor = 'hola' es de tipo 'string' Las funciones 'parseFloat' y 'parseInt' retornan' + numero + ' cuando evalúan un valor que no es un número. Not a Number (No es un Número)'); /* COMPROVAR TIPO DE VALOR */ var valor1 = '123'; var valor2 = 'hola'; alert('isNaN Evalúa un argumento para determinar si éste no es un número' + 'var valor1 = '123' + isNaN(valor1)); // Muestra 'false' alert('isNaN Evalúa un argumento para determinar si éste no es un número' + 'var valor2 = 'hola' + isNaN(valor2)); // Muestra 'true' } /* --------------------HTML------------------- */ <form> <input value='conversión valores' onclick='converValor();' type='button'> </input> </form>
Prueba, conversión de valores:
En ocasiones, las decisiones que se deben realizar no son del tipo 'si se cumple la condición, hazlo; si no se cumple, no hagas nada'. Normalmente las condiciones suelen ser del tipo 'si se cumple esta condición, hazlo; si no se cumple, haz esto otro'.
/* Sentencia if else */ /* --------------------JavaScript------------------- */ function ifelse(){ var edad = prompt('Edad del usuario:'); // Si la edad introducida por el usuario es mayor o igual a 18, entonces ... if(edad >= 18) { // Mostrar el siguiente mensage alert('Eres mayor de edad'); // Si no es así, entonces esto otro ... }else{ // Mostrar el siguiente mensage alert('Todavía eres menor de edad'); } } /* --------------------HTML------------------- */ <form> <input value='Comprobar' onclick='ifelse();' type='button'> </input> </form>
Prueba, Sentencia if else:
Else if: La estructura if...else se puede encadenar para realizar varias comprobaciones seguidas.
/* else if */ /* --------------------JavaScript------------------- */ function elseif(){ var edad = prompt('Edad del usuario '); // Entra en la primera sentencia, si se cumple (- o = a 12) o ((+ o = a 13) y (- o = a 17)) if(edad <= 12 || edad >= 13 && edad <= 17) { alert('Eres menor de edad'); }else if(edad >= 18 && edad <= 22 ) { alert('Todavía eres un adolescente'); }else if(edad >= 23 && edad <= 35) { alert('Aún sigues siendo joven'); }else if (edad >= 36 && edad <= 65) { alert('Eres un adulto'); }else{ alert('Piensa en cuidarte un poco más'); } } /* --------------------HTML------------------- */ <form> <input value='Comprobar' onclick='elseif();' type='button'> </input> </form>
Prueba, else if:
Si queremos que se repita la instrucción de una estructura, utilizaremos for, esta sentencia nos permite realizar este tipo de repeticiones (también llamadas bucles) de una forma muy sencilla.
// Inicializar la variable i 'contador' for(var i = 0; i < 5; i++) { .......... }
// Máximo de 5 iteraciones for(var i = 0; i < 5; i++) { .......... }
// Incrementar el valor en más uno, durante esta iteración for(var i = 0; i < 5; i++) { .......... }
La variable que controla los bucles for se llama i, ya que recuerda a la palabra índice.
/* Sentencia for */ /* --------------------JavaScript------------------- */ function forBucle(){ var mensaje; // 'mensaje' vale 1 mensaje = 1; // Bucle for de 5 iteraciones for(var i = 0; i < 5; i++) { alert('\tIterando ' + mensaje); mensaje++; // Incrementar el valor actual del elemento, en uno más } // 'mensaje' vale 1 en la primera iteración, // 'mensaje' vale 2 en la segunda iteración, // y se va incrementando en cada vuelta hasta // el índice máximo contador que es '5' } /* --------------------HTML------------------- */ <form> <input value='Sentencia for' onclick='forBucle();' type='button'> </input> </form>
Prueba, Sentencia for:
push(): añade un elemento al final del array. El array original se modifica y aumenta su longitud una unidad. También es posible añadir más de un elemento a la vez.
// Push() /* --------------------JavaScript------------------- */ // Recorrer un array elemento por elemento function diaSemana(){ // Generar un nuevo elemento array var semana = new Array(); semana.push('Lunes'); semana.push('Martes'); semana.push('Miércoles'); semana.push('Jueves'); semana.push('Viernes'); semana.push('Sábado'); semana.push('Domingo'); // Mostrar todos los elemento del array en un único mensaje alert(semana); // 'length' recorre toda la longitud del array 'semana', elemento por elemento for(var i = 0; i < semana.length; i++){ // Mostrar uno a uno cada índice del array en cada iteración alert("Índice" + i + " " + semana[i] + ''); } } /* --------------------HTML------------------- */ <form> <input value='Push()' onclick='diaSemana();' type='button'> </input> </form>
Prueba, push():
for . . . in: El objetivo de for in es recorrer un objeto pasando por cada una de sus propiedades para actuar sobre ellas, y ya que en javascript los arrays son Objetos, podemos hacer que itere por cada uno de los valores de sus propiedades.
En for, en bucles declaración por medio de las propiedades de un objeto.
El bucle se ejecuta una vez para cada propiedad.
// for ... in() /* --------------------JavaScript------------------- */ function bucleForIn(){ // Array con propiedades y sus valores var pers={nombre:'Nombre: \n\t Juan' , apellido_uno:'Primer apellido: \n\t Gómez', apellido_2:'Segundo apellido: \n\t Portillo', años:'Edad: \n\t ' + 32 + ' años'}; var quien; for (quien in pers){ // Recorre las propiedades del Array // Muestra una por una, todas sus propiedades alert(pers[quien] + ''); /* Mediante el uso de los corchetes [] podemos acceder al valor de dichas propiedades, como operador sobre objetos */ } } /* --------------------HTML------------------- */ <form> <input value='Bucle for - in' onclick='bucleForIn();' type='button'> </input> </form>
Prueba, for ... in:
// Otro for ... in() /* --------------------JavaScript------------------- */ // RECORRE UN ARRAY ASOCIATIVO function indiceAsociativo(){ var semana = new Array(); /* Valor mas propiedad */ semana['Lunes'] = ' dia 1'; semana['Martes'] = ' dia 2'; semana['Miércoles'] = ' dia 3'; semana['Jueves'] = ' dia 4'; semana['Viernes'] = ' dia 5'; semana['Sábado'] = ' dia 6'; semana['Domingo'] = ' dia 7'; // Obtenemos el indice y el valor alert('Índice y su valor'); for(var indi in semana){ // Mostrar uno a uno, cada elemento del array alert(indi + ': ' + semana[indi]); /* Mediante el uso de los corchetes [] podemos acceder al valor de dichas propiedades, como operador sobre objetos */ } } /* --------------------HTML------------------- */ <form> <input value='for .. in()' onclick='indiceAsociativo();' type='button'> </input> </form>
Prueba, for ... in:
for each...in: Sentencia introducida en JavaScript 1.6 Similar a for...in, pero iteraciona sobre los valores de las propiedades del objeto, no sobre sus nombres.
En los códigos anteriores, la variable "i" es nuestro iterador y utilizando el "in" la palabra clave for each "para cada uno" bucle de hecho, recorre todos los elementos de la matriz para nosotros.
El uso de este, ya no tiene que preocuparnos por la longitud de la matriz. Una cosa a notar sobre el uso de for each para iterar sobre una serie, es que no necesariamente va a iterar sobre la matriz en el orden de su índice de 0 a n. Básicamente, el orden de iteración no está garantizado.
/* FOR EACH...IN */ /* --------------------JavaScript------------------- */ function ForEach(){ // Inicializar la variabla var suma = 0; var miObje = {p_1: 2, p_2: 4, p_3: 15}; for (var item in miObje) { // Suma de las tres propiedades del objeto 'miObje' suma += miObje[item]; // 'item' => El método item() 'elemento'() devuelve el nodo en el índice especificado en una lista de nodos. } // Resultado '21' // Insertamos el resultado dentro del párrafo con ID demoForEach document.getElementById('demoForEach').innerHTML = suma; } /* --------------------HTML------------------- */ <form> <input value='For each...in' onclick='ForEach();' type='button'> </input> </form>
Prueba, for each...in:
Switch: Evalua una expresión que puede tener múltiples valores o posibles opciones.
Permite hacer múltiples operaciones dependiendo del estado de una variable.
Contiene el nombre de la variable entre paréntesis que se va a utilizar en las comparaciones.
Cada comparación se indica mediante la palabra reservada case seguida del valor con el que se realiza la comparación. Si el valor de la variable utilizada por switch coincide con el valor indicado por case, se ejecutan las instrucciones definidas dentro de ese case.
default: Para todos los casos no contemplados en los casos case se ejecuta el caso por defecto.
// SENTENCIA SWITCH / CASE /* --------------------JavaScript------------------- */ function switchCase(){ var opcion; opcion = prompt('Selecciona opción:\n (I) INICIAR,\n (P) PAUSAR,\n (C) CANCELAR.'); switch(opcion) { case 'alert('Has seleccionado INICIAR'); /* Posible llamada a funció */ break; case 'alert('Has seleccionado INICIAR'); /* Posible llamada a funció */ break; case 'alert('Has seleccionado PAUSAR'); /* Posible llamada a funció */ break; case 'alert('Has seleccionado PAUSAR'); /* Posible llamada a funció */ break; case 'alert('Has seleccionado CANCELAR'); /* Posible llamada a funció */ break; case 'alert('Has seleccionado CANCELAR'); /* Posible llamada a funció */ break; default: alert('Selección desconocida'); } } /* --------------------HTML------------------- */ <form> <input value='CREAR OBJETO' onclick='MiWith();' type='button'> </input> </form>
Prueba, sentencia Switch:
break: Esta palabra es opcional, pero si no la ponemos a partir de que se encuentre coincidencia con un valor se ejecutarán todas las sentencias relacionadas con este y todas las siguientes, es decir cada case ha de tener su break por si esa condición se cumpliera.
// SWITCH SIN BREACK /* --------------------JavaScript------------------- */ function sinBreak(){ var diaSemana = prompt('Nº del 1 al 7:'); switch (diaSemana) { case '1': alert('Es Lunes') break; case '2': alert('Es Martes') break; case '3': alert('Es Miércoles') break; case '4': alert('Es Jueves') break; case '5': alert('Es viernes') break; case '6': alert('\t Al no contener break. \n recorre los siguientes 'case' \n de la sentencia 'switch'') // Sin break case '7': alert('Es fin de semana') break; default: alert(diaSemana + '\t Este día no existe') } } /* --------------------HTML------------------- */ <form> <input value='Switch sin break' onclick='sinBreak();' type='button'> </input> </form>
Prueba, sentencia Switch sin Break:
While: Esta sentencia de bucle ejecuta las instrucciones internas repetidamente hasta que la condición sea verdadera.
La diferencia entre do - while es que en while se comprueba la condición antes de realizar la primera iteración, por lo que, si la condición es verdadera 'true' la instrucción deja de ejecutarse.
// SENTENCIA WHILE /* --------------------JavaScript------------------- */ var ventana; // Variable global, para poder cerrarla desde cualquier función function otroWhile(){ var numOculto; var num; numOculto = 4; // Número a acertar num = 0; /* HASTA QUE LA CONDICIÓN SEA 'TRUE', NO SALDRÁ DEL BUCLE */ while (numOculto != num) // si distinto de número { num = prompt('Número entre 1 y 5', ''); if (num < numOculto){ alert('Número más alto'); }else{ if (num > numOculto){ alert('Número más bajo'); } } } alert('¡Felicidades!'); // Abrir una ventana con una imagen 'window.open' ventana = window.open('homerSi.html','Felicidades', 'height=200,width=200,left=450, top=350,location=yes,menubar=no, resizable=no,scrollbars=yes, status=no,titlebar=yes,focus()'); } function cerrarVentana(){ // Invocamos la variable global 'ventana' para cerrarla 'ventana.close' ventana.close('homerSi.html'); alert('Ventana emergente cerrada'); } /* --------------------HTML------------------- */ <form> <input value='While' onclick='otroWhile();' type='button'> </input> <input value='Cerrar Ventana' onclick='cerrarVentana();' type='button'> </input> </form>
Prueba, sentencia while:
do - while: Esta sentencia ejecuta una serie de instrucciones, al menos una vez hasta que el valor de la condición que se evalúa es falso.
// DO - WHILE /* --------------------JavaScript------------------- */ function num(){ var b = 1; do { alert(b); // Inserto resultado en párrafo con ID 'demoWhile' document.getElementById('demoWhile').innerHTML = '' + b + ''; b++; // Incrementa en 1 el valor de 'b' } while (b <= 3); // si 'b' no es superior a 3, vuelve al bucle } /* --------------------HTML------------------- */ <form> <input value='do - while' onclick='num();' type='button'> </input> </form> // Resultado de while se inserta en ID 'demoWhile' <p id='demoWhile'></p>
Prueba, do - while:
// OTRO DO - WHILE /* --------------------JavaScript------------------- */ var vent; // Variable global var vent2; // Variable global function doWhile(){ var imagen; do { alert("Jugando"); // Mientras se acepte la confirmación, estaremos dentro del bucle imagen = confirm("¿Ver imagen otra vez? S/N"); // Si hemos aceptado el mensaje de confirmación, abre ventana if(imagen == true){ vent = window.open("homerSi.html","Hola","height=200, width=200,left=90,top=225,location=yes, menubar=no,resizable=no,scrollbars=yes, status=no,titlebar=yes,focus()"); }else{ // Si no hemos aceptado el mensaje de confirmación, abre otra ventana vent2 = window.open("homerNo.html","Adios","height=200, width=200,left=307,top=225,location=yes, menubar=no,resizable=no,scrollbars=yes, status=no,titlebar=yes,focus()"); } } while (imagen == true); // Si cancelamos la confirmación "adios" alert("adios"); } /* CERRAR VENTANA */ function cerrar(){ // Cerrar ventanas abiertas if(vent.close() != true && vent2.close() != true){ vent.close("homerNo.html"); vent2.close("homerSi.html"); } alert('Has cerrado todas las ventanas!'); } /* --------------------HTML------------------- */ <form> <input value='Otro do - while' onclick='doWhile();' type='button'> </input> <input value='Cerrar ventana' onclick='cerrar();' type='button'> </input> </form>
Prueba, otro do - while:
Mediante la sentencia with , fijamos el Objeto al que vamos a acceder, escribiendo únicamente el nombre de la propiedad/método para acceder a estos.
WITH establece el objeto por defecto [default] para un conjunto de sentencias. JavaScript busca los nombres no calificados dentro de ese conjunto de sentencias y determinar si los nombres son propiedades del objeto por defecto.
// Crea un nodo mediante sentencia WITH /* --------------------JavaScript------------------- */ function MiWith(){ with(document) with(documentElement) // Insertar el texto como primer hijo del elemento 'li' insertBefore(createElement('li'), firstChild).text = alert('Sentencia "with"'); // Crea un nodo de lista .......... var elemento = document.createElement('li'); // Crear el texto para el nuevo nodo var texto = document.createTextNode(" ---- Sentencia 'with' ---- "); // Insertar el nodo con su texto dentro del nodo con ID 'sentenciaWith' elemento.appendChild(texto); // 'elemento' es padre de texto. // Insertar el nodo con su texto dentro del nodo con ID 'sentenciaWith' document.getElementById('sentenciaWith').appendChild(elemento); } /* --------------------HTML------------------- */ <form> <input value='CREAR OBJETO' onclick='MiWith();' type='button'> </input> </form> <ul id='sentenciaWith'> // El nodo 'li' se inserta dentro de la lista 'ul' </ul>
Cambiar propiedades de estilo con JavaScript.
La sentencia with puede resultar útil cuando tratamos de asignar una serie de atributos a un conjunto de elementos DOM preseleccionado.
/* ASIGNAR ATRIBUTOS (ESTILOS) DOM */ /* --------------------JavaScript------------------- */ function vemosWith(){ // Asignar atributos (estilos) DOM mediante sentencia WITH with(document.getElementById('sentenciaWith').style) { backgroundColor = '#000'; color = '#fff'; fontWeight = '600'; width = '186px'; height = '40'; padding = '3px'; border = '1'; border = 'solid'; borderColor = '#FF8F0D'; // orange } } /* VOLVER AL ESTADO INICIAL */ function noVemosWith(){ // Asignar atributos (estilos) DOM mediante sentencia WITH with(document.getElementById('sentenciaWith').style) { backgroundColor = '#FFC493'; // orange color = '#000 !important'; // yellow fontWeight = '600'; width = '186px'; height = 'auto'; padding = '6px'; border = 'none'; } } /* --------------------HTML------------------- */ <ul id='sentenciaWith'> // El aspecto del DIV ira cambiando al pulsar cada botón </ul> <form> <input value='Cambiar estilos' onclick='vemosWith();' type='button'> </input> <input value='Actualizar estilos' onclick='noVemosWith();' type='button'> </input> </form>
Con la sentencia with podremos acceder tanto a las propiedades como al método.
Dentro de un bloque de instrucciones de la sentencia with está permitido usar variables y funciones definidas en cualquier parte del código.
// Acceder a propiedades y métodos de un Objeto /* --------------------JavaScript------------------- */ /* ACCEDER A PROPIEDADES Y MÉTODOS DE UN OBJETO - */ /* ESTAS DOS FUNCIONES HACEN ABSOLUTAMENTE LO MISMO PERO CON LA SENTENCIA "WITH" LA CARGA DE LA PÁGINA ES MÁS ÓPTIMA Y RÁPIDA DEPENDIENDO DE LA CARGA DEL CONTEIDO */ var objecte = { uno: 'Carmen', Hora: '12:05' }, value; var objecteWith = { dos: 'Samuel', Hora: '08:30' }, value; // Declaración de la función function FuncionExterior() { for ( var i = 0; i < 2; i++ ) { value = alert(objecte.uno + '\nTiene visita a las\n' + objecte.Hora + ' horas.'); // Muestra 2 veces la propiedad del método } } // Declaración de la función - Equivale a la función superior function withOcon() { with(objecteWith) { for ( var i = 0; i < 2; i++ ) { value = alert(dos + '\nTiene visita a las\n' + Hora + ' horas.'); // Muestra 2 veces la propiedad del método } // Llamada a función externa, dentro de instrucción de sentencia with FuncionExterior(); } /* --------------------HTML------------------- */ <form> <input value='Propiedades de un objeto' onclick='withOcon();' type='button'> </input> </form>
Prueba, Acceder a propiedades y métodos de un Objeto:
with(window): Muestra todos sus elementos nada más cargar la página.
/* MOSTRAR AL ARRANCAR LA PÁGINA */ // Cero argumentos de ejemplo cerrados with(window){ // lo mismo que window.alert (123) alert('\t with(window){} \n Lo mismo que \n window.alert();' + 123); // lo mismo que window.onload = function () {}; onload = function(){ alert('\t onload = function(){} \n Lo mismo que \n window.onload = function () {}'); }; (function(){ // lo mismo que nuevo window.XMLHttpRequest var xhr = new XMLHttpRequest; })(); alert('\t (function(){var xhr = new XMLHttpRequest;})() \n Lo mismo que \n nuevo window.XMLHttpRequest'); // lo mismo que window.String.fromCharCode String.fromCharCode(1); alert('\t String.fromCharCode(1); \n Lo mismo que \n window.String.fromCharCode' + String.fromCharCode('A')); }
Break: Con la sentencia break terminaremos la ejecución de un bucle for o while cuando una variable toma un determinado valor o cuando se cumple alguna condición.
/* BREAK */ // ----------------- JavaScript ------------------ function romper(){ var cadena = 'Si todos los derechos son reservados, ¿son todos los zurdos muy habladores?'; // 'split' separa los carácteres de una cadena de carácteres var letras = cadena.split(""); // Cadena vacia var resultado = ""; for(i in letras) { if(letras[i] == 'a') { // Encuentra una "a" break; // y detiene la ejecución del bucle } else { // Si no encuentra una 'a'. sigue añadiendo letras resultado += letras[i]; } } // Muestra la cadena hasta la primera 'a' encontrada document.getElementById('demoBreak').innerHTML = 'Cadena completa:<br /> ' + cadena + 'Romper cadena en la 1ª 'a' que encuentra: <br /> ' + resultado; } // ----------------- HTML ------------------ <form> <input value='BREAK' onclick='romper();' type='button'> </input> </form> <p id='demoBreak'></p> <br />';
Prueba, break:
Otro ejemplo de break:
/* OTRO BREAK */ // ----------------- JavaScript ------------------ function breakSentencia(){ // Se ha de inicializar con una cadena vacia o con un número uno = ""; // Mientras 'uno' sea menor de 5 ... while(uno < 5) { if(uno == 3){ // Cuando 'uno' vale '3'... break; // ...se rompe el bucle } // Incrementar el valor de 'uno' en cada iteración uno++; // Valor de 'uno' en cada iteración alert('var uno vale: \n\n \t ' + uno); } // Valor de 'uno' al romperse el bucle alert('Rotura en la vuelta nº: ' + uno); // 'uno' => 3 } // ----------------- HTML ------------------ <form> <input value='OTRO BREAK' onclick='breakSentencia();' type='button'> </input> </form>
Prueba, otro break:
Continue: Al contrario que break, continue permite utilizar el bucle for para filtrar los resultados en función de algunas condiciones o cuando el valor de alguna variable coincide con un valor determinado.
/* CONTINUE */ // ----------------- JavaScript ------------------ function continuar(){ var cadena = 'El dolor es inevitable, el sufrimiento es opcional'; split(""); // 'split' separa los carácteres de una cadena de carácteres var letras = cadena var resultado = ""; for(i in letras) { // Salta las 'es' sin detener la ejecución del bucle if(letras[i] == 'e' || letras[i] == 'E') { continue; }else { // Muestra la cadena entera sin las 'es' resultado += letras[i]; } } // Muestra la cadena completa sin las "es" document.getElementById('demoConti').innerHTML = 'Cadena completa:<br /> ' + cadena + 'Salta todas las "es" de la cadena <br /> ' + resultado; } // ----------------- HTML ------------------ <form> <input value='CONTINUE' onclick='continuar();' type='button'> </input> </form> <p id='demoConti'></p> <br />';
Prueba, Continue:
Otro ejemplo de continue:
/* OTRO CONTINUE */ // ----------------- JavaScript ------------------ function continueSentencia(){ for(var i = 1; i <= 5; i++){ /* Cuando llegue al 3, proboca un salto y continua con el siguiente hasta el final del bucle */ if(i == 3){ // Insertar resultado en párrafo con ID 'demoContinue' document.getElementById('demoContinue').innerHTML = 'Se ha encontrado el nº 3 <br /> El "3" lo salta y sigue <br /> ejecutando el bucle'; continue; } alert('El bucle continua \n\n \t\t' + i); } } // ----------------- HTML ------------------ <form> <input value='OTRO CONTINUE' onclick='continueSentencia();' type='button'> </input> </form> <p id='demoConti'></p> <br />';
Prueba, Otro continue:
Objeto: Un objeto es una estructura que engloba una serie de datos (propiedades) y las funcionalidades necesarias para manejar los (métodos). Es decir, crear un tipo de clase, que más tarde se podrán hacer instancias. Un objeto perdura mientras esté cargado el documento.
El tipico ejemplo del coche:
El coche tiene un conjunto de características como ( color, modelo , marca, etc...), y una serie de funcionalidades (arrancar, acelerar, frenar, etc...).
Así que como Objeto tenemos el coche, las propiedades sus características y sus métodos las funcionalidades.
Como no todos los objetos coche son iguales, necesitamos poder especificar las características individuales de cada uno.
A cada Objeto coche se le denomina instancia.
Cuando asignamos un valor de cualquier tipo a una variable, ésta se convierte en una instancia de un Objeto, con sus propiedades y métodos propios.
// Objetos / matrices // ----------------- JavaScript ------------------ // Función con paso de parámetros, (propiedades del objeto 'miObjeto') function miObjeto(nombre,apellidos,foto,aficiones,mail,url){ // Asignamos propiedades a cada parámetro this.Nombre = nombre; this.Apellidos = apellidos; this.Foto = foto; this.Aficiones = aficiones; this.Mail = mail; this.Url = url; } // Creamos y declaramos la matriz con '6' elementos var objArray = new Array(5); // Inicializamos la matriz a '0 ' // para poder ir incrementando en 1 // al generar instancias del objeto var elemArray = 0; // 1ª instancia del objeto 'miObjeto' con sus propiedades objArray[elemArray++] = new miObjeto( "Juan Carlos", "Martin Pueblos", "images/homerSi.png", "restaurantes, ferias y eventos", "jurestau@mail.com", "http://www.juanca.es" ); // 2ª instancia del objeto 'miObjeto' con sus propiedades objArray[elemArray++] = new miObjeto( "Jose Maria", "Cuenca Palacios", "images/homer_Noveo.png", "dormir, televisión, radio", "jodormi@mail.com", "http://www.jesema.es" ); // 3ª instancia del objeto 'miObjeto' con sus propiedades objArray[elemArray++] = new miObjeto( "Joaquim", "Segura Casas", "images/homer_desesperado.png", "alarmista, cine, teatro", "jodespe@mail.com", "http://www.quim.es" ); // 4ª instancia del objeto 'miObjeto' con sus propiedades objArray[elemArray++] = new miObjeto( "Juan Pedro", "Garcia Sánchez", "images/homer_Contento.png", "cómico, beber, espectáculos", "garcomi@mail.com", "http://www.juanpe.es" ); // 5ª instancia del objeto 'miObjeto' con sus propiedades objArray[elemArray++] = new miObjeto( "Pablo", "Ramos Huertas", "images/homerNo.png", "camorrista, futbol", "ramcam@mail.com", "http://www.pablo.es" ); // Añadimos la funcion que escribe los datos. function ver(){ // Insertar la foto document.Foto.src = this.Foto; // Insertamos el nombre y apellidos seleccionados de la matriz document.campos.Nombre.value = this.Nombre + " " + this.Apellidos; // Insertar valor dentro del campo de aficiones document.campos.Aficiones.value = this.Aficiones; // Inserta valor dentro del campo de mail document.campos.Mail.value = this.Mail; // Inserta valor dentro del campo de url document.campos.Url.value = this.Url; } // Añadir nuevas propiedades a todas las // instancias del objeto con 'prototype'. // Llamar a la función que visualizar los datos. miObjeto.prototype.ver = ver; // ----------------- HTML ------------------ <form> <label >Nombre: </label> <input type='text' name='Nombre' size='50' value=''></input> <br /> <label >Aficiones: </label> <input type='text' name='Aficiones' size='50' value=''></input> <br /> <label '>Mail: </label> <input type='text' name='Mail' size='50' value=''></input> <br /> <label >Url: </label> <input type='text' name='Url' size='50' value=''></input> <br /> </form> <!-- Ponemos los primeros datos --> <script> <!-- Muestra el primer elemento del Array --> objArray[0].ver(); </script> // Formulario de opciones <form name='opcion'> <fieldset>Datos de: <select name='sujeto' onChange= 'objArray[document.opcion.sujeto.selectedIndex].ver(); '> <script> for( x = 0; x < elemArray; x++ ) { document.writeln( '<option>' + objArray[x].Nombre ); } </script> </select> </fieldset> </form>
pop-up: Es una nueva ventana emergente que aparece al abrir una página, pinchando sobre un enlace o al pasar el ratón sobre un punto de la página que se está visitando.
A veces es necesario crear ventanas emergentes, bien para mostrar imágenes, formularios o publicidad.
Abrir pop-up desde link, botón o imagen
// window open // ----------------- JavaScript ------------------ /* VENTANA EMERGENTE desde un link, botón o una imagen */ function abreVentana(URL){ window.open('homerSi.html','HomerJS','width=200,height=200,top=400, left=450,scrollbars=0,titlebar=1,menubar=1, toolbar=0,directories=1,location=1,status=1, resizable=0,focus()') } // ----------------- HTML ------------------ // ABRIR VENTANA DESDE ENLACE <p> <a href='javascript:abreVentana(tuVentana.html)'> Ventana Secundaria </a> </p> // ABRIR VENTANA DESDE BOTÓN <form> <input type='button' value='Abrir' onclick='abreVentana('tuVentana.html')' /> </form> // ABRIR VENTANA DESDE IMAGEN <p> <a href='javascript:abreVentana('tuVentana.html')'> <img src='images/tuImagen.png' border='1px solid' width='125' height='125' /> </a> </p>
Prueba, window open:
Podemos crear un botón para cerrar la ventana emergente que acabamos de abrir:
// CERRAR VENTANA (CLOSE) // ----------------- JavaScript ------------------ /* Mantener la variable como global ya que si no es así no se puede cerrar la ventana desde el botón */ var vent; /* Abrir una ventana con una página y medidas específicas */ function abrirVent(){ vent = window.open('http://www.tuVentana.com/", "MiVentana", "height=550, width=900, left=90, top=225, location=1, menubar=0, resizable=0, scrollbars=1, status=0, titlebar=1"); } /* Función para cerrar ventana */ function cerrarVent(){ // hacemos referencia a la variable 'vent' // para cerrar esa ventana en cuestión. vent.close(); } // ----------------- HTML ------------------ <form> <input value='Abrir Ventana' onclick='abrirVent()' type='button'> </input> <input value='Cerrar Ventana' onclick='cerrarVent()' type='button'> </input> </form>
Prueba, cerrar ventana (close)
Abrir un pop-up
// Abrir un pop-up al cargar la página body onLoad="javascript:popUp('http://www.tuPagina.com')">
// Abrir un pop-up desde un enlace <form> <input value='Abrir pop-up' onclick='javascript:popUp('http://www.tuPagina.com')' type='button'> </input> </form>
Prueba, abrir pop-up
Cerrar varias ventanas a la vez: En ocasiones necesitamos crear una o varias ventanas hijas desde la ventana principal de nuestra página, y sería estupendo que al cerrar la ventana madre, o abandonar la página mostrada en ella, también se cerraran las ventanas hijas.
Por ejemplo puedo tener una ventana principal con un enlace que se abre en una ventana hija en la que se muestran avisos o mensajes y quiero que al cerrar la ventana madre o abandonar la página actual las ventana hija se cierre para ahorrarle al visitante el tener que cerrarla a mano.
La solución
Se trata de hacer uso del evento onunload, un evento que se dispara cuando cambia el contenido de la ventana del explorador, es decir, cuando el usuario abandona la página que está viendo (pinchando sobre un enlace, enviando un formulario, cerrar la ventana del navegador, etc).
Pero este evento también se dispara cuando el usuario cierra la ventana del explorador. Basta con vincularle una función que cierre las ventanas que anteriormente se abrieron usando el método window.open.
// Cerrar ventana mediante 'onUnload' // ----------------- JavaScript ------------------ /* Mantener la variable como global ya que si no es así no se puede cerrar la ventana desde el botón */ var ventHija = null; /* ABRIR VENTANA --------- */ function crearHija(){ ventHija = window.open("homerSi.html","Felicidades", "height=200, width=200, left=450, top=350, location=yes, menubar=no, resizable=no, scrollbars=yes, status=no, titlebar=yes, focus()"); } /* CERRAR VENTANA -------- */ // El evento 'onUnload' cierra el pop-up function cerrarHija(){ // Si exite la ventana 'ventHija' ... if (ventHija) // ... la cierra mediante 'close' ventHija.close(); } // ----------------- HTML ------------------ <!-- El evento 'onUnload' se produce al cerrar la página o salir de ella --> <body onUnload="cerrarHija();"> <form> <input value='Abrir' onclick='crearHija()' type='button'> </input> </form> <p>Cierra esta ventana (ventana grande), al cerrarla se debe de haber cerrado también la ventana emergente.</p> // COPIA EL CÓDIGO Y HAZ LA PRUEBA
función: Una función contiene una agrupación de procesos los cuales tienen una función definida, de esta forma no tendremos que repetir tantas veces un código, que al fin y al cabo tendrán la misma función, (hora actual del equipo, imprimir mensaje en la pantalla, convertir variables de tipo, operaciones aritméticas, etc...).
Desde el interior de una función podemos llamar a otra función siempre y cuando esten dentro de las mismas etiquetas <script Language="text/javascript">....<script>, o También si la función se encuentra en un bloque <SCRIPT> anterior (por encima de la llamada) al bloque donde está la llamada.
Si llamamos a una función desde un bloque, y la función que llamamos se encuentra en un bloque inferior al bloque de la llamada, nos dará error.
Estructura de una función:
// Estructura de función // ----------------- JavaScript ------------------ // La palabra reserbada va 'function' detrás del nombre de la función // El nombre de la función ha de ser coerente según hagan sus instrucciones // Por ejemplo si la instrucción de una función es ejecutar varias operaciones, // podemos llamarla operacionesVarias o olgo más abreviado, pero siempre // ha de ser consecuente con las instrucciones que se realizan dentro de ella. function sumar(){ // Instrucciones de función var sum_1 = 4; var sum_2 = 2; var suma = sum_1 + sum_2; // Insertar resultado dentro del párrafo con ID 'demoSuma' document.getElementById('demoSuma').innerHTML = sum_1 + " + " + sum_2 + " = " + suma; } // ----------------- HTML ------------------ <form> <input value='Sumar' onclick='sumar();' type='button'> </input> </form> <!-- ESPACIO RESERVADO PARA EL RESULTADO --> <p id='demoSuma '></p>
Prueba, estructura de función:
Para invocar a una función, podemos invocarla desde cualquier parte de la página, para que se ejecuten las instrucciones dentro de las llaves "{ }".
Invocar una función desde dentro del código:
Simplemente escribimos el nombre de la función 'nombreDeLaFuncion' seguido de los dos paréntesis '( )', que son obligatorios.
// Llamar a una función
miFuncion();
Parámetros de una función:
Los parámetros nos servirán para indicar a la función con que valores queremos operar, (pasar o mandar parámetros, valores de entrada que reciben una función).
Cuando llamamos a una función con valores de entrada, tenemos que andar con cuidado ya que si la función tiene por ejemplo dos parámetros entre paréntesis, la llamada a esa función ha de tener el mismo número de parámetros, al faltar un parámetro o tener uno de más, la función no haría nada, o daría un error.
Cada parámetro va separado por una coma (,).
// Parámetros de una función // ----------------- JavaScript ------------------ function restar(a, b){ // Función con 2 parámetros // Si no se inicializaran los parámetros de la función, ésta // calcularia con los parámetros con la que ha sido invocada // es decir con el 4 y el 2. // Inicializar los parámetros de la // función con sus nuevos valores. var a = 10; // Parámetro 'a' inicializado var b = 4; // Parámetro 'b' inizializado var rslt = a - b; // Restar parámetros inizializados // Insertar resultado dentro del párrafo con ID 'demoResta' document.getElementById('demoResta').innerHTML = a + " - " + b + " = " + rslt); } // ----------------- HTML ------------------ <script type="text/javascript"> <!-- Llamada a la función --> // Los parámetros de la llamada solo se calcularán si // la función en sí, no contiene parámetros restar(4, 2); // Llamada con 2 parámetros </script> <!-- ESPACIO RESERVADO PARA EL RESULTADO --> <p id='demoResta '></p>
Función invocada al cargar la página:
En la llamada a la función, se pasan dos parámetros (4 y 2), por lo que se espera (2) como resultado.
Esto no es así ya que los parámetros de la función se han inicializado con otros valores; (a = 10 y b = 4), por lo que el resultado es la resta de los nuevos valores que se les dan dentro de la función.
Recordar que: una variable puede cambiar constantemente su valor, a diferencia de las constantes.
Pasar un parámetro
/* PASAR UN PARÁMETRO */ // ----------------- JavaScript ------------------ // Variables a trabajar var x = 8; var y = 6; // Función con paso de un parámetro function uno(vale){ var suma = vale + 2; var producto = vale * y; var division = x / vale; alert( 'Paso con un parámetro \n\n\t' + vale + ' + ' + 2 + ' = ' + suma + '\n\n\t' + vale + ' * ' + y + ' = ' + producto + '\n\n\t' + x + ' / ' + vale + ' = ' + division ); } // ----------------- HTML ------------------ <form> <input value='Pasar un parámetro' onclick='uno(4);' type='button'> </input> </form>
Prueba, pasar un parámetro, (4 ):
Función con múltiples parámetros
/* PASAR MÚLTIPLES PARÁMETROS */ // ----------------- JavaScript ------------------ var w = 'BUM'; function dos(r, s, t){ var suma = r + s + t; var resta = (r - s) - t; var texto = w + t + s; alert('Parámetros múltiples \n\n\t' + r + ' + ' + s + ' + ' + t + ' = ' + suma + '\n\n\t (' + r + ' - ' + s + ') - ' + t + ' = ' + resta + '\n\n' + w + ' + ' + t + ' + ' + s + ' = ' + texto); } // ----------------- HTML ------------------ <form> <input value='Múltiples parámetros' onclick='dos(5, 14, 20)' type='button'> </input> </form>
Prueba, pasar múltiples parámetros, (4 ):
Abrir una ventana emergente con múltiples parámetros que indican el tipo de documento y las medidas de la ventana.
/* OTRA FUNCIÓN CON MÚLTIPLES PARÁMETROS ------ */ // ----------------- JavaScript ------------------ // Variable global para poder cerrar la ventana var multiplesParam = null; // Pasar parámetros de propiedades para enlaces que abran una // ventana con las dimensiones indicadas como parámetros. function multParam(vent, vert, horiz, menu){ // Abrir nueva ventana con los parámetros indicados en su llamada. multiplesParam = window.open(vent + '.html','', 'height=' + vert + ',' + 'width=' + horiz + ',' + 'menubar=' + nenu); }; // Cerrar ventana emergente function closeMultParam(){ multiplesParam.close(); }; // ----------------- HTML ------------------ <form> <input value='Abrir' onclick='multParam('Pag', 350, 280, 'no')' type='button'> </input> <input value='Cerrar ventana' onclick='closeMultParam()' type='button'> </input> </form>
Prueba, otra función con múltiples parámetros:
Parámetros obligatorios y opcionales:
Obligatorio: Cuando tengamos declarada una función con dos parámetros, podremos preparar un bloque para que no se ejecute si no se le han pasado todos los parámetros.
Opcional: bloque preparado para que se ejecute tanto si tiene declarado uno, ninguno o los dos parámetros, pudiéndole asignar valores por defecto.
/* PARÁMETROS OBLIGATORIOS Y OPCIONALES --- */ // ----------------- JavaScript ------------------ // Variables a trabajar var suma, num1, num2; function operacion(num1, num2){ /* Los parámetros se pasan en la llamada a la función. En este caso los usuarios insertan los nº. para comprobar por ellos mismos el resultado al insertar uno, ninguno o todos los parámetros. */ num1 = prompt('Inserta un nº: '); num2 = prompt('Inserta otro nº: '); // Parámetros obligatorios if(num1 == false && num2 == false){ alert('No se han pasado los parámetros necesarios!'); // Parámetro opcional }else if(num1 == false || num2 == false){ alert('Falta un parámetro!'); }else{ num1 = parseInt(num1); / conversión explicita (Number) num2 = parseInt(num2); // conversión explicita (Number) suma = num1 + num2; alert('Suma de los parámetros:\n\n\t\t' + suma); } } // ----------------- HTML ------------------ <form> <input value='Obligar parámetros' onclick='operacion(2, 4);' type='button'> </input> </form>
Prueba, parámetros obligatorios y opcionales:
return: Esta funcionalidad que proporcionan las funciones es útil para devolvernos un valor como resultado de las instrucciones de un bloque, mediante la palabra reservada return.
Para recoger el valor devuelto por la función hay que insertar una asignación haciendo que el operando de la derecha sea una llamada a una función.
function operar(num1, num2){ Retorna el resultado de la operación return num1 + num2; } // Llamada a la función document.write( operar(5, 2) ); // Retorna 7
Estructura:
/* RETURN, ESTRUCTURA */ // ----------------- JavaScript ------------------ var c = 2; // Valores por defecto de la llamada ==> 8, 5 function operar(num1, num2){ // Insertar el resultado dentro del paráfo con ID 'demoEstruc' return document.getElementById('demoEstruc').innerHTML = 'La suma de ' + num1 + ' y ' + num2 + ' es ' + (num1 + num2); } // ----------------- HTML ------------------ <form> <input value='8 + 5' onclick='operando(8, 5);' type='button'> </input> <input value='c + 8' onclick='operando(c, 8);' type='button'> </input> <p id='demoEstruc'><p> </form>
Prueba, return, estructura:
// Valor de retorno /* RETORNAR UN VALOR PARA DESPUÉS UTILIZARLO Y REALIZAR UNA OPERACIÓN SOBRE EL */ /* calculamos x2 (el cuadrado de un nº) en la función "cuadrado(num)" y retornamos el resultado. */ function cuadrado(num){ var c = num * num; // Retornamos el resultado return c; } function retornaUnParametro(){ // Guardamos el valor del campo var x = document.getElementById('cuadrado').value; // Invocamos a la función y pasamos el valor del campo para su cálculo var almacen = cuadrado(x); // Devuelve el resultado y lo divide entre 2 document.getElementById('demoCuadrado').innerHTML = "Cuadrado de " + x + " = " + almacen + ""; var rslt = almacen / 2; return document.getElementById('demoDividir').innerHTML = "Dividido entre 2 = " + rslt + ""; } // ----------------- HTML ------------------ <form> <input value='Cuadrado del número' onclick='retornaUnParametro();' type='button'> </input> <ul> <li id='demoCuadrado'></li> <li id='demoDividir'></li> </ul> </form>
Prueba, valor de retorno:
Al devolver el valor mediante la sentencia return, la ejecución de la función se da por terminada, ignorando las líneas de código que le preceda.
Podemos utilizar la sentencia return sin ningún valor, provocando que la función termine sin devolver ningún resultado. Esto podría ser útil para cuando queramos que una parte del bloque no se ejecute, por ejemplo en función del valor de los parámetros recibidos.
/* VALOR DE RETORNO VACIO */ // ----------------- JavaScript ------------------ function precio(pvp){ // Si parámetro supera la cantidad de 200, // no imprimirá el resultado. if(pvp <= 200){ // Retorno vacio return; } // Insertar el resultado dentro del paráfo con ID 'demoReturnVacio' return document.getElementById('demoReturnVacio').innerHTML = 'Valor' + pvp + '€'; } // ----------------- HTML ------------------ <form> <input value='valor 250' onclick='precio(250);' type='button'> </input> <input value='valor 180' onclick='precio(180);' type='button'> </input> <p id='demoReturnVacio'><p> </form>
Prueba, valor de retorno vacio:
Ejemplo de sacar la media:
/* RETURN Sacar la media */ // ----------------- JavaScript ------------------ function media(va1, va2){ var rslt; va1 = prompt('La media de: ' + ' '); va2 = prompt('y de: ' + ' '); /* Sumo los valores y divido entre 2 para sacar la media */ rslt = (parseInt(va1) + parseInt(va2)) / 2; // Insertar resultado dentro del párrafo con ID 'demoMedia' return document.getElementById('demoMedia').innerHTML = 'La media de: ' + va1 + ' y ' + va2 + rslt; } // ----------------- HTML ------------------ <form> <input value='Valores de retorno' onclick='media(10, 5);' type='button'> </input> <p id='demoMedia'><p> </form>
Prueba, return, sacar la media:
Otro ejemplo de retorno de valores
/* NÚMERO PAR O IMPAR */ // ----------------- JavaScript ------------------ function numPar(num){ num = prompt('¿Par o impar?' + ''); resto = num % 2; // Sacar el módulo para diferenciar pares de impares if (resto == 0){ // Si módulo igual a '0' return alert(num + ' par'); // El nº es par }else{ // Si módulo no es igual a '0' return alert(num + ' impar'); // El nº es impar } } // ----------------- HTML ------------------ <form> <input value='Retorna par o impar' onclick='numPar(8);' type='button'> </input> <p id='demoPar'><p> </form>
Prueba, return, par o impar:
Múltiples valores de retorno: En una función, dentro de su bloque de instrucciones podemos necesitar tener varias condiciones para definir un resultado mas ajustado, pues bien también podremos introducir varias sentencias return, auque ya sabemos que cuando nos devuelva un return, finalizará la función, ignorando el resto de código.
Tendremos en cuenta que no es obligatorio recoger el valor devuelto por la función, así podemos hacer que sirva de forma directa como valor de un parámetro o podemos dejar que ese valor se pierda.
/* RECOGER VALOR RETORNO EN VARIABLE Y EN PARÁMETRO */ // ----------------- JavaScript ------------------ function alertProducto(num1, num2) { return rslt = (num1 * num2); /* Multiplica los dos parámetros */ } var rslt; function producto(num1, num2) { // Recoger el valor de retorno en VARIABLE // Insertar el resultado dentro de la lista con ID 'demoReturnMulti' rslt = document.getElementById('demoReturnMulti').innerHTML = 'Recoge el valor de retorno en VARIABLE alertProducto(2, 8); // vale 16 /* Recoger el valor de retorno como PARÁMETRO directo y sin almacenarlo */ // Insertar el resultado dentro de la lista con ID 'demoReturnMulti_2' return document.getElementById('demoReturnMulti_2').innerHTML = 'Recoger el valor de retorno como PARÁMETRO ' + alertProducto(2, 7); // vale 14 // Pérdida del valor de retorno // al no guardarse en variable. alertProducto(2, 7); } // ----------------- HTML ------------------ <form> <input value='Retorno múltiple' onclick='producto(2, 8);' type='button'> </input> <ul> <li id='demoReturnMulti'> </li> <li id='demoReturnMulti_2'> </li> </ul> </form>
Prueba, recoger valor de retorno en variable y en parámetro:
Otro ejemplo de Retorno de múltiples valores;:
// NÚMERO MAYOR // ----------------- JavaScript ------------------ var rslt; function alertNumMayor(a, z){ if(a > z){ // ... retorna a // Insertar resultado dentro del párafo con ID 'demoNumMas' return document.getElementById('demoNumMas').innerHTML = 'El mayor entre ' + a + ' y ' + z + ' es ' + a; }else{ // ... retorna z // Insertar resultado dentro del párafo con ID 'demoNumMas_2' return document.getElementById('demoNumMas_2').innerHTML = 'El mayor entre ' + a + ' y ' + z + ' = ' + z; } } // Llamar a la función que ejecuta el cálculo function numMayor(a, z){ // Envia los valores a calcular alertNumMayor(8, 10); // Envia otros valores a calcular alertNumMayor(9, 5); } // ----------------- HTML ------------------ <form> <input value='Retorno múltiple' onclick='numMayor(2, 3);' type='button'> </input> // Espacio reservado para los resultados <p id='demoNumMas'> </p> <p id='demoNumMas_2'> </p> </form>
Prueba, número mayor:
Funciones predefinidas en JavaScript: JavaScript incluye una serie de funciones ya definidas que podemos utilizar con cualquier variable, valor directo u objeto.
// Number // ----------------- JavaScript ------------------ // Expresar el valor como un número function numero(x) { alert(Number('20.25')); // Número 20.25 alert(Number(true)); // 1 alert(Number(false)); // 0 alert(Number('3,50')); // NaN, no es número } // ----------------- HTML ------------------ <form> <input value='Funcion number' onclick='numero(1);' type='button'> </input> </form>
Prueba, Función number:
// String // ----------------- JavaScript ------------------ // Convertir el valor en una cadena de caracteres function cadena(x) { alert(Number(20.25)); // Cadena 20.25 alert(Number(true)); // true alert(Number(false)); // false alert(Number('cadena')); // cadena } // ----------------- HTML ------------------ <form> <input value='Funcion string' onclick='cadena('y');' type='button'> </input> </form>
Prueba, Función string:
// isNaN // ----------------- JavaScript ------------------ // Comprobar si el valor es un número function noEsNumero(x) { alert(Number(20.25)); // Número, false alert(Number(true)); // false alert(Number('cadena')); // Cadena, true } // ----------------- HTML ------------------ <form> <input value='Funcion isNaN' onclick='noEsNumero(2);' type='button'> </input> </form>
Prueba, Función isNaN:
// isFinite // ----------------- JavaScript ------------------ // Comprobar si un valor es un número finito function finito(x) { alert(isFinite(20.25)); // Número, true alert(isFinite(true)); // true alert(isFinite('cadena')); // Cadena, false } // ----------------- HTML ------------------ <form> <input value='Funcion isFinite' onclick='finito(2);' type='button'> </input> </form>
Prueba, Función isFinite:
// parseInt // ----------------- JavaScript ------------------ // Transforma cualquier cadena en un número entero function entero(x) { alert(parseInt('2.25')); // Número entero, 2 alert(parseInt('true')); // NaN, no es número alert(parseInt('22 y 44')); // 22 solo el primer número entero } // ----------------- HTML ------------------ <form> <input value='Funcion parseInt' onclick='entero(2);' type='button'> </input> </form>
Prueba, Función parseInt:
// parseFloat // ----------------- JavaScript ------------------ // Convierte cualquier cadena en un número real (flotante o decimal) function decimal(x) { alert(parseFloat('20.25')); // Número real, 20.25 alert(parseFloat('true')); // NaN, no es número alert(parseFloat('4.60 h 2')); // 4.6 solo el número real } // ----------------- HTML ------------------ <form> <input value='Funcion parseFloat' onclick='decimal(2);' type='button'> </input> </form>
Prueba, Función parseFloat:
// escape // ----------------- JavaScript ------------------ // Codifica los caracteres especiales function escape(x) { alert(escape('una vez')); // una%20vez alert(escape('¿esta?')); // %BFest%E1%3F alert(escape("'azul'")); // %27azul%27 } // ----------------- HTML ------------------ <form> <input value='Función escape' onclick='escape(2);' type='button'> </input> </form>
Prueba, Función escape:
// unescape // ----------------- JavaScript ------------------ // Descodifica caracteres Unicode function unescape(x) { alert(unescape('una vez')); // una vez alert(unescape('¿esta?')); // ¿esta? alert(unescape("'azul'")); // 'azul' } // ----------------- HTML ------------------ <form> <input value='Función unescape' onclick='unescape(2);' type='button'> </input> </form>
Prueba, Función unescape:
// eval // ----------------- JavaScript ------------------ // Ejecuta una cadena de texto function eveluarCodigo(x) { alert(eval('8 + 2')); // 10, evalua // Llama a función "operar" 12, evalua alert(eval('var num2 = 8; operar(4, num2);')); alert(eval("bienvenido")); // undefined, no reconoce, indefinido } function operar(num, num2){ // Retorna los valores que indican los parámetros // de la llamada a la función desde el botón. return alert(num + num2); // Retorna 5 } // ----------------- HTML ------------------ <form> <input value='Función eval' onclick='eveluarCodigo(2);' type='button'> </input> <input value='Función eval_2' onclick='operar(2, 3);' type='button'> </input> </form>
Prueba, Función eval: