You are on page 1of 12

Conceptos y Paradigmas de Lenguajes de Programacin 2012

Trabajo de Promocin

Manejo de Variables en JavaScript

Grupo 4
Rapetti, Daro Zalewski, Ezequiel 2802/9 11023/9

Manejo de Variables en JavaScript

ndice
Pgina ndice - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 Introduccin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 Sintaxis de las variables - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3 Tipos de datos que almacenan las variables - - - - - - - - - - - - - - - - - - - - 4 String - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 Number - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 Boolean - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 Objetos y Arrays - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 Undefined - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7 Null - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7 Manejo de variables - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8 Declaracin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8 Diferencias entre declarar variables con var, o no declararlas - - - - 9 Alcance de las variables - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9 Variables locales - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9 Variables globales - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 Punteros y Parmetros - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10 Uso de la Memoria - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 11 Conclusin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 12 Bibliografa - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 12

2/12

Manejo de Variables en JavaScript


En el presente documento trataremos sobre los aspectos referidos al tema Manejo de variables en JavaScript. Describiremos temas bsicos como su sintaxis, semntica, el alcance y tiempo de vida y algunas caractersticas ms profundas como tipo de pasaje como parmetro, clases, prototipos, Garbage Collector.

Introduccin
JavaScript es un lenguaje de programacin interpretado, dialecto del estndar ECMAScript. Se define como orientado a objetos, basado en prototipos, imperativo, dbilmente tipado y dinmico. Se utiliza principalmente en su forma del lado del cliente (client-side), implementado como parte de un navegador web permitiendo mejoras en la interfaz de usuario y pginas web dinmicas, en bases de datos locales al navegador aunque existe una forma de JavaScript del lado del servidor (Server-side JavaScript o SSJS). Su uso en aplicaciones externas a la web, por ejemplo en documentos PDF, aplicaciones de escritorio (mayoritariamente widgets) es tambin significativo. JavaScript se dise con una sintaxis similar al C, aunque adopta nombres y convenciones del lenguaje de programacin Java. Sin embargo Java y JavaScript no estn relacionados y tienen semnticas y propsitos diferentes. Todos los navegadores modernos interpretan el cdigo JavaScript integrado en las pginas web. Para interactuar con una pgina web se provee al lenguaje JavaScript de una implementacin del Document Object Model (DOM). Tradicionalmente se vena utilizando en pginas web HTML para realizar operaciones y nicamente en el marco de la aplicacin cliente, sin acceso a funciones del servidor. JavaScript se interpreta en el agente de usuario, al mismo tiempo que las sentencias van descargndose junto con el cdigo HTML.

Sintaxis de las variables


Los nombres de las variables han de construirse con caracteres alfanumricos, el carcter subrayado _ o el signo de pesos $. Aparte de esta, hay una serie de reglas adicionales para construir nombres para variables. La ms importante es que tienen que comenzar por un carcter alfabtico o el subrayado. No podemos utilizar caracteres raros como el signo +, un espacio o un %. Nombres admitidos para las variables podran ser: Nombre lugarDeNacimiento _apellido Tambin hay que evitar utilizar nombres reservados como variables, por ejemplo no podemos usar para nuestra variable palabras como return o for, que son utilizadas para estructuras del propio lenguaje. Veamos ahora algunos nombres de variables que no est permitido utilizar: 3/12

Manejo de Variables en JavaScript


7dias mi nombre return f%oo

Tipos de datos que almacenan las variables


Las variables no necesitan ser declaradas para algn tipo especfico, ya que pueden almacenar datos de cualquier tipo en cualquier momento, es decir que este lenguaje es dbilmente tipado. Al momento de la asignacin, JavaScript asigna los tipos por nosotros de forma interna. Relacionado al tipado dbil esta la coercin de los datos, si bien lo realiza el intrprete interno segn ciertas reglas, en determinados casos, resultan muy poco intuitivas y pueden convertirse en fuente de errores. Algunas de las reglas de coercin que utiliza son: Si en una operacin de suma uno de los operandos es una cadena, el tipo de datos final ser otra cadena con el valor acumulado, y los siguientes, concatenados siempre siguiendo un orden estricto de izquierda a derecha. console.log( 7 + 7 + "7" ); // "147" Para el resto de operaciones bsicas ( resta, multiplicacin y divisin ), siempre trata de convertir en primer lugar las cadenas en nmeros console.log( "10" - 2 - 4 ); // 4 En los mtodo de comparacin no-estricta == siempre trata de realizar una conversin desde cadenas a nmeros para su evaluacin. console.log( 1 == "1" ); // True En algunos casos se pueden generar un error que puede pasar inadvertido como por ejemplo cuando operamos en bases diferentes al sistema decimal console.log( 1 + 012 ); // 11 Para estos casos JavaScript proporciona una serie de mtodos cast que pueden ser usados por el programador para realizar la conversin. Hay tres tipos de datos principales, dos tipos de datos compuestos y dos tipos de datos especiales: Tipos de datos principales (primitivos): String Number Boolean Tipos de datos compuestos (de referencia): Objeto Array Tipos de datos especiales Null Undefined

4/12

Manejo de Variables en JavaScript


En JavaScript no existen las clases, sin embargo estas se pueden simular con las funciones. Se declara una funcin como una constructora de propiedades y mtodos y se la invoca para crear algn objeto. Adems se puede rescribir sus mtodos utilizando el operador prototype function PseudoClase(idClase, aValue) { this.idClase = idClase; this.aValue = aValue; this.muestraValue = function() { alert(this.aValue); } PseudoClase.prototype.muestraId = function() { alert(this.idClase); } var instanciaPseudoClase = new PseudoClase(3, 7); instanciaPseudoClase.muestraId();

String
Las variables de tipo string permiten almacenar cualquier sucesin de caracteres. Cada carcter de la cadena se encuentra en una posicin a la que se puede acceder individualmente, siendo el primer carcter el de la posicin 0. El valor de estas variables se indica encerrado entre comillas simples o dobles Para incluir un carcter de control (saltos de lnea, tabulacin, etc.) se utiliza el carcter de escape \. Esta variable es automticamente traducida a un valor de referencia para que de esta forma se pueda utilizar como un objeto de la clase String junto con todas sus propiedades y mtodos. A partir de JavaScript 1.0 se puede utilizar el operador new sobre la clase String para crear un variables de tipo String. var cadena1 = Un String\n; var cadena2 = new String (\tUn String);

Number
Internamente, todos los nmeros se guardan como valores de punto flotante, por lo que no se hace distincin de estos. Los enteros pueden ser representados en base 10, en base hexadecimal agregando el prefijo 0x y en base octal agregando el prefijo 0 seguido de un nmero del 0 al 7. 45 decimal 0378 octal 0xAf hexadecimal Los de punto flotantes tambin pueden representarse en su notacin cientfica utilizando la letra e para indicar la potencia. 0.0001 flotante notacin normal 5/12

Manejo de Variables en JavaScript


1.0e-4 flotante notacin cientfica 3.45e2 flotante notacin cientfica Adems, existen valores especiales: NaN (no un nmero): cuando se realizan operaciones sobre datos inadecuados, como sobre un string Infinito positivo. Esto se usa cuando un nmero positivo es demasiado grande para representarlo. Infinito negativo. Esto se usa cuando un nmero negativo es demasiado grande para representarlo. Positivo y Negativo 0. Se distingue entre cero positivo y negativo.

Boolean
Mientras que los tipos de datos de cadena y numrico pueden tener un nmero prcticamente ilimitado de valores diferentes, el tipo de dato Booleano slo puede tener dos: los literales true y false. Un valor Booleano expresa la validez de una condicin: indica si es verdadera o no. Las comparaciones realizadas en las secuencias de comandos siempre tienen un resultado Booleano. Observe la siguiente lnea de cdigo: y = (x == 2000); En este caso, el valor de la variable x se prueba para establecer si es igual al nmero 2000. Si es as, el resultado de la comparacin es el valor Booleano true, que se asigna a la variable y. En caso contrario, el resultado de la comparacin ser el valor Booleano false. Este tipo de valores es especialmente til en las estructuras de control. Ejemplo: if (x == 2000) z = z + 1; else x = x + 1; Puede utilizar cualquier tipo de expresin como expresin comparativa. Toda expresin que d como resultado una cadena 0, null, undefined o vaca se interpretar como false. Las expresiones que den como resultado cualquier otro valor se interpretarn como true.

Objetos y Arrays
Al igual que sucede con otros lenguajes de programacin, los objetos se emplean en JavaScript para organizar el cdigo fuente de una forma ms clara y para encapsular mtodos y funciones comunes. Tcnicamente, un objeto es un array asociativo formado por propiedades y mtodos, por tanto puede usarse la tradicional nocin de arrays para definirlos, otras forma son la notacin por puntos y la JSON. JSON (JavaScript Object Notation) es un formato sencillo para el intercambio de informacin. El formato JSON permite representar estructuras de datos (arrays) y objetos (arrays asociativos) en forma de texto. La notacin de objetos mediante JSON es una de las

6/12

Manejo de Variables en JavaScript


caractersticas principales de JavaScript y es un mecanismo definido en los fundamentos bsicos del lenguaje. Notacin de arrays: var elArray = new Array(); var elObjeto = new Object(); elObjeto['id'] = "10"; elObjeto['nombre'] = "Objeto de prueba"; Notacin por puntos: var elArray = new Array(); var elObjeto = new Object(); elObjeto.id = "10"; elObjeto.nombre = "Objeto de prueba"; Notation JSON: var array = []; var objeto = { nombre: "Objeto de prueba", id: "10"};

Undefined
A todas las variables sin inicializar se les asigna el valor undefined, valor que tambin es devuelto cuando se consulta por las propiedades de un elemento que no existe. En una variable booleana, el valor undefined es considerado como el valor False. var test; // variable declarada pero no definida, ... // ... tiene el valor undefined var testObj = {}; alert(test); // la variable test existe pero su valor no ... // ... est definido, muestra undefined alert(testObj.myProp); // testObj existe, pero la propiedad no, ... // ... muestra undefined alert(undefined == null); // chequeo no restricto, muestra true alert(undefined === null); // chequeo restricto, muestra false No existe en el lenguaje un valor literal para undefined, por lo que (x == undefined) no es una prueba segura de chequear si una variable es indefinida, porque en las versiones anteriores a ECMAScript 5, se puede por ejemplo declarar var undefined = "Variable definida";. Una forma ms segura de comparar sera (typeof x === 'undefined').

Null
A diferencia de undefined, el valor null es utilizado para indicar que una variable ha sido declarada pero sin asignarle un valor particular. En una variable booleana, el valor null es considerado como el valor false. Null es un tipo primitivo del lenguaje denotado por la palabra null. Cuando se realizan chequeos restrictos de tipos, el valor null no es igual al valor false.

7/12

Manejo de Variables en JavaScript


alert(null == undefined); // chequeo no restricto, retorna true alert(null === undefined); // chequeo restricto, retorna false alert(typeof null === 'object'); // true

Manejo de variables
Declaracin
En la mayora de los lenguajes de programacin es obligatorio declarar cada variable antes de utilizarla en el cdigo mientras que en JavaScript se puede hacer sobre la marcha segn las vayamos necesitando. Durante la ejecucin de un programa, al llegar a la declaracin de una variable, en ese momento se reserva el espacio en memoria y se agrega una referencia a las listas de variables y valores que son utilizadas por el Recolector de Basura (Garbage Collector) al momento de liberar memoria (tema que se ampla ms adelante). Hay dos maneras de declarar variables: Declaracin explcita: Consiste en usar la sentencia var seguida del nombre de la variable. Esta opcin es la ms recomendada para que el cdigo sea ms legible. Declaracin implcita: Es cuando escribimos directamente el nombre de la variable. En este caso debe ir acompaada obligatoriamente de un valor. // declaracin explcita var cuidad; // declaracin implcita cuidad = 'tablaLiquidacionHonorarios'; // declaracin explcita mltiple var ciudad, provincia; // declaracin explcita mltiple con inicializacin var cuidad = La Plata, provincia = Buenos Aires; // declaracin implcita mltiple con inicializacin ciudad = La Plata, provincia = Buenos Aires; Tambin se pueden declarar constantes, por ejemplo el nmero pi, o un valor mximo. Se declaran con la sentencia const. Esta opcin slo es soportada a partir del motor 1.5 de JavaScript. Estas variables no pueden ser modificadas, sin embargo en navegadores en la que no son soportadas son tratadas como variables normales, pudiendo generarse errores con su modificacin.

Diferencias entre declarar variables con var, o no declararlas


Como hemos dicho, en JavaScript tenemos libertad para declarar o no las variables con la palabra var, pero los efectos que conseguiremos en cada caso sern distintos. En concreto, cuando utilizamos var estamos haciendo que la variable que estamos declarando sea local al 8/12

Manejo de Variables en JavaScript


mbito donde se declara. Por otro lado, si no utilizamos la palabra var para declarar una variable, sta ser global a toda la pgina, sea cual sea el mbito en el que haya sido declarada. En el caso de una variable declarada en la pgina web, fuera de una funcin o cualquier otro mbito ms reducido, nos es indiferente si se declara o no con var, desde un punto de vista funcional. Esto es debido a que cualquier variable declarada fuera de un mbito es global a toda la pgina. La diferencia se puede apreciar en una funcin por ejemplo, ya que si utilizamos var la variable ser local a la funcin y si no lo utilizamos, la variable ser global a la pgina. <script type=text/JavaScript language=JavaScript> var num = 10; function miFuncion (){ num = 23; document.write(num); //imprime 23 } document.write(num); //imprime 10 //llamamos a la funcin miFuncion(); document.write(num); //imprime 23 </script>

Alcance de las variables


En JavaScript no se puede acceder a variables que hayan sido definidas en otra pgina. Por tanto, la propia pgina donde se define es el mbito ms habitual de una variable y le llamaremos a este tipo de variables globales a la pgina. Se ver que se pueden hacer variables con mbitos distintos del global, es decir, variables que tendrn validez en lugares ms acotados.

Variables locales
Las variables locales tienen valor tan slo dentro de la funcin en que se han declarado, es decir, dentro del bloque de cdigo comprendido entre function(){ y la llave de cierre } y deben declararse dentro de estos bloques. <script type=text/JavaScript language=JavaScript> function miFuncion (){ var variableLocal } </script> Se puede declarar una variable local con el mismo nombre que una global, en este caso la variable global ser visible desde toda la pgina, excepto en el mbito donde est declarada

9/12

Manejo de Variables en JavaScript


la variable local ya que en este sitio ese nombre de variable est ocupado por la local y es ella quien tiene validez. <script type=text/JavaScript language=JavaScript> var num = 10; function miFuncion (){ var num = 23; document.write(num); //imprime 23 } document.write(num); //imprime 10 </script> Slo puede ser accedida dentro de la funcin. Cuando el script termina la ejecucin de la funcin, la variable es destruida.

Variables globales
Las variables globales tienen valor para todo el documento HTML y se deben declarar al inicio del script y fuera de toda funcin: el lugar preferible es en las marcas <SCRIPT> de la seccin <HEAD> de tal manera que creemos los contenedores de los valores antes de darles cualquier uso. <script type=text/JavaScript language=JavaScript> var variableGlobal; </script> Todas las funciones dentro de la pgina pueden accederla. El tiempo de vida de estas variables comienza cuando son declaradas y termina cuando la pgina es cerrada.

Punteros y Parmetros
En JavaScript no existe manejo de punteros como en otros lenguajes. Internamente maneja como pasar los valores segn su tipo. Si son datos tipo primitivos los pasa como una copia pero si son objetos o funciones los pasa como referencia. Esto quiere decir que si pasamos un array u otro objeto como parmetro a una funcin y lo modificamos, estos cambios sern persistente al finalizar la funcin. En una funcin se puede pasar cualquier nmeros de parmetros y aquellos parmetros que no hayan sido declarados como tal en el cuerpo de la funcin, se encuentran almacenados en una variable de tipo object llamada arguments, que puede ser accedida como si fuera un array, esta variable es creada solo si se pasan parmetros que no se hayan definido en la cabecera de la funcin y su tiempo de vida y alcance comprende desde que se invoca la funcin hasta que esta termina.

10/12

Manejo de Variables en JavaScript

Uso de la Memoria
En JavaScript el manejo de memoria est controlada por el navegador, esto no quiere decir que algn programa pueda controlar o administrar la memoria RAM, por tanto no existe un limite de memoria para un programa JavaScript pero si afecta al cliente. El mtodo de liberacin de memoria que se utiliza es el Garbage Collector, precisamente con algn algoritmo Mark-and-Sweep dependiendo del navegador web (en JavaScript 1.1 se utiliza el algoritmo Reference Counting dado que fue implementado en Netscape). Este tipo algoritmo funciona en dos pasos, el primero, es recorrer todas las variables declaradas en el entorno de JavaScript y poner una marca en los valores referenciados por ests, en el caso de que se un objeto o array lo hace de forma recursiva. En el segundo paso, hace un recorrido por la lista de valores y desaloca de memoria aquellos que no han sido marcados ya que esto indica que no han podido ser referenciados por ninguna variable. Adicionalmente, se provee a los objetos de un mtodo llamado finalize() que es invocado antes de que este sea desalocado de memoria. El objeto debe sobrescribir este mtodo para realizar cualquier tarea de limpieza final, como la liberacin de recursos del sistema (ficheros, conexiones, etc.). A partir de JavaScript 1.1, las variables pueden ser eliminadas de memoria al utilizar el operador delete salvo cuando estas referencian a los objetos en cuyo caso slo eliminan la referencia dejando al Garbage Collector como encargado de sacarla de memoria. El mayor problema a evitar en el manejo de memoria son las referencias circulares, estas surgen cuando se le asigna a una variable de JavaScript un objeto DOM (interfaz de programacin de aplicaciones para acceder, aadir y cambiar dinmicamente contenido estructurado en documentos con lenguajes como ECMAScript), y a este se le asigna la misma variable como atributo. Hacer esto implica que la variable siempre estar referenciada por un objeto DOM el cual posee un contador de referencias que maneja su permanencia en memoria, por tal motivo el Garbage Collector nunca podr eliminarla de la memoria y el objeto DOM tampoco se eliminar ya que es referenciado por esta misma variable. Ocurren tambin referencias circulares cuando se escriben funciones dentro de otras, porque cuando una funcin es escrita dentro de otra se mantiene una referencia a la que la incluye (para poder usar sus variables).

11/12

Manejo de Variables en JavaScript

Conclusin
JAVASCRIPT es un lenguaje popular que cuenta con mucha documentacin y cdigos de ejemplo en internet. La forma de pasaje de parmetros, la declaracin y manejo de objetos y las operaciones entre diferentes tipos de variables junto con toda su sintaxis hacen de JavaScript un lenguaje muy flexible, pero a la vez poco legible si no se programa siguiendo alguna convencin en la escritura del cdigo. Otro aspecto importante de este lenguaje es la libertad que le brinda al programador de desligarse del manejo de los espacios en memoria y dedicar todo su esfuerzo en el desarrollo del cdigo de la aplicacin. Sin embargo, esta libertad no est libre de inconvenientes dado que al ser dedicado a la programacin web en la que se utilizan diferentes elementos fuera del mbito del propio lenguaje, se pueden generar fugas de memoria al establecerse referencias circulares. De todas formas, como su forma de manejar la memoria est dado por el navegador web y cada uno implementa su propio estilo, este ltimo problema se encuentra en continuo anlisis y desarrollo de mejoras.

Bibliografa
http://es.wikipedia.org http://www.desarrolloweb.com http://www.librosweb.es/ajax/
http://msdn.microsoft.com/es-es/library

12/12