Los operadores nos permiten unir identificadores y literales para formar expresiones. Las expresiones son el resultado de operaciones mátemáticas o lógicas. Un literal o una variable son expresiones, pero también lo son esos mismos literales y variables unidos entre sí mediante operadores.
JavaScript dispone de muchos más operadores que la mayoría de los lenguajes, si exceptuamos a sus padres C, C++ y Java. Algunos de ellos no los estudiaremos debido a su escasa utilidad y con algunos otros (especialmente el condicional) deberemos andarnos con cuidado, ya que puede lograr que nuestro código no lo entendamos ni nosotros.
JavaScript dispone de los operadores aritméticos clásicos y algún que otro más:
Descripción | Símbolo | Expresión de ejemplo | Resultado del ejemplo |
---|---|---|---|
Multiplicación | * | 2*4 | 8 |
División | / | 5/2 | 2.5 |
Resto de una división entera | % | 5 % 2 | 1 |
Suma | + | 2+2 | 4 |
Resta | - | 7-2 | 5 |
Incremento | ++ | ++2 | 3 |
Decremento | -- | --2 | 1 |
Menos unario | - | -(2+4) | -6 |
Los operadores de incremento y decremento merecen una explicación auxiliar. Se pueden colocar tanto antes como después de la expresión que deseemos modificar pero sólo devuelven el valor modificado si están delante. Me explico.
a = 1; b = ++a;
En este primer caso, a valdrá 2 y b 2 también. Sin embargo:
a = 1; b = a++;
Ahora, a sigue valiendo 2, pero b es ahora 1. Es decir, estos operadores modifican siempre a su operando, pero si se colocan detrás del mismo se ejecutan después de todas las demás operaciones.
Podemos usar los siguientes:
Descripción | Símbolo | Expresión de ejemplo | Resultado del ejemplo |
---|---|---|---|
Igualdad | == | 2 == '2' | Verdadero |
Desigualdad | != | 2 != 2 | Falso |
Igualdad estricta | === | 2 === '2' | Falso |
Desigualdad estricta | !== | 2 !== 2 | Falso |
Menor que | < | 2 < 2 | Falso |
Mayor que | > | 3 > 2 | Verdadero |
Menor o igual que | <= | 2 <= 2 | Verdadero |
Mayor o igual que | >= | 1 >= 2 | Falso |
La igualdad y desigualdad estricta son iguales a las normales pero hacen una comprobación estricta de tipo. Han sido incluidos en el estándar ECMAScript y lo soportan Netscape 4.06 y superiores y Explorer 3 y superiores. Hay que indicar que versiones más antiguas de Netscape tratan la igualdad normal como si fuera estricta.
Estos operadores permiten realizar expresiones lógicas complejas:
Descripción | Símbolo | Expresión de ejemplo | Resultado del ejemplo |
---|---|---|---|
Negación | ! | !(2 = 2) | Falso |
Y | && | (2 = 2) && (2 >= 0) | Verdadero |
Ó | || | (2 = 2) || (2 <> 2) | Verdadero |
Normalmente los lenguajes tienen un único operador de asignación, que en JavaScript es el símbolo =. Pero en este lenguaje, dicho operador se puede combinar con operadores aritméticos y lógicos para dar los siguientes:
Operador | Significado | Operador | Significado |
---|---|---|---|
x += y | x = x + y | x -= y | x = x - y |
x /= y | x = x / y | x *= y | x = x * y |
x % y | x = x % y |
Vamos a incluir en este apartado operadores que no hayan sido incluidos en los anteriores. La concatenación de cadenas, por ejemplo, se realiza con el símbolo +. El operador condicional tiene esta estructura:
condicion ? valor1 : valor2
Si la condición se cumple devuelve el primer valor y, en caso contrario, el segundo. El siguiente ejemplo asignaría a la variable a un 2:
a = 2 > 3 ? 1 : 2
Como podéis ver no resulta muy legible. Huid de este operador como de la peste. Evitad la tentación. Procurad no usarlo. Yo he tenido que descifrar código escrito por mí un par de meses antes que tenía esta clase de operadores, a veces incluso anidados. Todavía tengo escalofríos al recordarlo.
Para tratar con objetos disponemos de tres operadores:
Descripción | Símbolo | Expresión de ejemplo | Resultado del ejemplo |
---|---|---|---|
Crear un objeto | new | a = new Array() | a es ahora un vector |
Borrar un objeto | delete | delete a | Elimina el vector anteriormente creado |
Referencia al objeto actual | this |
this se suele utilizar en el código de los métodos de un objeto para referirse a otros métodos o a propiedades de su mismo objeto.