JavaScript — Operadores unarios

Mauricio Garcia
5 min readDec 17, 2019

--

Temario

  • Operadores unarios
  • Operador delete
  • Operador void
  • Operador typeof
  • Operador +
  • Operador -
  • Operador ~

i. Operadores Unarios

Una operación unaria: es una operación que solo necesita un valor para operar

Esto quiere decir que un operador unario más un valor nos va a devolver otro valor, veamos la siguiente tabla:

ii. Operador delete

La documentación de MDN[ref] nos dice que: El operador delete elimina una propiedad de un objeto.

  • Es importante saber que el operador delete no libera memoria directamente (solo elimina la referencia), puede liberar memoria de manera indirecta siempre y cuando la referencia a la propiedad ha desaparecido.
  • Si el operador delete funciona correctamente, eliminará la propiedad del objeto completo, pero si existe otra propiedad con el mismo nombre dentro del prototype, este heredera la propiedad del prototype.
  • El operador delete no funciona en variables o nombres de funciones, por lo que solo es funcional en las propiedades de objetos.
  • El operador delete no puede eliminar algunas propiedades de los objetos predefinidos como Object, Array, Math, etc.

Ejemplos donde NO podemos hacer uso del operador:

En el siguiente ejemplo intentamos borrar una variable (cuando le ponemos var, let o const, JavaScript la marca como no configurable y eso hace que no se borre)

Lo mismo ocurre cuando intentamos borrar una función (JavaScript la marca como no configurable):

Así como también a propiedades predefinidas no se pueden borrar, en el siguiente ejemplo intentaremos con la función Math

Ejemplos donde SÍ podemos hacer uso del operador:

En el siguiente ejemplo vamos a borrar una propiedad del objeto global, en este caso creamos una variable foo, pero al ser global, se encuentra dentro de window como window.foo, por lo que podemos borrarla.

Cuando queremos borrar una propiedad de un objeto:

Cuando intentamos borrar una propiedad que no existe, el operador delete nos va a regresar true, y no va a causar ningún conflicto

Podemos eliminar un elemento dentro de un array, pero es muy importante tomar en cuenta que la longitud del array no se ve afectada (incluso si borrar el último elemento), por lo que la referencia en memoria va a permanecer como empty.

iii. Operador void

El operador void se utiliza para obtener el valor primitivo undefined, mediante la sintaxis void o void(0); debemos tener en cuenta que void es un operador y no una función, por lo que no es necesario (), pero usarlos es una buena práctica para programar.

Su uso más común es para obtener el valor de undefined, ya que es posible utilizar undefined como variable e inclusive alguien puede manipularlo desde window.undefined

El siguiente ejemplo, se utiliza undefined como un parámetro de una función

Como podemos observar (MUY MALA, MALÍSIMA PRÁCTICA 🤦‍♂️) se ha utilizado una palabra reservada undefined como propiedad, entonces si comparamos void(0) con una variable o propiedad si es undefined.

iv. Operador typeof

Anteriormente vimos de manera rápida en los tipos de valores[ref] el concepto y un breve ejemplo del operador typeof, ahora vamos a verlo a fondo…

El operador typeof devuelve una cadena (string) que nos indica el tipo de operando, pero sin evaluarlo, a continuación vamos a poner todos los valores de retorno posibles valores del typeof:

Ejemplos:

Hay que tener cuidado cuando se use el typeof con el operador new, ya que puede generar confusiones con el resultado esperado (se ha explicado en los tipos de datos [ref]):

v. Operador +

El operador unario +, va a intentar convertir el operando en un número Number.

El operador puede convertir :

  • Cadenas (string) que sean de tipo entero, decimal o hexadecimal, y flotante
  • Los booleanos true (1), false (0)
  • El primitivo null (0)
  • Todos los valores que no se puedan convertir retorna NaN

Ejemplos:

Con los arreglos debemos tener cuidado, ya que la respuesta puede variar dependiendo su contenido (En ecuaciones complejas ** veremos el por qué de esos resultados):

vi. Operador -

El operador unario -, va a intentar convertir el operando en un número (Number) y luego lo niega, esto quiere decir que si es positivo lo vuelve negativo y si es negativo lo vuelve positivo.

El operador puede convertir :

  • Cadenas (string) que sean de tipo entero, decimal o hexadecimal, y flotante y lo vuelve negativo
  • Los booleanos true lo vuelve -1, false lo vuelve -0
  • El primitivo null lo vuelve -0
  • Todos los valores que no se puedan convertir retorna -NaN

Ejemplos:

Con los arreglos debemos tener cuidado, ya que la respuesta puede variar dependiendo su contenido (En ecuaciones complejas ** veremos el por qué de esos resultados):

Tener cuidado con los resultados, ya que el último ejemplo console.log(-[1, 2]);, cuando es con el unario + nos regresa NaN y con el unario - nos regresa exactamente lo mismo NaN (pero NO negado).

vii. Operador ~

El NOT bit a bit, o bitwise, o complemento, es una operación unaria que realiza la negación lógica en cada bit, invirtiendo los bits del número, de tal manera que los ceros se convierten en 1 y viceversa[ref].

Su tabla de verdad para la operación NOT es la siguiente:

Y su fórmula es la siguiente:

~x = -x - 1

Ejemplo:

Importante: El operador bitwise, solo intercambia los bits, por lo que va a depender de la máquina interpretarlos. Recordemos que los números negativos se almacenan como el complemento de dos [ref] de la contraparte positiva

Antes de ver un ejemplo entendamos lo siguiente:

Complemento a 1 — Es cuando se obtiene cambiando de 0 a 1 y viceversa, es decir se cambia cada bit por su complemento.[ref]

Ejemplo:

Complemento a 2 — Se obtiene del complemento dea 1” y luego sumando 1 al bit menos significativo.[ref]

Ejemplo:

Entonces veamos como podemos validar que efectivamente ~2 = -3:

Ejemplos:

Ejemplo en código:

En la siguiente entrega vamos a ver JavaScript — Ecuaciones Complejas

La entrega pasada vimos JavaScript — Loops

--

--

No responses yet