Seleccionar página

Brendan-Eich

Cuando en mayo de 1995 Brendan Eich (en la foto) desarrolló JavaScript para Netscape no podía imaginar a donde llegaría su creación. Han pasado varias décadas y Javascript se ha vuelto omnipresente, pudiendo ejecutarse desde en un navegador, en otras aplicaciones, en servidores e incluso en bases de datos. Desde su origen como un sencillo lenguaje de script para dotar de pequeños efectos dinámicos al navegador ha ido evolucionando hasta convertirse en un lenguaje con grandes posibilidades en el que se pueden desarrollar complejos y completos sistemas.

Aunque muchos programadores han dedicado bastante tiempo a conocer y mantenerse al día de librerías, frameworks y otros elementos, la verdad es la mayoría sigue trabajando con el Javascript más primitivo, básicamente con el que fué publicado en 1999. Los cambios de las siguientes versiones de Javascript no han sido radicales y seguimos usando el lenguaje como en los 90. Ahora, con la aparición de ES6, la situación cambia de forma significativa.

Un poco de historia

Javascript ha evolucionado y ha incorporado poco a poco nuevas y útiles características, que desgraciadamente muchos desconocen. Algunas de estas características y funcionalidades las han lanzado fabricantes concretos en sus diferentes versiones de Javascript o JScript, pero es en el estándar ECMA-262 en el que debemos fijarnos.

El estándar ECMA-262 tiene cuatro ediciones realmente relevantes:

  • ECMA-262 Edición 1 (junio de 1997), que es la primera versión del estándar y que utilizaban Internet Explorer 4 y Netscape 4.06. Esta versión puso un cierto orden ofreciendo un estándar al que referirse independientemente de los fabricantes.
  • ECMA-262 Edición 3 (diciembre de 1999), que es la versión que utilizaba Netscape 6, Internet Explorer de la versión 5.5 a la 8 o Chrome de la versión 1 a la 10. La mayoría de los programadores están utilizando esta versión.
  • ECMA-262 Edición 5 (julio 2010), con su corrección la Edición 5.1 (junio 2011), es la versión de este estándar que implementan la mayoría de los navegadores modernos: Firefox 4, Internet Explorer 9, Chrome 11 o Node desde la versión 0.5.1. Es una versión que ha incorporado funcionalidades muy interesantes, pero incluso estas funcionalidades son desconocidas para muchos programadores.
  • ECMA-262 Edición 6 o ECMAScript 2015 (junio 2015), es la última versión publicada del estándar y supone un cambio muy importante en las capacidades disponibles.

Ya se está trabajando en la siguiente versión.

Casos que nos podemos encontrar

Lo que nunca llego a ser parte del estándar, pero todos implementan

Aunque pueda parecer increíble, todavía podemos encontrarnos con implementaciones de Javascript que incluyen funciones propias de Netscape 2.0 como son las que permitían añadir algunos tag HTML a una cadena de texto y que nunca llegaron a formar parte del estándar y, aunque parezca mentira, la mayoría de las implementaciones de Javascript siguen soportando.

var texto = new String("Alerta, no usar");
console.log(texto.blink());        
// Añade   antes y después del texto

Es muy mala idea utilizar este tipo de funcionalidad y afortunadamente se encuentran pocos casos donde los programadores hagan uso de semejantes características, aunque lamentablemente hay muchas referencias en Internet que incluyen este tipo de elementos sin ningún tipo de aviso y que pueden llegar a confundir a los principiantes.

Lo que añadieron unos fabricantes y otros no implementaron

Algunos fabricantes han publicado características que definitivamente no han sido parte del estándar, pero que son implementadas por varios motores, pero no por todos.

Por ejemplo, bastante recientemente la Mozilla Foundation ha incluido los métodos trimLeft() y trimRight() en la versión 1.8.1 Javascript para los objetos de tipo String, pero sólo el método trim() es parte del estándar ECMA-262 Edición 5 y superiores. Los métodos trimLeft() y trimRight() se pueden encontrar en Firefox o Chrome, pero no en Internet Explorer, ya que no son parte del estándar.

Podemos consultar esta referencia de kangax – compatibility table – non standard, que da una buena lista de funcionalidades no estándar y como es soportado por los diferentes fabricantes.

Lo que era parte del estándar y ha quedado obsoleto

Los estándares no están exentos de cambios y hay una serie de características que deberíamos dejar de utilizar, ya que en versiones futuras dejarán de estar soportadas o, como veremos en el siguiente ejemplo, son fuente de algunos problemas y confusiones.

Un caso bastante llamativo es el método getYear() de los objetos de tipo Date. Este método dejó de ser utilizable por efecto del año 2000, ya que devuelve el número de años de la fecha desde 1900, es decir, para 2015 devuelve el número 115, que no tiene ninguna utilidad.

Como este caso nos entramos con el método toGMTString() de los objetos de tipo Date, los literales con notación octal, los métodos escape() y unescape() del objeto global, etc.

Las funcionalidades de ECMA-262 5.1 que no estamos utilizando

Hay funcionalidades que se han incorporado al estándar ECMA-262 versión 5, como JSON que muchos programadores están usando desde hace ya tiempo, bien por qué han utilizado librerías que lo implementaban o bien porqué los diferentes motores de Javascript se han ido adelantando al estándar con sus implementaciones de esta funcionalidad.

Por el contrario hay bastantes funcionalidades de ECMA-262 Edición 5 que apenas son utilizadas por los programadores Javascript, e incluso nos atreveríamos a decir que apenas se conocen. Son pocos los programadores que están aprovechando las enormes posibilidades que tenemos ahora para manejar y definir objetos y sus propiedades con métodos como Object.defineProperty(), Object.freeze(), Object.preventExtensions() y Object.seal() o para crear objetos con Object.create(). Podemos definir con precisión las características de nuestros objetos.

El reto de utilizar ES6

Partiendo de esta situación llega ECMAScript 2015, los fabricantes empiezan a dar soporte a sus especificaciones y se están popularizando programas traductores de ES6 a ES5 que permiten utilizar muchas de las nuevas capacidades convirtiéndolas a Javascript interpretable por la mayoría de los navegadores y entornos.

Es posible que se terminen diferenciando dos tipos de programadores Javascript, los programadores clásicos que seguirán utilizando las funcionalidades básicas definidas en las versiones más antiguas del lenguajes y los programadores modernos, que se adentran en las nuevas capacidades de ES6, que abren ante nosotros una gran cantidad de posibilidades que ponen a nuestro alcance para hacer mejores, más completos y mantenibles desarrollos.

Cada uno de nosotros debemos decidir si adentrarnos en estas nuevas capacidades o seguir programando con Javascript como hacíamos en los 90. Está en nuestras manos.

Novedades

HTTP2 para programadores. Enviar mensajes del servidor al cliente con Server Sent Event (sin WebSockets)

HTTP2 para programadores. Enviar mensajes del servidor al cliente con Server Sent Event (sin WebSockets)

En esta charla, organizada por MadridJS, Pablo Almunia nos muestra cómo la mayoría de nosotros cuando oímos hablar por primera vez de HTTP2 nos ilusionamos con las posibilidades que presumiblemente se abrían para el desarrollo de soluciones web avanzadas y cómo muchos nos sentimos defraudados con lo que realmente se podía implementar.

En esta charla podemos ver cómo funciona el HTTP2, que debemos tener en cuenta en el servidor para hace uso de este protocolo y, sobre todo, cómo podemos enviar información desde el servidor al cliente de forma efectiva y fácil. Veremos con detenimiento cómo por medio de los Server-Sent Events (SSE) podemos recibir en el cliente datos enviados desde el servidor sin utilizar websocket, simplificando enormemente la construcción de aplicaciones con comunicación bidireccional.

Observables en Javascript con Proxies

Observables en Javascript con Proxies

En esta charla, organizada por MadridJS, Pablo Almunia nos habla de la observación reactiva de objetos en Javascript por medio de Proxy. Se describe paso a paso cómo funcionan los Proxies y en que casos pueden ser nuestro mejor aliado. Veremos que no hay que tenerles miedo, son bastante sencillos de utilizar, y nos ofrecen una gran abanico de posibilidades.

Aplicaciones JAMStack, SEO friendly y escalables con NextJS

Aplicaciones JAMStack, SEO friendly y escalables con NextJS

En esta charla de Madrid JS, Rafael Ventura nos describe las funcionalidades clave de NextJS, nos muestra en vivo cómo desarrollar una completa aplicación JAMStack con Server Side Rendering (SSR) y Static Site Generation (SSG) y termina mostrando como publicar esta aplicación en Vercel.

Stencil JS: mejora el Time To Market de tu producto, por Rubén Aguilera

Stencil JS: mejora el Time To Market de tu producto, por Rubén Aguilera

En esta charla Rubén Aguilera nos cuenta los problemas que tienen muchas empresas a la hora de sacar productos accesibles, vistosos y usables en el Time To Market que requiere Negocio y cómo podemos minimizar este tiempo gracias al DevUI con StencilJS para adecuar una aplicación de Angular a las exigencias del mercado en tiempo record.