Operadores aritméticos
En los primeros ejemplos de este tutor tan sólo se han usado sentencias muy simples como asignar un valor a una variable, mediante el operador de asignación, =, o realizar operaciones aritméticas, pero evidentemente JavaScript puede realizar más operaciones.
En esta seccion y las siguientes se presentan los operadores de que dispone este lenguaje clasificados en varios grupos, según el contexto en el que se usen. Comenzamos con los más conocidos, los operadores aritméticos.
- Asignación =
- No es el que el simbolo matemático de igual. Este operador significa asignar, guardar o almacenar. Y se usa para alamcernar un valro en una variable. Primera se escribe la variable y leugo el valor que se guardará en ella. Este valor puede ser una cosntante, una expresión u otra variable. Ojo: cuidado al usar para instancias de objetos a otro objeto, recuerda que un objeto es una referencias. Los objetos tipo Boolean, Number y String no presentan pegas, Javascript los convierte internamente en copias. Con el resto cuidado.
var sumando = 3;
var total = 4+5;
var nombre = "Juan";
var resultado = sumando*4;
- Suma +
- Se trata de un operador usado para sumar dos valores numéricos o para concatenar cadenas entre sí o números y cadenas.
var peras= 10, manzanas = 5;
var fruta = "Peras";
var saludo = "Hola";
var nombre = " Pedro";
console.log(saludo + nombre); /* resultado Hola Pedro*/
console.log(peras + manzanas); /* resultado:15 */
console.log( peras + fruta); /*resultado: 10 Peras
- Resta -
- Operador usado para restar valores numéricos. Puede actuar sobre un único operando numérico cambiándole de signo.
var num1 = 10, num2 = 8, res = 0;
res = num1 - num2; /*res contiene 2 */
res = -res; /*ahora res contiene -2*/
- Producto ( * ) y cociente ( / )
- Realizan las operaciones aritméticas de multiplicar y dividir dos valores numéricos. En la división si el divisor es 0 no salta ningún error, sino que Javascript lo evalúa dando como resultado la constante Infinity. Si usas el operador ** se toma como elevado a
var invitados = 10, gambas = 40;
var racion, precio = 20, total;
var base = 2; potencia;
var error;
racion = gambas/invitados; /*racion: 4 */
total = gambas * precio; /*total: 800 */
error = gambas/0; /* Infinity */
potencia = 2**3; /* 8, e elevado a 3 */
- Resto %
- También llamado operador módulo, calcula el resto de una división.
var multiplo = 50, divisor = 4, resto;
resto = multiplo % divisor; /*resto contiene 2 */
- Incremento ( ++) y decremento (--)
- Estos operadores se usan para incrementar o disminuir en 1 el valor de una variable. Si el operador se antepone a la variable la operación de incremento o decremento es prioritaria sobre cualquier otra.
var indice = 5, cuenta;
cuenta = ++indice; //incrementa indice y luego se guarda en cuenta
cuenta = indice++; //Guarda 5 en cuenta y luego incrementa indice
- Operadores compuestos
- Los operadores +, -, *, / pueden asociarse con el operador de asignación (=) para acortar instrucciones de asignación. Se unifica la operación con la asignación en una sola instrucción. El operador += puede usarse igualmente con variables de cadena.
var total = 20, precio = 5, cad = "Casa";
total += 5; /* Suma 5 a total */
total *= precio /*total se multiplica por precio */
cad += 's' ; /*se añade la letra s a "Casa" */
total /= 10; /*total se divide por 10*/
- delete
- Se trata de un operador unario (solo requiere un valor) que se usa para borrar propiedades configurables de un objeto, como puede serun elemento de un array. No comprueba si existe la propiedad a borrar.
Solo devuelve false (o provoca error en modo estricto) si la propiedad que va a borrar no es configurable (lista.length, valor declarado con let)
Aveces se definen variables y parecen elementos independientes, pero en realidad son propieades de un objeto y por tanto se pueden eliminar.
Puede borrara variables, porque realemtne son propiedades de un objeto . si se declara var x = 45, esta x es un objeto tipo number y puede borrarse
En este ejemplo borramos el cuarto elemento (indice 3, puntos[3]), pero oberva que la posición no queda vaci sino que queda undefined, y la lista sigue teniendo de longitud 5.
var puntos = [2, 45, 67, 90, 24];
delete puntos[3];
console.log(puntos + " longitud "+ puntos.length)
delete puntos.length //false
let nombre = "pepe";
delete puntos.length //false
- new
- Otro operador unario usado para crear objetos a prtir de un constructor. Quienes conozcan las clases de otros lenguajes ya conocen este operador. En la página dedicada a objetos puedes ver como se usa este operador. En general al crear el objeto llama al método constructor para instanciar el objeto concreto.
var fecha = new Date();
console.log("Hoy es "+fecha.toLocaleDateString())
- typeof
- Un operador para determinar el tipo de dato del argumento que se le pase. En tipos
En el ejemplo anterior un typeof(fecha) diría object.
Los tipos de datos que devuelve son los tipos primitivos o predefinidos de Javascript, es decir: number, string, boolean, function,, object.
var fecha = new Date();
var base = new Number(12);
var num = 123.45;
var nombre = "Luisa";
var soleado = true;
var sumar = function(a,b}{return a+b}; //object
console.log("fecha es "+ typeof(fecha) ); //object
console.log("base es "+ typeof(base) ); //object
console.log("num es "+ typeof(num) ); //number
console.log("nombre es "+ typeof(nombre) ); //string
console.log("soleado es "+ typeof(soleado) ); //boolean
console.log("sumar es "+ typeof(sumar) ); //function
Fíjate la aparendte inconsistencia de base y num, son el mismo objeto, aunque typeof los nombra distintos. Si lo declaras mediante una expresión (dáncole unvalor concreto) el tipo es number, si lo declaras cmo object, el tipo es object. Lo mismo ocurre con los restantes.
Ejemplos
Asignas un objeto a otro no es igual que asignar un variable primitiva a otra.
var lista1 = [1,2,3,4,5,6];
var lista2;
lista2 = lista1;
lista1[0] = 0;
console.log(lista2); // 0,2,3,4,5,6
Como ves el cambio hecho en lista1 también aparece en lista2, son el mismo objeto
Esto no ocurre con las cadenas, los valores lógicos y los valores numéricos (string, boolean, numbers).
Los objetos no se asignan entre si, o se crean copias o se crea un método para asignarse unos a otros.
var lista1 = [1,2,3,4,5,6];
var lista2;
lista2 = Array.from(lista1);
lista1[0] = 0;
console.log(lista2); // 1,2,3,4,5,6
Ahora no ocurre ese efecto colateral. lista1 y lista2 son objetos diferentes, aunque tengan contenidos iguales.
El operador suma ( + ) funciona tanto con números (suma aritmética) como con literales (concatenar). Si se suman números con cadenas, los números se convierten en literales y luego se concatenan.
var tiempo = 4;
var dias = " Lunes";
console.log("He trabajado "+4+dias);
Se obtendrá "He trabajado 4 lunes". Javascript hace una conversión interna de tipo de datos convirtiendo el número en letras..
Pero también ocurre al reves
var horas = "4";
var dias = 5;
console.log("Trabajo "+horas*dias+ " horas");
En este caso el dígito "4" se convierte en el número 4 para multiplicarse por días (número 5).
Aunque funciona no es aconsejable confiar en estas conversiones:
var hoy = "4";
var ayer = "5";
console.log("Trabajé "+hoy+ayer+ " horas");
En esta ocasión como + es operador de cadenas, no hay conversión numéríca.