Javascript
Javascript
JavaScript
Apuntes básicos de programación
de JavaScript y el DOM de las páginas web
(3)
índice
(5.1) introducción _____________________________________________________7
(5.1.1) lenguajes script. JavaScript 7
(5.1.2) el triunfo de JavaScript 9
(5.1.3) herramientas para escribir JavaScript 10
(5.2) bases de JavaScript _____________________________________________ 11
(5.2.1) añadir código JavaScript en las páginas HTML 11
(5.2.2) reglas del lenguaje JavaScript 11
(5.2.3) escritura de texto en la página 12
(5.3) variables _______________________________________________________ 14
(5.3.1) crear variables 14
(5.3.2) tipos de datos 16
(5.3.3) constantes 21
(5.3.4) objetos 21
(5.3.5) expresiones regulares 28
(5.4) mensajes _______________________________________________________ 31
(5.4.1) alert 31
(5.4.2) confirm 31
(5.4.3) prompt 32
(5.5) conversiones de datos __________________________________________ 33
(5.5.1) diferencias del manejo de tipos en JavaScript respecto a los lenguajes clásicos 33
(5.5.2) operador typeof y función isNaN 33
(5.5.3) conversión implícita 34
(5.6) control del flujo del programa __________________________________ 35
(5.6.1) introducción 35
(5.6.2) instrucción if 35
(5.6.3) instrucción while 38
(5.6.4) bucle do…while 41
(5.6.5) bucle for 42
(5.7) arrays _________________________________________________________ 43
(5.7.1) qué es un array 43
(5.7.2) creación y uso básico de arrays en JavaScript 44
(5.7.3) añadir y quitar elementos a los arrays 46
(5.7.4) recorrer arrays 48
(5.7.5) comprobación de si una variable es un array 50
(5.7.6) métodos y propiedades de los arrays 50
(5.8) funciones ______________________________________________________ 52
(5.8.1) introducción 52
(5.8.2) crear funciones 53
(5)
JavaScript
(6)
(5) JavaScript
(5.1) introducción
(5.1.1) lenguajes script. JavaScript
código incrustado
El código incrustado o embebido (terrible nombre, por cierto) es un lenguaje pensado
para incorporar sus instrucciones dentro de otro lenguaje.
Es una técnica casi tan vieja como la propia ciencia de la programación de
aplicaciones. Así en el lenguaje C, por ejemplo, ha sido muy habitual añadir
instrucciones de ensamblador; o en el lenguaje Java posibilitar incluir instrucciones
SQL con las que comunicarse con la base de datos.
¿La razón? Que no hay lenguaje que sea el mejor en cada campo y, a veces, conviene
utilizar varios lenguajes para abarcar todas las ventajas. Naturalmente esto implica que
para traducir estas instrucciones junto con las del lenguaje anfitrión, el intérprete o el
compilador entienda ambos lenguajes (o bien permita añadir extensiones que le
posibiliten traducir el lenguaje embebido).
lenguajes script
Los lenguajes de script o de guiones aparecieron con los sistemas operativos. En
especial con Unix. Se trata de archivos de texto que contienen instrucciones que el
sistema es capaz de traducir.
Este archivo es interpretado (en lugar de compilado), es decir, se traduce línea a
línea. De modo que si hay un error en la línea 8, se ejecutarán las primeras 7 sin
problemas y en la octava se nos avisará del error (y si es grave se parará la ejecución
del programa). Un compilador no ejecuta nada hasta que no se reparen todos los
errores, lo cual asegura un código más limpio y eficiente, ya que el código máquina final
se decide tras examinar todo el código y así se optimiza.
Lenguaje interpretado no es sinónimo de lenguaje de script, hay lenguajes
interpretados como por ejemplo el BASIC clásico que no son considerados script. Para
que un lenguaje sea de script tiene que hacer una labor sencilla; es decir, no es un
lenguaje de propósito general (como C, Java, Python,…) sino que está pensado para una
pequeña tarea.
Ejemplos de lenguajes script son:
Shell Script. Lenguaje de tipo script que permite realizar programas para el
sistema operativo. Es especialmente utilizado el Shell Script de Unix:
VBScript. Lenguaje de macros de las aplicaciones de Microsoft. Permite
aumentar las posibilidades de trabajo con los documentos de Microsoft Office.
PostScript. Lenguaje para programar las impresoras.
ActionScript. El lenguaje interno de las aplicaciones Flash.
(7)
JavaScript
(8)
autor: Jorge Sánchez – [Link]
ASP
JSP
ColdFussion
Ruby para Ruby on Rails
desventajas de JavaScript sobre los lenguajes de script del servidor
Los lenguajes de script en el lado del cliente, dependen de que el navegador
del cliente sea compatible con el lenguaje utilizado. En el caso de los lenguajes
en el lado del servidor, el creador de la página, sabe de antemano qué
tecnología posee el servidor y adaptarse a la misma (en el caso de los clientes
no se puede adaptar a todos porque existen miles de clientes distintos).
La potencia de un servidor es mayor que la de los ordenadores de los usuarios,
por lo que las tecnologías del lado del servidor pueden utilizar lenguajes más
potentes.
El código queda oculto al cliente ya que lo que le llega es la traducción de esas
instrucciones (normalmente a HTML). Eso permite proteger la forma de acceder
a la base de datos por ejemplo (ocultando nombres de usuario y contraseñas).
ventajas de JavaScript
La interactividad de una página es más potente cuando el que interpreta las
órdenes es el navegador. De otro modo hay que esperar la respuesta a una
traducción que ocurre en un servidor, cuyo resultado es HTML, es decir poco
interactivo.
JavaScript es un lenguaje sencillo que no tiene posibilidad de utilizarse para
crear código dañino.
El éxito de JavaScript es tan patente que se han creado motores (como [Link]) que
interpretan código JavaScript para crear aplicaciones completas; es decir permiten
utilizar JavaScript como lenguaje independiente, no incrustado dentro de HTML; en
definitiva, permiten programar aplicaciones (especialmente servicios de red) completas.
Eso significa que JavaScript está más vivo que nunca y que está pasando a ser uno de
los lenguajes imprescindibles para los profesionales informáticos.
(10)
autor: Jorge Sánchez – [Link]
(11)
JavaScript
Ejemplo:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
alert("Hola")
</script>
</body>
</html>
(12)
autor: Jorge Sánchez – [Link]
[Link]
Es la forma habitual en JavaScript de conseguir escribir dentro de la página. Ejemplo:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ejemplo de [Link]</title>
</head>
<body>
<p>Este texto está escrito desde HTML</p>
<script type="text/javascript">
[Link](
"<p><strong>Este texto se escribe desde JavaScript</strong></p>");
</script>
</body>
</html>
El resultado sería:
Hay que observar que [Link] puede escribir texto HTML, es decir puede
contener etiquetas. Lo cierto es que escribir desde [Link] es como escribir
directamente desde la página.
[Link]
Esta función es la única que no está pensada para escribir dentro de una página web,
sino que escribe en la consola del sistema.
Esta consola sólo está disponible si escribimos código JavaScript para motores de
ejecución JavaScript como [Link] o si utilizamos la consola en herramientas de los
navegadores como la extensión FireBug de Mozilla Firefox o el Google Chrome
Developer Tools, disponible en los navegadores Google Chrome pulsando las teclas
Ctrl+Mayús+J
Ejemplo (mostrando la consola desde Google Chrome, una vez lanzada la página
pulsaríamos Ctrl+Mayús+J):
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
(13)
JavaScript
Cuando se programa para entornos de JavaScript fuera de una página web (como
[Link]), [Link] es la forma de escribir información desde el programa JavaScript.
(5.3) variables
(5.3.1) crear variables
identificadores
Las variables son un elemento de cualquier lenguaje de programación que permite
asignar un nombre (que en realidad se conoce como identificador de la variable) a un
determinado valor.
El identificador (el nombre) que se le pone a la variable tiene que cumplir unas
normas estrictas. En el caso de JavaScript son las siguientes:
Sólo admite letras minúsculas, mayúsculas, números o el símbolo _ (guion bajo)
Debe empezar con letras o el guion bajo
Como máximo se pueden utilizar 31 caracteres
Se pueden utilizar letras Unicode (es válido el identificador año). Aunque por la
problemática de la codificación de los documentos de texto conviene tener
(14)
autor: Jorge Sánchez – [Link]
Ejemplos de nombres:
variable5 Correcto
variable_5 Correcto
variable 5 Incorrecto
5variable Incorrecto
saldoMaximoAbsoluto Correcto
dinero$ Incorrecto
Por otro lado hay que recordar el hecho de que JavaScript diferencia entre mayúsculas y
minúsculas.
declarar variables
La declaración de variables en JavaScript se realiza con la palabra clave var. De otro
modo, intentar utilizar una variable provocaría un error, ejemplo (ejecutando
JavaScript para la consola):
[Link](x);
Si hubiéramos declarado:
var x;
[Link](x);
Indicando que aún no se ha definido qué tipo de valores tendrá x (ya que aún no se le
ha asignado ninguno). undefined es un valor especial de JavaScript mediante el cual se
nos indica si una variable ha sido definida; es muy útil a la hora de programar.
Podemos declarar más de una variable a la vez:
var x,y,z;
asignar valores
El operador de asignación es el símbolo =. Dicho símbolo nos permite dar un valor a una
variable. Una variable (de ahí su nombre) puede cambiar de valor todas las veces que
quiera. Ejemplo:
var x;
x=9; //x vale 9
x="Hola"; //x ahora vale "Hola"
En el ejemplo anterior se observa que además de cambiar de valor, incluso los valores
que toma una variable son de distinto tipo (a diferencia de lo que ocurre con lenguajes
más estructurados como Java). Se dice que JavaScript no es un lenguaje fuertemente
(15)
JavaScript
tipado; es decir, que el tipo de datos de una variable puede cambiar durante la
ejecución del programa.
Por otro lado podemos asignar valores a la vez que declaramos la variable:
var x=27;
En este código JavaScript, se hace uso de la función typeof, que sirve para saber el tipo
de datos de un número. En el caso anterior, siempre se mostraría por pantalla el texto
number.
Puesto que para JavaScript todos los números son iguales este código:
var x=17/2;
Se pueden indicar números octales colocando un cero antes del número. Ejemplo:
var x=0276;
[Link](x)
//En la consola sale 190, es decir el equivalente decimal del número octal 170
//En la consola sale 249, es decir el equivalente decimal del hexadecimal 0xF9
operadores numéricos
Con los números podemos utilizar los siguientes operadores:
Operador Significado
+ Suma
- Resta
* Multiplicación
/ División
% Módulo, resto (7%2 da como resultado uno, el resto de siete entre
dos)
++ Incremento
-- Decremento
var valor1=50;
var valor2=10;
var valor3=20;
var suma, resta, producto, division, resto;
var incremento, decremento;
Dentro de las comillas se puede desear poner más comillas. No habrá problema si
alternamos tipos de comilla. Ejemplos:
var frase="Ella dijo 'Hola' al llegar";
En el ejemplo la palabra Hola queremos que salga entrecomillada con comillas simples,
por lo que todo el texto debe de estar delimitado por comillas dobles (de otro modo se
interpretaría mal el texto).
secuencias de escape
JavaScript ha heredado numerosas características del lenguaje C. Una de ellas es la
posibilidad de utilizar secuencias de escape. Las secuencias de escape son caracteres
especiales que no se podrían escribir directamente en un string y se deben escribir de
una forma muy concreta. Para escribir secuencias de escape se usa el carácter \
(backslash) o barra inversa.
Por ejemplo supongamos que queremos encerrar dentro de un texto entrecomillado
con comillas dobles, las propias comillas dobles; si lo intentamos directamente ocurre
un error:
var s="Ana dijo "hola"al llegar a la casa";
La palabra hola no se considera parte del texto al quedar fuera de las comillas. Sin
embargo si indicamos las comillas mediante \", entonces:
var s="Ana dijo \"hola\"al llegar a la casa";
La combinación \" representa a las propias comillas. Aunque en este caso podríamos
haber escrito las comillas de forma normal, si el texto hubiera estado delimitado por
comillas simples, es una posibilidad interesante usarlas con secuencias de escape.
(18)
autor: Jorge Sánchez – [Link]
En la página web saldría escrito Hola Miguel porque el operador + une ambas
expresiones. No usar dicho operador produciría un error porque el intérprete de
JavaScript no sabría cómo ligar ambas expresiones.
booleanos
Los valores booleanos (o lógicos) sirven para indicar valores de verdad (true) o de
falsedad (false). Sirven para almacenar resultados de condiciones lógicas.
En el caso más simple tomarían valores directos de verdadero o falso:
var b=true; //la variable b vale "verdadero"
Pero pueden tomar resultados de operaciones lógicas, como:
var b= (17>5); //La variable b sigue siendo verdadera
La variable b de este ejemplo vale lo mismo que en el anterior, pero en este caso ha
tomado el valor true tras evaluar una operación lógica.
operadores lógicos
Los operadores lógicos son aquellos que obtienen un resultado de verdadero o falso.
Operador Significado
> Mayor que
(19)
JavaScript
Operador Significado
< Menor que
>= Mayor o igual
<= Menor o igual
== Igual
!= Distinto
=== Estrictamente igual.
!== Estrictamente distinto
&& "Y" lógico (AND)
|| "Ó" lógico (OR)
! "NO" lógico (NOT)
En el código anterior (que incorpora la instrucción if que se discute más adelante) sale
por pantalla el texto Hola porque la condición x>y es cierta, ya que x es mayor que y.
En el caso de la igualdad, se comparar mediante el operador ==, ejemplo:
[Link](3=="3");
En la página web en la que incorporemos este código, aparecía la palabra true. Sin
embargo:
[Link](3==="3");
Ahora escribe false porque ahora no son estrictamente iguales ya que 3 es un número y
"3" un string. El operador === sólo devuelve true si ambos valores son iguales y del
mismo tipo.
Los operadores && (AND), || (OR) y ! (NOT) permiten establecer condiciones más
complejas. Por ejemplo:
var x=19, y=13, z= 7, a="20";
if(x>y && z<a) {
alert("Hola");
}
Aparece la palabra "Hola", porque x>y y además z<a. Para que el operador && devuelve
verdadera, las dos expresiones deben serlo. El operador || devuelve verdadero si
cualquiera lo es.
valores verdaderos y valores falsos
Además de usar los valores true y false y los resultados de expresiones lógicas. Hay otra
serie de reglas que hay que tener en cuenta al tomar los valores booleanos. Son:
Los números cero (tanto en positivo como en negativo, -0) se toman como un
valor falso
(20)
autor: Jorge Sánchez – [Link]
Los valores Infinity y –Infinity (resultado de operaciones como 1/0 por ejemplo)
son verdaderos
(5.3.3) constantes
Las constantes se usan como las variables; su particularidad es que no podemos cambiar
el valor que las asignamos inicialmente. Por ello se definen con la palabra const, en
lugar de la palabra var. Se aconseja que el nombre de las constantes tenga todas las
letras en mayúsculas. Ejemplo:
const PI=3.141591
(5.3.4) objetos
En JavaScript hay sólo tres tipos de datos simples: number, string y booleanos. Pero
hay un cuarto tipo de datos: el tipo Object, que vale para cualquier otro tipo de datos
por complejo que sea.
Aunque más adelante en estos mismos apuntes se explica el uso de los objetos (o
variables de tipo Object), en este apartado se explica la forma de trabajar con los tipos
básicos, utilizándoles como objetos, ya que JavaScript permite esa posibilidad.
JavaScript, objetos y el objeto global
JavaScript es un lenguaje orientado a objetos. No posee la potencia de lenguajes como
Java para gestionar objetos complejos, pero sí es un lenguaje con capacidad de manejar
objetos.
(21)
JavaScript
De hecho en JavaScript se considera que todas las variables realmente son objetos;
incluso en JavaScript hay un objeto global que es el propietario de las funciones y
variables que creamos en nuestro código JavaScript. Así la función typedef (a la que se
accede sin utilizar objeto alguno) se dice que es un método del objeto global, luego es
accesible desde cualquier parte del código.
También los valores undefined, Infinity o NaN se consideran propiedades del objeto
global; así como las funciones isNaN, la ya comentada typedef y otras muchas que
posee el lenguaje. Parte del objeto global son los llamados objetos globales
(equivalentes a las clases estáticas de Java) como Math (que se comenta más adelante).
Cuando declaramos una variable normal, realmente lo estamos haciendo en el
objeto global y eso la hace accesible desde cualquier parte del código. Es decir, al
objeto global le podemos añadir nuevas variables y funciones.
Esta forma de entender el código JavaScript tiene que ver con la llamada
Programación Orientada a Objetos (POO) en la que los programas se crean definiendo
objetos como un conjunto de propiedades (atributos) y métodos (funciones) que pueden
realizar.
uso de los objetos JavaScript
Aunque más adelante veremos cómo crear objetos propios, cuando declaramos variables
ya tenemos en realidad objetos que queremos usar.
En casi todos los lenguajes que manejan objetos (y eso incluye a JavaScript),
podemos acceder a los métodos y propiedades de los objetos poniendo un punto y el
nombre de la propiedad. Así por ejemplo:
var x="Este es un texto de prueba";
[Link]([Link]); //Escribe 26
La propiedad length está disponible para todas las variables de tipo string; o sea para
todos los objetos de clase String, que sería la forma compatible con la POO.
En el caso de los métodos:
var x="Este es un texto de prueba";
[Link]([Link]());
//Escribe ESTE ES UN TEXTO DE PRUEBA
(22)
autor: Jorge Sánchez – [Link]
(23)
JavaScript
Método Resultado
match(expresiónRegular) Devuelve un array con todas las apariciones de la
expresión regular en el texto o el valor null si no
encaja la expresión en el texto). Ejemplo:
var texto="Esto es una estructura estática";
[Link]([Link](/st/g));
//Escribe por consola: [st,st,st]
//ya que el texto st aparece tres veces
Si hubiéramos hecho:
var texto="Esto es una estructura estática";
[Link]([Link](/st/));
Sólo nos sacaría la primera aparición (aunque en el
array habría otro elemento para indicar la posición de
esa expresión y otro más para indicar cuál era el texto
original). Es decir sin usar la g devolvería:
[ 'st', index: 1, input: 'Esto es una estructura estática' ]
replace(textoBusq,textoReem) Busca en el string el texto indicado en el primer
parámetro (textoBusq) y lo cambia por el segundo
texto (textoReem). Ejemplo:
var texto="Esto es una estructura estática";
[Link]([Link]("st","xxtt"));
//Escribe: Exxtto es una estructura estática
search(expresiónRegular) Comprueba la expresión regular en el texto y
devuelve la posición en la que se cumple dicha
expresión en el texto. Ejemplo:
var texto="Esto es una estructura estática";
[Link]([Link](/st/));
//Escribe por consola: 1
//La posición en la que aperece st por primera
//vez
(24)
autor: Jorge Sánchez – [Link]
Método Resultado
slice(inicio [,fin]) Toma del texto los caracteres desde la posición
indicada por inicio, hasta la posición fin (sin incluir
esta posición). Si no se indica fin, se toma desde el
inicio hasta el final.
Ejemplo:
var texto="Esto es una estructura estática";
[Link]([Link](3,10);
//Escribe por consola: o es un
(25)
JavaScript
Método Resultado
substr(inicio [,tamaño]) Toma del texto el número de caracteres indicados por
el parámetro tamaño, desde la posición indicada por
inicio. Si no se indica tamaño, se toma desde el inicio
hasta el final.
Ejemplo:
var texto="Esto es una estructura estática";
[Link]([Link](3,10);
//Escribe por consola: o es una e
substr no funcionaba en Internet Explorer hasta la
versión 9.
substring(inicio [,fin]) Igual que slice pero no admite usar números
negativos.
métodos HTML
Están pensados para añadir código HTML al texto. Retornan otra versión del texto (no
modifican el original) que contiene el texto junto con las etiquetas añadidas. No se
muestran en la siguiente tabla aquellos métodos que utilizan etiquetas HTML obsoletas.
Método Resultado
anchor(texto) Añade una etiqueta de tipo a al string y rellena el atributo
name de la misma con el texto indicado. De esa forma
tendríamos el código HTMl de un marcador de la página.
var texto="Apartado Principal";
[Link]([Link]("marca1"));
//Genera el código:
//<a name="marca1">Apartado Principal</a>
bold() Rodea el string con etiquetas de negrita (de tipo b y no de
tipo strong, que son las que aconsejan actualmente)
fixed() Rodea el string con etiquetas de indicación de texto fijo
(tt)
italics() Rodea el string con etiquetas de cursiva (de tipo i y no de
tipo em, que son las que aconsejan actualmente)
link(url) Quizá la más interesante de esta sección, permite rodear al
string de una etiqueta a con destino (es decir con el
atributo href) apuntando a la URL indicada. Ejemplo:
var texto="Ir a mi página";
[Link]([Link]("[Link]
//Resultado:
// <a href="[Link] a mi página</a>
(26)
autor: Jorge Sánchez – [Link]
Método Resultado
sub() Devuelve el texto rodeado por la etiqueta de subíndice
(sub)
métodos estáticos
Los métodos estáticos son un tipo especial. No se pueden utilizar mediante variables de
tipo String, sino que se utilizan poniendo el nombre de la clase String.
Método Resultado
[Link](listaCódigos) Devuelve un texto resultado de convertir los
códigos indicados en su carácter correspondiente.
Ejemplo:
[Link]([Link](72,111,108,97));
Escribe Hola
métodos y propiedades de la clase Number
La clase Number es la clase a la que pertenecen las variables numéricas de JavaScript.
Como ocurría con los textos, las variables numéricas pueden ser tratadas como objetos
que poseen métodos que permiten realizar interesantes tareas sobre los números. Se
exponen a continuación.
Método Resultado
toExponential([dígitos]) Convierte números a su formato de notación exponen-
cial. El parámetro (opcional) dígitos permite indicar el
máximo número de cifras que se usarán en dicha
notación.
var número=234567.637462;
[Link](nú[Link](5));
//Escribe por consola: 2.34568e+5
toFixed([decimales]) Convierte el número de forma que use un máximo de
decimales. Si no se indica parámetro alguno, se tomará
el valor cero (sin decimales). Ejemplo:
var número=234567.637462;
[Link](nú[Link](3));
//Escribe por consola: 234567.637
toPrecision([decimales]) Equivalente al anterior, pero usando el formato interno
de decimal de coma flotante (equivalente al tipo float
del lenguaje C)
toString() Convierte el número a string (a texto).
métodos de la clase Boolean
Las variables booleanas también se pueden tratar como objetos. En este caso sólo
disponen del método toString() para poder convertirlas a forma de texto (string)
(27)
JavaScript
var patrónExpresiónRegular=/expresion/modificadores
Esa expresión la cumplen los textos que contengan letras (mayúsculas o no) y además
permite buscar todas las apariciones de letras (no sólo para en el primer encaje).
elementos de las expresiones regulares
El patrón de una expresión regular puede contener diversos símbolos. En los siguientes
apartados se indican las posibilidades
símbolo significado
c Si c es un carácter cualquiera (por ejemplo a, H, ñ, etc.) indica, donde
aparezca dentro de la expresión, que en esa posición debe aparecer dicho
carácter para que la expresión sea válida.
cde Siendo c, d, y e caracteres, indica que esos caracteres deben aparecer de esa
manera en la expresión. Ejemplo, la expresión:
/hola/
la cumplen los textos que tengan dentro la palabra hola
(x) Permite indicar un subpatrón dentro del paréntesis. Ayuda a formar
expresiones regulares complejas.
. Cualquier carácter. El punto indica que en esa posición puede ir cualquier
carácter
(28)
autor: Jorge Sánchez – [Link]
símbolo significado
^x Comenzar por. Indica el String debe empezar por la expresión x.
x$ Finalizar por. Indica que el String debe terminar con la expresión x. Ejemplo:
/^Hola$/
Sólo cumplirán este patrón, los textos que exactamente contengan la palabra
Hola
x+ La expresión a la izquierda de este símbolo se puede repetir una o más veces
x* la expresión a la izquierda de este símbolo se puede repetir cero o más veces
x? El carácter a la izquierda de este símbolo se puede repetir cero o una veces
x?=y El carácter x irá seguido del carácter y
x?!y El carácter x no irá seguido del carácter y
x{n} Significa que la expresión x aparecerá n veces, siendo n un número entero
positivo.
x{n,} Significa que la expresión x aparecerá n o más veces
x{m,n} Significa que la expresión x aparecerá de m a n veces.
x|y La barra indica que las expresiones x e y son opcionales, se puede cumplir una
u otra.
c-d Cumplen esa expresión los caracteres que, en orden ASCII, vayan del carácter c
al carácter d. Por ejemplo a-z repsenta todas las letras minúsculas del alfabeto
inglés.
[cde] Opción, son válidos uno de estos caracteres: c, d ó e
[^x] No es válido ninguno de los caracteres que cumplan la expresión x. Por
ejemplo [^dft] indica que no son válidos las caracteres d, f ó t.
\d Dígito, vale cualquier dígito numérico
\D Todo menos dígito
\s Espacio en blanco
\S Cualquier carácter salvo el espacio en blanco
\w Word, carácter válido. Es lo mismo que [a-zA-Z0-9]
\W Todo lo que no sea un carácter de tipo Word.
Equivalente a [^A-Za-z0-9]
\0 Carácter nulo
\n Carácter de nueva línea
\t Carácter tabulador
\\ El propio símbolo \
\" Comillas dobles
\' Comillas simples
\c Permite representar el carácter c cuando este sea un carácter que de otra
manera no sea representable (como [, ], /, \,…). Por ejemplo \\ es la forma de
representar la propia barra invertida.
(29)
JavaScript
símbolo significado
\ooo Permite indicar un carácter Unicode mediante su código octal.
\xff Permite indicar un carácter ASCII mediante su código hexadecimal.
\uffff Permite indicar un carácter Unicode mediante su código hexadecimal.
Ejemplo de expresión que valida un código postal (formado por 5 números del 00000 al
52999). Los paréntesis ayudan a agrupar esta expresión:
var cp1="49345";
var cp2="53345";
var exp=/^((5[012])|([0-4][0-9]))([0-9]{3})$/;
[Link]([Link](cp1)); //Escribe true
[Link]([Link](cp2));//Escribe false
métodos de las expresiones regulares
Las variables a las que se asigna una expresión regular son en realidad objetos (clase
Object) sobre los que podemos utilizar sus métodos. El más importante es test (como se
puede apreciar en el código anterior) que devuelve verdadero si el texto que se le pasa
cumple la expresión regular. La lista completa de métodos es:
método significado
compile(expReg [,modif]) En el caso de que deseemos cambiar una variable que
almacena una expresión regular, este método es
indispensable para que dicha variable reconozca la nueva
expresión. El segundo parámetro (modif) es un string que
permite indicar los modificadores i, g o gi comentados
anteriormente.
exec(texto) Comprueba si el texto cumple la expresión regular; de ser
así devuelve el primer texto que la cumple; si no,
devuelve null
test(texto) Devuelve verdadero si el texto cumple la expresión
regular.
propiedades de las expresiones regulares
Permiten obtener información sobre las mismas.
propiedad significado
global Devuelve verdadero si el modificador global (g) forma
parte de la expresión regular.
ignoreCase Devuelve verdadero si el modificador de ignorar
mayúsculas (i) forma parte de la expresión regular.
lastIndex Posición del texto a partir de la cual se realizará la
siguiente búsqueda
multiline Devuelve verdadero si el modificador de multilínea (m)
forma parte de la expresión regular.
source Devuelve la expresión regular en forma de string
(30)
autor: Jorge Sánchez – [Link]
(5.4) mensajes
(5.4.1) alert
Como ya se ha explicado antes la función alert muestra un mensaje por pantalla. La
forma y tipo de cuadro (incluso el título) que se utiliza para mostrar el mensaje,
dependen del navegador. Ejemplos:
(5.4.2) confirm
Permite mostrar un cuadro con un mensaje que se puede aceptar o cancelar. En el caso
de que cancelemos el mismo la función confirm devuelve falso, si lo aceptamos
devuelve verdadero. Ejemplo:
Si aceptamos el cuadro la página cambiará por la del famoso buscador (gracias a la línea
location=[Link] ), de otro modo se mostrará el texto vale, nos
quedamos aquí
(31)
JavaScript
(5.4.3) prompt
prompt es una función que muestra un cuadro de mensaje en el que podremos rellenar
valores que serán devueltos por la función. De este modo esta función permite utilizar
cuadros en los que el usuario puede introducir información.
El cuadro dispone también la posibilidad de cancelar,; en ese caso devolverá el valor
null (y no false como en el caso de los cuadros confirm).
Ejemplo:
var nombre=prompt("Escribe tu nombre","");
if(nombre!=null){
[Link]("Hola "+nombre);
}
else{
[Link]("has cancelado el cuadro");
}
Si el usuario acepta el cuadro, se escribirá Hola seguido del texto que haya escrito en el
cuadro. Si cancela saldrá el texto Has cancelado el cuadro.
La función prompt tiene dos parámetros separados por comas (aunque el segundo es
opcional). El segundo parámetro (que también es un texto) sirve para rellenar
inicialmente el cuadro con el texto que indiquemos. Ejemplo:
var nota=prompt("Qué nota has sacado","5");
Mostrará el cuadro:
(32)
autor: Jorge Sánchez – [Link]
Otro detalle a tener en cuenta es que lo que devuelve el cuadro es un texto y que no
hay manera de restringir lo que el usuario puede escribir a un tipo de datos concreto (es
decir, no podemos hacer que el usuario puede meter sólo números), lo que es un gran
problema.
Eso significa que hasta que no se ejecuta el programa no se sabe lo que va a ocupar en
memoria y esa ocupación cambia constantemente (lo que hace de JavaScript un
lenguaje poco eficiente, es decir menos veloz que lenguajes como C, por ejemplo). En
Java o C se sabe de antemano lo que ocupan las variables: trabajan de forma más
eficiente, pero son mucho menos libres para el programador.
Hay que tener en cuenta que JavaScript es un lenguaje pequeño pensado para ser
utilizado en páginas web, por lo que no se requiere una gran potencia, pero sí una gran
versatilidad.
(33)
JavaScript
Aquí el operador + (más) no realiza la suma de los números, sino que encadena los
mismos. Esto puede tener importantes problemas, por lo que a veces es necesario
convertir los datos.
métodos y funciones de conversión
Para convertir datos disponemos de varias posibilidades:
Utilizar métodos constructores de las clases String, Number y/o Boolean. A
estas tres funciones (todas ellas comienzan con la letra mayúscula) se les pasa
el dato a convertir. Ejemplo:
var x="5";
[Link](Number(x)+3); //Escribe 8
Al convertir a Number (número) si el dato no es convertible, entonces devuelve
el valor NaN indicando que el original no era numérico
Utilizar los métodos globales parseInt (pasar a entero) o parseFloat (pasar a
decimal). Son la forma habitual de conversión a número ya que es la más
potente. En ambos casos tomarán los números que tenga el texto que deseamos
convertir y si aparecen símbolos no numéricos, simplemente los ignoran.
parseInt además ignora el punto decimal. Ejemplo:
var x="1234.567abcd12345";
[Link](parseInt(x)); //Escribe 1234
[Link](parseFloat(x));//Escribe 1234.567
Tanto parseInt como parseFloat si no tienen manera de pasar el texto a
número (porque no hay números a la izquierda), devolverán NaN.
(34)
autor: Jorge Sánchez – [Link]
(5.6.2) instrucción if
sentencia condicional simple
Se trata de una sentencia que, tras evaluar una expresión lógica, ejecuta una serie de
instrucciones en caso de que la expresión lógica sea verdadera. Si la expresión tiene un
resultado falso, no se ejecutará ninguna expresión. Su sintaxis es:
if(expresión lógica) {
instrucciones
…
}
Las llaves se requieren sólo si va a haber varias instrucciones. En otro caso se puede
crear el if sin llaves, es decir:
Ejemplo:
if(nota>=5){
[Link]("Aprobado");
aprobados++;
}
(35)
JavaScript
[nota<5]
incrementa nº
aprobados
if(expresión lógica){
instrucciones
….
}
else {
instrucciones
…
}
Como en el caso anterior, las llaves son necesarias sólo si se ejecuta más de una
sentencia. Ejemplo de sentencia if-else:
if(nota>=5){
[Link]("Aprobado");
aprobados++;
}
else {
[Link]("Suspenso");
suspensos++;
}
(36)
autor: Jorge Sánchez – [Link]
[nota<5] [nota>=5]
decrementa nº incrementa nº
aprobados aprobados
if (x==1) {
instrucciones
…
}
else {
if(x==2) {
instrucciones
…
}
else {
if(x==3) {
instrucciones
…
}
}
}
(37)
JavaScript
if (x==1) {
instrucciones que se ejecutan si x vale 1
…
}
else if (x==2) {
instrucciones que se ejecutan si x no vale 1 y vale 2
…
}
else if (x==3) {
instrucciones que se ejecutan si x no vale ni 1 ni 2 y vale 3
…
}
else{
instrucciones que se ejecutan si x no vale ni 1 ni 2 ni 3
}
(38)
autor: Jorge Sánchez – [Link]
var i=1;
while (i<=100){
[Link](i);
i++;
}
[i<=100]
Escribe i [i>100]
Incrementa i
(39)
JavaScript
Ejemplo:
(40)
autor: Jorge Sánchez – [Link]
Comparando los bucles de centinela con los de contador, podemos señalar estos puntos:
Los bucles de contador se repiten un número concreto de veces, los bucles de
centinela no
Un bucle de contador podemos considerar que es seguro que finalice, el de
centinela puede no finalizar si el centinela jamás varía su valor (aunque, si está
bien programado, alguna vez lo alcanzará)
Un bucle de contador está relacionado con la programación de algoritmos
basados en series.
Un bucle podría ser incluso mixto: de centinela y de contador. Por ejemplo imaginar un
programa que escriba números de uno a 500 y se repita hasta que llegue un múltiplo de
7, pero que como mucho se repite cinco veces. Sería:
Sintaxis:
do {
instrucciones
} while (expresión lógica)
int i=0;
do {
i++;
[Link](i);
} while (i<1000);
(41)
JavaScript
Se utiliza cuando sabemos al menos que las sentencias del bucle se van a repetir una
vez (en un bucle while puede que incluso no se ejecuten las sentencias que hay dentro
del bucle si la condición fuera falsa, ya desde un inicio).
De hecho cualquier sentencia do..while se puede convertir en while. El ejemplo
anterior se puede escribir usando la instrucción while, así:
int i=0;
i++;
[Link](i);
while (i<1000) {
i++;
[Link](i);
}
for(inicialización;condición;incremento){
sentencias
}
Las sentencias se ejecutan mientras la condición sea verdadera. Además antes de entrar
en el bucle se ejecuta la instrucción de inicialización y en cada vuelta se ejecuta el
incremento. Es decir el funcionamiento es:
(1) Se ejecuta la instrucción de inicialización
(2) Se comprueba la condición
(3) Si la condición es cierta, entonces se ejecutan las sentencias. Si la condición es
falsa, abandonamos el bloque for
(42)
autor: Jorge Sánchez – [Link]
for(var i=1;i<=1000;i++){
[Link](i+"<br>");
}
(5.7) arrays
(5.7.1) qué es un array
Todos los lenguajes de programación disponen de un tipo de variable que es capaz de
manejar conjuntos de datos. Es lo que se conoce comúnmente como arrays de datos.
También se las llama listas, vectores o arreglos; pero todos ellos son nombres que
tienen connotaciones que pueden confundirse con otros tipos de datos, por ello es más
popular el nombre sin traducir al castellano: array.
La idea es solucionar un problema habitual al programar. Por ejemplo, supongamos
que deseamos almacenar 25 notas de alumnos que luego se utilizarán en el código
JavaScript. Eso es tremendamente pesado de programar. Manejar esos datos significaría
estar continuamente manejando 25 variables. Los arrays permiten manejar los 25 datos
bajo un mismo nombre. Ese nombre es el de la variable de tipo array (mejor dicho: el
objeto de tipo array) que aglutina a todos los elementos, pero también nos permite la
capacidad de acceder individualmente a cada elemento.
Los arrays son una colección de datos al que se le pone un nombre (por ejemplo
nota). Para acceder a un dato individual de la colección hay que utilizar su posición. La
posición es un número entero, normalmente se le llama índice; por ejemplo nota[4] es
el nombre que recibe el quinto elemento de la sucesión de notas. La razón por la que
nota[4] se refiere al quinto elemento y no al cuarto es porque el primer elemento tiene
índice cero.
Esto, con algunos matices, funciona igual en casi cualquier lenguaje. Sin embargo en
JavaScript los arrays son objetos. Es decir no hay un tipo de datos array, si utilizamos
typeof para averiguar el tipo de datos de un array, el resultado será la palabra object.
(43)
JavaScript
Los corchetes vacíos tras la asignación, significan array vacío. Si deseáramos indicar
valores, se hace:
var nota=[7,8,6,6,5,4,6,5,3,2];
En esta caso la variable nota es un array de 10 elementos, todos números.
tipo de un array
Como se ha comentado anteriormente, este código:
[Link](typeof(nota));
escribe object. En JavaScript sólo hay cuatro tipos de datos (number, boolean, string y
object), se considera que un array es un objeto (como ocurre con las expresiones
regulares).
(44)
autor: Jorge Sánchez – [Link]
Se permite no rellenar todos los valores, las comas que se quedan sin valor se tienen en
cuenta. Así por ejemplo si con el array anterior, escribimos:
[Link](nota[2]);
El resultado es undefined, indicando que ese elemento está indefinido. Es más este
código:
[Link](nota[2000]);
devuelve también undefined (y no error). De hecho se permite incluso códigos como:
var nombre=[];
nombre[3]="Fernando";
nombre[5]="Alicia";
[Link](nombre[3]);//Escribe Fernando
[Link](nombre[4]); //Escribe undefined
Directamente usamos índices y los no utilizados, son elementos indefinidos.
tamaño de un array
Puesto que un array es un objeto, tiene métodos y propiedades que podemos utilizar. La
propiedad length sirve para obtener el tamaño de un array. Ejemplo:
var nota=[7,8,6,6,5,4,6,5,3,2];
[Link]([Link]); //Escribe 10
En el caso de arrays con elementos indefinidos, hay que tener en cuenta que length
cuenta todos los elementos (y eso incluye a los indefinidos). Ejemplo:
var nota=[7,6,,5,,,8,9,,8];
[Link]([Link]); //Escribe 10, cuenta los indefinidos
Otro ejemplo:
var nombre=[];
nombre[3]="Fernando";
nombre[5]="Alicia";
[Link]([Link]); //Escribe 6
En este último ejemplo el resultado de length es seis, porque el último índice utilizado
es el 5 (sexto elemento). De manera que los índices 5 y 3 están definidos, pero el 0,1,2
y 4 pasan a estar indefinidos.
(45)
JavaScript
arrays heterogéneos
Es perfectamente posible que un array contenga elementos de diferente tipo. Por
ejemplo:
var a=[3,4,"Hola",true,[Link]()];
Ese tipo de array es el llamado heterogéneo y es muy habitual en JavaScript. Incluso
podemos definir arrays de este tipo.
var b=[3,4,"Hola",[99,55,33]];
El elemento con índice 3 del array b, es otro array. De modo que esta instrucción es
totalmente posible:
[Link](b[3][1]);//Escribe 55
En el ejemplo anterior, b[3][1] hace referencia al segundo elemento del cuarto
elemento de b. Las posibilidades de arrays en JavaScript son espectaculares.
definir arrays de manera formal
Hay una forma de definir arrays más coherente con la programación orientada objetos
que será más del gusto de los programadores conocedores del lenguaje Java. Se trata de
usar la función constructora de objetos de clase Array (ya que un array es un objeto).
Los nombres de clase se ponen con la primera inicial en mayúsculas (no estamos
obligados, pero es un normal muy importante a cumplir y que se cumple
escrupulosamente en las clases estándares de JavaScript)), por eso es Array y no array.
Ejemplos de arrays definidos de esta forma son:
var a=new Array();
var b=new Array(7,8,6,6,5,4,6,5,3,2);
var d=new Array(3,4,"Hola",[99,55,33]);
var e=new Array(3,4,"Hola",new Array(99,55,33));
Sin embargo esta otra:
var c=new Array(7,6,,5,,,8,9,,8);
Da error, porque con new Array no se pueden dejar elementos sin defiunir.
(46)
autor: Jorge Sánchez – [Link]
Una forma más directa de hacer lo mismo (usando métodos de los arrays) es usar el
método push:
var a=new Array(1,2,3,4,5);
[Link](6);
[Link](a);
//Escribe por consola: [ 1, 2, 3, 4, 5, 6 ]
añadir al principio
Otra función, nos permite añadir elementos al principio (en el índice cero) y desplazar
el resto de elementos. Se trata de unshift:
var a=new Array(1,2,3,4,5);
[Link](6);
[Link](a);
//Escribe por consola: [ 6,1, 2, 3, 4, 5 ]
quitar último elemento
En este caso es la función pop la encargada:
var a=new Array(1,2,3,4,5);
[Link]();
[Link](a);
//Escribe por consola: [ 1, 2, 3, 4]
quitar primer elemento
Lo hace la función shift:
var a=new Array(1,2,3,4,5);
[Link]();
[Link](a);
//Escribe por consola: [ 2, 3, 4,5]
quitar un elemento de una posición concreta
Otra posibilidad es eliminar un elemento cuya posición conocemos. El hueco que deja
ese elemento lo ocupan los elementos a su derecha que se desplazarán hacia el nuevo
hueco. El método encargado es delete al que se le indica el índice del elemento a
eliminar:
var a=new Array(1,2,3,4,5);
delete a[1];
[Link](a);
//Escribe por consola: [ 2, 3, 4,5]
(47)
JavaScript
es decir, los elementos undefined aparecen. Para saltarnos esos elementos, debemos
cambiar el código (añadiendo una instrucción if):
var nota=[2,3,,,6,,3,,,5,,,8];
for(var i=0;i<[Link];i++){
if(nota[i]!=undefined)
[Link](nota[i]+" ");//Escribe la nota y deja un espacio
}
(48)
autor: Jorge Sánchez – [Link]
Ejemplo:
var nota=[2,3,,,6,,3,,,5,,,8];
for(var i in nota){
[Link](nota[i]+" ");//Escribe la nota y deja un espacio
}
es una forma más sencilla que la comentada en el apartado anterior de mostrar sólo los
elementos definidos en el array. Escribiría: 2 3 6 3 5 8
recorrido con función forEach
En las versiones modernas de JavaScript existe una forma de recorrer arrays que
procede de los lenguajes como Python o Ruby. Se trata de usar el método forEach de
los arrays.
Dicho método exige el uso de una función (que normalmente es anónima, se explican
más adelante; es lo que se conoce como una función callback) y eso es lo que complica
un poco su uso. Pero cuando se conocen las funciones, se convierte en una forma muy
interesante de recorrer.
A la función interna se le pueden (no es obligatorio) indicar dos parámetros; el
primero es el nombre de la variable que almacena cada elemento a medida que se
recorrer, y el segundo el índice que dicho elemento tienen en el array. La sintaxis
habitual es:
[Link](function(elemento,índice){
…//código que se ejecuta por cada elemento del array
});
Ejemplo:
var nota=[2,3,,,6,,3,,,5,,,8];
[Link](function(elemento,indice){
[Link]("La nota nº "+indice+" es "+elemento+"<br>");
});
Lo que resulta de este código es:
La nota nº 0 es 2
La nota nº 1 es 3
La nota nº 4 es 6
La nota nº 6 es 3
La nota nº 9 es 5
La nota nº 12 es 8
(49)
JavaScript
(50)
autor: Jorge Sánchez – [Link]
propiedad significado
pop() Elimina el último elemento del array (y le devuelve
como resultado)
var a=[1,2,3,4,5,6,7,8,9];
var b= [Link](2,5);
[Link](b);
Por consola sale: [ 3, 4, 5 ]
sort([funciónDeOrdenación]) Ordena el array. El orden que toma es el de la tabla
ASCII. Es decir, ordena bien el texto en inglés
(aunque distingue en mayúsculas y minúsculas).
[Link](function(a,b){return a-b;});
(51)
JavaScript
propiedad significado
splice(inicio,número[,listaEltos]) Elimina del array elementos. Los elementos
eliminados son los que van desde la posición
indicada por inicio, y elimina el número de
elementos indicados.
var a=[1,2,3,4,5,6,7,8,9];
[Link](3,2);
[Link](a); //escribe: [ 1, 2, 3, 6, 7, 8, 9 ]
Otro ejemplo:
var a=[1,2,3,4,5,6,7,8,9];
[Link](3,2,11,12,13,14,15,16);
[Link](a);
//escribe: [ 1, 2, 3, 11, 12, 13, 14, 15, 16, 6, 7, 8, 9 ]
toString() Convierte el array en forma de string (texto).
Separa cada elemento con una coma.
(5.8) funciones
(5.8.1) introducción
En la programación clásica, las funciones fueron la base de la llamada programación
modular que se llamada así porque permitía la posibilidad de que un programa se
dividiera en un conjunto de módulos cada uno de los cuales se programaba de manera
independiente.
Esta idea persiste actualmente y de hecho todos los lenguajes actuales poseen algún
mecanismo de modularidad. En el caso de JavaScript (aparte de la creación de clases y
objetos), se pueden crear funciones para conseguir dicha modularidad.
Una función es código JavaScript que realiza una determinada tarea a partir de unos
datos de entrada. Dicha tarea por lo general consiste en devolver un determinado
resultado a partir de los datos de entrada, o bien, realizar una acción aunque no
devuelve ningún resultado.
Es decir, la idea es la de las funciones matemáticas. La ventaja es que la función
puede ser invocada una y otra vez y que una misma función nos puede ayudar en
diferentes programas, bastará con incluir el archivo en el que almacenemos las
funciones.
(52)
autor: Jorge Sánchez – [Link]
function nombre([listaParámetros]){
…cuerpo de la función
}
Ejemplo:
function cuadrado(n){
return n*n;
}
Esta función devuelve el cuadrado de un número, no es muy necesaria, pero ilustra
cómo crear funciones. Una función más útil sería:
function escribirArray(a){
if([Link](a)){
[Link]("[");
for(i in a){
[Link](a[i]+" ")
}
[Link]("]");
}
else{
[Link]("No es un array");
}
}
En este caso la función permite escribir en una página el contenido de un array. Esta
función no devuelve ningún resultado.
Es recomendable declarar las funciones en un archivo externo si prevemos que nos
van a ser útiles en diferentes páginas o si sólo se utilizan en el archivo actual,
declararlas en el apartado de cabecera (head) de la página web.
(53)
JavaScript
Aunque el parámetro x toma el valor de la variable v, lo que hace es tomar una copia
del mismo. Y por ello aunque modificamos su valor, sólo modificamos el valor de esa
copia. La variable v original no se ha tocado y por ello seguirá valiendo 9. A esta forma
de manejar los parámetros, se la llama paso por valor, porque el parámetro recoge el
valor de la variable. En JavaScript todas las variables básicas (boolean, number y
string) se pasan por valor.
Sin embargo en este otro ejemplo:
function f(x){
x[2]=3;
}
var v=[1,1,1,1,1];
f(v);
[Link](v); //Por consola sale: [1,1,3,1,1]
La variable v (un array) si se ha modificado. Es decir x, no recibe una copia sino que
recibe una referencia a la variable original. Dicho de otra forma: cambiar x es cambiar
(54)
autor: Jorge Sánchez – [Link]
v. Eso es un paso por referencia. En JavaScript todos los objetos, es decir variables de
tipo object (los arrays son object) se pasan por referencia.
Este funcionamiento es idéntico al del lenguaje Java.
(55)
JavaScript
Ejemplo:
function escribirArrays(){
//Bucle que recorre todos los argumentos
for(var i=0;i<[Link];i++){
if([Link](arguments[i])){
escribirArray(arguments[i]);
[Link]("<br>");
}
}
}
var array1=[1,2,3,4,5];
var array2=[6,7,8,9];
escribirArray(array1,array2);
/* Escribe:
[1 2 3 4 5]
[6 7 8 9]
*/
(56)
autor: Jorge Sánchez – [Link]
Ejemplo:
var a=[1,2,3,4,5,6];
[Link](function(elemento,índice){
a[índice]*=2;
});
Cada elemento del array doblará su valor.
(5.9) objetos
(5.9.1) programación orientada a objetos en JavaScript
JavaScript admite el uso de objetos. No es un lenguaje completamente orientado a
objetos (no cumple las reglas fundamentales de este tipo de programación) pero sí es un
lenguaje basado en objetos. Estos significa que JavaScript maneja objetos. La cuestión
es ¿qué es un objeto?
Un objeto es un tipo de variable compleja que posee tanto datos (llamados
propiedades) como funciones (llamadas métodos). Las propiedades contienen la
información de un objeto, los métodos permiten definir las acciones que podemos
realizar con el objeto.
objeto.método([parámetros])
Ejemplo:
[Link](2);
(57)
JavaScript
(58)
autor: Jorge Sánchez – [Link]
La idea es que ahora no creamos directamente un objeto sino una clase un tipo de
objeto. Crear un objeto a partir de su clase implica usar la acción new.
En estas funciones es muy habitual usar la expresión this. Esta palabra reservada del
lenguaje representa al objeto actual y a través de ella podremos acceder a las
propiedades y métodos del objeto actual.
En los nombres de las clases que declaramos a través de su constructor, la primera
letra del nombre se pone en mayúsculas. No es una regla obligatoria, pero sí muy
recomendable.
Ejemplo:
function Punto(x,y){
this.x=x;
this.y=y;
}
[Link]();//Escribe (3,4)
(59)
JavaScript
}
[Link]=function(v){
this.x+=v;
this.y+=v;
}
}
for(propiedad in objeto){
…instrucciones que se ejecutan por cada propiedad
}
constantes de Math
Permiten usar en el código valores de constantes matemáticas por ejemplo tenemos a
[Link], que representa el valor de Pi. La lista completa es:
constante significado
E Valor matemático e
LN10 Logaritmo neperiano de 10
LN2 Logaritmo neperiano de 2
LOG10E Logaritmo decimal de e
LOG2E Logaritmo binario de e
PI La constante π (Pi)
SQRT1_2 Resultado de la división de uno entre la raíz cuadrada de dos
SQRT2 Raíz cuadrada de 2
(61)
JavaScript
métodos de Math
método significado
abs(n) Calcula el valor absoluto de n.
acos(n) Calcula el arco coseno de n
asin(n) Calcula el arco seno de n
atan(n) Calcula el arco tangente de n
ceil(n) Redondea el número n (si es decimal) a su valor superior. Por
ejemplo si el número es el 2.3 se redondea a 3
cos(n) Coseno de n
exp(n) e elevado a n: en
floor(n) Redondea el número n (si es decimal) a su valor inferior. Por
ejemplo si el número es el 2.8 se redondea a 2
log(n) Calcula el logaritmo decimal de n
max(a,b) a y b deben de ser dos números y esta función devuelve el mayor
de ellos.
min(a,b) a y b deben de ser dos números y esta función devuelve el menor
de ellos.
pow(a,b) Potencia. Devuelve el resultado de ab
random() Devuelve un número aleatorio, decimal entre cero y uno-
round(n) Redondea n a su entero más próximo. round(2.3) devuelve 2 y
round(2.5) devuelve 3
sin(n) Devuelve el seno de n
sqrt(n) Raíz cuadrada de n
tan(n) Tangente de n
Date
Es el nombre de la clase preparada para manejar fechas. Crear un objeto de fecha es
usar el constructor de Date (que tiene varios en realidad). Por ejemplo:
var hoy=new Date();
[Link](hoy);
Ejemplo:
var d=new Date(2013,5,27,18,12,0,0);
[Link](d);
Muestra:
(62)
autor: Jorge Sánchez – [Link]
Hay una tercera opción que es crear una fecha a partir de un número que simboliza el
número de milisegundos transcurridos desde el 1 de enero de 1970. Ejemplo:
var d2=new Date(1000);
[Link](d2);
Saldría:
Thu Jan 01 1970 [Link] GMT+0100 (Hora estándar romance) ;
métodos
Usan el nombre de un objeto para modificar o mostrar sus valores.
Ejemplo:
var d=new Date();
[Link]([Link]()); //Escribe 2013, año de la fecha d
método significado
getDate() Devuelve el día del mes de la fecha (de 1 a 31)
getUTCDate() Devuelve el día del mes de la fecha universal
getDay() Obtiene el día de la semana de la fecha (de 0 a 6)
getUTCDay() Obtiene el día de la semana de la fecha universal
getFullYear() Obtiene el año (con cuatro cifras)
getUTCFullYear() Obtiene el año (con cuatro cifras). La diferencia es que UTC
usa la fecha global (lo que corresponda al meridiano de
Greenwich.
getHours() La hora de la fecha (número que va de 0 a 23)
getUTCHours() Formato universal de la anterior (la hora va de cero a 23)
getMiliseconds() Milisegundos en la fecha actual
getUTCMiliseconds() Milisegundos en la fecha actual pasada al formato universal
getMinutes() Minutos
getUTCMinutes() Minutos en el formato universal
getMonth() Número de mes; de 0, enero, a 11, diciembre,
getUTCMonth() Número de mes en formato universal
getSeconds() Segundos
getUTCSeconds() Segundos en formato universal
getTime() Valor en milisegundos de la fecha. Número de segundos
transcurridos desde el 1 de enero de 1970, respecto a esa
fecha
getTimezoneOffset() Minutos de diferencia sobre la hora universal (la del
meridiano de Greenwich)
setDate(día) Modifica el día del mes de la fecha
setUTCDate(día) Versión universal
setFullYear(año) Modifica el año de la fecha
setUTCFullYear(año) Versión universal
(63)
JavaScript
método significado
setHours(hora) Modifica la hora
setUTCHours(hora) Versión universal
setMilliseconds(ms) Modifica los milisegundos
setUTCMilliseconds(ms) Versión universal
setMinutes(minutos) Modifica los minutos
setUTCMinutes(minutos) Versión universal
setMonth(mes) Modifica el número de mes
setUTCMonth(mes) Versión universal
setSeconds(segundos) Modifica los segundos
setUTCSeconds(segundos) Versión universal
setTime(milisegundos) Modifica la fecha haciendo que valga la fecha
correspondiente a aplicar el número de milisegundos
indicados, contados a partir del 1 de enero de 1970
toDateString() Muestra la fecha en un formato más humano de lectura
toGMTString() Igual que la anterior, pero antes de mostrarla convierte la
fecha a la correspondiente según el meridiano de
Greenwich
toISOString() Muestra la fecha en formato ISO: yyyy-mm-
ddThh:mm:[Link]
Ejemplo:
var d=new Date();
[Link]([Link]());
Sale (si son las [Link],268 segundos del día 27 de mayo de
2013 en el meridiano de Greenwich)
2013-05-27T[Link].268Z
toJSON() Muestra la fecha en formato JSON. Obtiene lo mismo que la
anterior.
toLocaleDateString() Muestra la fecha (sin la hora) en formato de texto usando la
configuración local.
toLocaleString() Muestra la fecha y hora en formato de texto usando la
configuración local.
toTimeString() Muestra la hora (sin la fecha) en formato de texto usando la
configuración local.
toString() Muestra la fecha en formato de texto usando la
configuración habitual de JavaScript
toUTCString() Versión en formato universal de la anterior.
(64)
autor: Jorge Sánchez – [Link]
método significado
now() Fecha actual en milisegundos desde el día 1 de enero de 1970
parse(objetoFecha) Obtiene una representación en forma de texto de la fecha.
UTC( Consigue, de la fecha indicada, la forma equivalente en la que
año,mes,día, tendremos los milisegundos transcurridos desde el 1 de enero de
1970.
horas, minutos,
segundos,ms)
(65)
JavaScript
(66)
autor: Jorge Sánchez – [Link]
(5.11) DOM
(5.11.1) introducción
DOM es la abreviatura de Document Object Model, el modelo de objetos del
documento. En definitiva es la forma que dispone JavaScript para acceder a los
elementos de una página web; esta forma de acceder se basa en objetos JavaScript.
El DOM entiende que una página es un árbol de elementos cuya raíz es el
documento. De esta forma, la página:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Documento HTML</title>
</head>
<body>
<section id="s1">
<h1>Título</h1>
<p>Ejemplo de documento <strong>DOM</strong>Visión en árbol</p>
</section>
<section id="s2">
<p>Aquí sólo hay texto</p>
</section>
</body>
</html>
(67)
JavaScript
Ilustración 7, Esquema del DOM del documento anterior. En azul, los elementos, en naranja los
atributos y en gris los textos. Se marcan en verde algunas relaciones entre los nodos
(68)
autor: Jorge Sánchez – [Link]
}
</script>
</head>
<body onload="f1()">
(69)
JavaScript
<p>Blanditiis cumque dolorum id impedit molestias quae, ut? Alias amet aut fuga
laboriosam magnam odit omnis optio
quaerat qui. Alias architecto esse incidunt maiores neque pariatur quam, sed
suscipit vero?</p>
<p class="rojo">Ad alias culpa cupiditate dolorem doloribus eos est fugiat iusto
laborum laudantium magnam maxime modi natus non
pariatur perspiciatis praesentium repellat, repudiandae soluta tempora tempore
unde veniam vitae voluptatem
voluptatum?</p>
(70)
autor: Jorge Sánchez – [Link]
Para conocer todos los posibles selectores hay que estudiar con detalle los selectores de
CSS.
uso de los elementos como nodos
En el árbol de los elementos de una página, podemos entender que los elementos,
atributos e incluso el texto son nodos del árbol y que entre los nodos del árbol tenemos
padres (parent), hijos (children) y hermanos (siblings).
Esta forma de ver los elementos nos permite acceder a propiedades mediante las
cuales, a partir de un elemento podemos seleccionar otros que tengan relación de
parentesco con él.
propiedad uso
attributes Selecciona todos los atributos del elemento. Devuelve un array de
objetos atributos
childNodes Devuelve un array con todos los elementos que cuelgan del actual
firstChild Selecciona el primer elemento hijo del actual
lastChild Selecciona el último elemento hijo del actual
nextSibling Selecciona el siguiente hermano siguiendo el árbol DOM
nodeName Obtiene el nombre del nodo. Si es un elemento devuelve su tipo,
si es un atributo su nombre.
nodeType Devuelve el tipo de nodo. Si lo usamos sobre un elemento
devuelve 1, si es un atributo 2, si es un texto 3.
Las constantes pertenecientes a los objetos de nodo:
ELEMENT_NODE, ATTRIBUTE_NODE y TEXT_NODE están
asociadas a esos valores.
parentNode Obtiene el padre del nodo al que se aplica este método
previousSibling Obtiene el nodo del mismo nivel, anterior en el árbol DOM
textContent Obtiene el contenido (sólo el texto) del nodo, sea del tipo que
sea. También permite modificarle.
(71)
JavaScript
this
Se ha comentado anteriormente, pero hay que tener en cuenta que la palabra this,
selecciona al objeto actual. Eso permite hacer código como este:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ejemplo de innerHTML</title>
<script type="text/javascript">
function mostrarContenido(e){
alert("El contenido del elemento es "+ [Link]);
}
</script>
</head>
<body>
<p onclick="mostrarContenido(this);">Párrafo nº 1</p>
<p onclick="mostrarContenido(this);">Párrafo nº 2</p>
</body>
</html>
Al hacer clic en el primer párrafo se mostrará el texto "Párrafo nº 1", en el segundo
mostrará "Párrafo nº 2"
(72)
autor: Jorge Sánchez – [Link]
Ejemplo:
<!doctype html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Ejemplo de innerHTML</title>
<script type="text/javascript">
function colorearParrafo(parrafo){
var contenidoAnterior=[Link];
[Link]="<div style='color:red'>"+
contenidoAnterior+
"</div>";
}
</script>
</head>
<body>
<p onclick="colorearParrafo(this);">Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Adipisci, aperiam cumque dolore ea earum eum perspiciatis
quas ratione
repellat soluta veniam veritatis voluptas? At doloribus incidunt neque tenetur?
Aut, dolorum?</p>
<p onclick="colorearParrafo(this);">Amet autem dolorem ea, eos iusto
molestiae nihil nobis
veritatis? Consequuntur, deserunt enim error eveniet ex explicabo illum ipsam
molestias
nesciunt odit placeat possimus quae, quasi qui quod unde vitae?</p>
(73)
JavaScript
[Link](stringAtributo, stringValor);
(74)
autor: Jorge Sánchez – [Link]
método significado
appendChild(nodo) Hace que el nodo indicado se coloque como
último hijo del elemento
cloneNode(nodo) Duplica el nodo indicado
compareDocumentPosition(nodo) Compara las posiciones relativas de los nodos
hasAttributes() Devuelve verdadero si el elemento tiene
atributos definidos
hasChildNodes() Devuelve verdadero si el elemento tiene hijos
insertBefore(nodo) Añade el nodo antes del primer hijo del
elemento
isEqualNode(nodo) Devuelve verdadero si dos nodos son iguales
isSameNode(nodo) Devuelve verdadero si los dos nodos son iguales
normalize() Borrar los nodos de texto vacíos y une los nodos
de texto adyacentes
removeChild(nodo) Borra el nodo hijo indicado y le devuelve como
resultado (si el nodo no existe, devuelve null)
replaceChild(nodoViejo,nodoNuevo) cambia el nodo viejo por el nuevo nodo dentro
de los hijos del elemento
crear nuevos nodos en el árbol
Muchos de los métodos anteriores tienen sentido si creamos elementos nuevos. Para ello
el objeto document dispone del método createElement, al que se le pasa (como texto
entrecomillado el tipo de elemento que estamos creando. Ejemplo:
[Link]("p");//crea un nuevo párrafo
Aún más, disponemos del método createTextNode para crear nuevos nodos de tipo
texto. Así este código:
var parrafo=[Link]("p");//crea un nuevo párrafo
var texto=[Link]("Rosa, rosae");
[Link](texto); //Añade texto al párrafo
[Link]("body")[0].appendChild(parrafo);
//Añade el párrafo al final del body
En el ejemplo anterior, se consigue que al final del documento haya un párrafo que diga
Rosa, rosae
(75)