tipos y valores 1 Sunday, February 23, 14 JavaScript ! Diseado por Netscape en 1995 para ejecutar en un Navegador " Hoy se ha convertido en el lenguaje del Web y Internet Norma ECMA (European Computer Manufacturers Association) ! Versin soportada en navegadores actuales: " ES5: ECMAScript v5, Dic. 2009, (JavaScript 1.5) ! Navegadores antiguos soportan " ES3: ECMAScript v3, Dic. 1999, (JavaScript 1.3) Tutorial: http://www.w3schools.com/js/ Referencia: http://www.w3schools.com/jsref/ Libro: JavaScript Pocket Reference, D. Flanagan, OReilly 2012, 3rd Ed. Juan Quemada, DIT, UPM JavaScript 2 Sunday, February 23, 14 Tipos de JavaScript ! number " Literales de nmeros: 32, 1000, 3.8 ! boolean " Los literales son los valores true y false ! string " Los literales de string son caracteres delimitados entre comillas o apstrofes ! "Hola, que tal", 'Hola, que tal', " Internacionalizcin con Unicode: '!"#$ %&', (%)*', '' ! undefined " undefined: representa indefinido Objetos: agregaciones de valores estructurados ! Se agrupan en clases: Object, Array, Date, ... " Objeto null: valor especial que representa objeto nulo Juan Quemada, DIT, UPM Tipos, objetos y valores 3 v2 n2 vn nn .. v1 n1 Sunday, February 23, 14 Juan Quemada, DIT, UPM JavaScript incluye operadores de tipos y objetos ! Los operadores permiten formar expresiones " Componiendo valores con los operadores ! Que Javascript evalua hasta obtener un resultado Por ejemplo, con las operaciones aritmeticas +, -, *, / ! podemos formar expresiones nmericas Operadores y expresiones 13 + 7 => 20 // Suma de nmeros 13 - 7 => 6 // Resta de nmeros (8*2 - 4)/3 => 4 // Expresin compleja // Incluyendo parntesis 4 Sunday, February 23, 14 Juan Quemada, DIT, UPM Algunos operadores tienen varias semnticas diferentes Por ejemplo, el operador + tiene 3 semnticas diferentes ! Suma de enteros (operador binario) ! Signo de un nmero (operador unitario) ! Concatenacin de strings (operador binario) Sobrecarga de operadores 13 + 7 => 20 // Suma de nmeros +13 => 13 // Signo de un nmero "Hola " + "Pepe" => "Hola Pepe" // Concatenacin de strings 5 Sunday, February 23, 14 Juan Quemada, DIT, UPM JavaScript realiza conversin automatica de tipos ! cuando hay ambiguedad en una expresin " utiliza las prioridades para resolver la ambiguedad La expresin "13" + 7 es ambigua ! porque combina un string con un number " JavaScript asigna mas prioridad al operador + de strings, convirtiendo 7 a string La expresin +"13" tambin necesita conversin automtica de tipos ! El operador + solo esta definido para number " JavaScript debe convertir el string "13" a number antes de aplicar operador + Conversin de tipos en expresiones 13 + 7 => 20 "13" + "7" => "137" "13" + 7 => "137" +"13" + 7 => 20 6 Sunday, February 23, 14 . [] Acceso a propiedad o invocar mtodo; ndice a array new Crear objeto con constructor de clase () Invocacin de funcin/mtodo o agrupar expresin ++ -- Pre o post auto-incremento; pre o post auto-decremento ! ~ Negacin lgica (NOT); complemento de bits + - Operador unitario, nmeros. signo positivo; signo negativo delete Borrar propiedad de un objeto typeof void Devolver tipo; valor indefinido * / % Nmeros. Multiplicacin; divisin; modulo (o resto) + Concatenacin de string + - Nmeros. Suma; resta << >> >>> Desplazamientos de bit < <= > >= Menor; menor o igual; mayor; mayor o igual instanceof in objeto pertenece a clase?; propiedad pertenece a objeto? == != === !== Igualdad; desigualdad; identidad; no identidad & Operacion y (AND) de bits ^ Operacion exclusivo (XOR) de bits | Operacion (OR) de bits && Operacin lgica y (AND) || Operacin lgica o (OR) ?: Asignacin condicional = Asignacin de valor OP= Asig. con operacin: += -= *= /= %= <<= >>= >>>= &= ^= |= , Evaluacin mltiple Juan Quemada, DIT, UPM Operadores JavaScript 7 3 + 7 => 10 "3" + 7 => "37" Los operadores estn ordenados con prioridad descendente. Mas altos ms prioridad. Sunday, February 23, 14 . [] Acceso a propiedad o invocar mtodo; ndice a array new Crear objeto con constructor de clase () Invocacin de funcin/mtodo o agrupar expresin ++ -- Pre o post auto-incremento; pre o post auto-decremento ! ~ Negacin lgica (NOT); complemento de bits + - Operador unitario, nmeros. signo positivo; signo negativo delete Borrar propiedad de un objeto typeof void Devolver tipo; valor indefinido * / % Nmeros. Multiplicacin; divisin; modulo (o resto) + Concatenacin de string + - Nmeros. Suma; resta << >> >>> Desplazamientos de bit < <= > >= Menor; menor o igual; mayor; mayor o igual instanceof in objeto pertenece a clase?; propiedad pertenece a objeto? == != === !== Igualdad; desigualdad; identidad; no identidad & Operacion y (AND) de bits ^ Operacion exclusivo (XOR) de bits | Operacion (OR) de bits && Operacin lgica y (AND) || Operacin lgica o (OR) ?: Asignacin condicional = Asignacin de valor OP= Asig. con operacin: += -= *= /= %= <<= >>= >>>= &= ^= |= , Evaluacin mltiple Juan Quemada, DIT, UPM Operadores JavaScript Los operadores estn ordenados con prioridad descendente. Mas altos ms prioridad. 8 8*2 - 4 => 12 Sunday, February 23, 14 Script: programa JavaScript insertado en una pgina HTML ! Delimitado con la marca <script> con atributo type=text/javascript " Se ejecuta al cargar la pgina HTML en el navegador Funcin Alert("mensaje"): genera una ventana desplegable ! Que muestra el mensaje pasado como parmetro Juan Quemada, DIT, UPM Ejemplo: Script Expresin 9 Sunday, February 23, 14 Juan Quemada, DIT, UPM El operador typeof permite conocer el tipo de un valor ! Devuelve un string con el nombre del tipo " "number", "string", "boolean", "undefined", "object" y "function" Operador typeof typeof 7 => "number" typeof "hola" => "string" typeof true => "boolean" typeof undefined => "undefined" typeof null => "object" typeof new Date() => "object" typeof new Function() => "function" 10 Sunday, February 23, 14 Juan Quemada, DIT, UPM Sentencias, variables y comentarios de JavaScript 11 Sunday, February 23, 14 Juan Quemada, DIT, UPM Un programa es una secuencia de sentencias que ! se ejecutan en el orden en que han sido definidas Las sentencias realizan tareas al ejecutarse en un ordenador ! pueden provocar cambios en el estado interno del programa ! pueden interaccionar con el exterior del ordenador, p.e. con un usuario Algunas sentencias modifican la ejecucin secuencial ! como if/else, for, while, .. (se vern ms delante) Programa y sentencias 12 alert("Primer desplegable"); alert("Segundo desplegable"); Primera sentencia: genera desplegable con primer mensaje Segunda sentencia: genera desplegable con segundo mensaje Sunday, February 23, 14 /* Ejemplo de comentario multilnea que ocupa 2 lneas -> al tener ambiguedades, no se recomienda su utilizacin */ alert("Mi mensaje"); // Comentario monolnea que acaba aqu Juan Quemada, DIT, UPM Los comentarios son mensajes informativos ! Documentan el programa, facilitando su comprensin " Los programas deben documentarse bien En JavaScript hay 2 tipos de comentarios ! Monolinea: empiezan por // ..comentario.. ! Multilinea: Se delimitan con /* ..comentario.. */ " OJO! Los comentarios multilinea tienen problemas con las expresiones regulares Comentarios 13 Sunday, February 23, 14 var x; // crea la variable x y asigna undefined var y = "Hola"; // crea y, asignandole el valor "Hola" var z = 1, t = 2; // crea x e y, asignandoles 1 y 2 respectivamente Juan Quemada, DIT, UPM Estado del programa ! conjunto de valores contenido en sus variables Las variables se crean con la sentencia de definicin de variables ! Comienza con la palabra reservada var " Seguida de la variable, a la que se puede asignar un valor inicial ! Se pueden crear varias variables en una sentencia " separando las definiciones por comas Variables y estado del programa undefined x "Hola" y 1 z 2 t 14 Sunday, February 23, 14 Juan Quemada, DIT, UPM Una variable ya creada es un contenedor de valores ! La sentencia de asignacin introduce un nuevo valor en la variable " Modificando, por tanto, el estado del programa Las variables de JavaScript son no tipadas ! pueden contener valores de cualquier tipo de JavaScript Sentencia de asignacin de variables 15 var x = 5; // Crea la variable x y le asigna el valor inicial 5 x = "Hola"; // Asigna el string (texto) "hola" a la variable x x = new Date(); // Asigna objeto Date a la variable x 5 x "Hola" x Mon Sep 02 2013 09:16:47 GMT+0200 (CEST) x Sunday, February 23, 14 Juan Quemada, DIT, UPM Una variable representa el valor que contiene ! Puede ser usada en expresiones como cualquier otro valor Una variable puede utilizarse en la expresin que se asigna a ella misma ! La parte derecha usa el valor anterior a la ejecucin de la sentencia " En y = y - 2; la variable y tiene el valor 8, por lo que se asigna a y un 6 (8-2) Usar una variable no definida en una expresin ! provoca un error y la ejecucin del programa se interrumpe Expresiones con variables var x = 3; var y = 5 + x; y = y - 2; x = y + z; // variable z no ha sido definida 3 x 8 y 6 y Error 16 Sunday, February 23, 14 var x = 3; x = 5 + x; // sentencia til, porque la asignacin guarda el resultado x*5 - 2; // expresin correcta, pero inutil en un programa alert("Mi mensaje"); // expresin til porque tiene efecto lateral Juan Quemada, DIT, UPM La sentencia de ejecucin de expresiones contiene solo una expresin ! que se calcula al ejecutar la sentencia, sin cambiar el estado del progr. " Por ejemplo, (3 + 2) o alert("Mi mensaje") son sentencias correctas (expresiones) Estas sentencias solo tienen utilidad si producen efectos laterales ! Como alert("Mi mensaje") que muestra una ventana desplegable Una expresin siempre se evala en un valor ! Si ese valor no se guarda en una variable y no hay ningun efecto lateral " La instruccin no tiene ningun efecto en el programa, solo consume recursos Sentencia de ejecucin de expresiones 17 Sunday, February 23, 14 // Ejemplos de delimitacin de // sentencias que // no recomendables var x; x = "Hola" var y = "Pepe" Juan Quemada, DIT, UPM ; delimita el final de una sentencia El final de sentencia tambin puede demitarse con nueva linea ! Pero hay ambiguedades y no se recomienda hacerlo Se recomienda terminar siempre con ; -> es mas legible y seguro Delimitacin de sentencias undefined x "Hola" x "Pepe" y 18 Sunday, February 23, 14 Juan Quemada, DIT, UPM Nombres de variables El nombre (o identificador) de una variable debe comenzar por: ! letra, _ o $ " El nombre pueden contener adems nmeros ! Nombres bien construidos: x, ya_vs, $A1, $, _43dias ! Nombres mal construidos: 1A, 123, %3, v=7, a?b, .. " Nombre incorrecto: da error_de_ejecucin e interrumpe el programa Un nombre de variable ! no debe ser una palabra reservada de JavaScript Las variables son sensibles a maysculas ! mi_var y Mi_var son variables distintas 19 Sunday, February 23, 14 Juan Quemada, DIT, UPM Objetos, propiedades y mtodos de JavaScript 20 Sunday, February 23, 14 Los objetos son colecciones de variables ! agrupadas como un elemento estructurado que llamamos objecto " Las variables se denominan propiedades Una propiedad es un par nombre:valor donde ! los nombres deben ser todos diferentes en un mismo objeto Se definen con el literal: { nombre:valor, ... } ! Por ejemplo: {titulo: 'Avatar', director: 'James Cameron'} " crea un objeto con 2 propiedades: ! titulo:'Avatar' ! director:'James Cameron' Juan Quemada, DIT, UPM 21 Objetos v2 n2 vn nn . . v1 n1 v2 n2 vn nn .. v1 n1 'Avatar' 'James Cameron' director titulo Sunday, February 23, 14 El acceso a propiedades utiliza el operador punto ! obj.propiedad Por ej. en: var pelicula = {titulo: 'Avatar', director: 'James Cameron'} ! pelicula.titulo => "Avatar" ! pelicula.director => "James Cameron" ! pelicula.fecha => undefined // la propiedad fecha no existe Aplicar el operador punto sobre undefined o null ! Provoca un Error_de_ejecucin y aborta la ejecucin del programa La notacin punto solo acepta nombres de propiedades ! Con la sintaxis de variables: a, _method, $1, ... " No son utilizables: "$43", "?a=1", ...... Juan Quemada, DIT, UPM Propiedades 'Avatar' pelicula 'James Cameron' director titulo 22 Sunday, February 23, 14 La notacin array permite acceder tambin a propiedades ! objeto["propiedad"] es equivalente a objeto.propiedad en el ejemplo anterior: var pelicula = {titulo: ...., director: ......} ! pelicula["titulo"] es equivalente a pelicula.titulo La notacin array permite utilizar strings arbitrarios como nombres ! objeto["El director"], pelicula[""] o a["%43"] " OJO! es conveniente utilizar siempre nombres compatibles con notacin punto Strings arbitrarios como nombres son posibles tambin en un literal: ! Por ej. {"titulo": 'Avatar', "El director": 'James Cameron'} Juan Quemada, DIT, UPM Notacin array 'Avatar' pelicula 'James Cameron' director titulo 23 Sunday, February 23, 14 Un mtodo es una operacin realizable sobre un objeto ! Se invoca con la notacin punto: objeto.metodo(..params..) Un objeto hereda mtodos de su clase ! Adems pueden definirse mtodos adicionales " Invocar un mtodo no heredado ni definido sobre un objeto da error_de_ejecucin Por ejemplo ! document.write("Hola Mundo!") " inserta string "Hola Mundo!" en pgina Web ! document.writeln("Hola Mundo!") " inserta string "Hola Mundo!" y nueva linea en la pgina Web Juan Quemada, DIT, UPM Mtodos 24 Sunday, February 23, 14 Todos los objetos de JavaScript pertenecen a la clase Object ! Las clases predefinidas en Javascript derivan de Object " Array, Function, .... La clase Object tiene el constructor Object() ! que permite crear objetos con el operador new " new Object() crea un objeto vaco equivalente a {} Los objetos heredan propiedades y mtodos de su clase padre ! p. e., todo objeto de la clase Object hereda el mtodo toString() " que devuelve el string "[object Object]" cuando se invoca sobre un objeto Juan Quemada, DIT, UPM 25 Clases y herencia Sunday, February 23, 14 Juan Quemada, DIT, UPM Ejemplos de Scripts JavaScript 26 Sunday, February 23, 14 Juan Quemada, DIT, UPM Script I: genera HTML al vuelo 27 'Avatar' pelicula 'James Cameron' director titulo Sunday, February 23, 14 Juan Quemada, DIT, UPM Script II: texto formateado con <pre> 'Avatar' pelicula 'James Cameron' director titulo 28 Sunday, February 23, 14 Aplicaciones de cliente Programa que se ejecuta en el navegador ! Se identificada por el URL de la pgina Web que los contiene " Por ejemplo: http://upm.es/misapps/webapp.html ! Se descarga con HTTP del servidor Servidor sirve fichero identificado por URL 1) Cliente solicita WebApp identificada con URL 2) Script se ejecuta al cargar la pgina Web en el navegador: Solicitud HTTP asociada a un URL Respuesta HTTP: pgina Web con script 29 Sunday, February 23, 14 Juan Quemada, DIT, UPM Firefox - HTML5 Web Developer Firefox tiene herramientas de desarrollo muy eficaces, en ! Tools -> Web Developer -> ** Consola JavaScript ! Permite ejecutar sentencias ! Muestra errores en scripts ! ........ Los demas navegadores ! tienen herramientas similares Explicadas en Screencasts Cliente pide pgina Web (URL) Servidor enva pgina Web 30 Sunday, February 23, 14 Juan Quemada, DIT, UPM 31 Haciendo clic aqu Aparece el fichero resaltando la lnea con el error de sintaxis Firefox detecta que falta el parntesis, aborta la ejecucin y lo notifica en la consola Sunday, February 23, 14 Juan Quemada, DIT, UPM 32 La consola nos va mostrando el resultado de ejecutar las sentencias JavaScript Aqu se introduce la sentencia Sunday, February 23, 14 Juan Quemada, DIT, UPM 33 Inspector nos muestra los comandos CSS que aplican sobre un elemento HTML Sunday, February 23, 14 Juan Quemada, DIT, UPM Publicar en la nube (Google Drive) 34 Sunday, February 23, 14 Una pgina Web o un recurso en Internet ! puede ser pblico o de acceso restringido Recurso pblico ! Para ser accedido en modo lectura por cualquiera en Internet " Una pgina Web, una foto, una pelicula, etc. Recurso de acceso restringido ! Utilizado en aplicaciones Web, como Google Drive " Puede ser creado, editado o borrado, pero solo por usuarios autorizados ! Autorizacin: se concede si el usuario se autentica y tiene derecho " Autenticacin: por usuario y contrasea, eDNI, huella dactilar, .... Recursos pblicos y de acceso restringido 35 Sunday, February 23, 14 Se debe utilizar una cuenta de Google ! Para publicar pginas Web y Apps en Google Drive " http://drive.google.com Google Drive permite crear directorios con acceso pblico ! El directorio se crea y edita con acceso restringido " Pero el directorio y sus recursos tienen adems acceso pblico ! Con otro URL que da acceso en modo solo lectura Este segundo URL pblico permite ! Probar que los ejercicios funcionan en Internet " accediendo a ellos desde el PC, mviles y otros terminales ! Entregar los ejercicios funcionando, para que otros los correjan Publicacin en la nube: Google Drive 36 Sunday, February 23, 14 1. clicar para crear nueva carpeta 2. Escribir nombre y clicar para crear la carpeta Seguir pasos 1 y 2 para crear un directorio en Google Drive Crear un directorio pblico I 37 0. En modo cuadricula Sunday, February 23, 14 2. clicar para compartir (share) 1. clicar para seleccionar 3. clicar para cambiar Change) Seguir pasos 1, 2 y 3 para acceder al cambio de permisos Crear un directorio pblico II 38 Sunday, February 23, 14 1. clicar para seleccionar (Public on the Web) 2. clicar para guardar seleccin Seguir pasos 1 y 2 para finalizar el cambio de permisos ! La carpeta Ejercicios ya es pblica en Internet Crear un directorio pblico III 39 Sunday, February 23, 14 Todos los accesos anteriores estn restringidos ! Al usuario que es dueo del disco (cuenta) de Google Drive " Que solo puede acceder si est autenticado Estos accesos utilizan URLs de acceso restringido, como ! https://drive.google.com/?tab=Xo&authuser=0#/0B48KCWfVwCIEcEdDcEVSTS1MS00 Carpetas y ficheros pblicos poseen adems un URL pblico ! Permite acceder a otros pero solo en modo solo lectura " https://googledrive.com/host/0B48KCWfVwCIEcEdDcEVSTS1MS00/ Acceso pblico con nuevo URL 40 Sunday, February 23, 14 2. desplegar funciones adicionales 3. clicar para ver mas detalles Seguiendo los pasos 1, 2 y 3 accedemos a los detalles del directorio ! Tal y como se muestra aqu 41 1. seleccionar Encontrar URL de acceso pblico Sunday, February 23, 14 42 URL pblico Los detalles (details) del recurso ! muestran el URL pblico de acceso en modo lectura URL privado URL de acceso pblico Sunday, February 23, 14 43 URL privado: https://drive.google.com/?tab=Xo&authuser=0#folders/0B48KCWfVwCIEcEdDcEVSTS1MS00 URL pblico: https://googledrive.com/host/0B48KCWfVwCIEcEdDcEVSTS1MS00/ Acceso pblico: solo lectura Acceso autenticado: lectura, modificacin, borrado, .. Sunday, February 23, 14 Juan Quemada, DIT, UPM Final del tema Muchas gracias! 44 Sunday, February 23, 14 Juan Quemada, DIT, UPM Entrega de ejercicios en Google Drive 45 Sunday, February 23, 14 El directorio pblico creado para esta asignatura ! ser utilizado para publicar el ejercicio de la entrega semanal El ejercicio deber subirse al directorio pblico ! Y el URL pblico deber incluirse en la entrega en la platforma El URL pblico debe utlizarse tambin para ! Probar y ver las pginas y aplicaciones Web " En nuestro PC, telfonos mviles y tabletas Se recomienda guardar el URL a la carpeta pblica ! En los favoritos del navegador utilizado: PC, mvil, tableta, ... " Para probar los ejercicos realizados en todos los dispositivos con facilidad Publicacin de ejercicios 46 Sunday, February 23, 14 1. Desplegar y clicar Files para subir fichero Seleccionar Files... para subir fichero Subir un ejercicio al directorio I 47 0. En modo cuadricula Sunday, February 23, 14 Seguir pasos 1 y 2 para subir fichero 48 1. clicar para seleccionar fichero 2. clicar para subir fichero Subir un ejercicio al directorio II Sunday, February 23, 14 Confirmar que el fichero se sube a un directorio pblico ! El fichero tambin ser pblico y ser visible como pagina Web en Internet 49 Clicar para confirmar que el fichero se sube y se comparte Subir un ejercicio al directorio III Sunday, February 23, 14 El fichero T2!.2_lista.html ya esta en directorio pblico ! Pasos 1, 2 y 3 nos llevan a detalles del recurso (ver transp. siguiente) 50 Encontrar el URL pblico I 2. desplegar funciones adicionales 3. clicar para ver mas detalles 1. seleccionar Sunday, February 23, 14 Haciendo clic en el URL pblico ! Vemos T2_3-2_lista.html como pgina Web 51 Fichero T2_3-2_lista.html Encontrar el URL pblico II URL pblico Sunday, February 23, 14 Juan Quemada, DIT, UPM Final del tema Muchas gracias! 52 Sunday, February 23, 14