Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual Programacion Javascript Parte1 PDF
Manual Programacion Javascript Parte1 PDF
com
Programacin en JavaScript
(1 Entrega)
Descubre el lenguaje de programacin del lado cliente por excelencia, Javascript. Esta es la primera parte del Manual de Javascript donde veremos las caractersticas del lenguaje, como la sintaxis, variables, estructuras de control, funciones, arrays, etc.
Parte 1:
Introducciones a Javascript
'rtculos (ue nos ser)ir*n para introducirnos en este lengua+e, aprendiendo los conceptos m*s b*sicos de -a)ascript $ la programaci&n del lado del cliente.
En este art%culo pretendemos e$plicar qu& Javascript y para qu& sirve este lengua"e, al menos en l%neas generales. A lo largo de &ste y los pr$imos art%culos pretendemos que las personas tengan una idea ms o menos clara sobre qu& es Javascript, las posibilidades de del lengua"e o usos ms comunes y los modos de traba"o que podemos emplear para desarrollar nuestros propios scripts.
Nota: +tro recurso que queremos recomendar para aprender Javascript, especialmente indicado para las personas con menos e$periencia, es el ,ideotutorial de Javascript.
1.1.1.- Qu es Javascript
Javascript es un lengua"e de programacin utili)ado para crear peque-os programitas encargados de reali)ar acciones dentro del mbito de una pgina web. .on Javascript podemos crear efectos especiales en las pginas y definir interactividades con el usuario. El navegador del cliente es el encargado de interpretar las instrucciones Javascript y e"ecutarlas para reali)ar estos efectos e interactividades, de modo que el mayor recurso, y tal ve) el /nico, con que cuenta este lengua"e es el propio navegador. Javascript es el siguiente paso, despu&s del 01M#, que puede dar un programador de la web que decida me"orar sus pginas y la potencia de sus proyectos. Es un lengua"e de programacin bastante sencillo y pensado para hacer las cosas con rapide), a veces con ligere)a. 2ncluso las personas que no tengan una e$periencia previa en la programacin podrn aprender este lengua"e con facilidad y utili)arlo en toda su potencia con slo un poco de prctica. Entre las acciones t%picas que se pueden reali)ar en Javascript tenemos dos vertientes. 'or un lado los efectos especiales sobre pginas web, para crear contenidos dinmicos y elementos de la pgina que tengan movimiento, cambien de color o cualquier otro dinamismo. 'or el otro, "avascript nos permite e"ecutar instrucciones como respuesta a las acciones del usuario, con lo que podemos crear pginas interactivas con programas como calculadoras, agendas, o tablas de clculo. Javascript es un lengua"e con muchas posibilidades, permite la programacin de peque-os scripts, pero tambi&n de programas ms grandes, orientados a ob"etos, con funciones, estructuras de datos comple"as, etc. 1oda esta potencia de Javascript se pone a disposicin del programador, que se convierte en el verdadero due-o y controlador de cada cosa que ocurre en la pgina. En este manual vamos a tratar de acercarnos a este lengua"e en profundidad y conocer todos sus secretos y m&todos de traba"o. Al final del manual seremos capaces de controlar el flu"o en nuestros programas Javascript y saber cmo colocar scripts para resolver distintas necesidades que podamos tener. 1odo lo que veremos a continuacin nos servir de base para adentrarnos ms adelante en el desarrollo de pginas enriquecidas del lado del cliente.
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com e"ecutaban en el navegador dentro de las propias pginas web, pero que ten%an posibilidades similares a los programas de propsito general. #a programacin de Applets fue un gran avance y *etscape, por aquel entonces el navegador ms popular, hab%a roto la primera barrera del 01M# al hacer posible la programacin dentro de las pginas web. *o cabe duda que la aparicin de los Applets supuso un gran avance en la historia del web, pero no ha sido una tecnolog%a definitiva y muchas otras han seguido implementando el camino que comen) con ellos.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com hace unas l%neas. Actualmente son productos totalmente distintos y no guardan entre si ms relacin que la sinta$is id&ntica y poco ms. Algunas diferencias entre estos dos lengua"es son las siguientes: Compilador. 'ara programar en Java necesitamos un ;it de desarrollo y un compilador. (in embargo, Javascript no es un lengua"e que necesite que sus programas se compilen, sino que &stos se interpretan por parte del navegador cuando &ste lee la pgina. Orientado a objetos. Java es un lengua"e de programacin orientado a ob"etos. <Ms tarde veremos que quiere decir orientado a ob"etos, para el que no lo sepa todav%a= Javascript no es orientado a ob"etos, esto quiere decir que podremos programar sin necesidad de crear clases, tal como se reali)a en los lengua"es de programacin estructurada como . o 'ascal. Propsito. Java es mucho ms potente que Javascript, esto es debido a que Java es un lengua"e de propsito general, con el que se pueden hacer aplicaciones de lo ms variado, sin embargo, con Javascript slo podemos escribir programas para que se e"ecuten en pginas web. Estructuras fuertes. Java es un lengua"e de programacin fuertemente tipado, esto quiere decir que al declarar una variable tendremos que indicar su tipo y no podr cambiar de un tipo a otro automticamente. 'or su parte Javascript no tiene esta caracter%stica, y podemos meter en una variable la informacin que deseemos, independientemente del tipo de &sta. Adems, podremos cambiar el tipo de informacin de una varible cuando queramos. Otras caractersticas. .omo vemos Java es mucho ms comple"o, aunque tambi&n ms potente, robusto y seguro. 1iene ms funcionalidades que Javascript y las diferencias que los separan son lo suficientemente importantes como para distinguirlos fcilmente.
Miguel Angel Alvarez
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com editores de te$to enriquecido, navegadores dinmicos, etc. Es mucho ms habitual encontrar Javascript para reali)ar efectos simples sobre pginas web, o no tan simples, como pueden ser navegadores dinmicos, apertura de ventanas secundarias, validacin de formularios, etc. *os atrevemos a decir que este lengua"e es realmente /til para estos casos, pues estos t%picos efectos tienen la comple"idad "usta para ser implementados en cuestin de minutos sin posibilidad de errores. (in embargo, aparte de esos unos simples e"emplos, podemos encontrar dentro de 2nternet muchas aplicaciones que basan parte de su funcionamiento en Javascript, que hacen que una pgina web se convierta en un verdadero programa interactivo de gestin de cualquier recurso. E"emplos claros son las aplicaciones de ofimatica online, como Aoogle ocs, +ffice +nline o Aoogle .alendar.
'ermitidme una recomendacin con respecto al editor de te$tos. (e trata de que, aunque el Cloc de *otas es suficiente para empe)ar, tal ve) sea muy /til contar con otros programas que nos ofrecen me"ores prestaciones a la hora de escribir las l%neas de cdigo. Estos editores avan)ados tienen algunas venta"as como que colorean los cdigos de nuestros scripts, nos permiten traba"ar con varios documentos simultneamente, tienen ayudas, etc. Entre otros queremos destacar ;omodo Edit, *otepadDD o BltraEdit.
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com caracter%sticas se han creado nuevas instrucciones y recursos. 'ara resumir vamos a comentar las distintas versiones de Javascript:
Actualizado: En el momento de actuali)ar este art%culo, podemos decir que no tenemos que preocuparnos mucho de las versiones de Javascript que puedan haber e$istido. 8ealmente cualquier navegador medianamente moderno tendr ahora todas las funcionalidades de Javascript que vayamos a necesitar y sobre todo, las que podamos utili)ar en nuestros primeros pasos con el lengua"e. *o obstante puede venir bien conocer las primeras versiones de Javascript que comentamos en este art%culo, a modo de curiosidad.
Javascript : naci con el *etscape 4.5 y soportaba gran cantidad de instrucciones y funciones, casi todas las que e$isten ahora ya se introdu"eron en el primer estandar. Javascript ! : Es la versin de Javascript que se dise- con la llegada de los navegadores 6.5. 2mplementaba poco ms que su anterior versin, como por e"emplo el tratamiento de imgenes dinmicamente y la creacin de arrays. Javascript !": #a versin de los navegadores E.5. Esta tiene como desventa"a que es un poco distinta en plataformas Microsoft y *etscape, ya que ambos navegadores crecieron de distinto modo y estaban en plena lucha por el mercado. Javascript !#: ,ersin que implementan los navegadores F.5. En esta versin se han limado algunas diferencias y aspere)as entre los dos navegadores. Javascript !$: ,ersin actual, en el momento de escribir estas l%neas, que implementa *etscape G. 'or su parte, %icrosoft tambi&n ha evolucionado hasta presentar su versin $!$ de J&cript <as% llaman al "avascript utili)ado por los navegadores de Microsoft=.
Es obvio que todav%a, despu&s de escribir estas l%neas, se presentarn o habrn presentado muchas otras versiones de Javascript, pues, a medida que se van me"orando los navegadores y van saliendo versiones de 01M#, surgen nuevas necesidades para programacin de elementos dinmicos. *o obstante, todo lo que vamos a aprender en este manual, incluso otros usos mucho ms avan)ados, ya est implementado en cualquier Javascript que e$istan en la actualidad. En el siguiente art%culo comen)aremos ya a mostrar peque-os cdigos Javascript que servirn para hacer efectos simples en pginas web.
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 'odemos ver el e"emplo en marcha aqu%.
Estas l%neas deber%an introducirse dentro del cuerpo de la pgina en el lugar donde queramos que apare)ca la fecha de /ltima actuali)acin. 'odemos ver el e"emplo en marcha aqu%.
Nota: Bn detalle a destacar es que la fecha aparece en un formato un poco raro, indicando tambi&n la hora y otros atributos de la misma, pero ya aprenderemos a obtener e$actamente lo que deseemos en el formato correcto.
El botn ser%a parecido al siguiente. 'odemos pulsarlo para ver su funcionamiento <deber%a llevarnos a la pgina anterior=.
Atrs
.omo diferencia con los e"emplos anteriores, hay que destacar que en este caso la instruccin Javascript se encuentra dentro de un atributo de 01M#, onclic3, que indica que esa instruccin se tiene que e"ecutar como respuesta a la pulsacin del botn. (e ha podido comprobar la facilidad con la que se pueden reali)ar algunas acciones interesantes. .omo podr&is imaginar, e$istir%an muchas otras muestras sencillas de Javascript que nos reservamos para cap%tulos posteriores. (i lo deseas, puedes ver cmo hemos desarrollado algunos de estos efectos rpidos Javascript paso por paso y en v%deo. En el siguiente art%culo empe)aremos ya a hablar del propio lengua"e de programacin Javascript.
Artculo por
Parte 2:
10
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com A lo largo de los anteriores cap%tulos del Manual de Javascript ya hemos visto que el lengua"e se implement a partir de *etscape 4.5 e 2nternet E$plorer 6.5. 2ncluso, para los que no lo sepan, est bien decir que hay navegadores que funcionan en sistemas operativos, donde slo se puede visuali)ar te$to y donde determinadas tecnolog%as y aplicaciones no estn disponibles, como el uso de imgenes, fuentes tipogrficas distintas o el propio Javascript. As% pues, no todos los navegadores que puedan utili)ar los usuarios que visiten nuestra pgina comprenden Javascript. En los casos en los que no se interpretan los scripts, los navegadores asumen que el cdigo de &stos es te$to de la propia pgina y como consecuencia, presentan los scripts en el cuerpo del documento, como si de te$to normal se tratara. 'ara evitar que el te$to de los scripts se escriba en la pgina cuando los navegadores no los entienden se tienen que ocultar los con comentarios 01M# <HK@comentario 01M# @@I=. Adems, en este art%culo veremos tambi&n cmo mostrar un mensa"e que se vea slo en los navegadores que no son compatibles con Javascript.
Actualizado: En el momento actual podemos decir que casi el L55M de los navegadores disponibles soportan Javascript, o por lo menos reconocen las etiquetas de script, por lo que, aunque est& desactivado, no mostrarn el te$to de nuestros programas Javascript. 'or ello, actualmente ya no es fundamental reali)ar la operacin de ocultar el cdigo de los scripts de la pgina para navegadores antiguos. *o obstante, si queremos hacer una pgina totalmente correcta, convendr aprender cmo se puede ocultar un script para que en ning/n caso se muestre como te$to en la pgina.
,emos que el inicio del comentario 01M# es id&ntico a cmo lo conocemos en el 01M#, pero el cierre del comentario presenta una particularidad, que empie)a por doble barra inclinada. Esto es debido a que el final del comentario contiene varios caracteres que Javascript reconoce como operadores y al tratar de anali)arlos lan)a un mensa"e de error de sinta$is. 'ara que Javascript no lance un mensa"e de error se coloca antes del comentario 01M# esa doble barra, que no es ms que un comentario Javascript, que conoceremos ms adelante cuando hablemos de sinta$is. El inicio del comentario 01M# no es necesario comentarlo con la doble barra, dado que Javascript entiende bien que simplemente se pretende ocultar el cdigo. Bna aclaracin a este punto: si pusi&semos las dos barras en esta l%nea, se ver%an en navegadores antiguos por estar fuera de los comentarios 01M#. #as etiquetas H(.82'1I no las entienden los navegadores antiguos, por lo tanto no las interpretan, tal como hacen con cualquier etiqueta que desconocen.
En el siguiente art%culo veremos algunos otros detalles sobre colocar scripts Javascript que se han quedado en el tintero.
11
entro de las etiquetas H(.82'1I se puede escribir cualquier te$to y ser ignorado por el navegador, sin embargo, los navegadores que no entienden el atributo (8. tendrn a este te$to por instrucciones, por lo que es aconse"able poner un comentario Javascript antes de cada l%nea con el ob"etivo de que no respondan con un error. El archivo que incluimos <en este caso archivoNe$terno."s= debe contener tan solo sentencias Javascript. *o debemos incluir cdigo 01M# de ning/n tipo, ni tan siquiera las etiquetas HJ(.82'1I y HJ(.82'1I. ,istos estos otros usos interesantes que e$isten en Javascript y que debemos conocer para poder aprovechar las posibilidades de la tecnolog%a, debemos haber aprendido todo lo esencial para empe)ar a hacer cosas ms importantes. As% que en el pr$imo art%culo empe)aremos a repasar la sinta$is del lengua"e Javascript.
Artculo por
12
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 'or fin empe)amos a ver cdigo fuente de JavascriptK Esperamos que se hayan asimilado todas las informaciones previas del Manual de Javascript, en las que hemos aprendido bsicamente diversos modos de incluir scripts en pginas web. 0asta ahora todo lo que hemos visto en este manual puede haber parecido muy terico, pero de aqu% en adelante esperamos que os pare)ca ms ameno por empe)ar a ver cosas ms prcticas y relacionadas directamente con la programacin. El lengua"e Javascript tiene una sinta'is mu( parecida a la de Java por estar basado en &l. 1ambi&n es muy parecida a la del lengua"e ., de modo que si el lector conoce alguno de estos dos lengua"es se podr mane"ar con facilidad con el cdigo. e todos modos, en los siguientes cap%tulos vamos a describir toda la sinta$is con detenimiento, por lo que los novatos no tendrn ning/n problema con ella.
13
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En el pr$imo art%culo comen)aremos a hablaros sobre la creacin de variables en Javascript.
Artculo por
Parte 3:
En este e"emplo tenemos tres variables, sumandoL, sumando4 y suma, donde guardamos el resultado. ,emos que su uso para nosotros es como si tuvi&semos un apartado donde guardar un dato y que se pueden acceder a ellos con slo poner su nombre.
14
#os nombres de las variables han de construirse con caracteres alfanum&ricos y el carcter subrayado <N=. Aparte de esta, hay una serie de reglas adicionales para construir nombres para variables. #a ms importante es que tienen que comen)ar por un carcter alfab&tico o el subrayado. *o podemos utili)ar caracteres raros como el signo D, un espacio o un Q. *ombres admitidos para las variables podr%an ser Edad pais e*acimiento Nnombre 1ambi&n hay que evitar utili)ar nombres reservados como variables, por e"emplo no podremos llamar a nuestra variable palabras como return o for, que ya veremos que son utili)adas para estructuras del propio lengua"e. ,eamos ahora algunos nombres de variables que no est permitido utili)ar L4meses tu nombre return peMpe
1ambi&n se permite declarar varias variables en la misma l%nea, siempre que se separen por comas.
# r oper ndo+,oper ndo2
(i lo deseas, puedes ver un e"emplo de pgina que declara variables Javascript. En el siguiente art%culo seguiremos aprendiendo cosas de variables y veremos uno de los conceptos ms importantes que deberemos aprender sobre ellas, el mbito de las variables.
Artculo por
15
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ellas en Javascript. El mbito de las variables es uno de los conceptos ms importantes que deberemos conocer cuando traba"amos con variables, no slo en Javascript, sino en la mayor%a de los lengua"es de programacin. En el art%culo anterior ya comen)amos a e$plicar qu& son las variables y cmo declararlas. En este art%culo del Manual de Javascript pretendemos e$plicar con detenimiento qu& es este mbito de las variables y ofrecer e"emplos para que se pueda entender bien.
#as variables globales son accesibles desde cualquier lugar de la pgina, es decir, desde el script donde se han declarado y todos los dems scripts de la pgina, incluidos los mane"adores de eventos, como el onclic3, que ya vimos que se pod%a incluir dentro de determinadas etiquetas 01M#.
En el script anterior hemos declarado una variable dentro de una funcin, por lo que esa variable slo tendr valide) dentro de la funcin. (e pueden ver cmo se utili)an las llaves para acotar el lugar donde est definida esa funcin o su mbito. *o hay problema en declarar una variable local con el mismo nombre que una global, en este caso la variable global ser visible desde toda la pgina, e$cepto en el mbito donde est declarada la variable local ya que en este sitio ese nombre de variable est ocupado por la local y es ella quien tiene valide). En resumen, la variable que tendr valide) en cualquier sitio de la pgina es la global. Menos en el mbito donde est declarada la variable local, que ser ella quien tenga valide).
16
Bn conse"o para los principiantes podr%a ser no declarar variables con los mismos nombres, para que nunca haya lugar a confusin sobre qu& variable es la que tiene valide) en cada momento.
En este e"emplo, tenemos una variable global a la pgina llamada numero, que contiene un 4. 1ambi&n tenemos una funcin que utili)a la variable numero sin haberla declarado con var, por lo que la variable numero de la funcion ser la misma variable global numero declarada fuera de la funcin. En una situacin como esta, al e"ecutar la funcin se sobreescribir la variable numero y el dato que hab%a antes de e"ecutar la funcin se perder. En el pr$imo art%culo continuaremos hablando de variables y mostraremos que en ellas se pueden guardar distintos tipos de informacin.
Artculo por
17
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com y usos distintos. ,eamos cules son los tipos de datos ms habituales de Javascript. N*meros 'ara empe)ar tenemos el tipo num&rico, para guardar n/meros como R o 46.G Cadenas El tipo cadena de carcter guarda un te$to. (iempre que escribamos una cadena de caracteres debemos utili)ar las comillas <>=. .oleanos 1ambi&n contamos con el tipo boleano, que guarda una informacin que puede valer si <true= o no <false=. 'or /ltimo ser%a relevante se-alar aqu% que nuestras variables pueden contener cosas ms complicadas, como podr%a ser un ob"eto, una funcin, o vac%o <null= pero ya lo veremos ms adelante. En realidad nuestras variables no estn for)adas a guardar un tipo de datos en concreto y por lo tanto no especificamos ning/n tipo de datos para una variable cuando la estamos declarando. 'odemos introducir cualquier informacin en una variable de cualquier tipo, incluso podemos ir cambiando el contenido de una variable de un tipo a otro sin ning/n problema. ,amos a ver esto con un e"emplo.
# r nombre?ciud d = "I lenci " # r re#is do = true nombre?ciud d = C2 re#is do = "no"
Esta ligere)a a la hora de asignar tipos a las variables puede ser una venta"a en un principio, sobretodo para personas ine$pertas, pero a la larga puede ser fuente de errores ya que dependiendo del tipo que son las variables se comportarn de un modo u otro y si no controlamos con e$actitud el tipo de las variables podemos encontrarnos sumando un te$to a un n/mero. Javascript operar perfectamente, y devolver un dato, pero en algunos casos puede que no sea lo que estbamos esperando. As% pues, aunque tenemos libertad con los tipos, esta misma libertad nos hace estar ms atentos a posibles desa"ustes dif%ciles de detectar a lo largo de los programas. ,eamos lo que ocurrir%a en caso de sumar letras y n/meros. var suma S sumandoL D sumando4 document.write<suma= Este script nos mostrar%a en la pgina el te$to 4666, que no se corresponde con la suma de los dos n/meros, sino con su concatenacin, uno detrs del otro. ,eremos algunas cosas ms referentes a los tipos de datos en el pr$imo art%culo.
Artculo por
18
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com puedan guardar en variables van a estar enca"adas en uno de estos tipos de datos. ,eamos detenidamente cules son estos tres tipos de datos.
#os dos valores que pueden tener las variables boleanas son true o false. mi1e$to S >'epe se va a pescar> mi1e$to S V46MMQ #etras W O@@OV 1odo lo que se coloca entre comillas, como en los e"emplos anteriores es tratado como una cadena de caracteres independientemente de lo que coloquemos en el interior de las comillas. 'or e"emplo, en una variable de te$to podemos guardar n/meros y en ese caso tenemos que tener en cuenta que las variables de tipo te$to y las num&ricas no son la misma cosa y mientras que las de num&ricas nos sirven para hacer clculos matemticos las de te$to no.
19
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com .omilla doble: X> 1abulador: Xt 8etorno de carro: Xr Avance de pgina: Xf 8etroceder espacio: Xb .ontrabarra: XX Algunos de estos caracteres probablemente no los llegars a utili)ar nunca, pues su funcin es un poco rara y a veces poco clara. .on esto ya hemos terminado de e$plicar todo lo que se debe conocer sobre las variables en Javascript y podemos comen)ar con un tema nuevo que ser el de operadores.
Artculo por
Parte #:
$peradores en Javascript
2ratamos en di)ersos artculos los operadores. 3 receremos e4plicaciones de todos los operadores (ue podremos encontrarnos en -a)ascript.
20
6DF Esta es una e$presin muy bsica que no tiene mucho sentido ella sola. 0ace la suma entre los dos operandos n/mero 6 y F, pero no sirve de mucho porque no se hace nada con el resultado. *ormalmente se combinan ms de un operador para crear e$presiones ms /tiles. #a e$presin siguiente es una combinacin entre dos operadores, uno reali)a una operacin matemtica y el otro sirve para guardar el resultado.
miI ri ble = 2C B 5
En el e"emplo anterior, el operador O se utili)a para reali)ar una multiplicacin y el operador S se utili)a para asignar el resultado en una variable, de modo que guardemos el valor para su posterior uso. #os operadores se pueden clasificar seg/n el tipo de acciones que reali)an. A continuacin vamos a ver cada uno de estos grupos de operadores y describiremos la funcin de cada uno.
En el siguiente art%culo seguiremos conociendo otros de los operadores de Javascript: +peradores de cadenas, operadores lgicos y operadores condicionales.
21
Artculo por
Bn detalle importante que se puede ver en este caso es que el operador D sirve para dos usos distintos, si sus operandos son n/meros los suma, pero si se trata de cadenas las concatena. Esto pasa en general con todos los operadores que se repiten en el lengua"e, "avascript es suficientemente listo para entender que tipo de operacin reali)ar mediante una comprobacin de los tipos que estn implicados en &lla. Bn caso que resultar%a confuso es el uso del operador D cuando se reali)a la operacin con operadores te$to y num&ricos entreme)clados. En este caso "avascript asume que se desea reali)ar una concatenacin y trata a los dos operandos como si de cadenas de caracteres se trataran, incluso si la cadena de te$to que tenemos fuese un n/mero. Esto lo veremos ms fcilmente con el siguiente e"emplo.
mi6umero = 2C mi- den + = "pepe" mi- den 2 = "45M" result do+ = mi6umero D mi- den + //result do+ # le "2Cpepe" result do2 = mi6umero D mi- den 2 //result do2 # le "2C45M" mi- den 2 D= mi6umero //mi- den 2 hor # le "45M2C"
.omo hemos podido ver, tambi&n en el caso del operador DS, si estamos tratando con cadenas de te$to y n/meros entreme)clados, tratar a los dos operadores como si fuesen cadenas.
Nota: .omo se puede haber imaginado, faltan muchas operaciones t%picas a reali)ar con cadenas, para las cuales no e$isten operadores. Es porque esas funcionalidades se obtienen a trav&s de la clase (tring de Javascript, que veremos ms adelante.
22
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com lgicos relacionan los operandos boleanos para dar como resultado otro operando boleano, tal como podemos ver en el siguiente e"emplo. (i tengo hambre y tengo comida entonces me pongo a comer *uestro programa Javascript utili)ar%a en este e"emplo un operando boleano para tomar una decisin. 'rimero mirar si tengo hambre, si es cierto <true= mirar si dispongo de comida. (i son los dos ciertos, se puede poner a comer. En caso de que no tenga comida o que no tenga hambre no comer%a, al igual que si no tengo hambre ni comida. El operando en cuestin es el operando ?, que valdr verdadero <true= en caso de que los dos operandos valgan verdadero.
Nota: 'ara no llevarnos a enga-o, cabe decir que los operadores lgicos pueden utili)arse en combinacin con tipos de datos distintos de los boleanos, pero en este caso debemos utili)arlos en e$presiones que los conviertan en boleanos. En el siguiente grupo de operadores que vamos a tratar en este art%culo hablaremos sobre los operadores condicionales, que se pueden utili)ar "unto con los operadores lgicos para reali)ar sentencias todo lo comple"as que necesitemos. 'or e"emplo: i; (@==2 NN &2=C!F //l # ri ble @ # le 2 & l G
de tres
En la e$presin condicional anterior estamos evaluando dos comprobaciones que se relacionan con un operador lgico. 'or una parte $SS4 devolver un true en caso que la variable $ valga 4 y por otra, yKS6 devolver un true cuando la variable y tenga un valor distinto de 6. Ambas comprobaciones devuelven un boleano cada una, que luego se le aplica el operador lgico WW para comprobar si ambas comprobaciones se cumplieron al mismo tiempo. (obra decir que, para ver e"emplos de operadores condicionales, necesitamos aprender estructuras de control como if, a las que no hemos llegado todav%a.
K +perador *+ o negacin. (i era true pasa a false y viceversa. WW +perador ?, si son los dos verdaderos vale verdadero. YY +perador +, vale verdadero si por lo menos uno de ellos es verdadero. Ejemplo
mi"ole no = true mi"ole no = 2mi"ole no //mi"ole no hor tengoO mbre = true tengo-omid = true como-omid = tengoO mbre NN tengo-omid # le ; lse
#os operadores condicionales se utili)an en las e$presiones condicionales para tomas de decisiones. .omo estas e$presiones condicionales sern ob"eto de estudio ms adelante ser me"or describir los operadores condicionales ms adelante. e todos modos aqu% podemos ver la tabla de operadores condicionales. SS .omprueba si dos n/meros son iguales KS .omprueba si dos n/meros son distintos I Mayor que, devuelve true si el primer operador es mayor que el segundo H Menor que, es true cuando el elemento de la i)quierda es menor que el de la derecha IS Mayor igual. HS Menor igual ,eremos e"emplos de operadores condicionales cuando e$pliquemos estructuras de control, como la condicional if.
23
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com En el siguiente art%culo finali)aremos el tema de operadores, e$plicando los operadores a nivel de bit y la precedencia de operadores.
Artculo por
24
En los siguientes e"emplos podemos ver cmo las e$presiones podr%an llegar a ser confusas, pero con la tabla de precedencia de operadores podremos entender sin errores cul es el orden por el que se e"ecutan.
+2 B C D 4 * J / 2 K C
En este caso primero se e"ecutan los operadores O J y M, de i)quierda a derecha, con lo que se reali)ar%an estas operaciones. 'rimero la multiplicacin y luego la divisin por estar ms a la i)quierda del mdulo.
CM D 4 * 4 K C
Ahora el mdulo.
CM D 4 * +
e todos modos, es importante darse cuenta que el uso de los par&ntesis puede ahorrarnos muchos quebraderos de cabe)a y sobretodo la necesidad de sabernos de memoria la tabla de precedencia de los operadores. .uando veamos poco claro el orden con el que se e"ecutarn las sentencias podemos utili)arlos y as% for)ar que se eval/e antes el tro)o de e$presin que se encuentra dentro de los par&ntesis. 'ara acabar con el tema de operadores nos queda por ver un /ltimo operador un tanto especial, llamado typeof.
Artculo por
25
bole no es: " D t&peo; bole no! numerico es: " D t&peo; numerico! numerico?;lot nte es: " D t&peo; numerico?;lot nte! te@to es: " D t&peo; te@to! ;ech es: " D t&peo; ;ech !
(i e"ecutamos este script obtendremos que en la pgina se escribir el siguiente te$to: El tipo de boleano es: boolean El tipo de numerico es: number El tipo de numericoNflotante es: number El tipo de te$to es: string El tipo de fecha es: ob"ect En este e"emplo podemos ver que ser imprimen en la pgina los distintos tipos de las variables. Estos pueden ser los siguientes: boolean, para los datos boleanos. <1rue o false= number, para los num&ricos. strin-, para las cadenas de caracteres. object, para los ob"etos.
9ueremos destacar tan slo dos detalles ms: L= #os n/meros, ya tengan o no parte decimal, son siempre del tipo de datos num&rico. 4= Bna de las variables es un poco ms comple"a, es la variable fecha que es un ob"eto de la clase mane"o de fechas en los scripts. #a veremos ms adelante, as% como los ob"etos. ate<=, que se utili)a para el
.on esto ya hemos terminado de ver la lista de operadores que podemos utili)ar en Javascript y en el pr$imo art%culo pasaremos a conocer las estructuras de control.
Artculo por
26
Parte %:
*.1.2.- 0ucles
#os bucles se utili)an para reali)ar ciertas acciones repetidamente. (on muy utili)ados a todos los niveles en la programacin. .on un bucle podemos por e"emplo imprimir en una pgina los n/meros del L al L55 sin necesidad de
27
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com escribir cien veces el la instruccin imprimir. esde el L hasta el L55 2mprimir el n/mero actual En "avascript e$isten varios tipos de bucles, cada uno est indicado para un tipo de iteracin distinto y son los siguientes: 7+8 !02#E + !02#E
.omo hemos se-alado ya, las estructuras de control son muy importantes en Javascript y en cualquier lengua"e de programacin. Es por ello que en los siguientes cap%tulos veremos cada una de estas estructuras detenidamente, describiendo su uso y ofreciendo algunos e"emplos. .omen)aremos con la estructura de control if.
Artculo por
+pcionalmente se pueden indicar acciones a reali)ar en caso de que la evaluacin de la sentencia devuelva resultados negativos.
i; (e@presi3n! F // cciones re li: r en c so positi#o //... G else F // cciones re li: r en c so neg ti#o //... G
7i"&monos en varias cosas. 'ara empe)ar vemos como con unas llaves engloban las acciones que queremos reali)ar en caso de que se cumplan o no las e$presiones. Estas llaves han de colocarse siempre, e$cepto en el caso de que slo haya una instruccin como acciones a reali)ar, que son opcionales.
28
Nota: Aunque las llaves para englobar las sentencias a e"ecutar tanto en el caso positivo como negativo sean opcionales cuando queremos e"ecutar una /nica sentencia, la recomendacin es colocarlas siempre, porque obtendremos as% un cdigo fuente ms claro. 'or e"emplo: ,eamos el cdigo siguiente: i; (llue#e! lert("- e
gu "!P
gu "!P
(in embargo, cuando utili)amos las llaves, el cdigo queda bastante ms claro, porque se puede apreciar en un rpido vista)o qu& instrucciones estn dependiendo del caso positivo del if. Esto es un detalle que ahora qui)s no tenga mucha importancia, pero que se agradecer cuando el programa sea ms comple"o o cuando varios programadores se encarguen de tocar un mismo cdigo.
+tro detalle que salta a la vista es el sangrado <margen= que hemos colocado en cada uno de los bloques de instrucciones a e"ecutar en los casos positivos y negativos. Este sangrado es totalmente opcional, slo lo hemos hecho as% para que la estructura 27 se comprenda de una manera ms visual. #os saltos de l%nea tampoco son necesarios y se han colocado tambi&n para que se vea me"or la estructura. 'erfectamente podr%amos colocar toda la instruccin 27 en la misma l%nea de cdigo, pero eso no ayudar a que las cosas est&n claras.
Nota: *osotros, as% como lo har%a cualquier persona con cierta e$periencia en el rea de programacin, aconse"amos que se utilicen los sangrados y saltos de l%nea necesarios para que las instrucciones se puedan entender me"or. 9ui)s el d%a que reali)as un cdigo tengas claro qu& has hecho y por qu& es as%, pero dentro de un mes, cuando tengas que releer ese cdigo, qui)s te acuerdes menos de lo que hiciste en tus scripts y agradecers que tengan un formato amigable para que se puedan leer con facilidad por las personas. (i traba"as en equipo estas recomendaciones sern todav%a ms importantes, puesto que todav%a es ms complicado leer cdigo fuente que han reali)ado otras personas.
(i es lunes nos desear una feli) semana. *o har nada en caso contrario. .omo en este e"emplo slo indicamos una instruccin para el caso positivo, no har falta utili)ar las llaves <aunque s% ser%a recomendable haberlas puesto=. 7%"ate tambi&n en el operador condicional que consta de dos signos igual. ,amos a ver ahora otro e"emplo, un poco ms largo.
i; (credito >= precio! F document.write("h s compr do el rtAculo " D nue#o'rtAculo! //enseRo compr c rrito D= nue#o'rticulo //introdu:co el rtAculo en el c rrito de l compr credito *= precio //disminu&o el crSdito segTn el precio del rtAculo G else F document.write("se te h c b do el crSdito"! //in;ormo 9ue te ; lt dinero window.loc tion = "c rritodel compr .html" //#o& l p(gin del c rrito G
Este e"emplo es un poco ms comple"o, y tambi&n un poco ficticio. #o que hago es comprobar si tengo cr&dito para reali)ar una supuesta compra. 'ara ello miro si el cr&dito es mayor o igual que el precio del art%culo, si es as% informo de la compra, introdu)co el art%culo en el carrito y resto el precio al cr&dito acumulado. (i el precio del art%culo es superior al dinero disponible informo de la situacin y mando al navegador a la pgina donde se muestra su carrito de la compra.
29
En este e"emplo utili)amos en operador condicional >es mayor> <I=. En este caso, devuelve true si la variable edad es mayor que LT, con lo que se e"ecutar%a la l%nea siguiente que nos informa de que se puede ver el contenido para adultos. #as e$presiones condicionales se pueden combinar con las e$presiones lgicas para crear e$presiones ms comple"as. 8ecordamos que las e$presiones lgicas son las que tienen como operandos a los boleanos y que devuelvan otro valor boleano. (on los operadores negacin lgica, ? lgico y + lgico.
i; (b teri < 0.5 NN red8lectric == 0! document.write("tu orden dor port til se # p g r en segundos"!
#o que hacemos es comprobar si la bater%a de nuestro supuesto ordenador es menor que 5.F <est casi acabada= y tambi&n comprobamos si el ordenador no tiene red el&ctrica <est desenchufado=. #uego, el operador lgico los relaciona con un ?, de modo que si est casi sin bater%a ? sin red el&ctrica, informo que el ordenador se va a apagar.
Nota: #a lista de operadores que se pueden utili)ar con las estructuras 27 se pueden ver en el cap%tulo de operadores condicionales y operadores lgicos.
En el siguiente art%culo seguiremos e$plicando usos avan)ados de la estructura de control if en Javascript, como la anidacin de estructuras if.
Artculo por
30
El flu"o del programa es como comentbamos antes, primero se eval/a si los dos n/meros son iguales. En caso positivo se muestra un mensa"e informando de ello. En caso contrario ya sabemos que son distintos, pero aun debemos averiguar cul de los dos es mayor. 'ara eso se hace otra comparacin para saber si el primero es mayor que el segundo. (i esta comparacin da resultados positivos mostramos un mensa"e diciendo que el primero es mayor que el segundo, en caso contrario indicaremos que el primero es menor que el segundo. ,olvemos a remarcar que las llaves son en este caso opcionales, pues slo se e"ecuta una sentencia para cada caso. Adems, los saltos de l%nea y los sangrados tambi&n opcionales en todo caso y nos sirven slo para ver el cdigo de una manera ms ordenada. Mantener el cdigo bien estructurado y escrito de una manera comprensible es muy importante, ya que nos har la vida ms agradable a la hora de programar y ms adelante cuando tengamos que revisar los programas.
Nota: En este manual utili)ar& una notacin como la que has podido ver en las l%neas anteriores. Adems mantendr& esa notacin en todo momento. Esto sin lugar a dudas har que los cdigos con e"emplos sean comprensibles ms rpidamente, si no lo hici&ramos as% ser%a un verdadero incordio leerlos. Esta misma receta es aplicable a los cdigos que has de crear t/ y el principal beneficiado sers t/ mismo y los compa-eros que lleguen a leer tu cdigo.
*.$.2.- 6perador I/
0ay un operador que no hemos visto todav%a y es una forma ms esquemtica de reali)ar algunos 27 sencillos. 'roviene del lengua"e ., donde se escriben muy pocas l%neas de cdigo y donde cuanto menos escribamos ms elegantes seremos. Este operador es un claro e"emplo de ahorro de l%neas y caracteres al escribir los scripts. #o veremos rpidamente, pues la /nica ra)n por la que lo incluyo es para que sepas que e$iste y si lo encuentras en alguna ocasin por ah% sepas identificarlo y cmo funciona. Bn e"emplo de uso del operador 27 se puede ver a continuacin.
I ri ble = (condici3n! U # lor+ : # lor2
Este e"emplo no slo reali)a una comparacin de valores, adems asigna un valor a una variable. #o que hace es evaluar la condicin <colocada entre par&ntesis= y si es positiva asigna el valorL a la variable y en caso contrario le asigna el valor4. ,eamos un e"emplo:
momento = (hor ? ctu l < +2! U "'ntes del mediodA " : "%espuSs del mediodA "
Este e"emplo mira si la hora actual es menor que L4. (i es as%, es que ahora es antes del mediod%a, as% que asigna >Antes del mediod%a> a la variable momento. (i la hora es mayor o igual a L4 es que ya es despu&s de mediod%a, con lo que se asigna el te$to > espu&s del mediod%a> a la variable momento. En el siguiente art%culo pasaremos a traba"ar con una nueva estructura de control, tambi&n utili)ada para toma de decisiones, llamada switch.
Artculo por
31
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com #as estructuras de control son la manera con la que se puede dominar el flu"o de los programas, para hacer cosas distintas en funcin de los estados de las variables. En el Manual de Javascript ya empe)amos a ver las estructuras de control y ahora le ha tocado el turno a (!21.0, una estructura un poco ms comple"a que permite hacer m/ltiples operaciones dependiendo del estado de una variable. En este art%culo veremos que switch nos sirve para tomar decisiones en funcin de distintos estados de las variables. Esta e$presin se utili)a cuando tenemos m/ltiples posibilidades como resultado de la evaluacin de una sentencia. #a estructura (!21.0 se incorpor a partir de la versin L.4 de Javascript <*etscape E e 2nternet E$plorer E=. (u sinta$is es la siguiente.
switch (e@presi3n! F c se # lor+: ,entenci s e5ecut r si l bre ) c se # lor2: ,entenci s e5ecut r si l bre ) c se # lorC: ,entenci s e5ecut r si l bre ) de; ult: ,entenci s e5ecut r si el G
e@presi3n tiene como # lor e@presi3n tiene como # lor e@presi3n tiene como # lor # lor no es ninguno de los
#a e$presin se eval/a, si vale valorL se e"ecutan las sentencias relacionadas con ese caso. (i la e$presin vale valor4 se e"ecutan las instrucciones relacionadas con ese valor y as% sucesivamente, por tantas opciones como deseemos. 7inalmente, para todos los casos no contemplados anteriormente se e"ecuta el caso por defecto. #a palabra brea3 es opcional, pero si no la ponemos a partir de que se encuentre coincidencia con un valor se e"ecutarn todas las sentencias relacionadas con este y todas las siguientes. Es decir, si en nuestro esquema anterior no hubiese ning/n brea3 y la e$presin valiese valorL, se e"ecutar%an las sentencias relacionadas con valorL y tambi&n las relacionadas con valor4, valor6 y default. 1ambi&n es opcional la opcin default u opcin por defecto. ,eamos un e"emplo de uso de esta estructura. (upongamos que queremos indicar que d%a de la semana es. (i el d%a es L <lunes= sacar un mensa"e indicndolo, si el d%a es 4 <martes= debemos sacar un mensa"e distinto y as% sucesivamente para cada d%a de la semana, menos en el G <sbado= y U <domingo= que queremos mostrar el mensa"e >es fin de semana>. 'ara d%as mayores que U indicaremos que ese d%a no e$iste.
switch (di ?de?l ?sem n ! F c se +: document.write("8s =unes"! bre ) c se 2: document.write("8s < rtes"! bre ) c se C: document.write("8s <iSrcoles"! bre ) c se 4: document.write("8s 4ue#es"! bre ) c se 5: document.write("8s #iernes"! bre ) c se M: c se L: document.write("8s ;in de sem n "! bre ) de; ult: document.write("8se dA no e@iste"! G
32
El e"emplo es relativamente sencillo, solamente puede tener una peque-a dificultad, consistente en interpretar lo que pasa en el caso G y U, que hab%amos dicho que ten%amos que mostrar el mismo mensa"e. En el caso G en realidad no indicamos ninguna instruccin, pero como tampoco colocamos un brea3 se e"ecutar la sentencia o sentencias del caso siguiente, que corresponden con la sentencia indicada en el caso U que es el mensa"e que informa que es fin de semana. (i el caso es U simplemente se indica que es fin de semana, tal como se pretend%a. En el siguiente art%culo comen)aremos a e$plorar las estructuras de control para hacer bucles o repeticiones en Javascript, comen)ando por el bucle for.
Artculo por
El bucle 7+8 tiene tres partes incluidas entre los par&ntesis, que nos sirven para definir cmo deseamos que se realicen las repeticiones. #a primera parte es la iniciali)acin, que se e"ecuta solamente al comen)ar la primera iteracin del bucle. En esta parte se suele colocar la variable que utili)aremos para llevar la cuenta de las veces que se e"ecuta el bucle. #a segunda parte es la condicin, que se evaluar cada ve) que comience una iteracin del bucle. .ontiene una e$presin para decidir cundo se ha de detener el bucle, o me"or dicho, la condicin que se debe cumplir para que contin/e la e"ecucin del bucle. 'or /ltimo tenemos la actuali)acin, que sirve para indicar los cambios que queramos e"ecutar en las variables cada ve) que termina la iteracin del bucle, antes de comprobar si se debe seguir e"ecutando. espu&s del for se colocan las sentencias que queremos que se e"ecuten en cada iteracin, acotadas entre llaves. Bn e"emplo de utili)acin de este bucle lo podemos ver a continuacin, donde se imprimirn los n/meros del 5 al L5.
# r i ;or (i=0Pi<=+0PiDD! F document.write(i! document.write("<br>"! G
En este caso se iniciali)a la variable i a 5. .omo condicin para reali)ar una iteracin, se tiene que cumplir que la variable i sea menor o igual que L5. .omo actuali)acin se incrementar en L la variable i. .omo se puede comprobar, este bucle es mu( potente1 (a que en una sola lnea podemos indicar muc)as cosas distintas ( mu( variadas, lo que permite una rpida configuracin del bucle y una versatilidad enorme. 'or e"emplo si queremos escribir los n/mero del L al L.555 de dos en dos se escribir el siguiente bucle.
33
En este caso decrementamos en una unidad la variable i en cada iteracin, comen)ando en el valor 6E6 y siempre que la variable tenga un valor mayor o igual que L5.
Este script se puede ver en funcionamiento aqu%. Ahora que ya conocemos el bucle for, estamos en condiciones de aprender a mane"ar otras estructuras de control para reali)ar repeticiones, como los bucles while y do...while.
Artculo por
*.,.- 0ucles A1I!- % "6 A1I!Descripcin y diferentes usos de los dos tipos de bucles 56.3E ue se encuentran disponibles en Javascript, con algunos ejemplos pr%cticos. Estamos tratando acerca de las distintas estructuras de control que e$isten en el lengua"e Javascript y en concreto viendo los distintos tipos de bucles que podemos implementar en este lengua"e de programacin. En art%culos anteriores del Manual de
34
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Javascript vimos ya el primero de los bucles que debemos conocer, el bucle for y ahora vamos a tratar sobre los otros dos tipos de estructuras de control para hacer repeticiones. As% pues, veamos ahora los dos tipos de bucles !02#E que podemos utili)ar en Javascript y los usos de cada uno.
*.,.1.- 0ucle A1I!Estos bucles se utili)an cuando queremos repetir la e"ecucin de unas sentencias un n/mero indefinido de veces, siempre que se cumpla una condicin. (e ms sencillo de comprender que el bucle 7+8, pues no incorpora en la misma l%nea la iniciali)acin de las variables su condicin para seguir e"ecutndose y su actuali)acin. (lo se indica, como veremos a continuacin, la condicin que se tiene que cumplir para que se realice una iteracin.
while (condici3n!F //sentenci s e5ecut r G
s lir!",""!
Este es un e"emplo de lo ms sencillo que se puede hacer con un bucle while. #o que hace es pedir que el usuario introdu)ca un color y lo hace repetidas veces, mientras que el color introducido no sea ro"o. 'ara e"ecutar un bucle como este primero tenemos que iniciali)ar la variable que vamos utili)ar en la condicin de iteracin del bucle. .on la variable iniciali)ada podemos escribir el bucle, que comprobar para e"ecutarse que la variable color sea distinto de >ro"o>. En cada iteracin del bucle se pide un nuevo color al usuario para actuali)ar la variable color y se termina la iteracin, con lo que retornamos al principio del bucle, donde tenemos que volver a evaluar si lo que hay en la variable color es >ro"o> y as% sucesivamente mientras que no se haya introducido como color el te$to >ro"o>.
Nota: 0emos utili)ado en este e"emplo la funcin prompt de Javascript, que no hemos visto todav%a en este manual. Esta funcin sirve para que mostrar una ca"a de dilogo donde el usuario debe escribir un te$to. Esta funcin pertenece al ob"eto window de Javascript y la comentamos en el art%culo M&todos de window en Javascript.
*.,.2.- 0ucle "6...A1I!El bucle do...while es la /ltima de las estructuras para implementar repeticiones de las que dispone en Javascript y es una variacin del bucle while visto anteriormente. (e utili)a generalmente cuando no sabemos cuantas veces se habr de e"ecutar el bucle, igual que el bucle !02#E, con la diferencia de que sabemos seguro que el bucle por lo menos se e"ecutar una ve). Este tipo de bucle se introdu"o en Javascript L.4, por lo que no todos los navegadores los soportan, slo los de versin E o superior. En cualquiuer caso, cualquier cdigo que quieras escribir con +...!02#E se puede escribir tambi&n utili)ando un bucle !02#E, con lo que en navegadores antiguos debers traducir tu bucle +...!02#E por un bucle !02#E. #a sinta$is es la siguiente.
do F //sentenci s del bucle G while (condici3n!
El bucle se e"ecuta siempre una ve) y al final se eval/a la condicin para decir si se e"ecuta otra ve) el bucle o se termina su e"ecucin. ,eamos el e"emplo que escribimos para un bucle !02#E en este otro tipo de bucle.
# r color
35
Este e"emplo funciona e$actamente igual que el anterior, e$cepto que no tuvimos que iniciali)ar la variable color antes de introducirnos en el bucle. 'ide un color mientras que el color introducido es distinto que >ro"o>.
(uponemos que por lo que respecta al bucle !02#E no habr problemas, pero donde si que puede haberlos es en la sentencia utili)ada para tomar un n/mero aleatorio. (in embargo, no es necesario e$plicar aqu% la sentencia porque lo tenemos planeado hacer ms adelante. e todos modos, si lo deseas, puedes ver este art%culo que habla sobre n/meros aleatorios en Javascript. 'odemos ver una pgina con el e"emplo en funcionamiento. .on esto ya hemos conocido todos los tipos de bucles que e$isten en Javascript, no obstante aun vamos a dedicar un art%culo para e$plicar las sentencias brea3 y continue que nos sirven para alterar el funcionamiento normal de los bucles en dos sentidos.
Artculo por
36
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com brea2: (ignifica detener la e"ecucin de un bucle y salirse de &l. continue: (irve para detener la iteracin actual y volver al principio del bucle para reali)ar otra iteracin, si corresponde.
*.C.1.- 0reaD
(e detiene un bucle utili)ando la palabra brea3. etener un bucle significa salirse de &l y de"arlo todo como est para continuar con el flu"o del programa inmediatamente despu&s del bucle.
;or (i=0Pi<+0PiDD!F document.write (i! escribe = prompt("dime si continuo pregunt ndo...", "si"! i; (escribe == "no"! bre ) G
Este e"emplo escribe los n/meros del 5 al R y en cada iteracin del bucle pregunta al usuario si desea continuar. (i el usuario dice cualquier cosa continua, e$cepto cuando dice >no>, situacin en la cual se sale del bucle y de"a la cuenta por donde se hab%a quedado.
*.C.2.- )ontinue
(irve para volver al principio del bucle en cualquier momento, sin e"ecutar las l%neas que haya por deba"o de la palabra continue.
# r i=0 while (i<L!F increment r = prompt("= cuent i; (increment r == "no"! continue iDD G
Este e"emplo, en condiciones normales contar%a hasta desde iS5 hasta iSU, pero cada ve) que se e"ecuta el bucle pregunta al usuario si desea incrementar la variable o no. (i introduce >no> se e"ecuta la sentencia continue, con lo que se vuelve al principio del bucle sin llegar a incrementar en L la variable i, ya que se ignorar%an las sentencia que hayan por deba"o del continue.
'odemos ver una pgina con el e"emplo en funcionamiento. .on la descripcin de las sentencias brea3 y continue hemos podido abarcar todo lo que se debe saber sobre la creacin de bucles en Javascript. Ahora bien, en el siguiente art%culo todav%a vamos a seguir en el tema de las estructuras de control, porque queremos ofrecer un e"emplo un poco ms avan)ado donde aprenderemos a anidar bucles.
Artculo por
37
#a e"ecucin funcionar de la siguiente manera. 'ara empe)ar se iniciali)a el primer bucle, con lo que la variable i valdr 5 y a continuacin se iniciali)a el segundo bucle, con lo que la variable " valdr tambi&n 5. En cada iteracin se imprime el valor de la variable i, un guin <>@>= y el valor de la variable ", como las dos variables valen 5, se imprimir el te$to >5@5> en la pgina web. ebido al flu"o del programa en esquemas de anidacin como el que hemos visto, el bucle que est anidado <ms hacia dentro= es el que ms veces se e"ecuta. En este e"emplo, para cada iteracin del bucle ms e$terno el bucle anidado se e"ecutar por completo una ve), es decir, har sus L5 iteraciones. En la pgina web se escribir%an estos valores, en la primera iteracin del bucle e$terno y desde el principio: 5@5 5@L 5@4 5@6 5@E 5@F 5@G 5@U 5@T 5@R 'ara cada iteracin del bucle e$terno se e"ecutarn las L5 iteraciones del bucle interno o anidado. 0emos visto la primera iteracin, ahora vamos a ver las siguientes iteraciones del bucle e$terno. En cada una acumula una unidad en la variable i, con lo que saldr%an estos valores. L@5 L@L L@4 L@6 L@E L@F L@G L@U L@T L@R
38
? luego estos. 4@5 4@L 4@4 4@6 4@E 4@F 4@G 4@U 4@T 4@R As% hasta que se terminen los dos bucles, que ser%a cuando se alcan)ase el valor R@R. ,eamos un e"emplo muy parecido al anterior, aunque un poco ms /til. (e trata de imprimir en la pgina las todas las tablas de multiplicar. el L al R, es decir, la tabla del L, la del 4, del 6...
;or (i=+Pi<+0PiDD!F document.write("<br><b>= t bl del " D i D ":</b><br>"! ;or (5=+P5<+0P5DD! F document.write(i D " @ " D 5 D ": "! document.write(iB5! document.write("<br>"! G G
.on el primer bucle controlamos la tabla actual y con el segundo bucle la desarrollamos. En el primer bucle escribimos una cabecera, en negrita, indicando la tabla que estamos escribiendo, primero la del L y luego las dems en orden ascendente hasta el R. .on el segundo bucle escribo cada uno de los valores de cada tabla. (e puede ver el e"emplo en marcha en este enlace.
Nota: ,eremos ms cosas con bucles anidados en cap%tulos posteriores, aunque si queremos adelantarnos un poco para ver un nuevo e"emplo que afiance estos conocimientos podemos ir viendo un e"emplo en el 1aller de Javascript sobre bucles anidados, donde se construye la tabla con todos los colores puros en definiciones de 4FG colores.
.on este art%culo ms bien prctico sobre anidacin de bucles, terminamos el tema de las estructuras de control. Ahora pasaremos a otra seccin de este Manual de Javascript, en la que trataremos sobre las funciones.
Artculo por
39
Parte &:
'unciones en Javascript
#as unciones nos permitir*n hacer programas $ scripts m*s optimizados $ de *cil mantenimiento. 2ambi/n son b*sicas en cual(uier lengua+e de programaci&n $ les dedicaremos )arios artculos.
#as funciones se utili)an constantemente, no slo las que escribes t/, sino tambi&n las que ya estn definidas en el sistema, pues todos los lengua"es de programacin suelen tener un montn de funciones para reali)ar procesos habituales, como por e"emplo obtener la hora, imprimir un mensa"e en la pantalla o convertir variables de un tipo a otro. ?a hemos visto alguna funcin en nuestros sencillos e"emplos anteriores. 'or e"emplo, cuando hac%amos un document.write<= en realidad estbamos llamando a la funcin write<= asociada al documento de la pgina, que escribe un te$to en la pgina. En los cap%tulos de funciones vamos primero a ver cmo reali)ar nuestras propias funciones y cmo llamarlas luego. A lo largo del manual veremos muchas de las funciones definidas en Javascript que debemos utili)ar para reali)ar distintos tipos de acciones habituales.
40
'rimero se escribe la palabra function, reservada para este uso. (eguidamente se escribe el nombre de la funcin, que como los nombres de variables puede tener n/meros, letras y alg/n carcter adicional como en guin ba"o. A continuacin se colocan entre llaves las distintas instrucciones de la funcin. #as llaves en el caso de las funciones no son opcionales, adems es /til colocarlas siempre como se ve en el e"emplo, para que se recono)ca fcilmente la estructura de instrucciones que engloba la funcin. ,eamos un e"emplo de funcin para escribir en la pgina un mensa"e de bienvenida dentro de etiquetas H0LI para que quede ms resaltado. function escribirCienvenida<=^ document.write<>H0LI0ola a todosHJ0LI>= _ (implemente escribe en la pgina un te$to. Admitimos que es una funcin tan sencilla, que el e"emplo no e$presa suficientemente el concepto de funcin, pero ya veremos otras ms comple"as. #as etiquetas 0L no se muestran en la pgina, sino que son interpretadas como el significado de la misma, en este caso que escribimos un encabe)ado de nivel L. .omo estamos escribiendo en una pgina web, al poner etiquetas 01M# se interpretan como lo que son.
41
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com E$isten dos opciones posibles para colocar el cdigo de una funcin: a3 Colocar la funcin en el mismo bloque de script: En concreto, la funcin se puede definir en el bloque H(.82'1I donde est& la llamada a la funcin, aunque es indiferente si la llamada se encuentra antes o despu&s del cdigo de la funcin, dentro del mismo bloque H(.82'1I.
<,-./01> miEuncion(! ;unction miEuncion(!F //h go lgo... document.write("8sto # G </,-./01>
bien"!
Este e"emplo funciona correctamente porque la funcin est declarada en el mismo bloque que su llamada. b3 Colocar la funcin en otro bloque de script: 1ambi&n es vlido que la funcin se encuentre en un bloque H(.82'1I anterior al bloque donde est la llamada.
<O1<=> <O8'%> <1/1=8></ 0V$/6'</1/1=8> <,-./01> ;unction miEuncion(!F //h go lgo... document.write("8sto # bien"! G </,-./01> </O8'%> <"7%W> <,-./01> miEuncion(! </,-./01> </"7%W> </O1<=>
,emos un cdigo completo sobre cmo podr%a ser una pgina web donde tenemos funciones Javascript. .omo se puede comprobar, las funciones estn en la cabecera de la pgina <dentro del 0EA =. `ste es un lugar e$celente donde colocarlas, porque se supone que en la cabecera no se van a utili)ar todav%a y siempre podremos disfrutar de ellas en el cuerpo porque sabemos seguro que ya han sido declaradas. 'ara que quede claro este asunto de la colocacin de funciones veamos el siguiente e"emplo, que dara un error. E$amina atentamente el cdigo siguiente, que lan)ar un error, debido a que hacemos una llamada a una funcin que se encuentra declarada en un bloque H(.82'1I posterior.
<,-./01> miEuncion(! </,-./01> <,-./01> ;unction miEuncion(!F //h go lgo... document.write("8sto # G </,-./01>
bien"!
.on esto esperamos haber resuelto todas las dudas sobre la colocacin del cdigo de las funciones Javascript. En siguientes art%culos veremos otros temas interesantes como los parmetros de las funciones.
Artculo por
42
,.$.1.- :ar.metros
#os parmetros se usan para mandar valores a las funciones. Bna funcin traba"ar con los parmetros para reali)ar las acciones. 'or decirlo de otra manera, los parmetros son los valores de entrada que recibe una funcin. 'or poner un e"emplo sencillo de entender, una funcin que reali)ase una suma de dos n/meros tendr%a como parmetros a esos dos n/meros. #os dos n/meros son la entrada, as% como la salida ser%a el resultado de la suma, pero eso lo veremos ms tarde. ,eamos un e"emplo anterior en el que crebamos una funcin para mostrar un mensa"e de bienvenida en la pgina web, pero al que ahora le vamos a pasar un parmetro que contendr el nombre de la persona a la que hay que saludar.
;unction escribir"ien#enid (nombre!F document.write("<O+>Ool " D nombre D "</O+>"! G
.omo podemos ver en el e"emplo, para definir en la funcin un parmetro tenemos que poner el nombre de la variable que va a almacenar el dato que le pasemos. Esa variable, que en este caso se llama nombre, tendr como valor el dato que le pasemos a la funcin cuando la llamemos. Adems, la variable donde recibimos el parmetro tendr vida durante la e"ecucin de la funcin y de"ar de e$istir cuando la funcin termine su e"ecucin. 'ara llamar a una funcin que tiene parmetros se coloca entre par&ntesis el valor del parmetro. 'ara llamar a la funcin del e"emplo habr%a que escribir:
escribir"ien#enid ("'lberto $ rcA "!
Al llamar a la funcin as%, el parmetro nombre toma como valor >Alberto Aarc%a> y al escribir el saludo por pantalla escribir >0ola Alberto Aarc%a> entre etiquetas H0LI. #os parmetros pueden recibir cualquier tipo de datos, num&rico, te$tual, boleano o un ob"eto. 8ealmente no especificamos el tipo del parmetro, por eso debemos tener un cuidado especial al definir las acciones que reali)amos dentro de la funcin y al pasarle valores, para asegurarnos que todo es consecuente con los tipos de datos que esperamos tengan nuestras variables o parmetros.
43
#lamar%amos a la funcin con esta sinta$is. Entre los par&ntesis colocaremos los valores de los parmetros.
# r mi6ombre = "0epe" # r mi-olor = "red" escribir"ien#enid (mi6ombre,mi-olor!
0e colocado entre los par&ntesis dos variables en lugar de dos te$tos entrecomillados. .uando colocamos variables entre los parmetros en realidad lo que estamos pasando a la funcin son los valores que contienen las variables y no las mismas variables.
En el e"emplo tenemos una funcin que recibe un parmetro y que modifica el valor del parmetro asignndole el valor 64. 1ambi&n tenemos una variable, que iniciali)amos a F y posteriormente llamamos a la funcin pasndole esta variable como parmetro. .omo dentro de la funcin modificamos el valor del parmetro podr%a pasar que la variable original cambiase de valor, pero como los parmetros no modifican el valor original de las variables, &sta no cambia de valor. e este modo, una ve) e"ecutada la funcin, al imprimir en pantalla el valor de mi,ariable se imprimir el n/mero F, que es el valor original de la variable, en lugar de 64 que era el valor con el que hab%amos actuali)ado el parmetro. En Javascript slo se pueden pasar las variables por valor. Ahora que hemos aprendido a enviar datos a las funciones, por medio de los parmetros, podemos aprender a hacer funciones que devuelven valores.
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com funciones, que debemos conocer, no slo en Javascript sino en general en cualquier lengua"e de programacin. que, al invocar una funcin, se podr reali)ar acciones y ofrecer un valor como salida. e modo
'or e"emplo, una funcin que calcula el cuadrado de un n/mero tendr como entrada a ese n/mero y como salida tendr el valor resultante de hallar el cuadrado de ese n/mero. #a entrada de datos en las funciones la vimos anteriormente en el art%culo sobre parmetros de las funciones. Ahora tenemos que aprender acerca de la salida. ,eamos un e"emplo de funcin que calcula la media de dos n/meros. #a funcin recibir los dos n/meros y retornar el valor de la media.
;unction medi (# lor+,# lor2!F # r result do result do = (# lor+ D # lor2! / 2 return result do G
'ara especificar el valor que retornar la funcin se utili)a la palabra return seguida de el valor que se desea devolver. En este caso se devuelve el contenido de la variable resultado, que contiene la media calculada de los dos n/meros. 9ui)s nos preguntemos ahora cmo recibir un dato que devuelve una funcin. 8ealmente en el cdigo fuente de nuestros programas podemos invocar a las funciones en el lugar que deseemos. .uando una funcin devuelve un valor simplemente se sustituye la llamada a la funcin por ese valor que devuelve. As% pues, para almacenar un valor de devolucin de una funcin, tenemos que asignar la llamada a esa funcin como contenido en una variable, y eso lo har%amos con el operador de asignacin S. 'ara ilustrar esto se puede ver este e"emplo, que llamar a la funcin media<= y guardar el resultado de la media en una variable para luego imprimirla en la pgina.
# r mi<edi mi<edi = medi (+2,J! document.write (mi<edi !
Ahora bien, aunque slo podamos devolver un dato, en una misma funcin podemos colocar ms de un return. .omo decimos, slo vamos a poder retornar una cosa, pero dependiendo de lo que haya sucedido en la funcin podr ser de un tipo u otro, con unos datos u otros. En esta funcin podemos ver un e"emplo de utili)acin de m/ltiples return. (e trata de una funcin que devuelve un 5 si el parmetro recibido era par y el valor del parmetro si este era impar.
;unction multiple.eturn(numero!F # r resto = numero K 2 i; (resto == 0! return 0 else return numero G
'ara averiguar si un n/mero es par hallamos el resto de la divisin al dividirlo entre 4. (i el resto es cero es que era par y devolvemos un 5, en caso contrario @el n/mero es impar@ devolvemos el parmetro recibido.
45
'odr%a darse el caso de que podemos declarar variables en funciones que tengan el mismo nombre que una variable global a la pgina. Entonces, dentro de la funcin, la variable que tendr valide) es la variable local y fuera de la funcin tendr valide) la variable global a la pgina. En cambio, si no declaramos las variables en las funciones se entender por "avascript que estamos haciendo referencia a una variable global a la pgina, de modo que si no est creada la variable la crea, pero siempre global a la pgina en lugar de local a la funcin. ,eamos el siguiente cdigo.
;unction # ri bles?glog les?&?loc les(!F # r # ri ble=oc l = 2C # ri ble$lob l = "9wert&" G
En este caso variable#ocal es una variable que se ha declarado en la funcin, por lo que ser local a la funcin y slo tendr valide) durante su e"ecucin. 'or otra parte variableAlobal no se ha llegado a declarar <porque antes de usarla no se ha utili)ado la palabra var para declararla=. En este caso la variable variableAlobal es global a toda la pgina y seguir e$istiendo aunque la funcin finalice su e"ecucin. Adems, si antes de llamar a la funcin e$istiese la variable variableAlobal, como resultado de la e"ecucin de esta funcin, se machacar%a un hipot&tico valor de esa variable y se sustituir%a por >qwerty>.
Nota: 'odemos encontrar ms informacin sobre mbito de variables en un art%culo anterior.
.on esto hemos terminado el tema de las funciones, as% que en adelante nos dedicaremos a otros asuntos tambi&n interesantes, como son los Arrays en Javascript.
Artculo por
46
Parte (:
)rra"s Javascript
#os arra$s, tambi/n llamados tablas o matrices, son la primera estructura de datos (ue podemos aprender en -a)ascript $ en otros lengua+es de programaci&n. 6in duda ser*n imprescindibles para desarrollar programas medianamente a)anzados.
Esto crea un array en la pgina que esta e"ecutndose. El array se crea sin ning/n contenido, es decir, no tendr ninguna casilla o compartimiento creado. 1ambi&n podemos crear el array Javascript especificando el n/mero de compartimentos que va a tener.
# r mi'rr & = new 'rr &(+0!
En este caso indicamos que el array va a tener L5 posiciones, es decir, L5 casillas donde guardar datos. Es importante que nos fi"emos que la palabra Array en cdigo Javascript se escribe con la primera letra en may/scula. .omo en Javascript las may/sculas y min/sculas si que importan, si lo escribimos en min/scula no funcionar.
47
1anto se indique o no el n/mero de casillas del arra( javascript, podemos introducir en el array cualquier dato. (i la casilla est creada se introduce simplemente y si la casilla no estaba creada se crea y luego se introduce el dato, con lo que el resultado final es el mismo. Esta creacin de casillas es dinmica y se produce al mismo tiempo que los scripts se e"ecutan. ,eamos a continuacin cmo introducir valores en nuestros arrays. miArray\5] S 4R5 miArray\L] S RU miArray\4] S L4U (e introducen indicando entre corchetes el %ndice de la posicin donde quer%amos guardar el dato. En este caso introducimos 4R5 en la posicin 5, RU en la posicin L y L4U en la 4. 4os arra(s en Javascript empiezan siempre en la posicin 5, as% que un array que tenga por e"emplo L5 posiciones, tendr casillas de la 5 a la R. 'ara recoger datos de un array lo hacemos igual: poniendo entre corchetes el %ndice de la posicin a la que queremos acceder. ,eamos cmo se imprimir%a en la pantalla el contenido de un array.
# r mi'rr & = new 'rr &(C! mi'rr &Y0Z = +55 mi'rr &Y+Z = 4 mi'rr &Y2Z = 4HH ;or (i=0Pi<CPiDD!F document.write("0osici3n " D i D " del document.write("<br>"! G rr &: " D mi'rr &YiZ!
0emos creado un array con tres posiciones, luego hemos introducido un valor en cada una de las posiciones del array y finalmente las hemos impreso. En general, el recorrido por arrays para imprimir sus posiciones, o cualquier otra cosa, se hace utili)ando bucles. En este caso utili)amos un bucle 7+8 que va desde el 5 hasta el 4. 'odemos ver el e"emplo en marcha en otra pgina.
2ncluso, en Javascript podemos guardar distintos tipos de datos en las casillas de un mismo array. Es decir, podemos introducir n/meros en unas casillas, te$tos en otras, boleanos o cualquier otra cosa que deseemos.
mi'rr mi'rr mi'rr mi'rr &Y0Z &Y+Z &Y+Z &Y2Z = = = = "des rrolloweb.com" +2L5 0.LJ true
.omo se puede ver, se est definiendo una variable llamada array8apido y estamos indicando en los corchetes varios valores separados por comas. Esto es lo mismo que haver declarado el array con la funcin Array<= y luego haberle cargado los
48
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com valores uno a uno. En el pr$imo art%culo seguiremos viendo cosas relacionadas con los arrays, en concreto aprenderemos a acceder a la longitud de un array.
Artculo por
Este cdigo imprimir%a en pantalla el n/mero de posiciones del array, que en este caso es 6. 8ecordamos que un array con 6 posiciones abarca desde la posicin 5 a la 4. Es muy habitual que se utilice la propiedad length para poder recorrer un array por todas sus posiciones. 'ara ilustrarlo vamos a ver un e"emplo de recorrido por este array para mostrar sus valores.
;or (i=0Pi<mi'rr &.lengthPiDD!F document.write(mi'rr &YiZ! G
0ay que fi"arse que el bucle for se e"ecuta siempre que i valga menos que la longitud del array, e$tra%da de su propiedad length. El siguiente e"emplo nos servir para conocer me"or los recorridos por los arrays, el funcionamiento de la propiedad length y la creacin dinmica de nuevas posiciones. ,amos a crear un array con 4 posiciones y rellenar su valor. 'osteriormente introduciremos un valor en la posicin F del array. 7inalmente imprimiremos todas las posiciones del array para ver lo que pasa.
# r mi'rr & = new 'rr &(2! mi'rr &Y0Z = "-olombi " mi'rr &Y+Z = "8st dos >nidos" mi'rr &Y5Z = ""r sil" ;or (i=0Pi<mi'rr &.lengthPiDD!F document.write("0osici3n " D i D " del rr &: " D mi'rr &YiZ!
49
El e"emplo es sencillo. (e puede apreciar que hacemos un recorrido por el array desde 5 hasta el n/mero de posiciones del array <indicado por la propiedad length=. En el recorrido vamos imprimiendo el n/mero de la posicin seguido del contenido del array en esa posicin. 'ero podemos tener una duda al preguntarnos cul ser el n/mero de elementos de este array, ya que lo hab%amos declarado con 4 y luego le hemos introducido un tercero en la posicin F. Al ver la salida del programa podremos contestar nuestras preguntas. (er algo parecido a esto: 'osicin 5 del array: .olombia 'osicin L del array: Estados Bnidos 'osicin 4 del array: null 'osicin 6 del array: null 'osicin E del array: null 'osicin F del array: Crasil (e puede ver claramente que el n/mero de posiciones es G, de la 5 a la F. #o que ha ocurrido es que al introducir un dato en la posicin F, todas las casillas que no estaban creadas hasta la quinta se crean tambi&n. #as posiciones de la 4 a la E estn sin iniciali)ar. En este caso nuestro navegador ha escrito la palabra null para e$presar esto, pero otros navegadores podrn utili)ar la palabra undefined. ?a veremos ms adelante qu& es este null y dnde lo podemos utili)ar, lo importante ahora es que comprendas cmo traba"an los arrays y los utilices correctamente. 'odemos ver el efecto de este script en tu navegador en una pgina a parte. .ontinuaremos el tema de arrays en la siguiente entrega de este manual: Arrays multidimensionales.
Artculo por
50
.on las anteriores l%neas hemos creado tres arrays de L dimensin y tres elementos, como los que ya conoc%amos. Ahora crearemos un nuevo array de tres elementos e introduciremos dentro de cada una de sus casillas los arrays creados anteriormente, con lo que tendremos un array de arrays, es decir, un array de 4 dimensiones.
# r temper temper tur temper tur temper tur tur s?cuid des = new 'rr & s?cuid desY0Z = temper tur s?cuid desY+Z = temper tur s?cuid desY2Z = temper tur (C! s?medi s?ciud d0 s?medi s?ciud d+ s?medi s?ciud d2
,emos que para introducir el array entero hacemos referencia al mismo sin par&ntesis ni corchetes, sino slo con su nombre. El array temperaturasNcuidades es nuestro array bidimensinal. 1ambi&n es interesante ver cmo se reali)a un recorrido por un array de dos dimensiones. 'ara ello tenemos que hacer un bucle que pase por cada una de las casillas del array bidimensional y dentro de &stas hacer un nuevo recorrido para cada una de sus casillas internas. Es decir, un recorrido por un array dentro de otro. El m&todo para hacer un recorrido dentro de otro es colocar un bucle dentro de otro, lo que se llama un bucle anidado. En este e"emplo vamos a meter un bucle 7+8 dentro de otro. Adems, vamos a escribir los resultados en una tabla, lo que complicar un poco el script, pero as% podremos ver cmo construir una tabla desde Javascript a medida que reali)amos el recorrido anidado al bucle.
document.write("<t ble width=200 border=+ cellp dding=+ cellsp cing=+>"!P ;or (i=0Pi<temper tur s?cuid des.lengthPiDD!F document.write("<tr>"! document.write("<td><b>-iud d " D i D "</b></td>"! ;or (5=0P5<temper tur s?cuid desYiZ.lengthP5DD!F document.write("<td>" D temper tur s?cuid desYiZY5Z D "</td>"! G document.write("</tr>"! G document.write("</t ble>"!
Este script resulta un poco ms comple"o que los vistos anteriormente. #a primera accin consiste en escribir la cabecera de la tabla, es decir, la etiqueta H1AC#EI "unto con sus atributos. .on el primer bucle reali)amos un recorrido a la primera dimensin del array y utili)amos la variable i para llevar la cuenta de la posicin actual. 'or cada iteracin de este bucle escribimos una fila y para empe)ar la fila abrimos la etiqueta H18I. Adems, escribimos en una casilla el numero de la ciudad que estamos recorriendo en ese momento. 'osteriormente ponemos otro bucle que va recorriendo cada una de las casillas del array en su segunda dimensin y escribimos la temperatura de la ciudad actual en cada uno de los meses, dentro de su etiqueta H1 I. Bna ve) que acaba el segundo bucle se han impreso las tres temperaturas y por lo tanto la fila est terminada. El primer bucle contin/a repiti&ndose hasta que todas las ciudades estn impresas y una ve) terminado cerramos la tabla. 'odemos ver el e"emplo en marcha y e$aminar el cdigo del script entero.
51
El m&todo normal de crear un array vimos que era a trav&s del ob"eto Array, poniendo entre par&ntesis el n/mero de casillas del array o no poniendo nada, de modo que el array se crea sin ninguna posicin. 'ara introducir valores a un array se hace igual, pero poniendo entre los par&ntesis los valores con los que deseamos rellenar las casillas separados por coma. ,emoslo con un e"emplo que crea un array con los nombres de los d%as de la semana.
# r di s,em n = new 'rr &("=unes","< rtes","<iSrcoles,","4ue#es","Iiernes",",(b do","%omingo"!
El array se crea con U casillas, de la 5 a la G y en cada casilla se escribe el dia de la semana correspondiente <Entre comillas porque es un te$to=. Ahora vamos a ver algo ms complicado, se trata de declarar el array bidimensional que utili)amos antes para las temperaturas de las ciudades en los meses en una sola l%nea, introduciendo los valores a la ve).
# r temper tur s?cuid des = new 'rr &(new 'rr & (+2,+0,++!, new 'rr &(5,0,2!,new 'rr &(+0,J,+0!!
En el e"emplo introducimos en cada casilla del array otro array que tiene como valores las temperaturas de una ciudad en cada mes. Javascript todav%a tiene una manera ms resumida que la que acabamos de ver, que e$plicamos en el primer art%culo donde tratamos los arrays. 'ara ello simplemente escribimos entre corchetes los datos del array que estamos creando. 'ara acabar vamos a mostrar un e"emplo sobre cmo utili)ar esta sinta$is para declarar arrays de ms de una dimensin.
# r rr &<uch s%imensiones = Y+, Y"hol ", "9ue", "t l", Y"est s", "est mos", "esto&"Z, Y"bien", "m l"Z, " c bo"Z, 2, 5ZP
En este e"emplo hemos creado un array muy poco uniforme, porque tiene casillas con contenido de simples enteros y otras con contenido de cadena y otras que son otros arrays. 'odr%amos acceder a algunas de sus casillas y mostrar sus valores de esta manera:
lert ( rr &<uch s%imensionesY0Z! lert ( rr &<uch s%imensionesY+ZY2Z! lert ( rr &<uch s%imensionesY+ZYCZY+Z!
.on esto hemos llegado al fin de los art%culos que tratan sobre arrays en Javascript y ahora podemos continuar con una peque-a pausa y conse"os que vendrn bien para me"orar nuestra relacin con este lengua"e de programacin.
Artculo por
52
Parte *:
#as bases de "avascript, sobre las que hemos hablado hasta ahora, no han cambiado prcticamente nada. (lo en algunas ocasiones, que hemos se-alado seg/n las conoc%amos @como los arrays por e"emplo@, el lengua"e ha evolucionado un poco.
53
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com (in embargo, a medida que nuevas tecnolog%as como el de mane"arlas. 01M# se desarrollaban, los navegadores han variado su manera
*uestro conse"o es que esteis al tanto de las cosas que funcionan en unos u otros sistemas y que program&is para que vuestras pginas sean compatibles en el mayor n/mero de navegadores. 'ara procurar esto /ltimo es muy aconse"able probar las pginas en varias plataformas distintas. 1ambi&n es muy /til de"ar de lado los /ltimos avances, es decir, no ir a la /ltima, sino ser un poco conservadores, para que las personas que han actuali)ado menos el browser puedan tambi&n visuali)ar los contenidos.
En el resto de esta primera parte del manual de Javascript vamos a ver un par de cosas tambi&n fundamentales en el traba"o del d%a a d%a con este lengua"e, como son la deteccin de errores. Adems, os de"amos unas referencias importantes para continuar con el aprendi)a"e: Manual de Javascript 22: la segunda parte de este manual abordar usos de Javascript para control de los elementos de las pginas web. ,ideotutorial de Javascript: estamos publicando una serie de videotutoriales de Javascript que te encantarn si quieres aprender por la prctica. Javascript a fondo: todo lo que tiene que ver con Javascript lo encontrars en esta seccin de esarrollo!eb.com.
Miguel Angel Alvarez
Artculo por
54
a.unto vale la variable sumab .omo muchos ya sab&is, la variable suma vale >46E4> porque al intentar sumar una variable num&rica y otra te$tual, se tratan a las dos como si fueran de tipo te$to y por lo tanto, el operador D se aplica como una concatenacin de cadenas de caracteres. (i no estamos al tanto de esta cuestin podr%amos tener un error en nuestro script ya que el resultado no es el esperado y adems el tipo de la variable suma no es num&rico sino cadena de caracteres.
55
.olocar varias sentencias en la misma l%nea sin separarlas de punto y coma. Esto suele ocurrir en los mane"adores de eventos, como onclic3, que veremos ms adelante. Btili)ar una variable antes de iniciali)arla o no declarar las variables con var antes de utili)arlas tambi&n son errores comunes. 8ecuerda que si no la declaras puedes estar haciendo referencia a una variable global en lugar de una local. .ontar las posiciones de los arrays a partir de L. 8ecuerda que los arrays empie)an por la posicin 5.
'ara todo tipo de errores, unos ms fciles de detectar que otros, debemos utili)ar alguna t&cnica de depuracin que nos ayude a encontrarlos. #engua"es de programacin ms potentes que el que tratamos ahora incluyen importantes herramientas de depuracin, pero en "avascript debemos contentarnos con una rudimentaria t&cnica. (e trata de utili)ar una funcin predefinida, la funcin alert<= que recibe entre par&ntesis un te$to y lo muestra en una peque-a ventana que tiene un botn de aceptar. .on la funcin alert<= podemos mostrar en cualquier momento el contenido de las variables que estamos utili)ando en nuestros scripts. 'ara ello ponemos entre par&ntesis la variable que deseamos ver su contenido. .uando se muestra el contenido de la variable el navegador espera a que apretemos el botn de aceptar y cuando lo hacemos contin/a con las siguientes instrucciones del script. Este es un sencillo e"emplo sobre cmo se puede utili)ar la funcin alert<= para mostrar el contenido de las variables.
# r n? ctu l = 0 # r sum = 0 while (sum <C00!F n? ctu l DD sum D= sum D n? ctu l lert("n? ctu l # le " D n? ctu l D " & sum G
# le " D sum !
.on la funcin alert<= se muestra el contenido de las dos variables que utili)amos en el script. Algo similar a esto es lo que tendremos que hacer para mostrar el contenido de las variables y saber cmo estn funcionando nuestros scripts, si todo va bien o hay alg/n error.
E.2.&.- )onclusin
0asta aqu% hemos conocido la sinta$is "avascript en profundidad. Aunque aun nos quedan cosas importantes de sinta$is, la visin que has podido tener del lengua"e ser suficiente para enfrentarte a los problemas ms fundamentales. En adelante presentaremos otros reporta"es para aprender a utili)ar los recursos con los que contamos a la hora de hacer efectos en pginas web. ,eremos la "erarqu%a de ob"etos del navegador, cmo construir nuestros propios ob"etos, las funciones predefinidas de "avascript, caracter%sticas del 01M# inmico, traba"o con formularios y otras cosas importantes para dominar todas las posibilidades del lengua"e.
56
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 1odo ello en nuestro manual de Javascript 22 y en el 1aller de Javascript.
Artculo por
Ahora es un buen momento para convertirte en un entusiasta de Javascript. Aunque algunos defectos que ocurrieron tiempo atras se repiten sin embargo. Aqu% os de"o una series de conse"os que os har ms sencillo mantener tu cdigo Javascript ordenado, algunos conse"os son demasiado obvios pero todos sabemos que el hombre es el /nico animal que...
'uedes optimi)ar esta funcin separando cada tarea con su propia funcin:
57
;unction tool=in)s(!F # r tools = document.cre te8lement(XulX!P # r item = document.cre te8lement(XliX!P # r itemlin) = cre te=in)(X[X, XcloseX, close\indow!P item. ppend-hild(itemlin)!P tools. ppend-hild(item!P # r item2 = document.cre te8lement(XliX!P # r itemlin)2 = cre te=in)(X[X, XprintX, print\indow!P item2. ppend-hild(itemlin)2!P tools. ppend-hild(item2!P document.bod&. ppend-hild(tools!P G ;unction print\indow(!F window.print(!P G ;unction close\indow(! F window.close(!P G ;unction cre te=in)(url,te@t,;unc!F # r temp = document.cre te8lement(X X!P temp.set'ttribute(Xhre;X, url!P temp. ppend-hild(document.cre te1e@t6ode(te@t!!P temp.onclic) = ;uncP return tempP G
58
Esto permitir%a a cualquiera que no es programador traducir el te$to del script, cambiando unicamente las etiquetas sin necesidad de acceder al cdigo.
Manu Gutierrez
59