{"id":14370,"date":"2023-01-20T08:00:27","date_gmt":"2023-01-20T06:00:27","guid":{"rendered":"https:\/\/www.espai.es\/blog\/?p=14370"},"modified":"2023-01-19T17:54:55","modified_gmt":"2023-01-19T15:54:55","slug":"es2022-novedades-de-javascript-2022","status":"publish","type":"post","link":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/","title":{"rendered":"ES2022: Novedades de JavaScript en 2022"},"content":{"rendered":"<p>Ahora que hemos dejado atr\u00e1s el a\u00f1o 2022 es un buen momento para repasar <strong>las novedades que nos ha dejado el lenguaje JavaScript<\/strong> (o EcmaScript) durante dicho a\u00f1o, es decir, vamos a repasar las <strong>novedades de ES2022<\/strong>. Es importante que <b>no teng\u00e1is prisa por hacer uso de dichas novedades<\/b> en proyectos donde no podamos garantizar que los usuarios tengan sus navegadores actualizados. Como de costumbre, nos vamos a limitar a ver <a href=\"https:\/\/github.com\/tc39\/proposals\/blob\/master\/finished-proposals.md\" target=\"_blank\" rel=\"noopener\">mejoras que han alcanzado un estado de madurez adecuado<\/a> durante dicho a\u00f1o.<\/p>\n<p>Nos encontramos ante un a\u00f1o que nos ha tra\u00eddo varias novedades, algunas mas interesantes que otras, pero nada especialmente revolucionario. Aunque <strong>vamos a repasarlas todas<\/strong>, voy a profundizar sobretodo en las novedades que considero m\u00e1s asequibles.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-class-fields\" target=\"_blank\" rel=\"noopener\">Class Fields<\/a><\/h2>\n<p>Al igual que sucede con otros lenguajes, por fin disponemos de la capacidad de <strong>declarar propiedades y m\u00e9todos privados<\/strong>. Esto <strong>nos va a permitir escribir un c\u00f3digo mas robusto y a prueba de fallos<\/strong>.<\/p>\n<p>En otros lenguajes se suele usar la palabra clave <strong><em>private<\/em> <\/strong>para definir este tipo de propiedades y m\u00e9todos, pero en el caso de ES2022 se ha optado por que <strong>el nombre de dicha propiedad o m\u00e9todo empiece por #<\/strong>.<\/p>\n<pre>class EjemploA {\r\n  propiedadPublica = 123;\r\n  #propiedadPrivada = 456;\r\n\r\n  obtenerValorPropiedadPrivada() {\r\n    return this.#propiedadPrivada;\r\n  }\r\n\r\n  #metodoPrivado() {\r\n    console.log(\"No accesible desde fuera de la clase\");\r\n  }\r\n}\r\n\r\nlet x = new EjemploA();\r\nconsole.log(x.propiedadPublica); \r\nconsole.log(x.obtenerValorPropiedadPrivada());\r\nconsole.log(x.#propieadPrivada); \/\/ dar\u00e1 error, ya que solo se puede acceder a \r\n                                 \/\/ esta propiedad desde dentro de la propia clase\r\nx.#metodoPrivado(); \/\/ dar\u00e1 error, ya que solo se puede acceder a este m\u00e9todo\r\n                    \/\/ desde dentro de la propia clase\t\t\r\n<\/pre>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-private-fields-in-in\" target=\"_blank\" rel=\"noopener\">Ergonomic brand checks for Private Fields<\/a><\/h2>\n<p>En algunas raras ocasiones puede resultar necesario <strong>comprobar si un objeto tiene una propiedad o m\u00e9todo privado<\/strong>. Esto es posible mediante la palabra clave <strong><em>in<\/em><\/strong>:<\/p>\n<pre>class EjemploB {\r\n  #propiedadPrivada;\r\n\r\n  static comprobar(obj) {\r\n    return #propiedadPrivada in obj;\r\n  }\r\n}\r\n\r\nconsole.log(EjemploB.comprobar(new EjemploB()));\r\n<\/pre>\n<p>Si no os queda clara la utilidad que pueda tener, no os preocup\u00e9is, seguramente nunca lo usareis.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-class-static-block\" target=\"_blank\" rel=\"noopener\">Class Static Block<\/a><\/h2>\n<p>Darle un valor inicial a un campo <em><strong>static<\/strong> <\/em>muchas veces consiste en indicar un valor literal y listo.<\/p>\n<p>Pero, \u00bfqu\u00e9 pasa si darle un valor es mas complicado y requiere, por ejemplo, hacer una petici\u00f3n a un servidor?<\/p>\n<p>Para estos casos, estos <b>nuevos bloques de c\u00f3digo de tipo <em>static<\/em><\/b>, nos van a permitir darle un valor de forma limpia y elegante. La idea b\u00e1sicamente es declarar la(s) propiedades(s) static sin darle(s) un valor y luego en uno de estos nuevos bloques static, se lo damos.<\/p>\n<pre>class EjemploC {\r\n  static prop1 = 123; \/\/ propiedad est\u00e1tica con un simple valor literal\r\n  static prop2; \/\/ propiedad est\u00e1tica sin valor (por ahora)\r\n  static {\r\n    \/\/ en este bloque de c\u00f3digo estatico, vamos a inicializar \r\n    \/\/ la segunda propiedad est\u00e1tica\r\n    try {\r\n      \/\/ pedimos un valor al servidor para esta propiedad\r\n      const datoDelServidor = this.obtenerDatoDelServidor(); \r\n      this.prop2 = datoDelServidor;\r\n    } catch {\r\n      \/\/ si hay cualquier problema, le damos un valor por defecto\r\n      this.prop2 = \"Valor por defecto\";\r\n    }\r\n  }\r\n}\r\n\r\n\/\/ accedemos a la segunda propiedad est\u00e1tica de la clase\r\nconsole.log(EjemploC.prop2);\r\n<\/pre>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-regexp-match-indices\" target=\"_blank\" rel=\"noopener\">RegExp Match Indices<\/a><\/h2>\n<p>Se trata de <strong>un nuevo array que almacena las posiciones inicial y final de las coincidencias encontradas mediante una expresi\u00f3n regular<\/strong> (hasta ahora solo era posible obtener las posiciones iniciales). O dicho de otro modo, cuando usemos una expresi\u00f3n regular para buscar un patr\u00f3n en un texto, podremos obtener las posiciones inicial y final de cada vez que se haya encontrado el patr\u00f3n en el texto.<\/p>\n<p>Si sigue sin quedar claro, lo mejor es ver un ejemplo:<\/p>\n<pre>let texto = \"Este texto es de ejemplo y abc contiene varias veces abc la secuencia de texto abc.\";\r\nlet expresion = \/abc\/gd;\r\nlet resultado = [...texto.matchAll(expresion)]; \/\/ array con informaci\u00f3n de cada match\r\nresultado.forEach(e =&gt; console.log(e.indices[0])); \/\/ mostramos las posiciones iniciales y finales\r\n<\/pre>\n<p>Este ejemplo mostrar\u00e1 en la consola la posici\u00f3n inicial y final de cada coincidencia de la expresi\u00f3n regular; <strong>dicha informaci\u00f3n se obtiene del nuevo array <em>indices<\/em><\/strong>.<\/p>\n<p>Para que funcione, en la expresi\u00f3n regular <strong>debemos de hacer uso del nuevo <em>flag<\/em> \/d<\/strong>.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-top-level-await\" target=\"_blank\" rel=\"noopener\">Top-level await<\/a><\/h2>\n<p>Si hab\u00e9is usado <a href=\"https:\/\/www.espai.es\/blog\/2019\/02\/promesas-en-javascript\/\" target=\"_blank\" rel=\"noopener\">promesas en JavaScript<\/a> y <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> ya sabr\u00e9is que para poder usar <strong><em>await<\/em> <\/strong>es necesario que nos encontremos dentro de una funci\u00f3n <strong><em>async<\/em><\/strong>.<\/p>\n<p>Esta novedad b\u00e1sicamente consiste en que <strong>un m\u00f3dulo de JavaScript hace la funci\u00f3n de \u00abfunci\u00f3n asincrona\u00bb, por lo que podemos usar <em>await<\/em> sin necesidad de definir una func\u00ed\u00f3n asincrona<\/strong>.<\/p>\n<p>Insisto, esto <strong>solo funciona si estamos usando m\u00f3dulos<\/strong>.<\/p>\n<p>\u00bfY para que sirve esto?<\/p>\n<p>Aqu\u00ed ten\u00e9is <a href=\"https:\/\/github.com\/tc39\/proposal-top-level-await#use-cases\" target=\"_blank\" rel=\"noopener\">varios posibles casos de uso<\/a> de esta nueva funcionalidad.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-relative-indexing-method\" target=\"_blank\" rel=\"noopener\">.at()<\/a><\/h2>\n<p>B\u00e1sicamente es <strong>una forma alternativa y m\u00e1s flexible de acceder a los elementos de un array<\/strong> de JavaScript (ojo, que tambi\u00e9n funciona con <strong><em>strings<\/em><\/strong>).<\/p>\n<p>Si alguna vez hab\u00e9is usado <em><strong>python<\/strong><\/em> es probable que os resulte familiar esta forma de trabajar.<\/p>\n<p>Lo mejor es ver un ejemplo:<\/p>\n<pre>let arr = [\"a\", \"b\", \"c\", \"d\"];\r\nlet primero1 = arr[0];    \/\/ sin usar .at()\r\nlet primero2 = arr.at(0); \/\/ lo mismo usando .at()\r\nlet ultimo1 = arr[arr.length-1]; \/\/ sin usar .at()\r\nlet ultimo2 = arr.at(-1);        \/\/ lo mismo usando .at()\r\n\r\nconsole.log(primero1 + \" = \" + primero2);\r\nconsole.log(ultimo1 + \" = \" + ultimo2);\r\n<\/pre>\n<p>Tal y como se puede ver, <strong>la gracia esta en la posibilidad de usar valores negativos para acceder a los elementos del array<\/strong>, solo que empezando por el final del array, de modo que el \u00edndice -1 seria el \u00faltimo elemento, el -2 el pen\u00faltimo, etc.<\/p>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-accessible-object-hasownproperty\" target=\"_blank\" rel=\"noopener\">Accessible Object.prototype.hasOwnProperty<\/a><\/h2>\n<p>Esta novedad simplemente consiste en que <strong>la clase <em>Object<\/em> ahora tiene un m\u00e9todo est\u00e1tico llamado <em>hasOwn()<\/em> que hace lo mismo que el m\u00e9todo <em>Object.prototype.hasOwnProperty()<\/em>.<\/strong><\/p>\n<p>Y, \u00bfpara que sirven esos m\u00e9todos?<\/p>\n<p>Pues sirven <strong>para saber si un objeto tiene una propiedad o m\u00e9todo<\/strong>.<\/p>\n<pre>let obj = { patata: 123, saluda: () =&gt; alert(\"hola\") };\r\nconsole.log( Object.hasOwn(obj, \"patata\") );   \/\/ true\r\nconsole.log( Object.hasOwn(obj, \"croqueta\") ); \/\/ false\r\nconsole.log( Object.hasOwn(obj, \"saluda\") );   \/\/ true\r\nobj.saluda();\r\n<\/pre>\n<h2><a href=\"https:\/\/github.com\/tc39\/proposal-error-cause\" target=\"_blank\" rel=\"noopener\">Error Cause<\/a><\/h2>\n<p>Tal y como vimos en las <a href=\"https:\/\/www.espai.es\/blog\/2021\/07\/es2021-novedades-de-javascript-2021\/\" target=\"_blank\" rel=\"noopener\">novedades de ES2021<\/a>, existe una nueva clase llamada <em><strong>AggregateError<\/strong> <\/em>que viene a ser una especie de array con varios errores. Esta clase es \u00fatil para obtener todos los posibles errores y no solo el \u00faltimo, cuando intentamos resolver varias promesas.<\/p>\n<p>Esta nueva novedad llamada \u00abError Cause\u00bb tambi\u00e9n nos va a permitir \u00abcoleccionar errores\u00bb, pero es m\u00e1s \u00fatil <strong>para profundizar en un error<\/strong> que para recolectar varios.<\/p>\n<p>Concretamente, <strong>esta novedad consiste en a\u00f1adir un segundo par\u00e1metro al constructor de la clase <em>Error<\/em><\/strong>. <b>Dicho par\u00e1metro es un objeto que puede contener varias propiedades, entre ellas, la causa del error<\/b>. Dicha causa se guardar\u00e1 como propiedad en la instancia del objeto de la clase <strong><em>Error<\/em><\/strong>.<\/p>\n<p>Para que quede claro, lo mejor como de costumbre es ver un ejemplo:<\/p>\n<pre>function hacerCosas1() {\r\n  try {\r\n    throw new Error(\"Error #1\");\r\n  } \r\n  catch (e) {\r\n    throw new Error(\"Error #2\", { cause: e });\r\n  }\t\t\t\r\n}\r\n\r\nfunction hacerCosas2() {\r\n  try {\r\n    hacerCosas1();\t\t\t\t\r\n  }\r\n  catch (e) {\r\n    throw new Error(\"Error #3\", { cause: e });\r\n  }\t\t\t\t\t\t\r\n}\r\n\r\ntry {\r\n  hacerCosas2();\r\n} catch (e) {\r\n  \/\/ en cada error tenemos su causa\r\n  while (e) {\r\n    \/\/ mostramos el mensaje de error en la consola\r\n    console.log(e.message);\r\n    \/\/ siguiente error (su causa)\r\n    e = e.cause;\r\n  }\r\n}\r\n<\/pre>\n<p>Tal y como se puede ver en este ejemplo, <strong>si cada vez que capturamos un error, generamos otro y nos guardamos el original como causa del nuevo error, <\/strong>podemos ir saltando de una causa a otra y de este modo comprender en profundidad un error.<\/p>\n<h2>Conclusion<\/h2>\n<p><strong>ES2022<\/strong> ofrece algunas novedades interesantes. Personalmente lo m\u00e1s interesante a mi ver es el <strong>.at()<\/strong>, el <strong>\u00aberror cause\u00bb<\/strong> y sobretodo las <strong>propiedades y m\u00e9todos privados<\/strong>.<\/p>\n<p>Si te has quedado con ganas de m\u00e1s novedades, 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\/07\/es2021-novedades-de-javascript-2021\/\" target=\"_blank\" rel=\"noopener\">novedades de ES2021<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ahora que hemos dejado atr\u00e1s el a\u00f1o 2022 es un buen momento para repasar las novedades que nos ha dejado el lenguaje JavaScript (o EcmaScript) durante dicho a\u00f1o, es decir, vamos a repasar las novedades de ES2022. Es importante que no teng\u00e1is prisa por hacer&#8230;<\/p>\n","protected":false},"author":23,"featured_media":14391,"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-14370","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>ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai<\/title>\n<meta name=\"description\" content=\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.\" \/>\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\/2023\/01\/es2022-novedades-de-javascript-2022\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai\" \/>\n<meta property=\"og:description\" content=\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Escola Espai\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-20T06:00:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.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\/2023\/01\/es2022-novedades-de-javascript-2022\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\"},\"author\":{\"name\":\"Abel Camarena\",\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"headline\":\"ES2022: Novedades de JavaScript en 2022\",\"datePublished\":\"2023-01-20T06:00:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\"},\"wordCount\":966,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg\",\"keywords\":[\"javascript\"],\"articleSection\":[\"Dise\u00f1o Web\",\"Programaci\u00f3n\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\",\"url\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\",\"name\":\"ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai\",\"isPartOf\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg\",\"datePublished\":\"2023-01-20T06:00:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897\"},\"description\":\"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage\",\"url\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg\",\"contentUrl\":\"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg\",\"width\":1000,\"height\":500,\"caption\":\"Novedades ES2022\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.espai.es\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ES2022: Novedades de JavaScript en 2022\"}]},{\"@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":"ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai","description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.","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\/2023\/01\/es2022-novedades-de-javascript-2022\/","og_locale":"es_ES","og_type":"article","og_title":"ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai","og_description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.","og_url":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/","og_site_name":"Blog Escola Espai","article_published_time":"2023-01-20T06:00:27+00:00","og_image":[{"width":1000,"height":500,"url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.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\/2023\/01\/es2022-novedades-de-javascript-2022\/#article","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/"},"author":{"name":"Abel Camarena","@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"headline":"ES2022: Novedades de JavaScript en 2022","datePublished":"2023-01-20T06:00:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/"},"wordCount":966,"commentCount":0,"image":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg","keywords":["javascript"],"articleSection":["Dise\u00f1o Web","Programaci\u00f3n"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/","url":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/","name":"ES2022: Novedades de JavaScript en 2022 - Blog Escola Espai","isPartOf":{"@id":"https:\/\/www.espai.es\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage"},"image":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage"},"thumbnailUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg","datePublished":"2023-01-20T06:00:27+00:00","author":{"@id":"https:\/\/www.espai.es\/blog\/#\/schema\/person\/b2d40404b9d987e3586e186c021ef897"},"description":"JavaScript es un lenguaje vivo y cada a\u00f1o recibe novedades. En este art\u00edculo vamos a ver las novedades del a\u00f1o 2022, es decir, ES2022.","breadcrumb":{"@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#primaryimage","url":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg","contentUrl":"https:\/\/www.espai.es\/blog\/wp-content\/uploads\/2023\/01\/novedades-es2022.jpg","width":1000,"height":500,"caption":"Novedades ES2022"},{"@type":"BreadcrumbList","@id":"https:\/\/www.espai.es\/blog\/2023\/01\/es2022-novedades-de-javascript-2022\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.espai.es\/blog\/"},{"@type":"ListItem","position":2,"name":"ES2022: Novedades de JavaScript en 2022"}]},{"@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\/2023\/01\/novedades-es2022.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14370","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=14370"}],"version-history":[{"count":17,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14370\/revisions"}],"predecessor-version":[{"id":14393,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/posts\/14370\/revisions\/14393"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media\/14391"}],"wp:attachment":[{"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/media?parent=14370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/categories?post=14370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.espai.es\/blog\/wp-json\/wp\/v2\/tags?post=14370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}