2.1. Lo básico |
![]() |
JavaScript toma su sintaxis de los lenguajes de programación más conocidos, fundamentalmente C, aunque también algo de Pascal.
Filosofía general
Variables
Empecemos por decir que en Javascript NO hay tipificación de las variables, ni tampoco constantes. Por ende, tampoco se pueden definir nuevos tipos de variables, aunque sí nuevos tipos de objetos, como veremos.
Para usar una variable solo hemos de darle un valor con el signo =:
foo=15; bar="Hola, viejo";
El punto y coma del final NO es realmente necesario si se separan las instrucciones líneas distintas, como suele ser el caso. No obstante, si deseamos escribir varias de ellas en la misma línea debemos usar el ; para separarlas.
Las variables pueden ser numéricas, cadenas (las cadenas se escriben entre comillas dobles o simples, es indiferente), booleanas (conteniendo los valores true o false) u objetos, y por supuesto matrices de ellas.
El tipo de la variable será el del primer valor que le asignemos. En los ejemplso anteriores foo es de tipo numérico, y bar lo es de tipo cadena.
En Javascript se intenta hacer conversiones de tipo siempre que haga falta. Así por ejemplo, si escribimos la siguiente sentencia:
foobar=foo+bar;
no obtendremos ningun error debido a tipos no compatibles ni nada de eso, sino que concatenará foo y bar cual si de dos cadenas se tratara.
Es más, si escribiéramos algo como;
bar="Esto es una cadena"; bar=15*2; bar=bar*3;
el resultado final de la variable bar es 90. Es decir, también convierte cadenas a números cuando hace falta.
El ámbito de las variables es siempre el más amplio posible. Es decir, si usamos una variable fuera de cualquier función, desde ese momento estará disponible dentro de cualquier función como variable global.
En el siguiente ejemplo, la función suma_20_a_edad modifica la variable edad sumándole el número 20, pero sin que la variable se le pase como parámetro, sino que se usa como variable global (suponemos que tenemos la función definida en otro lado).
edad=27; suma_20_a_edad();
Esto puede causar problemas de efectos laterales y podría darse el caso de que modificáramos una variable global en una función pensando que solo estamos cambiando una variable local, y todo por el hecho de haberles llamado igual.
Para evitar esto, podemos ponerle la palabra var antes de usar por primera vez la variable, para indicar que dicha variable es local a la función en que se está usando. Veamos un ejemplo:
function modifica_edad() { edad=edad+100; } function no_modifica_edad() { var edad=edad+100; } edad = 30; modifica_edad(); no_modifica_edad();
En este ejemplo, tras llamar a modifica_edad() la variable global edad pasa de valer 30 a valer 130. Sin embargo, tras llamar a no_modifica_edad sigue con el valor 130.
Como se puede oberservar NO se le ha puesto la palabra var a la variable global dado que, en efecto, no es necesario pues va a ser global.
Sentencias
La sintaxis de las sentencias es similar a C.
Condicionales
if ( condicion ) { sentencias_true; } else { sentencias_false; } // ***************************** switch( variable ) { case valor : case valor : { sentencias; break; } case valor : case valor : { sentencias; break; } default: { sentencias; } }
Iterativas
while( condicion ) { sentencias; } // ***************************** do { sentencias; } while ( condicion ); // ***************************** for( inicializacion; condición; incremento ) { sentencias; }
Incrementos y operaciones con variables
variable++; ++variable; variable--; --variable; variable+=valor; variable-=valor; variable*=valor; variable/=valor; variable=(condicion)?valor_true:valor_false;
Comentarios
Con // obtendremos comentarios hasta el final de la línea.
Con /* .... */ obtendremos comentarios de varias líneas.
2.2. Declaración de Funciones |
![]() |
Como en muchos lenguajes, JavaScript permite declarar funciones. Quizá convenga recordar que una función no se ejecuta hasta que no es llamada. Es decir, podemos definir una función que use variables globales NO declaradas aún, si la llamamos una vez que dichas variables estén declaradas.
La forma de definir una función es la siguiente:
function nombre_funcion( [lista_parametros] ) { código; [return valor;] }
Pongo lista_parametros y return valor; entre corchetes porque son opcionales.
Veamos un par de detalles:
He aquí un ejemplo muy simple:
// Aqui declaro la función function suma( a,b,c,d ) { return a+b+c+d; } // aqui la uso la_suma=suma( 10,30,50,70 );
2.3. Matrices |
![]() |
Para crear matrices utilizamos las palabras new y Array. Estas matrices serán dinámicas, es decir, no tenemos que decirle cuántos componentes va a tener, sino que a medida que hacen falta se van añadiendo.
No obstante, podemos darle una longitud inicial de la siguiente forma:
var foo=new Array( 5 );
con ello habremos creado una matriz de 5 posiciones (desde la 0 hasta la 4) que estarán todas vacías (con un valor especial llamado undefined).
Podemos crear matrices e inicializarlas:
var foo=new Array( "Pepe","Luis",34,false );
con ello habremos creado una matriz de 4 posiciones (desde la 0 hasta la 3). La primera contiene la cadena "Pepe", la segunda la cadena "Luis", la tercera un número y la última un valor booleano.
Pero sin duda, la mejor forma de crear matrices es crearlas vacías e ir añadiendo nuevos elementos:
var foo=new Array; foo[foo.length]=45; foo[foo.length]="Carlos"; foo[foo.length]=3+4; foo[foo.length]="Luis"; foo[foo.length]=true;
En el ejemplo anterior hemos hecho uso de la propiedad length que tienen TODAS las matrices en JavaScript y que indica cuántos elementos tiene la matriz.
2.4. Objetos |
![]() |
Crear un nuevo objeto implica dotarlo de propiedades y métodos, es decir, crear una especie de clase de la que luego se puedan hacer instancias. Ha de tenerse en cuenta que los objetos no se pueden destruir, sino que perviven mientras esté el documento cargado.
Para crear un objeto, tenemos que crear una función constructor. Por ejemplo, supongamos que queremos crear el objeto ordenador con las propiedades microprocesador, velocidad, y sistema operativo. Tendríamos que crear una función de la siguiente forma:
function ordenador( micro,veloc,sistem ) { this.microprocesador=micro; this.velocidad=veloc; this.sistema_operativo=sistem; } // function ordenador
Como vemos el nombre de la función coincide con el nombre del objeto que deseamos crear.
Posteriormente podremos crear instancias de este objeto llamando a la función, anteponiendo la partícula new, es decir:
var orden1=new ordenador("pentium","500","Windows 98"); var orden2=new ordenador("AMD K7", "800", "SuSE 6.3");
En cualquier parte del código, no necesariamente en la función constructor, podemos añadir de forma dinámica nuevas propiedades a un objeto. Podemos hacerlo de dos formas. La primera es añadírsela a una sola instancia, por ejemplo:
orden1.cdrom="16X";
O bien añadírselo al objeto en general (y por tanto a todas las instancias), para lo cual se ha de incluir la palabra reservada prototype:
ordenador.prototype.cdrom=NUL
Como se ha dicho, además de propiedades, los objetos tienen métodos. Para dotar de métodos a un objeto tenemos las mismas tres opciones que con las propiedades: 1) ponerlo en la declaración del objeto, 2) añadirlo a una sola instancia, y 3) añadirlo al objeto en general.
Para ver cómo se hace vamos a añadir al objeto ordenador un método que se llame concatena devuelva todas las propiedades del objeto concatenadas:
function visualiza_ordenador() { var cadena="Microprocesador: "+this.microprocesador+"\n"+ "Velocidad: "+this.velocidad+" Mhz.\n"+ "Sistema Operativo: "+this.sistema_operativo; } // function visualiza
Lo anterior sirve para declarar la función que visualiza, ahora la declaración de la función que construye el objeto quedaría de la siguiente forma:
function ordenador( micro,veloc,sistem ) { this.microprocesador=micro; this.velocidad=veloc; this.sistema_operativo=sistem; this.concatena=visualiza_ordenador; } // function ordenador
Nótese que no escribimos:
this.concatena=visualiza_ordenador();
Si lo hubiéramos hecho, se habría asignado a this.show el resultado de ejecutar la función visualiza_ordenador y no es eso lo que queremos.
Como puede apreciarse, la palabra reservada this juega un papel muy importante dado que hace referencia a la instancia del objeto en sí y es lo que hemos de usar para acceder a las propiedades del objeto.
También queda de manifiesto que el método puede llamarse de una forma y la función que lo implementa de otra.
Para usar un método de un objeto solo hemos de poner:
variable_objeto.metodo();
Por ejemplo:
cadena=orden1.concatena();