---
# System prepended metadata

title: JavaScript
tags: [ut1, DEW, JavaScript]

---

# JavaScript 


![](https://cdn.iconscout.com/icon/free/png-256/javascript2752148-2284965.png)



[TOC]


## ¿Qué es?
**JavaScript es el lenguaje de programación encargado de dotar de mayor interactividad y dinamismo a las páginas web**. Cuando JavaScript se ejecuta en el navegador, no necesita de un compilador. **El navegador lee directamente el código, sin necesidad de terceros**. Por tanto, se le reconoce como uno de los tres lenguajes nativos de la web junto a HTML (*contenido y su estructura*) y a CSS (*diseño del contenido y su estructura*).


## ¿Para qué sirve?
Con este lenguaje de programación podemos crear efectos y animaciones sin ninguna interacción, o respondiendo a eventos causados por el propio usuario tales como botones pulsados o datos que son introducidos en los formularios.


## Versión actual y novedades
La versión de Javascript ES12 o ECMAScript 2021, desarrollada en GitHub con la ayuda de la comunidad ECMA International. Donde se intenta aportar más solidez a la misma.



### Getters y setters privados

Los métodos de acceso nos permitían declarar, a través de la sintaxis ``get nombrePropiedad()`` y ``set nombrePropiedad()``, métodos en una clase con un comportamiento de propiedad a efectos externos:

```javascript=
class Invoice {
  
  /* ... */
  get totalInvoice() {
     return (this.cost + this.benefit) * this.tax
  }
  set tax(value) {
     this.tax = value
  }
}
const invoice = new Invoice()
invoice.tax = 0.21      // manipularía el valor de la propiedad en la clase
invoice.totalInvoice   // retornaría el sumatorio que proceda
```

La novedad de ES12 reside en **limitar el acceso a cualquier método accesorio** al prefijarlo con una almohadilla:

```javascript=
class Invoice {
  
  /* ... */
  get #benefit() {
     return 10
  }
}
const invoice = new Invoice()
invoice.benefit   // undefined
```


### Métodos de clase privados
A los métodos constructores, accesorios, estáticos y prototípicos de las clases se unen los métodos privados, que prefijándolos con una almohadilla **verán su alcance limitado a la clase donde están definidos.**

En caso de tratar de accederlos, obtendremos un valor ``undefined`` con su correspondiente excepción de tipo:

```javascript=
class Invoice {
  
  /* ... */
  #addDiscount(val) {
     this.subtotal -= val
  }
}
const invoice = new Invoice()
invoice.addDiscount(100)   // TypeError: invoice.addDiscount is not a function
```



### Método .replaceAll()

Presente en el prototipo de las instancias de ``String``, el método ``.replaceAll`` **reemplaza todas las ocurrencias de una cadena por otra cadena**, un comportamiento similar a del actual ``.replace()`` con la salvedad de que alcanza por defecto a todas las coincidencias, en vez de limitarse a la primera:

```javascript=
const string = "Tú estás bien, por eso yo estoy bien"
const replacedString1 = string.replace("bien", "mal")     // Limitado al primer match
console.log(replacedString) 
// Tú estás mal, por eso yo estoy bien

const replacedString2 = string.replaceAll("bien", "mal")  // Extensible a todo el string 
console.log(replacedString2) 
// Tú estás mal, por eso yo estoy mal
```


## Antecedentes

JavaScript se introdujo en 1995 como una forma de agregar programas a páginas web en el navegador Netscape Navigator. En su momento fue una idea novedosa. 

A principios de los años 90, la mayoría de usuarios que se conectaban a Internet lo hacían con módems a una **velocidad máxima de 28.8 kbps**. Esa velocidad era más que suficiente para la época. Lo cierto era que la web en aquel entonces no ofrecía gran cosa más que servir como una inmensa biblioteca donde los usuarios consultaban mayormente **contenido basado en texto** pero la evolución que conocemos hoy estaba por llegar y podían verse los primeros pasos.

En esa época, empezaban a desarrollarse **las primeras aplicaciones web** y por tanto, las páginas web comenzaban a incluir formularios complejos. Con unas aplicaciones web cada vez más complejas y una velocidad de navegación tan lenta, surgió la necesidad de un lenguaje de programación que **se ejecutara en el navegador del usuario**. De esta forma, si el usuario no rellenaba correctamente un formulario, no se le hacía esperar mucho tiempo hasta que el servidor volviera a mostrar el formulario indicando los errores existentes.


## Futuro
En sus inicios JavaScript era utilizado para crear animaciones e interacciones sencillas en los sitios web. En la actualidad y gracias a nodeJS, JavaScript **puede ser ejecutado en servidores** y no solo en el navegador del usuario. Esto ha generado un cambio de paradigma importante hasta el punto que en la actualidad podemos utilizar código JavaScript para cualquier cosa que se nos ocurra.

Para darnos cuenta de la importancia que esto ha supuesto solo citar que **Netflix utiliza JavaScript** para construir sus aplicaciones para todos los dispositivos que soporta.


###### tags: `DEW` `ut1` `JavaScript`

