[Indice]


Operadores de JavaScript

Tipos de operadores

En JavaScript encontramos cinco tipos de operadores:

Operadores aritméticos

Suma (+). Suma dos números: 3 + 2 = 5 . Si en lugar de números se suman cadenas, como por ejemplo "A" + "B" = "AB" se produce una concatenación. Si alguno de los elementos a concatenar no es una cadena de texto, queda convertido a cadena: "AB" + 123 = "AB123" .

Resta (-). Halla la diferencia entre dos números. Ejemplo A: 3-2 = 1 . Ejemplo B: (-1)-(-2) = 1 .

Negativo (-). Indica el signo negativo de un número o una expresión: -3.

División (/). Divide dos números, obteniendo un cociente de coma flotante: 5 / 2 = 2.5 . Fíjate en que el separador decimal es el punto.

Módulo aritmético %. Divide dos números, obteniendo un resto entero: 5 % 2 = 1 .

Multiplicación (*). Multiplica dos números: 3 * 2 = 6 .

Incrementos y decrementos (++   --). Incrementa o decrementa el valor de una variable numérica en una unidad. No puede aplicarse a un literal. Pueden darse dos casos:

var A, B; B = 2; 

    A =  ++B  
    A =  B++  

En el primer caso,  A = 3   Es decir, que el incremento de B ha sido el correcto, pero no así el segundo, en el que  A = 2. Esto se debe a que, en el primer caso, el incremento se efectúa antes de que la expresión sea evaluada, y en el segundo, se incrementa después de la evaluación según indica el orden de precedencia de los operadores (ver tabla al final de esta página). De igual forma, para decrementos:
var A, B; B = 2; 

    A =  --B  
    A =  B--  

En el primer caso resulta:   A = 1   y en el segundo:   A = 2

Operadores lógicos

Estos operadores tienen unas aplicaciones un tanto especiales, ya que no funcionan como los aritméticos, conocidos por todos. Para comprender el funcionamiento de los operadores lógicos, primero hay que saber qué son los estados lógicos de una expresión. Y te preguntarás que es eso de "estados lógicos"... Esta es una cuestión un tanto filosófica, ya que el estado lógico de algo depende de respecto a qué establecemos ese estado, y por tanto no siempre será el mismo. Dependerá del entorno o contexto en el que se define y utiliza la expresión. En JavaScript hay tres posibles estados lógicos: True (verdadero), False (falso) y Null (nulo, es decir que no se ha establecido estado alguno por la razón que sea)

Por ejemplo, supongamos que hay que establecer el estado lógico de un material: El hierro. Evidentemente, para establecer un estado lógico primero tenemos que decidir respecto a qué se establece ese estado, ya que no podemos decir simplemente que el hierro es verdadero o falso. Nos tendremos que referir a alguna cualidad del material y compararla con algo para establecer si el estado es verdadero o falso.

Sea la expresión El hierro es un metal . Si tenemos que establecer el estado lógico de esta expresión, la respuesta inmediata es Verdadero (True) y si la expresión fuese El hierro no es un metal , inmediatamente pensarímos que el estado adecuado es Falso (False)

Una vez establecido el estado lógico de la expresión, los operadores lógicos nos permitirán tomar decisiones mediante la verificación de ese estado, bien tomando uno solo, o agrupando varios de ellos. Al igual que los operadores aritméticos, los operadores lógicos tienen un orden preestablecido de evaluación que debe ser tenido en cuenta. Los estados lógicos, o mejor dicho, el resultado que dan los operadores lógicos, pueden tratarse también como números booleanos, siendo True equivalente a 1 y False equivalente a 0.

Negación lógica ! (Not). Establece una negación lógica en una expresión, es decir, que ante una expresión, cuyo estado lógico es True (verdadero), el operador hará que devuelva False (falso).

El hierro es un metal = True.
! El hierro es un metal = False.

Hay tres posibles resultados aplicando este operador a una expresión:

Si la expresión = True el operador devuelve False.
Si la expresión = False el operador devuelve True.
Si la expresión = Null el operador devuelve Null.

Conjunción lógica && (And). Establece una conjunción lógica de dos expresiones, es decir, que han de resultar True (verdadero) las dos expresiones para que el resultado final también lo sea.

El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal && El hierro es duro = True.

Hay 9 posibles resultados aplicando este operador a dos expresiones, aunque es posible incluir cuantas sean necesarias:

Si la Expresión 1 = True && Expresión 2 = True el resultado es True.
Si la Expresión 1 = True && Expresión 2 = False el resultado es False.
Si la Expresión 1 = True && Expresión 2 = Null el resultado es Null.
Si la Expresión 1 = False && Expresión 2 = True el resultado es False.
Si la Expresión 1 = False && Expresión 2 = False el resultado es False.
Si la Expresión 1 = False && Expresión 2 = Null el resultado es False.
Si la Expresión 1 = Null && Expresión 2 = True el resultado es Null.
Si la Expresión 1 = Null && Expresión 2 = False el resultado es False.
Si la Expresión 1 = Null && Expresión 2 = Null el resultado es Null.

Como puedes ver, si, y sólo si, ambas expresiones se evalúan como True, el resultado es True. Si cualquiera de las expresiones es False, el resultado es False.

Disyunción lógica || (Or). Establece una disyunción lógica de dos expresiones, es decir, que el resultado se dará evaluando una expresión u otra.

El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal || El hierro es duro = True.

Hay 9 posibles resultados aplicando este operador a dos expresiones, aunque es posible incluir cuantas sean necesarias:

Si la Expresión 1 = True || Expresión 2 = True el resultado es True.
Si la Expresión 1 = True || Expresión 2 = False el resultado es True.
Si la Expresión 1 = True || Expresión 2 = Null el resultado es True.
Si la Expresión 1 = False || Expresión 2 = True el resultado es True.
Si la Expresión 1 = False || Expresión 2 = False el resultado es False.
Si la Expresión 1 = False || Expresión 2 = Null el resultado es Null.
Si la Expresión 1 = Null || Expresión 2 = True el resultado es True.
Si la Expresión 1 = Null || Expresión 2 = False el resultado es Null.
Si la Expresión 1 = Null || Expresión 2 = Null el resultado es Null.

Como puedes ver, si cualquiera de las expresiones, o ambas, son True, el resultado es True.

Exclusión lógica ^ (Xor). Establece una exclusión lógica de dos expresiones, es decir, que el resultado se dará evaluando una expresión u otra, y dará True si solamente una de ellas es True, lo que implica la exclusión de la otra.

El hierro es un metal = True.
El hierro es duro = True.
El hierro es un metal ^ El hierro es duro = False.

Hay 4 posibles resultados aplicando este operador a dos expresiones:

Si la Expresión 1 = True ^ Expresión 2 = True el resultado es False.
Si la Expresión 1 = True ^ Expresión 2 = False el resultado es True.
Si la Expresión 1 = False ^ Expresión 2 = True el resultado es True.
Si la Expresión 1 = False ^ Expresión 2 = False el resultado es False.

Como puedes ver, si una y sólo una de las expresiones es True, el resultado es True. Si cualquiera de las expresiones es Null, el resultado también será Null.

Operadores de comparación

Igualdad (==) Verifica la igualdad de dos expresiones sin tener en cuenta el tipo de dato.
Por ejemplo: 2 == "2" devuelve True

Igualdad estricta (===) Hace lo mismo que el anterior, pero verificando también que coincidan los tipos de datos.
Por ejemplo: 2 === "2" devuelve False

Desigualdad (!=) Funciona de la misma forma que la igualdad, pero negándola.
Por ejemplo: 2 != "2" devuelve False

Desigualdad estricta (!==) Lo mismo que la igualdad estricta, pero negándola.
Por ejemplo: 2 !== "2" devuelve True

Y estos cuatro, seguro que ya sabes cómo funcionan:

Mayor que (>)

Mayor o igual que (>=)

Menor que (<)

Menor o igual que (<=)

Operadores que trabajan con bits

Existen algunos operadores que funcionan bit a bit, convirtiendo previamente los valores a binario.
Son los siguientes: <<   >>   >>>   &   |   ^

Para comprender como trabajan estos complicados operadores lo mejor son los ejemplos:

Bitwise shift operators

9 << 2 = 36 con valor negativo: -9 << 2 = -36

Primero convierte a binario el primer operando 9 = 1001   A continuación añade a su derecha el número de bits cero que indique el segundo operando (2). Resulta: 1001 00 = 36

9 >> 2 = 2 con valor negativo: -9 >> 2 = -3

Primero convierte a binario el primer operando 9 = 1001   A continuación, y comenzando de derecha a izquierda, elimina el número de bits que indique el segundo operando (2). Resulta: 10 = 2

9 >>> 2 = 2 con valor negativo: -9 >>> 2 = 1073741821

Funciona igual que el anterior con números positivos. Con números negativos no está muy claro lo que hace.

Bitwise logical operators

Al igual que los anteriores, estos operadores trabajan convirtiendo previamente a binario los operandos, en la base de enteros de 32 bits. Para operar emparejan cada bit del primer operando con su correspondiente del segundo operando, aplicando el operador uno a uno hasta obtener el resultado final. Por ejemplo, el número 15 en binario es 1111 y el 9 1001. Si aplicamos los tres operadores lógicos a esta pareja de valores, se obtiene:

   15 & 9 = 9   (1111 AND 1001 = 1001)
15 | 9 = 15 (1111 OR 1001 = 1111)
15 ^ 9 = 6 (1111 XOR 1001 = 0110)

Y seguramente te estarás diciendo que no entiendes nada... Analicemos uno.
Sea, por ejemplo, el último de ellos: 15 ^ 9 = 6. Más arriba se ha descrito este mismo operador, que es Xor. Recordemos que establece una exclusión lógica de dos expresiones, es decir, que el resultado se dará evaluando ambos valores, y dará True si solamente una de ellas es True. Recordemos también que en binario 1 = True y 0 = False. Por tanto


      15 =   1     1     1     1
       9 =   1     0     0     1  
     ------------------------------
           False  True True  False    o lo que es igual,  0110

No hay que confundir estos tres operadores con sus homólogos lógicos vistos más arriba, que se representan con el mismo símbolo pero doble (excepto este).

Operadores de asignación

Asignación simple (=) Asigna un contenido a una variable o a un objeto.
Por ejemplo: mivariable = "Saludos"

En JavaScript el operador de asignación tiene la particularidad de que puede combinarse con algunos de los operadores aritméticos, dando lugar a toda una familia de nuevos operadores:

A += B   Ejemplo equivalente: A = A + B

A -= B   Ejemplo equivalente: A = A - B

A /= B   Ejemplo equivalente: A = A / B

A *= B   Ejemplo equivalente: A = A * B

A %= B   Ejemplo equivalente: A = A % B

A &= B   Ejemplo equivalente: A = A & B

A ^= B   Ejemplo equivalente: A = A ^ B

A |= B   Ejemplo equivalente: A = A | B

Unos operadores atípicos

typeof   Este operador nos indica el tipo de dato contenido en un variable, un literal o el resultado de una expresión. Puede devolver seis valores diferentes: number, string, object, function, boolean o undefined . Por ejemplo:

typeof 2   devuelve   number

void   Este es un curioso operador que se limita a impedir que todo funcione normalmente, es decir, que una vez evaluadas la instrucciones, sus efectos o presentación de resultados serán anulados. En principio podemos dudar de su utilidad, pero puede resultar muy útil en las ocasiones en que, dependiendo de una evaluación previa, haya que deshabilitar algun objeto o impedir alguna acción. Por ejemplo, bloqueando un formulario donde no se han cumplimentado algunos campos obligatorios, o si algun valor es erróneo. El siguiente ejemplo genera un link que no funciona:   Este link no funciona

Y se escribe: <A HREF="javascript:void(0)">Este link no funciona</A>

new   Sirve para crear una instancia de un objeto definido por el usuario, o también, para crear alguno de los objetos intrínsecos de javaScript:, como son: Array, Boolean, Date, Function, Math, Number o String. Lo veremos con más detalle en la página dedicada a los objetos.

Como puedes ver, JavaScript dispone de una gran variedad de operadores. Cuando se escriben expresiones lógicas complejas es recomendable usar los paréntesis para cada sub expresión participante, y no olvides tener siempre en cuenta el orden de evaluación de los operadores. Es relativamente fácil equivocarse al escribir expresiones complicadas, y es buena idea probar siempre lo escrito con cuantas variaciones sea posible para asegurarse de que no se producen resultados inesperados.

Orden de precedencia de los operadores

Los operadores de JavaScript tienen un orden establecido de evaluación. Este orden se denomina orden de precedencia. En la tabla siguiente puedes ver este orden, teniendo presente que los operadores que aparecen juntos en una misma fila de la tabla, no tienen prioridad entre ellos, sino que se evaluarán en el orden en que hayan sido escritos en la expresión a evaluar:

OperadorDescripción
.   [ ]   ( )Acceso a campos, índice de matrices y llamada a funciones.
++   --   -   ~   !  
delete   new   typeof   void
Incremento +1, decremento -1, negativo, NOT, NOT lógico
borrado, crear objeto, mostrar tipo, indefinido
*   /   %Multiplicación, división, módulo de división (resto)
+   -   +Suma, resta, concatenación de cadenas
<<     >>    >>>Bit shifting
<   <=     >   >=menor que, menor que o igual, mayor que, mayor que o igual
==   !=   ===   !==  Igualdad, desigualdad, identidad, no identidad
&AND
^XOR
|OR
&&AND logico
||OR logico
?:Condicional
= Asignación
,Evaluación múltiple

Los paréntesis se utilizan para alterar el orden natural de evaluación de los operadores. Una expresión con paréntesis será evaluada completa antes de que su valor resultante sea utilizado por el resto de instrucciones.

Para hacerse una idea más clara, veamos un ejemplo. Sea la siguiente expresión:

    X = 78 * (96 + 3 + 45)

Como puedes ver, hay cinco operadores en este orden:   =   *   ()   +   +  

De acuerdo con su orden de precedencia, se evaluarán en este orden:   ()   *   +   +   =  

Y esta sería la forma de operar paso a paso:

En primer lugar, se resuelve el paréntesis:   96 + 3 = 99   y a continuación 99 + 45 = 144

Ahora se multiplica:   78 * 144 = 11232

Por último se asigna el resultado:  X = 11232


[Indice]