Javascript
Javascript
PROGRAMACIÓN II
¿Qué es JavaScript?
• Definición
JavaScript es un lenguaje de programación
interpretado con opciones orientadas a objeto.
• Sintácticamente el núcleo de JavaScript es muy
similar al de otros lenguajes orientados a objetos
como C/C++ y Java.
• JavaScript a diferencia de Java es mucho más
flexible ya que es débilmente tipificado y el
mecanismo de herencia se basa en prototipos.
¿Qué es JavaScript?
• JavaScript es hoy en día el principal lenguaje de
script del lado del cliente. Al ser interpretado, no
requiere compilación.
• Es un lenguaje guiado por eventos que se producen
dentro del ámbito de una página web.
• A pesar de que existieron otros lenguajes de script
como VBScript y Jscript, es JavaScript el de mayor
utilización y aceptación. Los otros, incluso han
dejado de existir.
¿Qué es JavaScript?
• JavaScript, por ser un lenguaje interpretado del lado del cliente, provoca
que la carga del procesamiento recaiga sobre el navegador.
• Todos los navegadores modernos y la gran mayoría de los no tan modernos
son capaces de interpretar código de JavaScript.
• El lenguaje fue creado explícitamente para poder interactuar con los
elementos de una página web, controlar los eventos que se producen en el
navegador y alterar el contenido del documento cargado en éste de forma
dinámica.
Breve historia de JavaScript
• El lenguaje JavaScript fue inventado por Brendan
Eich en la empresa Netscape Communications
pionera en la creación de navegadores web de
interfaz gráfica.
• El primer navegador que incluyó soporte para
JavaScript fue Netscape Navigator en su versión
2.0.
• Inicialmente se conoció como Mocha. Luego, se
cambió el nombre a LiveScript y, por último, se
renombró como JavaScript. Este nombre se debió
a que esta última versión se desarrolló en conjunto
con Sun Microsystems.
• En junio de 1997, se adoptó JavaScript como estándar de la European
Computer Manufacturer’s Asociation (ECMAScript). Actualmente el
lenguaje está aceptado como estándar ISO 16262.
• Microsoft lanzó su propia implementación de ECMAScript que se conoció
como Jscript, muy similar al JavaScript de Netscape pero con ciertas
diferencias que los hacen en ocasiones incompatibles.
JavaScript no es Java
• Esta es una de las confusiones más comunes con los novatos en
lenguajes de script o en lenguajes orientados a objetos. Esto se ha
convertido en un mito a nivel informático.
• JavaScript no es una versión simplificada de Java como se piensa en
algunos círculos. La única semejanza está en el nombre de ambos
lenguajes y en que con ambos se pueden crear contenidos ejecutables
en navegadores web.
• El parecido en el nombre se ha debido más a una estrategia de
marketing de la empresa Netscape.
JavaScript no es simple
• Muchas veces se considera que por tratarse de un
lenguaje de secuencias de comando, en lugar de
ser considerado como lenguaje de programación,
JavaScript es mucho más fácil de entender y
aprender comparado con un verdadero lenguaje de
programación orientado a objetos como Java o
C++.
• Operadores de comparación
• Operadores aritméticos
• Operadores de asignación
• Operadores de incremento/decremento
• Operadores lógicos y a nivel de bits
• Operadores de cadena de caracteres
• Operador condicional ternario
Operadores de comparación
Operador Descripción
+ Suma
- Resta
* Multiplicación
/ División
Operador Descripción
x=y Asigna a 'x' el valor de 'y'
Operador Descripción
++ Operador de incremento que se utiliza para incrementar el valor de una variable en
una unidad
-- Operador de decremento utilizado para decrementar el valor de una variable en una
unidad
var++ Operador de post-incremento. El valor de la variable var se asignará y luego se
incrementará.
var-- Operador de post-decremento. El valor de la variable var se asignará y luego se
decrementará
++var Operador de pre-incremento. El valor de la variable se incrementa y luego se asigna
Operador Descripción
x&y Operación AND a nivel de bits
x|y Operación OR a nivel de bits
x^y Operación XOR a nivel de bits
~x Operación NOT. Negación (inversión) a nivel de bits
x << y Desplazamiento a la izquierda de los bits de 'x' tantas posiciones como indique
'y'. Se rellena por la derecha con ceros.
x >> y Desplazamiento a la derecha de los bits de 'x' tantas posiciones como indique 'y'.
Se conserva el signo.
x >>> y Desplazamiento a la derecha de los bits de 'x' tantas posiciones como indique 'y'.
Se rellena por la izquierda con ceros.
Operadores de cadena de caracteres
Operador Descripción
+ Concatena dos cadenas uniéndolas. Tiene mayor precedencia que el operador +
utilizado para realizar sumas aritméticas
+= Concatenación y asignación. Primero se concatena la cadena de la derecha a la variable
actual (en la izquierda) y luego se asigna el resultado a esta misma variable.
• Expresión
Es un grupo de elementos token, a menudo literales o identificadores,
combinados con operadores de acuerdo a ciertas reglas sintácticas que
pueden dar como resultado un valor específico.
Son ejemplos de expresiones las siguientes:
• 2.5
• “Análisis y Diseño de Sistemas I"
• (x + 2) * 2.5
• "Mi nombre es: " + firstname
Terminología básica de lenguajes de programación
• Instrucción
Las instrucciones son las que producen un cambio en el estado del entorno
de ejecución del script. Por ejemplo, un cambio en el valor de una variable,
una definición o del flujo de ejecución. Podemos considerar al script como
una secuencia de instrucciones.
Hay que recordar que en JavaScript las instrucciones se separan entre sí con
signos de punto y coma. Pero además, se acepta el uso del salto de línea
(tecla ENTER) como separador de instrucciones.
No obstante, la recomendación será utilizar siempre el punto y coma como
separador de instrucciones.
Terminología básica de lenguajes de programación
• Palabra clave
Son palabras que son parte del lenguaje en sí. Las palabras clave no se
pueden utilizar como identificadores. Ejemplos: if, while, function, var, etc.
• Palabra reservada
Son palabras que podrían convertirse en parte del lenguaje en sí. Las
palabras reservadas tampoco deberían ser utilizadas como identificadores.
Ejemplos: byte, double, int, class, const, etc.
• Esto significa que el tipo de dato de las variables en JavaScript se infiere del
valor almacenado y no de una declaración de tipo preestablecida.
• Esto es tanto una ventaja como un aspecto que debe llamar a la precaución
de los programadores porque en cierta forma introduce ambigüedad en
algunos cálculos matemáticos sobre todo.
Conversión de tipos
• La conversión automática de tipos es una característica de JavaScript que
permite que el tipo de dato de una variable cambie de forma automática
cuando cambia el tipo de valor almacenado en esta.
• Por ejemplo, en las siguientes instrucciones:
x = "7"; //literal de cadena "7"
frase = x + " caballos"; //frase contendrá 7 caballos
resta = x – 5; //resta contendrá 2
Como escribir con JavaScript texto y elementos en páginas web
– document.write(“texto”);
– document.write(variable);
– document.write(“texto” + variable);
Como escribir con JavaScript texto y elementos en páginas web
• La propiedad más interesante de los objetos Web a los que podemos
acceder, no forma parte del Standard oficial de HTML.
• Se trata de la propiedad innerHTML que fue introducida por Microsoft en
Internet Explorer como un método de acceso rápido al contenido
completo de un contenedor en HTML. Rápidamente el resto de
exploradores lo añadieron en su soporte de lenguaje.
• Podemos usar innerHTML para recuperar el contenido actual de un
contenedor o insertar nuevo contenido en ese contenedor.
• Un contenedor de ejemplo puede ser todo aquello que este entre las
etiquetas <div> y < /div >.
• El elemento DIV define un contenedor genérico, el cuál permite a los
programadores definir estilos o bloques de contenido.
Como escribir con JavaScript texto y elementos en páginas web
• Función: getElementById()
<div>
<span id=”status”>Hola mundo...</span>
</div>
<script type=”text/javascript”>
// Obtenemos el elemento “status”
var el = document.getElementById(“status”);
// Mostramos mediante una alerta el contenido del elemento
alert(el.innerHTML);
</script>
Conversión de tipos
• Ejemplos:
var x = 5;
var y = "4";
var suma;
suma = x + y;
document.write(suma); //resultado 54 no 9
• No obstante, como se indicó antes, hoy en día basta con una etiqueta
script simplificada, sobre todo porque JavaScript se ha aceptado ya como el
lenguaje de script predeterminado por la gran mayoría de navegadores
populares:
<script>
</script>
Vinculación de scripts al documento
• Para poder vincular secuencias de comando almacenadas en un archivo
.js al documento HTML se utiliza siempre el elemento SCRIPT, pero esta
vez con un atributo adicional, el atributo src. De la siguiente forma:
<script language="JavaScript" type="text/javascript"
src="archivo.js">
</script>
• Al igual que con el elemento script utilizado para incrustar código de
JavaScript dentro del propio documento HTML, los scripts vinculados
han dejado de requerir que se especifiquen los atributos language y
type. De manera, que se puede utilizar la siguiente sentencia script
simplificada:
<script src="archivo.js">
</script>
Incluir JavaScript en un documento web
• Como partes de las buenas prácticas de programación en ambiente web,
existe una tendencia desde hace varios años a separar por completo la
estructura del documento, ya no sólo de la apariencia y formato que
añaden las hojas de estilo en cascada (CSS), sino también del
comportamiento de la página y su funcionalidad, algo que es proporcionado
por las secuencias de comando de JavaScript.
<!DOCTYPE html>
<html><head><title>E</title>
<meta charset="utf-8">
</head>
<body><h3>Ejemplos JavaScript</h3>
<a
href="javascript:void(document.body.style.backgroundColor='yellow');">
Presione aquí para cambiar a color de fondo amarillo</a>
</body>
</html>
Formas de introducir JavaScript – uobtrusive JavaScript
• Tal y como se puede ver el ejemplo es muy básico y es muy fácil mostrar
mensajes por pantalla en caso que necesitemos informar al usuario de
manera muy llamativa.
CONTROL DE FLUJO DE
PROGRAMA
SENTENCIAS CONDICIONALES
Sentencias condicionales
var total;
}
Sentencia switch
• Es una sentencia condicional múltiple que permite evaluar una expresión y
comparar el resultado de esta con las etiquetas de varios casos de prueba. Si
existen coincidencia entonces se ejecuta el bloque de instrucciones
correspondiente a ese caso de prueba.
• Los valores de prueba se colocan en sentencias case.
• Si no se da coincidencia con ninguno de los valores de los case se ejecuta lo
que se incluya en la sentencia default.
Sintaxis del switch
switch (expresion) {
case etiqueta_1:
sentencias_1;
[break;]
case etiqueta_2:
sentencias_2;
[break;] ...
[default:
sentencias_por_defecto;
[break;] ]
}
Efecto de caída en cascada en un switch
• Una sentencia switch puede producir un efecto de caída en cascada si
queremos que dos valores de prueba de case diferentes ejecuten
instrucciones similares.
case 'A':
case 'B':
alert("Excelente nota");
break;
Operador condicional
• El operador condicional, representado por ?: se utiliza para crear una
línea condicional rápida.
• La sintaxis de este operador es la siguiente:
(expresion) ? Intruccion si true : instruccion si false;
• Donde, expresion es cualquier expresión que se pueda evaluar como
verdadero (true) o como falso (false).
Operador condicional
• Si la expresión condicional es true se ejecutar la instrucción a la
izquierda de los dos puntos.
• Si la expresión condicional se evalúa false, entonces se ejecutará la
instrucción a la derecha de los dos puntos.
• Básicamente, el operador condicional ?: es una manera abreviada de
escribir una sentencia condicional if-else.
CONTROL DE FLUJO DE
PROGRAMA
SENTENCIAS REPETITIVAS
Sentencia for
for(inicialización;condición;incremento) {
//bloque de instrucciones
}
Ejemplo:
count = 0;
for (i=1; i<10; i+=2){
count += i;
}
Sentencia while
do {
//Bloque de instrucciones
}while(condicion);
Ejemplo:
do {
r=confirm("¿Desea continuar (S/N)?");
}while(r!=false);
Sentencia for-in
Ejemplo:
for (property in window){
document.write(property);
document.write("<br>");
}
Sentencias de control de ciclo
• break
Permite terminar prematuramente la ejecución del ciclo o lazo, sin
tener que esperar hasta que se llegue hasta la última iteración del
mismo.
• continue
Permite saltarse el resto de sentencias que haga falta ejecutar de
una iteración específica y seguir de una vez con la siguiente.
Sentencias de control de ciclo
• Ejemplos
• Que las funciones sean objetos de primera clase significa entre otras cosas
que una función es un tipo especial de objeto que puede hacer lo que
cualquier objeto puede hacer.
Definición de función
• Una función es una instancia del objeto Object.
• Las funciones pueden ser datos y por tanto asignarse a variables, a
propiedades de un objeto, presentarse como elementos de una
matriz, pasarse como argumentos de otras funciones o devolverse
como valor de retorno de otra función.
• Las funciones pueden ser métodos y asignarse como propiedad de
un objeto.
• Las funciones pueden ser constructores de un objeto.
• Las funciones se pueden definir con el constructor Function().
• Las funciones definidas como funciones inmediatas o funciones
anónimas autoinvocadas.
Sintaxis de las funciones
function nombre_funcion([arg1, arg2,…, argn]){
//sentencia(s);
}
Donde:
function, es una palabra reservada de JavaScript que le indica al navegador que lo que
viene a continuación es una función.
nombre_funcion, es el nombre con el que se identificará a la función y mediante el cual se
realizará la llamada.
arg1, arg2, … , argn, son los argumentos o parámetros que recibirá la función. Van
entre corchetes porque son opcionales.
sentencia(s), representan las instrucciones que se ejecutarán al llamar a la función y
con las cuales se realizará la tarea o cálculo para el que se ha diseñado la función.
Precaución con el uso de funciones
• Hay que poner especial atención a la hora de crear la funciones, para no
repetir los nombres, principalmente porque esto no genera errores en
JavaScript, y puede suponer quebraderos de cabeza cuando un script no
funciona pero la consola de errores no muestra mensaje alguno.
OBSERVACIÓN: Aunque esta forma de invocar a las funciones desde el código del
documento HTML sigue siendo válida, es preciso señalar que las nuevas
tendencias de codificación en donde se separa la funcionalidad proporcionada por
JavaScript indican que ya no debe hacerlo así.
Manejadores de eventos
Las llamadas a las funciones pueden realizarse desde un manejador
de eventos.
<etiqueta_html nombre_manejador_evento="nombre_funcion([parametros]);">
Manejadores de eventos
• En el control avanzado de eventos definido en el DOM Nivel 2, permite
utilizar funciones como controladores o manejadores de eventos.
• El código JavaScirpt:
window.onload = initAll;
function initAll(){
document.getElementById("redirect").onclick = initRedirect;
}
function initRedirect(){
window.location = "http://www.google.com";
return false;
}
Manejadores de eventos de JavaScript
• Parámetros o argumentos
• Las funciones pueden recibir parámetros o argumentos que funcionan como variables
locales cuyo valor se establece en el momento en el que se invoca a la función desde
alguna parte del script.
• Los valores que son enviados a una función para que realice o resuelva una tarea son
denominados argumentos o parámetros de la función.
• Casi siempre se necesitará que la función realice una tarea, para lo cual puede resultar
conveniente enviarle valores a la función.
Paso de argumentos a las funciones
• Con respecto al paso de argumentos, debe tomar en cuenta que
JavaScript trabaja con tipología débil de datos.
• Esto implica que los argumentos, al igual que ocurre con las
variables, no se declaran de un tipo específico.
• Otro punto importante es el hecho que cuando se llama a una
función con menos argumentos que los declarados, los
argumentos no utilizados tendrán un valor undefined.
Devolución de valores
Usando el
Funciones Funciones
constructor
constructoras inmediatas
Function()
Funciones con instrucción function
• En la siguiente imagen se ilustra lo que tradicionalmente se nos presenta
como función, que también es válido utilizar en JavaScript.
Funciones con instrucción function
• Ejemplo 1:
function distance(x1,y1,x2,y2){
var dx = x2 – x1;
var dy = y2 – y1;
return Math.sqrt(dx*dx + dy*dy);
}
-------------------------------------------
function factorial(n){
if(x<=1)
return 1;
return n * factorial(n-1);
}
Funciones con instrucción function
• Sintaxis:
var functionName = new Function("Arg1","Arg2",...,"Function Body");
• Ejemplo:
//Creando la función con el constructor Function()
var add = new Function("n1", "n2", "return n1+n2");
//Invocar la función anterior
var suma = add(2.75, 11.5);
Funciones inmediatas
• Las funciones inmediatas, denominadas también funciones anónimas
autoinvocadas, representan una construcción importante del lenguaje
JavaScript que se basa en el correcto uso de las clausuras(1).
NOTAS: (1)Una clausura es el ámbito que se crea cuando se declara una función permitiendo
que dicha función acceda y manipule variables externas a ella. En otras palabras, una clausura
hace que una función acceda a todas las variables y a otras funciones que están en el ámbito
cuando se declara.
Funciones inmediatas
• Ejemplo:
(function(){
var numclicks = 0;
document.addEventListener("click", function(){
alert("Van: " + (++numclicks) + " clicks");
}, false);
})();
Funciones recursivas