{"id":12314,"date":"2021-09-15T17:20:11","date_gmt":"2021-09-15T15:20:11","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=12314"},"modified":"2021-11-17T18:03:07","modified_gmt":"2021-11-17T16:03:07","slug":"es2020-novedades-de-javascript-en-2020","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/","title":{"rendered":"ES2020: Novedades de JavaScript en 2020"},"content":{"rendered":"<p>Este es el segundo de una serie de art\u00edculos donde vamos a repasar <a href=\"https:\/\/github.com\/tc39\/proposals\/blob\/master\/finished-proposals.md\" target=\"_blank\" rel=\"noopener\">las novedades de los \u00faltimos a\u00f1os en JavaScript<\/a>. En el anterior art\u00edculo ya vimos las <a href=\"https:\/\/www.espai.es\/blog\/2021\/07\/es2021-novedades-de-javascript-2021\/\">novedades de JavaScript en 2021<\/a>, en este art\u00edculo cogeremos el DeLorean para viajar un a\u00f1o en el pasado y repasar las novedades de JavaScript en 2020, es decir, las novedades de <strong>ES2020<\/strong>.<\/p>\n<p>Al igual que en el anterior art\u00edculo, me voy a centrar exclusivamente en aquellas novedades de ES2020 que sean m\u00e1s asequibles. Las novedades que impliquen un uso avanzado del lenguaje las comentar\u00e9 simplemente de pasada.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-string-matchall\" target=\"_blank\" rel=\"noopener\">String.prototype.matchAll<\/a><\/h2>\n<p>Este nuevo m\u00e9todo de las cadenas de texto, nos permite comprobar si dicha cadena de texto concuerda con una expresi\u00f3n regular, cosa que ya hacia el m\u00e9todo match(), pero en este caso nos indica las diferentes coincidencias que encuentra.<\/p>\n<p>Como de costumbre, lo mejor es ver un ejemplo:<\/p>\n<pre>var re = \/\\d\/g; \/\/ expresi\u00f3n regular para buscar un n\u00famero\r\nvar str = \"El primer n\u00famero es 5 y el segundo 8\";\r\nvar iterator = str.matchAll(re);\r\nfor (var match of iterator) { console.log(match); }<\/pre>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-dynamic-import\" target=\"_blank\" rel=\"noopener\">import()<\/a><\/h2>\n<p>Sirve para importar m\u00f3dulos de forma din\u00e1mica (bajo demanda), ya que la implementaci\u00f3n convencional es est\u00e1tica y el modulo se importa si o si, mientras que de este modo podemos condicionar su carga si hace falta.<\/p>\n<p>Tenemos que esta expresi\u00f3n (aunque lo parezca no es una funci\u00f3n o m\u00e9todo) indicando como par\u00e1metro la URL del m\u00f3dulo que queremos cargar, y nos devolver\u00e1 una <a href=\"https:\/\/www.espai.es\/blog\/2019\/02\/promesas-en-javascript\/\" target=\"_blank\" rel=\"noopener\">promesa<\/a>.<\/p>\n<pre>if (condicion) {\r\n  import(url)\r\n    .then(module =&gt; { \r\n      module.ejemploDeFuncionExportada();\r\n      module.default(); \r\n    })\r\n    .catch(err =&gt; { \r\n      document.write(err.message); \r\n    });\r\n}\r\n<\/pre>\n<p>Si dicha promesa se resuleve satisfactoriamente, tendremos un objeto (module) con todos los exports de dicho m\u00f3dulo. Si queremos acceder a una funci\u00f3n exportada por defecto, podemos usar module.default(); en lugar de indicar su nombre.<\/p>\n<p>Como son promesas, podemos usar <a href=\"https:\/\/www.espai.es\/blog\/2019\/05\/async-await-otra-forma-de-usar-promesas-en-javascript\/\" target=\"_blank\" rel=\"noopener\">async\/await<\/a> para simplificar el c\u00f3digo.<\/p>\n<pre>  async function ejemplo() { \/\/ funci\u00f3n as\u00edncrona!\r\n    try {\r\n      var module = await import(url);\r\n      module.ejemploDeFuncionExportada();\r\n      module.default();\r\n    } catch(err) {\r\n      document.write(err.message);        \r\n    }   \r\n  }\r\n  if (condicion) { ejemplo(); }\r\n<\/pre>\n<p>NOTA: A diferencia del import \u00abnormal\u00bb, con este import() din\u00e1mico se pueden cargar tambi\u00e9n scripts convencionales.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-bigint\" target=\"_blank\" rel=\"noopener\">BigInt<\/a><\/h2>\n<p>Un nuevo tipo de dato que soporta n\u00fameros enteros superiores a 2<sup>53<\/sup> que es el m\u00e1ximo que soporta el tipo de dato Number (osea, el valor de Number.MAX_SAFE_INTEGER, que concretamente es 9007199254740991).<\/p>\n<p>Se puede crear simplemente a\u00f1adiendo una \u00abn\u00bb al final del numero o bien usando el constructor BigInt()<\/p>\n<pre>var x = 1n; \/\/ ejemplo de un bigint<\/pre>\n<p><strong>Solo es recomendable usarlos si tenemos realmente la necesidad de hacerlo<\/strong>, y como es muy raro que teng\u00e1is ese necesidad, no vamos a entrar en detalle.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-promise-allSettled\" target=\"_blank\" rel=\"noopener\">Promise.allSettled()<\/a><\/h2>\n<p>Es un m\u00e9todo est\u00e1tico de la clase <strong>Promise<\/strong>, muy similar al m\u00e9todo est\u00e1tico <em><strong>all()<\/strong><\/em> de dicha clase.<\/p>\n<p>La diferencia es que este m\u00e9todo solo termina cuando todas las promesas han sido procesadas (es decir, no queda ninguna pendiente) <strong>independientemente de que hayan sido aceptadas o rechazadas<\/strong>. Cosa que no sucede con el m\u00e9todo <em><strong>all()<\/strong><\/em>, que termina si se produce cualquier rechazo o error.<\/p>\n<p>Por lo dem\u00e1s, el m\u00e9todo <strong><em>allSettled()<\/em><\/strong> funciona exactamente igual que el m\u00e9todo <strong><em>all()<\/em><\/strong>, as\u00ed que, para m\u00e1s detalles sobre su uso os recomiendo el art\u00edculo que hice sobre <a href=\"https:\/\/www.espai.es\/blog\/2019\/02\/promesas-en-javascript\/\" target=\"_blank\" rel=\"noopener\">promesas en JavaScript<\/a> donde se explican las promesas y este m\u00e9todo est\u00e1tico.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-global\" target=\"_blank\" rel=\"noopener\">globalThis<\/a><\/h2>\n<p>En el navegador Web el objeto global es <em><strong>window<\/strong><\/em>, en <a href=\"https:\/\/nodejs.org\/es\/\" target=\"_blank\" rel=\"noopener\">Node.js<\/a> es <em><strong>global<\/strong> <\/em>y en un <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Web_Workers_API\/Using_web_workers\" target=\"_blank\" rel=\"noopener\">WebWorker<\/a> es <em><strong>self<\/strong><\/em>.<\/p>\n<p>Para evitar l\u00edos tenemos <strong><em>globalThis<\/em><\/strong>, que equivale a cualquiera de los 3 seg\u00fan donde se ejecute el c\u00f3digo.<\/p>\n<p>Esto facilita la portabilidad del c\u00f3digo de un entorno a otro.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-for-in-order\" target=\"_blank\" rel=\"noopener\">for-in mechanics<\/a><\/h2>\n<p>Los bucle for-in sirven para recorrerse las propiedades de un objeto, y la especificaci\u00f3n original indicaba que el orden en el que recorrian dichos atributos era arbitrario.<\/p>\n<pre>var objeto = { a: 1, b: 2 }\r\nfor (atributo in objeto) { console.log(atributo, \" = \", objeto[atributo]); }\r\n<\/pre>\n<p>Aunque los motores de los navegadores sol\u00edan ser consistentes en dicho orden, ahora la especificaci\u00f3n determina un orden concreto para evitar problemas, como por ejemplo, los derivados de a\u00f1adir o eliminar propiedades durante el bucle.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-optional-chaining\" target=\"_blank\" rel=\"noopener\">Optional Chaining<\/a><\/h2>\n<p>En mi opini\u00f3n, de las novedades m\u00e1s interesantes de ES2020.<\/p>\n<p>Se trata de un nuevo operador ?. (interrogante + punto) para acceder a propiedades de objetos.<\/p>\n<p>Cuando intentamos acceder a la propiedad de un objeto que no existe, recibimos un bonito error. Con el <strong>optional chaining<\/strong>, podemos recibir un undefined en su lugar. Es sobretodo \u00fatil para acceder a estructuras de tipo \u00e1rbol sin miedo a que se encuentren incompletas.<\/p>\n<p>Su uso es muy sencillo:<\/p>\n<pre>var padre = { hijo : { nieto : {} } };\r\nconsole.log(padre.hijo.nieto.bisnieto.tataranieto); \/\/ esto da error, porque intentamos accecer a una propiedad de un objeto (bisnieto) que no existe\r\nconsole.log(padre.hijo.nieto.bisnieto?.tataranieto); \/\/ esto NO da error, simplemente devuelve un undefined porque bisnieto no existe (y por lo tanto sus propiedades tampoco)\r\n<\/pre>\n<p>Como pod\u00e9is ver es tan sencillo como colocar un ? al final de la propiedad que nos interesa que no de error si no existe.<\/p>\n<p>Veamos otro ejemplo:<\/p>\n<pre>console.log(document.querySelector(\"#patata\")?.innerText); \/\/ no da error aunque no encuentre el elemento!\r\n<\/pre>\n<p>Tambien sirve para funciones y arrays:<\/p>\n<pre>window.pintar(100, 200); \/\/ el m\u00e9todo pintar no existe en window, da error\r\nwindow.pintar?.(100, 200); \/\/ no da error\r\nwindow.coches[0]; \/\/ window no tiene un array llamado coches, da error\r\nwindow.coches?.[0]; \/\/ no da error.\r\n<\/pre>\n<p>Seguro que hab\u00e9is tenido este tipo de problema m\u00e1s de una vez, \u00bfa que si?<\/p>\n<p>Ten\u00e9is m\u00e1s informaci\u00f3n en la <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Operators\/Optional_chaining\" target=\"_blank\" rel=\"noopener\">MDN<\/a>.<\/p>\n<h2><a href=\"http:\/\/Nullish Coalescing Operator\" target=\"_blank\" rel=\"noopener\">Nullish Coalescing Operator<\/a><\/h2>\n<p>Otra novedad muy interesante de ES2020. De nuevo se trata de otro operador, esta vez es el operador ?? (dos interrogantes) que funciona con dos operandos. Comprueba si el primer operando es <strong><em>null<\/em> <\/strong>o <strong><em>undefined<\/em><\/strong>, y en caso afirmativo, la expresi\u00f3n devuelve el segundo operando.<\/p>\n<pre>var a = null;\r\nvar b = \"hola\";\r\nvar c = false;\r\nconsole.log(a ?? b); \/\/ a ?? b devuelve el valor de \"b\", ya que \"a\" vale null\/undefined\r\nconsole.log(c ?? b); \/\/ c ?? b devuelve el valor de \"c\", ya que \"c\" NO vale null\/undefined\r\n<\/pre>\n<p>Es algo bastante \u00fatil para definir valores por defecto:<\/p>\n<pre>function saluda(nombre) {\r\n  alert(\"Hola \" + (nombre ?? \"Alumno\"));\r\n}\r\nsaluda();\r\nsaluda(\"Pepe\");\r\n<\/pre>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-import-meta\" target=\"_blank\" rel=\"noopener\">import.meta<\/a><\/h2>\n<p>Y terminamos el repaso a las novedades de ES2020, con otra novedad relacionada con los m\u00f3dulos.<\/p>\n<p>En este caso se trata de una propiedad que almacena informaci\u00f3n sobre el m\u00f3dulo que puede resultarnos \u00fatil, como por ejemplo, la URL de dicho m\u00f3dulo. Y en dicha URL se incluyen posibles par\u00e1metros que le podamos haber indicando, por lo que es una forma de poder pasarle diferentes par\u00e1metros a un m\u00f3dulo al importarlo.<\/p>\n<p>Por ejemplo, imaginemos el siguiente m\u00f3dulo llamado saluda.js<\/p>\n<pre>export default function saluda() {\r\n\t\/\/ mostramos la URL en la consola\r\n\tconsole.log(import.meta.url);\r\n\t\/\/ pillamos los datos de la URL\r\n\tvar params = new URL(import.meta.url).searchParams;\r\n\talert(params.get('nombre') + \" \" + params.get('apellido'));\t\r\n}\r\n<\/pre>\n<p>Despu\u00e9s, podemos usar dicho m\u00f3dulo de este modo:<\/p>\n<pre>import saluda from '.\/saluda.js?nombre=Abel&amp;apellido=Camarena';\r\nsaluda();\r\n<\/pre>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Sin lugar a dudas ES2020 incluye algunas novedades muy interesantes como la de \u00abNullish Coalescing Operator\u00bb y la de \u00abOptional Chaining\u00bb.<\/p>\n<p>Si te has quedado con ganas de m\u00e1s, puedes echarle un vistazo al art\u00edculo con las novedades del a\u00f1o anterior, es decir, con las <a href=\"https:\/\/www.espai.es\/blog\/2021\/11\/es2019-novedades-de-javascript-en-2019\/\" target=\"_blank\" rel=\"noopener\">novedades de ES2019<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este es el segundo de una serie de art\u00edculos donde vamos a repasar las novedades de los \u00faltimos a\u00f1os en JavaScript. En el anterior art\u00edculo ya vimos las novedades de JavaScript en 2021, en este art\u00edculo cogeremos el DeLorean para viajar un a\u00f1o en el&#8230;<\/p>\n","protected":false},"author":23,"featured_media":12336,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_ef_editorial_meta_date_first-draft-date":"","_ef_editorial_meta_paragraph_assignment":"","_ef_editorial_meta_checkbox_needs-photo":"","_ef_editorial_meta_number_word-count":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7,5],"tags":[253],"class_list":["post-12314","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-diseno-web","category-programacion","tag-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-15T15:20:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-17T16:03:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Abel Camarena\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Abel Camarena\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\"},\"author\":{\"name\":\"Abel Camarena\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"headline\":\"ES2020: Novedades de JavaScript en 2020\",\"datePublished\":\"2021-09-15T15:20:11+00:00\",\"dateModified\":\"2021-11-17T16:03:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\"},\"wordCount\":968,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg\",\"keywords\":[\"javascript\"],\"articleSection\":[\"Dise\u00f1o Web\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\",\"name\":\"ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg\",\"datePublished\":\"2021-09-15T15:20:11+00:00\",\"dateModified\":\"2021-11-17T16:03:07+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"description\":\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg\",\"width\":1000,\"height\":500,\"caption\":\"ES2020\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ES2020: Novedades de JavaScript en 2020\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.espai.es\/blog\/#website\",\"url\":\"https:\/\/www.espai.es\/blog\/\",\"name\":\"Blog Escola Espai\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.espai.es\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\",\"name\":\"Abel Camarena\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g\",\"caption\":\"Abel Camarena\"},\"sameAs\":[\"http:\/\/www.espai.es\"],\"url\":\"https:\/\/www.espai.es\/blog\/author\/abel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai","description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/","og_locale":"es_ES","og_type":"article","og_title":"ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai","og_description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.","og_url":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/","og_site_name":"Blog Escola Espai","article_published_time":"2021-09-15T15:20:11+00:00","article_modified_time":"2021-11-17T16:03:07+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","type":"image\/jpeg"}],"author":"Abel Camarena","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Abel Camarena","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/"},"author":{"name":"Abel Camarena","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"headline":"ES2020: Novedades de JavaScript en 2020","datePublished":"2021-09-15T15:20:11+00:00","dateModified":"2021-11-17T16:03:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/"},"wordCount":968,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","keywords":["javascript"],"articleSection":["Dise\u00f1o Web","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/","url":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/","name":"ES2020: Novedades de JavaScript en 2020 - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","datePublished":"2021-09-15T15:20:11+00:00","dateModified":"2021-11-17T16:03:07+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe algunas novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2020, es decir, ES2020.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","width":1000,"height":500,"caption":"ES2020"},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2021\/09\/es2020-novedades-de-javascript-en-2020\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"ES2020: Novedades de JavaScript en 2020"}]},{"@type":"WebSite","@id":"https:\/\/www.espai.es\/blog\/#website","url":"https:\/\/www.espai.es\/blog\/","name":"Blog Escola Espai","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.espai.es\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897","name":"Abel Camarena","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/035501b0f14e120b1a49121758e2056b8d589fc43b9d3c3ad3670a197a90dddf?s=96&d=mm&r=g","caption":"Abel Camarena"},"sameAs":["http:\/\/www.espai.es"],"url":"https:\/\/www.espai.es\/blog\/author\/abel\/"}]}},"jetpack_featured_media_url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2021\/09\/es2020.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/comments?post=12314"}],"version-history":[{"count":23,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12314\/revisions"}],"predecessor-version":[{"id":12658,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/12314\/revisions\/12658"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/12336"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=12314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=12314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=12314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}