Expresiones y operadores

Este cap铆tulo describe las expresiones y los operadores de JavaScript, incluyendo los de asignaci贸n, comparaci贸n, aritm茅ticos, bit a bit, l贸gicos, ternarios, de cadena y otros.

Tambi茅n se encuentra disponible una lista completa y detallada de operadores y expresiones en la referencia.

Operadores

JavaScript tiene los siguientes tipos de operadores. Esta secci贸n describe los operadores y contiene informaci贸n sobre la precedencia de los mismos.

JavaScript tiene ambos operadores binarios y unarios, y un operador ternario especial, el operador condicional. Un operador binario requiere dos operandos, uno antes del operando y otro despu茅s del operador:

operando1 operador operando2

Por ejemplo, 3+4 o x*y.

Un operador unario requiere un solo operando, ya sea antes o despu茅s del operador:

operador operando

o

operando operador

Por ejemplo, x++ o ++x.

Operadores de asignaci贸n

Un operador de asignaci贸n asigna un valor a su operando izquierdo bas谩ndose en el valor de su operando derecho. El operador de asignaci贸n simple es igual (=), que asigna el valor de su operando derecho a su operando izquierdo. Es decir, x = y asigna el valor de y a x.

Tambi茅n hay operadores de asignaci贸n compuestos que son una abreviatura de las operaciones enumeradas en la siguiente tabla:

Operadores de asignaci贸n compuestos
Nombre Operador abreviado Significado
Asignaci贸n x = y x = y
Asignaci贸n de adici贸n x += y x = x + y
Asignaci贸n de resta x -= y x = x - y
Asignaci贸n de multiplicaci贸n x *= y x = x * y
Asignaci贸n de divisi贸n x /= y x = x / y
Asignaci贸n de residuo x %= y x = x % y
Asignaci贸n de exponenciaci贸n x **= y x = x ** y
Asignaci贸n de desplazamiento a la izquierda x <<= y x = x << y
Asignaci贸n de desplazamiento a la derecha x >>= y x = x >> y
Asignaci贸n de desplazamiento a la derecha sin signo x >>>= y x = x >>> y
Asignaci贸n AND bit a bit x &= y x = x & y
Asignaci贸n XOR bit a bit x ^= y x = x ^ y
Asignaci贸n OR bit a bit x |= y x = x | y
Asignaci贸n AND l贸gico x &&= y x && (x = y)
Asignaci贸n OR l贸gico x ||= y x || (x = y)
Asignaci贸n de anulaci贸n l贸gica x ??= y x ?? (x = y)

Valor de retorno y encadenamiento

Como la mayor铆a de las expresiones, asignaciones como x = y tienen un valor de retorno. Se puede recuperar p. ej. asignando la expresi贸n o registr谩ndola:

const z = (x = y); // O de forma equivalente: const z = x = y;

console.log(z); // Registra el valor de retorno de la asignaci贸n x = y.
console.log(x = y); // O registra el valor de retorno directamente.

El valor de retorno coincide con la expresi贸n a la derecha del signo = en la columna "Significado" de la tabla anterior. Eso significa que (x = y) devuelve y, (x += y) devuelve la suma resultante x + y, (x **= y) devuelve la potencia resultante x ** y, y as铆 sucesivamente.

En el caso de asignaciones l贸gicas, (x &&= y), (x || = y) y (x ??= y), el valor de retorno es el de la operaci贸n l贸gica sin la asignaci贸n, entonces x && y, x || y y x ?? y, respectivamente.

Ten en cuenta que los valores de retorno siempre se basan en los valores de los operandos antes de la operaci贸n.

Al encadenar estas expresiones, cada asignaci贸n se eval煤a de derecha a izquierda. Considera estos ejemplos:

  • w = z = x = y es equivalente a w = (z = (x = y)) o x = y; z = y; w = y
  • z += x *= y es equivalente e z += (x *= y) o tmp = x * y; x *= y; z += tmp (salvo que sin tmp).

Desestructuraci贸n

Para asignaciones m谩s complejas, la sintaxis de asignaci贸n de desestructuraci贸n es una expresi贸n de JavaScript que hace posible extraer datos de arreglos u objetos usando una sintaxis que refleja la construcci贸n de arreglos y objetos literales.

var foo = ['one', 'two', 'three'];

// sin desestructurar
var one   = foo[0];
var two   = foo[1];
var three = foo[2];

// con desestructuraci贸n
var [one, two, three] = foo;

Operadores de comparaci贸n

Un operador de comparaci贸n compara sus operandos y devuelve un valor l贸gico en funci贸n de si la comparaci贸n es verdadera (true) o falsa (false). Los operandos pueden ser valores num茅ricos, de cadena, l贸gicos u objetos. Las cadenas se comparan seg煤n el orden lexicogr谩fico est谩ndar, utilizando valores Unicode. En la mayor铆a de los casos, si los dos operandos no son del mismo tipo, JavaScript intenta convertirlos a un tipo apropiado para la comparaci贸n. Este comportamiento generalmente resulta en comparar los operandos num茅ricamente. Las 煤nicas excepciones a la conversi贸n de tipos dentro de las comparaciones involucran a los operadores === y !==, que realizan comparaciones estrictas de igualdad y desigualdad. Estos operadores no intentan convertir los operandos a tipos compatibles antes de verificar la igualdad. La siguiente tabla describe los operadores de comparaci贸n en t茅rminos de este c贸digo de ejemplo:


var var1 = 3;
var var2 = 4;
Operadores de comparaci贸n
Operador Descripci贸n Ejemplos que devuelven true
Igual (==) Devuelve true si los operandos son iguales. 3 == var1

"3" == var1

3 == '3'
No es igual (!=) Devuelve true si los operandos no son iguales. var1 != 4
var2 != "3"
Estrictamente igual (===) Devuelve true si los operandos son iguales y del mismo tipo. Consulta tambi茅n Object.is y similitud en JS. 3 === var1
Desigualdad estricta (!==) Devuelve true si los operandos son del mismo tipo pero no iguales, o son de diferente tipo. var1 !== "3"
3 !== '3'
Mayor que (>) Devuelve true si el operando izquierdo es mayor que el operando derecho. var2 > var1
"12" > 2
Mayor o igual que (>=) Devuelve true si el operando izquierdo es mayor o igual que el operando derecho. var2 >= var1
var1 >= 3
Menor que (<) Devuelve true si el operando izquierdo es menor que el operando derecho. var1 < var2
"2" < 12
Menor o igual (<=) Devuelve true si el operando izquierdo es menor o igual que el operando derecho. var1 <= var2
var2 <= 5

Operadores aritm茅ticos

Un operador aritm茅tico toma valores num茅ricos (ya sean literales o variables) como sus operandos y devuelve un solo valor num茅rico. Los operadores aritm茅ticos est谩ndar son suma (+), resta (-), multiplicaci贸n (*) y divisi贸n (/). Estos operadores funcionan como lo hacen en la mayor铆a de los otros lenguajes de programaci贸n cuando se usan con n煤meros de punto flotante (en particular, ten en cuenta que la divisi贸n entre cero produce Infinity). Por ejemplo:

1 / 2; // 0.5
1 / 2 == 1.0 / 2.0; // Esto es true

Adem谩s de las operaciones aritm茅ticas est谩ndar (+, -, *, /), JavaScript proporciona los operadores aritm茅ticos enumerados en la siguiente tabla:

Operadores aritm茅ticos
Operador Descripci贸n Ejemplo
Residuo (%) Operador binario. Devuelve el resto entero de dividir los dos operandos. 12 % 5 devuelve 2.
Incremento (++) Operador unario. Agrega uno a su operando. Si se usa como operador prefijo (++x), devuelve el valor de su operando despu茅s de agregar uno; si se usa como operador sufijo (x++), devuelve el valor de su operando antes de agregar uno. Si x es 3, ++x establece x en 4 y devuelve 4, mientras que x++ devuelve 3 y , solo entonces, establece x en 4.
Decremento (--) Operador unario. Resta uno de su operando. El valor de retorno es an谩logo al del operador de incremento. Si x es 3, entonces --x establece x en 2 y devuelve 2, mientras que x-- devuelve 3 y, solo entonces, establece x en 2.
Negaci贸n unaria (-) Operador unario. Devuelve la negaci贸n de su operando. Si x es 3, entonces -x devuelve -3.
Positivo unario (+) Operador unario. Intenta convertir el operando en un n煤mero, si a煤n no lo es. +"3" devuelve 3.
+true devuelve 1.
Operador de exponenciaci贸n (**) Calcula la base a la potencia de exponente, es decir, baseexponente 2 ** 3 returns 8.
10 ** -1 returns 0.1.

Operadores bit a bit

Un operador bit a bit trata a sus operandos como un conjunto de 32 bits (ceros y unos), en lugar de n煤meros decimales, hexadecimales u octales. Por ejemplo, el n煤mero decimal nueve tiene una representaci贸n binaria de 1001. Los operadores bit a bit realizan sus operaciones en tales representaciones binarias, pero devuelven valores num茅ricos est谩ndar de JavaScript.

La siguiente tabla resume los operadores bit a bit de JavaScript.

Operadores bit a bit
Operador Uso Descripci贸n
AND a nivel de bits a & b Devuelve un uno en cada posici贸n del bit para los que los bits correspondientes de ambos operandos son unos.
OR a nivel de bits a | b Devuelve un cero en cada posici贸n de bit para el cual los bits correspondientes de ambos operandos son ceros.
XOR a nivel de bits a ^ b Devuelve un cero en cada posici贸n de bit para la que los bits correspondientes son iguales.
[Devuelve uno en cada posici贸n de bit para la que los bits correspondientes son diferentes].
NOT a nivel de bits ~ a Invierte los bits de su operando.
Desplazamiento a la izquierda a << b Desplaza a en representaci贸n binaria b bits hacia la izquierda, desplaz谩ndose en ceros desde la derecha.
Desplazamiento a la derecha de propagaci贸n de signo a >> b Desplaza a en representaci贸n binaria b bits a la derecha, descartando los bits desplazados.
Desplazamiento a la derecha de relleno cero a >>> b Desplaza a en representaci贸n binaria b bits hacia la derecha, descartando los bits desplazados y desplaz谩ndose en ceros desde la izquierda.

Operadores l贸gicos bit a bit

Conceptualmente, los operadores l贸gicos bit a bit funcionan de la siguiente manera:

  • Los operandos se convierten en enteros de treinta y dos bits y se expresan mediante una serie de bits (ceros y unos). A los n煤meros con m谩s de 32 bits se les descartan los bits m谩s significativos. Por ejemplo, el siguiente n煤mero entero con m谩s de 32 bits se convertir谩 en un n煤mero entero de 32 bits:
    Antes:  1110鈥0110鈥11111010鈥0000鈥0000鈥0000鈥0110鈥0000鈥0000鈥0001
    Despu茅s:               1010鈥0000鈥0000鈥0000鈥0110鈥0000鈥0000鈥0001
  • Cada bit en el primer operando se empareja con el bit correspondiente en el segundo operando: primer bit al primer bit, segundo bit al segundo bit, y as铆 sucesivamente.
  • El operador se aplica a cada par de bits y el resultado se construye bit a bit.

Por ejemplo, la representaci贸n binaria de nueve es 1001 y la representaci贸n binaria de quince es 1111. Entonces, cuando los operadores bit a bit se aplican a estos valores, los resultados son los siguientes:

Ejemplos de operadores bit a bit
Expresi贸n Resultado Descripci贸n binaria
15 & 9 9 1111 & 1001 = 1001
15 | 9 15 1111 | 1001 = 1111
15 ^ 9 6 1111 ^ 1001 = 0110
~15 -16 ~鈥0000鈥0000鈥...鈥0000鈥1111 = 1111鈥1111鈥...鈥1111鈥0000
~9 -10 ~鈥0000鈥0000鈥...鈥0000鈥1001 = 1111鈥1111鈥...鈥1111鈥0110

Ten en cuenta que los 32 bits se invierten utilizando el operador NOT a nivel de bits y que los valores con el bit m谩s significativo (m谩s a la izquierda) establecido en 1 representan n煤meros negativos (representaci贸n en complemento a dos). ~x eval煤a al mismo valor que eval煤a -x - 1.

Operadores de desplazamiento de bits

Los operadores de desplazamiento bit a bit toman dos operandos: el primero es una cantidad que se va a desplazar y el segundo especifica el n煤mero de posiciones de bit por las que se va a desplazar el primer operando. La direcci贸n de la operaci贸n de desplazamiento es controlada por el operador utilizado.

Los operadores de desplazamiento convierten sus operandos en enteros de treinta y dos bits y devuelven un resultado del mismo tipo que el operando izquierdo.

Los operadores de desplazamiento se enumeran en la siguiente tabla.

Operadores de desplazamiento de bits
Operador Descripci贸n Ejemplo
Desplazamiento a la izquierda
(<<)
Este operador desplaza el primer operando el n煤mero especificado de bits a la izquierda. Los bits desplazados en exceso hacia la izquierda se descartan. Los bits cero se desplazan desde la derecha. 9<<2 produce 36, porque 1001 desplazado 2 bits a la izquierda se convierte en 100100, que es 36.
Desplazamiento a la derecha de propagaci贸n de signo (>>) Este operador desplaza el primer operando el n煤mero especificado de bits a la derecha. Los bits desplazados en exceso hacia la derecha se descartan. Las copias del bit m谩s a la izquierda se desplazan desde la izquierda. 9>>2 produce 2, porque 1001 desplazado 2 bits a la derecha se convierte en 10, que es 2. Del mismo modo, -9>>2 produce -3, porque el signo se conserva.
Desplazamiento a la derecha de relleno cero (>>>) Este operador desplaza el primer operando el n煤mero especificado de bits a la derecha. Los bits desplazados en exceso hacia la derecha se descartan. Los bits cero se desplazan desde la izquierda. 19>>>2 produce 4, porque 10011 desplazado 2 bits a la derecha se convierte en 100, que es 4. Para n煤meros no negativos, el desplazamiento a la derecha de relleno con ceros y el desplazamiento a la derecha de propagaci贸n del signo producen el mismo resultado.

Operadores l贸gicos

Los operadores l贸gicos se utilizan normalmente con valores booleanos (l贸gicos); cuando lo son, devuelven un valor booleano. Sin embargo, los operadores && y || en realidad devuelven el valor de uno de los operandos especificados, por lo que si estos operadores se utilizan con valores no booleanos, pueden devolver un valor no booleano. Los operadores l贸gicos se describen en la siguiente tabla.

Operadores l贸gicos
Operador Uso Descripci贸n
AND L贸gico (&&) expr1 && expr2 Devuelve expr1 si se puede convertir a false; de lo contrario, devuelve expr2. Por lo tanto, cuando se usa con valores booleanos, && devuelve true si ambos operandos son true; de lo contrario, devuelve false.
OR l贸gico (||) expr1 || expr2 Devuelve expr1 si se puede convertir a true; de lo contrario, devuelve expr2. Por lo tanto, cuando se usa con valores booleanos, || devuelve true si alguno de los operandos es true; si ambos son falsos, devuelve false.
NOT l贸gico (!) !expr Devuelve false si su 煤nico operando se puede convertir a true; de lo contrario, devuelve true.

Ejemplos de expresiones que se pueden convertir a false son aquellos que se eval煤an como null, 0, NaN, la cadena vac铆a ("") o undefined.

El siguiente c贸digo muestra ejemplos del operador && (AND l贸gico).

var a1 =  true && true;     // t && t devuelve true
var a2 =  true && false;    // t && f devuelve false
var a3 = false && true;     // f && t devuelve false
var a4 = false && (3 == 4); // f && f devuelve false
var a5 = 'Cat' && 'Dog';    // t && t devuelve Dog
var a6 = false && 'Cat';    // f && t devuelve false
var a7 = 'Cat' && false;    // t && f devuelve false

El siguiente c贸digo muestra ejemplos del operador || (OR l贸gico).

var o1 =  true || true;     // t || t devuelve true
var o2 = false || true;     // f || t devuelve true
var o3 =  true || false;    // t || f devuelve true
var o4 = false || (3 == 4); // f || f devuelve false
var o5 = 'Cat' || 'Dog';    // t || t devuelve Cat
var o6 = false || 'Cat';    // f || t devuelve Cat
var o7 = 'Cat' || false;    // t || f devuelve Cat

El siguiente c贸digo muestra ejemplos de el operador ! (NOT l贸gico).

var n1 = !true;  // !t devuelve false
var n2 = !false; // !f devuelve true
var n3 = !'Cat'; // !t devuelve false

Evaluaci贸n de cortocircuito

Debido a que las expresiones l贸gicas se eval煤an de izquierda a derecha, se prueban para una posible evaluaci贸n de "cortocircuito" utilizando las siguientes reglas:

  • false && anything se eval煤a en cortocircuito como false.
  • true || anything se eval煤a en cortocircuito como true.

Las reglas de la l贸gica garantizan que estas evaluaciones sean siempre correctas. Ten en cuenta que la parte anything de las expresiones anteriores no se eval煤a, por lo que los efectos secundarios de hacerlo no surten efecto.

Ten en cuenta que para el segundo caso, en el c贸digo moderno puedes usar el nuevo operador de fusi贸n nulo (??) que funciona como ||, pero solo devuelve la segunda expresi贸n, cuando la primera es "nullish", es decir, null, el valor nulo representa la ausencia intencional de cualquier valor de objeto. Es uno de los valores primitivos de JavaScript y se trata como falso para las operaciones booleanas. o undefined la propiedad global undefined representa el valor "undefined" primitivo. Es uno de los tipos primitivos de JavaScript. Por tanto, es la mejor alternativa para proporcionar valores predeterminados, cuando valores como '' o 0 tambi茅n son valores v谩lidos para la primera expresi贸n.

Operadores de cadena

Adem谩s de los operadores de comparaci贸n, que se pueden usar en valores de cadena, el operador de concatenaci贸n (+) concatena dos valores de cadena, devolviendo otra cadena que es la uni贸n de los dos operandos de cadena.

Por ejemplo,

console.log('mi ' + 'cadena'); // la consola registra la cadena "mi cadena".

El operador de asignaci贸n abreviada += tambi茅n se puede utilizar para concatenar cadenas.

Por ejemplo,

var mystring = 'alpha';
mystring += 'bet'; // se eval煤a como "alphabet" y asigna este valor a mystring.

Operador condicional (ternario)

El operador condicional es el 煤nico operador de JavaScript que toma tres operandos. El operador puede tener uno de dos valores seg煤n una condici贸n. La sintaxis es:

condition ? val1 : val2

Si condition es true, el operador tiene el valor de val1. De lo contrario, tiene el valor de val2. Puedes utilizar el operador condicional en cualquier lugar donde normalmente utilizas un operador est谩ndar.

Por ejemplo,

var status = (age >= 18) ? 'adult' : 'minor';

Esta declaraci贸n asigna el valor "adult" a la variable status si age es de dieciocho a帽os o m谩s. De lo contrario, asigna el valor "minor" a status.

Operador coma

El operador coma (,) simplemente eval煤a ambos operandos y devuelve el valor del 煤ltimo operando. Este operador se utiliza principalmente dentro de un bucle for, para permitir que se actualicen m煤ltiples variables cada vez a trav茅s del bucle. Se considera de mal estilo usarlo en otros lugares, cuando no es necesario. A menudo, en su lugar pueden y se deben utilizar dos declaraciones independientes.

Por ejemplo, si a es un arreglo bidimensional con 10 elementos en un lado, el siguiente c贸digo usa el operador coma para actualizar dos variables a la vez. El c贸digo imprime los valores de los elementos diagonales en el arreglo:

var x = [0,1,2,3,4,5,6,7,8,9]
var a = [x, x, x, x, x];

for (var i = 0, j = 9; i <= j; i++, j--)
//                                ^
  console.log('a[' + i + '][' + j + ']= ' + a[i][j]);

Operadores unarios

Una operaci贸n unaria es una operaci贸n con un solo operando.

delete

El operador delete elimina la propiedad de un objeto. La sintaxis es:

delete object.property;
delete object[propertyKey];
delete objectName[index];
delete property; // legal solo dentro de una declaraci贸n with

donde object es el nombre de un objeto, property es una propiedad existente y propertyKey es una cadena o s铆mbolo que hace referencia a una propiedad existente.

La cuarta forma es legal solo dentro de una declaraci贸n with, para eliminar una propiedad de un objeto, y tambi茅n para las propiedades del objeto global.

Si el operador delete tiene 茅xito, elimina la propiedad del objeto. Intentar acceder a 茅l despu茅s dar谩 como resultado undefined. El operador delete devuelve true si la operaci贸n es posible; devuelve false si la operaci贸n no es posible.

x = 42; // impl铆citamente crea window.x
var y = 43;
var myobj = {h: 4}; // crea un objeto con la propiedad h

delete x;       // devuelve true (se puede eliminar si se crea impl铆citamente)
delete y;       // devuelve false (no se puede borrar si se declara con var)
delete Math.PI; // devuelve false (no se pueden eliminar propiedades no configurables)
delete myobj.h; // devuelve true (puede eliminar propiedades definidas por el usuario)
Eliminar elementos de un arreglo

Dado que los arreglos solo son objetos, t茅cnicamente es posible delete elementos de ellos. Sin embargo, esto se considera una mala pr谩ctica, trata de evitarlo. Cuando eliminas una propiedad de arreglo, la longitud del arreglo no se ve afectada y otros elementos no se vuelven a indexar. Para lograr ese comportamiento, es mucho mejor simplemente sobrescribir el elemento con el valor undefined. Para manipular realmente el arreglo, usa los diversos m茅todos de arreglo, como splice.

typeof

El operador typeof se utiliza de cualquiera de las siguientes formas:

typeof operand
typeof (operand)

El operador typeof devuelve una cadena que indica el tipo de operando no evaluado. operando es la cadena, variable, palabra clave u objeto para el que se devolver谩 el tipo. Los par茅ntesis son opcionales.

Sup贸n que defines las siguientes variables:

var myFun = new Function('5 + 2');
var shape = 'round';
var size = 1;
var foo = ['Apple', 'Mango', 'Orange'];
var today = new Date();

El operador typeof devuelve los siguientes resultados para estas variables:

typeof myFun;       // devuelve "function"
typeof shape;       // devuelve "string"
typeof size;        // devuelve "number"
typeof foo;         // devuelve "object"
typeof today;       // devuelve "object"
typeof doesntExist; // devuelve "undefined"

Para las palabras clave true y null, el operador typeof devuelve los siguientes resultados:

typeof true; // devuelve "boolean"
typeof null; // devuelve "object"

Para un n煤mero o cadena, el operador typeof devuelve los siguientes resultados:

typeof 62;            // devuelve "number"
typeof 'Hola mundo';  // devuelve "string"

Para los valores de propiedad, el operador typeof devuelve el tipo de valor que contiene la propiedad:

typeof document.lastModified; // devuelve "string"
typeof window.length;         // devuelve "number"
typeof Math.LN2;              // devuelve "number"

Para m茅todos y funciones, el operador typeof devuelve los siguientes resultados:

typeof blur;        // devuelve "function"
typeof eval;        // devuelve "function"
typeof parseInt;    // devuelve "function"
typeof shape.split; // devuelve "function"

Para objetos predefinidos, el operador typeof devuelve los siguientes resultados:

typeof Date;     // devuelve "function"
typeof Function; // devuelve "function"
typeof Math;     // devuelve "object"
typeof Option;   // devuelve "function"
typeof String;   // devuelve "function"

void

El operador void se utiliza de cualquiera de las siguientes formas:

void (expression)
void expression

El operador void especifica una expresi贸n que se evaluar谩 sin devolver un valor. expression es una expresi贸n de JavaScript para evaluar. Los par茅ntesis que rodean la expresi贸n son opcionales, pero es un buen estilo usarlos.

Operadores relacionales

Un operador relacional compara sus operandos y devuelve un valor Boolean basado en si la comparaci贸n es verdadera.

in

El operador in devuelve true si la propiedad especificada est谩 en el objeto especificado. La sintaxis es:

propNameOrNumber in objectName

donde propNameOrNumber es una expresi贸n de cadena, num茅rica o de s铆mbolo que representa un nombre de propiedad o 铆ndice de arreglo, y objectName es el nombre de un objeto.

Los siguientes ejemplos muestran algunos usos del operador in.

// Arreglos
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
0 in trees;        // devuelve true
3 in trees;        // devuelve true
6 in trees;        // devuelve false
'bay' in trees;    // devuelve false (debes especificar el n煤mero del 铆ndice,
                   // no el valor en ese 铆ndice)
'length' en trees; // devuelve true (la longitud es una propiedad de Array)

// objetos integrados
'PI' in Math;          // devuelve true
var myString = new String('coral');
'length' in myString;  // devuelve true

// Objetos personalizados
var mycar = { make: 'Honda', model: 'Accord', year: 1998 };
'make' in mycar;  // devuelve true
'model' in mycar; // devuelve true

instanceof

El operador instanceof devuelve true si el objeto especificado es del tipo de objeto especificado. La sintaxis es:

objectName instanceof objectType

donde objectName es el nombre del objeto para comparar con objectType, y objectType es un tipo de objeto, como Date o Array.

Utiliza instanceof cuando necesites confirmar el tipo de un objeto en tiempo de ejecuci贸n. Por ejemplo, al detectar excepciones, puedes ramificar a diferentes controladores seg煤n el tipo de excepci贸n lanzada.

Por ejemplo, el siguiente c贸digo usa instanceof para determinar si theDay es un objeto Date. Debido a que theDay es un objeto Date, las instrucciones de la expresi贸n if se ejecutan.

var theDay = new Date(1995, 12, 17);
if (theDay instanceof Date) {
  // instrucciones a ejecutar
}
}

Precedencia de los operadores

La precedencia de los operadores determina el orden en que se aplican al evaluar una expresi贸n. Puedes redefinir la precedencia de los operadores mediante el uso de par茅ntesis.

La siguiente tabla describe la precedencia de los operadores, de mayor a menor.

Precedencia de los operadores
Tipo de operador Operadores individuales
miembro . []
llamar / crear instancia () new
negaci贸n / incremento ! ~ - + ++ -- typeof void delete
multiplicar / dividir * / %
adici贸n / sustracci贸n + -
desplazamiento bit a bit << >> >>>
relacional < <= > >= in instanceof
igualdad == != === !==
AND bit a bit &
XOR bit a bit ^
OR bit a bit |
AND l贸gico &&
OR l贸gico ||
condicional ?:
asignaci贸n = += -= *= /= %= <<= >>= >>>= &= ^= |= &&= ||= ??=
coma ,

Puedes encontrar una versi贸n m谩s detallada de esta tabla, completa con enlaces a detalles adicionales sobre cada operador, en Referencia de JavaScript.

Expresiones

Una expresi贸n es cualquier unidad de c贸digo v谩lida que se resuelve en un valor.

Toda expresi贸n sint谩cticamente v谩lida se resuelve en alg煤n valor, pero conceptualmente, hay dos tipos de expresiones: con efectos secundarios (por ejemplo: las que asignan valor a una variable) y las que en alg煤n sentido eval煤an y por lo tanto se resuelven en un valor.

La expresi贸n x = 7 es un ejemplo del primer tipo. Esta expresi贸n usa el operador = para asignar el valor siete a la variable x. La expresi贸n en s铆 se eval煤a como siete.

El c贸digo 3 + 4 es un ejemplo del segundo tipo de expresi贸n. Esta expresi贸n usa el operador + para sumar tres y cuatro sin asignar el resultado, siete, a una variable.

JavaScript tiene las siguientes categor铆as de expresi贸n:

  • Aritm茅ticas: se eval煤a como un n煤mero, por ejemplo 3.14159. (Generalmente usa operadores aritm茅ticos).
  • Cadenas: se eval煤a como una cadena de caracteres, por ejemplo, "Fred" o "234". (Generalmente usa operadores de cadena).
  • L贸gicas: se eval煤an como true o false. (A menudo implica operadores l贸gicos).
  • Expresiones primarias: palabras clave b谩sicas y expresiones generales en JavaScript.
  • Expresiones del lado izquierdo: los valores del lado izquierdo son el destino de una asignaci贸n.

Expresiones primarias

Palabras clave b谩sicas y expresiones generales en JavaScript.

this

Utiliza la palabra clave this para hacer referencia al objeto actual. En general, this se refiere al objeto que llama en un m茅todo. Usa this con la notaci贸n de punto o entre corchetes:

this['propertyName']
this.propertyName

Supongamos que una funci贸n llamada validate valida la propiedad value de un objeto, dado el objeto y los valores alto y bajo:

function validate(obj, lowval, hival) {
  if ((obj.value < lowval) || (obj.value > hival))
    console.log('隆Valor no v谩lido!');
}

Puedes llamar a validate en el controlador de eventos onChange de cada elemento de formulario, utilizando this para pasarlo al elemento de formulario, como en el siguiente ejemplo:

<p>Ingresa un n煤mero entre 18 y 99:</p>
<input type="text" name="age" size=3 onChange="validate(this, 18, 99);">

Operador de agrupaci贸n

El operador de agrupaci贸n () controla la precedencia de la evaluaci贸n en las expresiones. Por ejemplo, puedes redefinir la multiplicaci贸n y la divisi贸n primero, luego la suma y la resta para evaluar la suma primero.

var a = 1;
var b = 2;
var c = 3;

// precedencia predeterminada
a + b * c     // 7
// evaluado por omisi贸n as铆
a + (b * c)   // 7

// ahora prevalece sobre la precedencia
// suma antes de multiplicar
(a + b) * c   // 9

// que es equivalente a
a * c + b * c // 9

Expresiones del lado izquierdo

Los valores de la izquierda son el destino de una asignaci贸n.

new

Puedes utilizar el operador new para crear una instancia de un tipo de objeto definido por el usuario o de uno de los tipos de objeto integrados. Utiliza new de la siguiente manera:

var objectName = new objectType([param1, param2, ..., paramN]);

super

La palabra clave super se utiliza para llamar a funciones en el padre de un objeto. Es 煤til con clases llamar al constructor padre, por ejemplo.

super([arguments]); // llama al constructor padre.
super.functionOnParent([arguments]);