{"id":14198,"date":"2024-10-01T19:35:16","date_gmt":"2024-10-01T17:35:16","guid":{"rendered":"https:\/\/xn--nicols-tta.es\/?p=14198"},"modified":"2024-10-01T19:35:16","modified_gmt":"2024-10-01T17:35:16","slug":"javascript-moderno","status":"publish","type":"post","link":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/","title":{"rendered":"JavaScript Moderno"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-left\">JavaScript Moderno Gu\u00eda Definitiva<\/h2>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\">JavaScript Moderno \u2013 Imports, Exports, Let, Const, y Promesas en ES6+<\/h3>\n\n\n\n<!--more-->\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"750\" height=\"421\" src=\"https:\/\/nicolas.cat\/wp-content\/uploads\/2024\/10\/bbva-open4u-javascript.jpg\" alt=\"\" class=\"wp-image-14205\" srcset=\"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/bbva-open4u-javascript.jpg 750w, https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/bbva-open4u-javascript-300x168.jpg 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Durante los \u00faltimos a\u00f1os han habido muchas actualizaciones en el lenguaje de JavaScript. Siendo estas muy \u00fatiles para los que buscan mejorar como programador.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Mantenerse al d\u00eda con los nuevos desarrollos del lenguaje es realmente importante. Puede ayudarte a conseguir un trabajo mejor remunerado, mantenerte actualizado con las ultimas tendencias, mejorar la calidad de tu c\u00f3digo, y sobresalir en tu trabajo actual.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Y sin lugar a dudas necesitas conocer las funcionalides m\u00e1s recientes si est\u00e1s tratando de aprender una librer\u00eda de JavaScript como React o un framework como Angular o Vue.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Recientemente, el lenguaje de JavaScript ha recibido muchas adiciones \u00fatiles, como&nbsp;<strong>encadenamiento opcional<\/strong>,&nbsp;<strong>promesas<\/strong>,&nbsp;<strong>async\/await<\/strong>,&nbsp;<strong>desestructuraci\u00f3n<\/strong>, y m\u00e1s.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Hoy veremos algunos de estos conceptos, los cuales todo desarrollador de JavaScript deber\u00eda conocer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"384\" height=\"228\" src=\"https:\/\/nicolas.cat\/wp-content\/uploads\/2024\/10\/Jsm.jpg\" alt=\"\" class=\"wp-image-14202\" style=\"width:657px;height:auto\" srcset=\"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/Jsm.jpg 384w, https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/Jsm-300x178.jpg 300w\" sizes=\"(max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">\u00a1Empecemos!<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"let-y-const-en-javascript\"><strong>Let y const en JavaScript<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-left\">Antes de ES6, JavaScript usaba la palabra clave&nbsp;<code>var<\/code>&nbsp;la cual solo cuenta con un \u00e1mbito global o funcional. El \u00e1mbito de bloque no exist\u00eda.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Con la adici\u00f3n de&nbsp;<code>let<\/code>&nbsp;y&nbsp;<code>const<\/code>&nbsp;JavaScript incorpor\u00f3 este \u00faltimo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"como-usar-let-en-javascript\"><strong>Como usar let en JavaScript<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Cuando declaramos una variable usando la palabra clave&nbsp;<code>let<\/code>, podemos&nbsp;<strong>asignar&nbsp;<\/strong>m\u00e1s tarde un nuevo valor a dicha variable, pero no podemos&nbsp;<strong>re-declararla<\/strong>&nbsp;con el mismo nombre.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES5<br \/>var valor = 10;<br \/>console.log(valor); \/\/ 10<br \/><br \/>var valor = \u00abhola\u00bb;<br \/>console.log(valor); \/\/ hola<br \/><br \/>var valor = 30;<br \/>console.log(valor); \/\/ 30<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver arriba, hemos vuelto a declarar la variable&nbsp;<code>valor<\/code>&nbsp;usando la palabra clave&nbsp;<code>var<\/code>&nbsp;repetidas veces.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Antes de ES6, pudimos volver a declarar una variable que ya hab\u00eda sido declarada antes si esta no se usaba de manera significativa y en cambio causaba confusi\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Pero, \u00bfy si ya tuvi\u00e9ramos una variable declarada con el mismo nombre en otro lugar y la volvemos a declarar sin darnos cuenta? Entonces podr\u00edamos sobrescribir el valor de la variable, causando algunos problemas dif\u00edciles de depurar.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Usando la palabra clave&nbsp;<code>let<\/code>, si intentas volver a declarar la variable con el mismo nombre obtendr\u00e1s un error \u2013 lo cual es bueno.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES6<br \/>let valor = 10;<br \/>console.log(valor); \/\/ 10<br \/><br \/>let valor = \u00abhola\u00bb; \/\/ Uncaught SyntaxError: Identifier &#8216;valor&#8217; has already been declared<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero, el siguiente c\u00f3digo es v\u00e1lido:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES6<br \/>let valor = 10;<br \/>console.log(valor); \/\/ 10<br \/><br \/>valor = \u00abhola\u00bb;<br \/>console.log(valor); \/\/ hola<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">No obtenemos un error en el c\u00f3digo anterior porque estamos&nbsp;<strong>re-asignando<\/strong>&nbsp;un nuevo valor a la variable&nbsp;<code>valor<\/code>. Pero&nbsp;<strong>no&nbsp;<\/strong>estamos<strong>&nbsp;re-declarando<\/strong>&nbsp;<code>valor<\/code>&nbsp;de nuevo.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Ahora, observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES5<br \/>var esValido = true;<br \/>if(esValido) {<br \/>  var numero = 10;<br \/>  console.log(&#8216;dentro:&#8217;, numero); \/\/ dentro: 10<br \/>}<br \/>console.log(&#8216;fuera:&#8217;, numero); \/\/ fuera: 10<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver en este c\u00f3digo, cuando declaramos una variable con la palabra clave&nbsp;<code>var<\/code>, esta se encuentra disponible dentro y fuera del bloque&nbsp;<code>if<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Ahora, observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ ES6 Code<br \/>let esValido = true;<br \/>if(esValido) {<br \/>  let numero = 10;<br \/>  console.log(&#8216;dentro:&#8217;, numero); \/\/ dentro: 10<br \/>}<br \/><br \/>console.log(&#8216;fuera:&#8217;, numero); \/\/ Uncaught ReferenceError: numero is not defined<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, al declarar la variable&nbsp;<code>numero<\/code>&nbsp;usando la palabra clave&nbsp;<code>let<\/code>&nbsp;esta solo es accesible dentro del bloque&nbsp;<code>if<\/code>. No est\u00e1 disponible fuera del bloque, por lo que obtuvimos un error de referencia cuando intentamos acceder a ella fuera del bloque&nbsp;<code>if<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Pero si hay una variable&nbsp;<code>numero<\/code>&nbsp;fuera del bloque&nbsp;<code>if<\/code>, funcionar\u00e1 como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES6<br \/>let esValido = true;<br \/>let numero = 20;<br \/><br \/>if(esValido) {<br \/>  let numero = 10;<br \/>  console.log(&#8216;dentro:&#8217;, numero); \/\/ dentro: 10<br \/>}<br \/><br \/>console.log(&#8216;fuera:&#8217;, numero); \/\/ fuera: 20<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">En este caso tenemos dos variables&nbsp;<code>numero<\/code>&nbsp;con un \u00e1mbito distinto. Por lo que fuera del bloque&nbsp;<code>if<\/code>, el valor&nbsp;<code>numero<\/code>&nbsp;ser\u00e1 20.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES5<br \/>for(var i = 0; i &lt; 10; i++){<br \/> console.log(i);<br \/>}<br \/>console.log(&#8216;fuera:&#8217;, i); \/\/ 10<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Al usar la palabra clave&nbsp;<code>var<\/code>,&nbsp;<code>i<\/code>&nbsp;est\u00e1 disponible incluso fuera del bucle&nbsp;<code>for<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES6<br \/>for(let i = 0; i &lt; 10; i++){<br \/> console.log(i);<br \/>}<br \/><br \/>console.log(&#8216;fuera:&#8217;, i); \/\/ Uncaught ReferenceError: i is not defined<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">En cambio al usar&nbsp;<code>let<\/code>, esta no est\u00e1 disponible fuera del bucle.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Entonces como pudiste ver en los ejemplos de c\u00f3digo anteriores, usar&nbsp;<code>let<\/code>&nbsp;hace la variable accesible solo dentro de ese bloque y no desde fuera del mismo.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Tambi\u00e9n podemos crear un bloque con un par de llaves como esta:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>let i = 10;<br \/>{<br \/> let i = 20;<br \/> console.log(&#8216;dentro:&#8217;, i); \/\/ dentro: 20<br \/> i = 30;<br \/> console.log(&#8216;i de nuevo:&#8217;, i); \/\/ i de nuevo: 30<br \/>}<br \/><br \/>console.log(&#8216;fuera:&#8217;, i); \/\/ fuera: 10<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Si recuerdas, coment\u00e9 que no podemos re-declarar una variable basada en&nbsp;<code>let<\/code>&nbsp;en el mismo bloque, pero podemos re-declararla en otro bloque. Como puedes ver en el c\u00f3digo anterior, re-declaramos&nbsp;<code>i<\/code>&nbsp;y asignamos un nuevo valor de&nbsp;<code>20<\/code>&nbsp;dentro del bloque. Una vez declarada, ese valor de la variable estar\u00e1 disponible solo en ese bloque.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Fuera del bloque, cuando imprimimos esa variable, obtuvimos&nbsp;<code>10<\/code>&nbsp;en lugar de&nbsp;<code>30<\/code>&nbsp;que fue el valor previamente asignado, ya que fuera del bloque la variable interior&nbsp;<code>i<\/code>&nbsp;no existe.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Si no tenemos la variable&nbsp;<code>i<\/code>&nbsp;declarada afuera, obtendremos un error como puedes ver en el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>{<br \/> let i = 20;<br \/> console.log(&#8216;dentro:&#8217;, i); \/\/ dentro: 20<br \/> i = 30;<br \/> console.log(&#8216;i de nuevo:&#8217;, i); \/\/ i de nuevo: 30<br \/>}<br \/><br \/>console.log(&#8216;fuera:&#8217;, i); \/\/ Uncaught ReferenceError: i is not defined<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"como-usar-const-en-javascript\"><strong>Como usar const en JavaScript<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">La palabra clave&nbsp;<code>const<\/code>&nbsp;funciona exactamente igual que la palabra clave&nbsp;<code>let<\/code>&nbsp;en cuanto a su \u00e1mbito de bloque. As\u00ed que veamos c\u00f3mo se diferencian entre s\u00ed.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Cuando declaramos una variable como&nbsp;<code>const<\/code>, esta se considera una variable constante cuyo valor nunca cambiar\u00e1.<\/p>\n\n\n\n<p class=\"has-text-align-left\">En el caso de&nbsp;<code>let<\/code>, podemos asignar mas adelante un nuevo valor a esa variable de esta manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>let numero = 10;<br \/>numero = 20;<br \/><br \/>console.log(numero); \/\/ 20<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero no podemos hacer eso en el caso de&nbsp;<code>const<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const numero = 10;<br \/>numero = 20; \/\/ Uncaught TypeError: Assignment to constant variable.<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const numero = 20;<br \/>console.log(numero); \/\/ 20<br \/><br \/>const numero = 10; \/\/ Uncaught SyntaxError: Identifier &#8216;numero&#8217; has already been declared<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Ni siquiera podemos&nbsp;<strong>re-declarar<\/strong>&nbsp;una variable&nbsp;<code>const<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Ahora, observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const arr = [1, 2, 3, 4];<br \/><br \/>arr.push(5);<br \/><br \/>console.log(arr); \/\/ [1, 2, 3, 4, 5]<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Hemos dicho que la variable&nbsp;<code>const<\/code>&nbsp;es una constante cuyo valor nunca cambiar\u00e1 \u2013 pero acabamos de hacer un cambio en un arreglo definido como constante. Entonces, \u00bfqu\u00e9 sentido tiene eso?<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-text-align-left\">Nota: En JavaScript los arreglos son de tipo referencia y no de tipo primitivo.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"has-text-align-left\">As\u00ed que lo que realmente se almacena en&nbsp;<code>arr<\/code>&nbsp;no es el arreglo real, sino una referencia (direcci\u00f3n) de la ubicaci\u00f3n en la memoria donde se encuentra almacenado el arreglo real.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Entonces haciendo&nbsp;<code>arr.push(5);<\/code>&nbsp;no estamos cambiando la referencia a la que apunta&nbsp;<code>arr<\/code>, pero estamos cambiando los valores almacenados en ella.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Con objetos tenemos el mismo caso:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const obj = {<br \/> nombre: &#8216;David&#8217;,<br \/> edad: 30<br \/>};<br \/><br \/>obj.edad = 40;<br \/><br \/>console.log(obj); \/\/ { nombre: &#8216;David&#8217;, edad: 40 }<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed tampoco estamos cambiando la referencia donde apunta&nbsp;<code>obj<\/code>, sino los valores almacenados en ella.<\/p>\n\n\n\n<p class=\"has-text-align-left\">De tal manera que el c\u00f3digo anterior funcionar\u00e1, pero el siguiente no.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const obj = { nombre: &#8216;David&#8217;, edad: 30 };<br \/>const obj1 = { nombre: &#8216;Mike&#8217;, edad: 40 };<br \/>obj = obj1; \/\/ Uncaught TypeError: Assignment to constant variable.<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">El c\u00f3digo anterior no funciona porque estamos intentando cambiar la referencia a la que apunta la variable&nbsp;<code>const<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">As\u00ed que el punto clave a recordar cuando usamos&nbsp;<code>const<\/code>&nbsp;es que, si declaramos la variable como constante, no podemos re-definirla. Tampoco podemos re-asignar esa variable, pero podemos cambiar los valores almacenados en la misma si esta es de tipo referencia.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Por lo tanto, el siguiente c\u00f3digo no es v\u00e1lido porque le estamos reasignando un nuevo valor.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const arr = [1, 2, 3, 4];<br \/>arr = [10, 20, 30]; \/\/ Uncaught TypeError: Assignment to constant variable.<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero ten en cuenta que podemos cambiar los valores dentro del arreglo, como vimos anteriormente.<\/p>\n\n\n\n<p class=\"has-text-align-left\">El siguiente c\u00f3digo para re-definir una variable&nbsp;<code>const<\/code>&nbsp;tambi\u00e9n es inv\u00e1lido.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const nombre = \u00abDavid\u00bb;<br \/>const nombre = \u00abRaj\u00bb; \/\/ Uncaught SyntaxError: Identifier &#8216;nombre&#8217; has already been declared<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"resumen-de-let-y-const\"><strong>Resumen de let y const<\/strong><\/h3>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>Las palabras claves&nbsp;<code>let<\/code>&nbsp;y&nbsp;<code>const<\/code>&nbsp;a\u00f1aden \u00e1mbito de bloque en JavaScript.<\/li>\n\n\n\n<li>Cuando declaramos una variable como&nbsp;<code>let<\/code>, no podemos&nbsp;<strong>re-definir<\/strong>&nbsp;o&nbsp;<strong>re-declarar<\/strong>&nbsp;otra variable&nbsp;<code>let<\/code>&nbsp;con el mismo nombre en el mismo \u00e1mbito (funcional o de bloque). Pero podemos&nbsp;<strong>re-asignar&nbsp;<\/strong>un valor a ella.<\/li>\n\n\n\n<li>Cuando declaramos una variable como&nbsp;<code>const<\/code>, no podemos&nbsp;<strong>re-definir<\/strong>&nbsp;o&nbsp;<strong>re-declarar<\/strong>&nbsp;otra variable&nbsp;<code>const<\/code>&nbsp;con el mismo nombre en el mismo \u00e1mbito (funcional o de bloque). Pero podemos cambiar los valores almacenados en dicha variable, si esta es de tipo referencia, como un arreglo u objeto.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p class=\"has-text-align-left\">Muy bien, pasemos al siguiente gran tema: promesas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"promesas-en-javascript\"><strong>Promesas en JavaScript<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-left\">Las promesas son una de las partes m\u00e1s importantes, aunque confusas y dif\u00edciles de entender de JavaScript. Y la mayor\u00eda de los desarrolladores nuevos, as\u00ed como los experimentados, luchan por comprenderlas.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Las promesas se a\u00f1adieron en ES6 de forma nativa.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Entonces, \u00bfqu\u00e9 es una promesa? Una promesa representa una operaci\u00f3n asincr\u00f3nica que se completar\u00e1 en el futuro.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Anteriormente, antes de ES6, no hab\u00eda forma de esperar por algo que realizara alguna operaci\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Por ejemplo, cuando quer\u00edamos hacer una llamada a la API, no hab\u00eda forma de esperar hasta que los resultados llegaran.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para eso, sol\u00edamos usar bibliotecas externas como Jquery o Ajax que ten\u00edan su propia implementaci\u00f3n de promesas. Pero el navegador no contaba nativamente con dichas funciones.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Pero ahora, usando Promesas en ES6, podemos hacer una llamada a la API por nuestra cuenta y esperar hasta que est\u00e9 lista para realizar alguna operaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"como-crear-una-promesa\"><strong>Como crear una Promesa<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Para crear una promesa, necesitamos usar la funci\u00f3n constructora&nbsp;<code>Promise<\/code>&nbsp;de la siguiente forma:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise(function(resolver, rechazar) {<br \/> <br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">El constructor&nbsp;<code>Promise<\/code>&nbsp;toma una funci\u00f3n como argumento y dicha funci\u00f3n recibe internamente&nbsp;<code>resolver<\/code>&nbsp;y&nbsp;<code>rechazar<\/code>&nbsp;como par\u00e1metros.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Los par\u00e1metros&nbsp;<code>resolver<\/code>&nbsp;y&nbsp;<code>rechazar<\/code>&nbsp;son en realidad funciones que podemos llamar dependiendo del resultado de la operaci\u00f3n asincr\u00f3nica.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Una promesa&nbsp;<code>Promise<\/code>&nbsp;pasa por tres estados:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>Pendiente<\/li>\n\n\n\n<li>Cumplido<\/li>\n\n\n\n<li>Rechazado<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p class=\"has-text-align-left\">Cuando creamos una promesa, la misma est\u00e1 en estado pendiente. Al llamar a la funci\u00f3n&nbsp;<code>resolver<\/code>, entra en estado cumplido y si llamamos&nbsp;<code>rechazar<\/code>, pasar\u00e1 al estado rechazado.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para simular una operaci\u00f3n as\u00edncrona o de larga duraci\u00f3n, usaremos la funci\u00f3n&nbsp;<code>setTimeout<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise(function(resolver, rechazar) {<br \/> setTimeout(function() {<br \/>  const suma = 4 + 5;<br \/>  resolver(suma);<br \/> }, 2000);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed creamos una promesa que se resolver\u00e1 con la suma de&nbsp;<code>4<\/code>&nbsp;y&nbsp;<code>5<\/code>&nbsp;despu\u00e9s de que finalice un tiempo de espera de 2000 ms (2 segundos).<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para obtener el resultado de la ejecuci\u00f3n exitosa de la promesa, necesitamos registrar un callback usando&nbsp;<code>.then<\/code>&nbsp;de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise(function(resolver, rechazar) {<br \/> setTimeout(function() {<br \/>  const suma = 4 + 5;<br \/>  resolver(suma);<br \/> }, 2000);<br \/>});<br \/><br \/>promesa.then(function(resultado) {<br \/> console.log(resultado); \/\/ 9<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Entonces, cada vez que llamemos&nbsp;<code>resolver<\/code>, la promesa devolver\u00e1 el valor transmitido a la funci\u00f3n, el cual podemos recopilar usando el manejador&nbsp;<code>.then<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Si la operaci\u00f3n no tiene \u00e9xito, llamamos a la funci\u00f3n&nbsp;<code>rechazar<\/code>&nbsp;as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise(function(resolver, rechazar) {<br \/> setTimeout(function() {<br \/>  const suma = 4 + 5 + &#8216;a&#8217;;<br \/>  if(isNaN(suma)) {<br \/>    rechazar(&#8216;Error al calcular la suma.&#8217;);<br \/>  } else {<br \/>    resolver(suma);<br \/>  }<br \/> }, 2000);<br \/>});<br \/><br \/>promesa.then(function(resultado) {<br \/> console.log(resultado);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed, si la&nbsp;<code>suma<\/code>&nbsp;no es un n\u00famero, llamamos a la funci\u00f3n&nbsp;<code>rechazar<\/code>&nbsp;con el mensaje de error. De lo contrario, llamamos a la funci\u00f3n&nbsp;<code>resolver<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Si ejecutas el c\u00f3digo anterior, ver\u00e1s el siguiente resultado:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gist.github.com\/myogeshchavan97\/e0be7fc4c838544e2d00afeb3a82ae10\/raw\/9adf1d42d876e2b87ef0ecfbf97b06a01c026eba\/error_no_catch.png\" alt=\"Error without catch\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, obtenemos un mensaje de error sin captar junto al mensaje que especificamos, porque llamar a la funci\u00f3n&nbsp;<code>rechazar<\/code>&nbsp;arroja un error. Pero no hemos agregado un manejador de errores para captar dicho error.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para captar el error, necesitamos registrar otro callback usando&nbsp;<code>.catch<\/code>&nbsp;de esta forma:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>promesa.then(function(resultado) {<br \/> console.log(resultado);<br \/>}).catch(function(error) {<br \/> console.log(error);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Ver\u00e1s la siguiente salida:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gist.github.com\/myogeshchavan97\/e0be7fc4c838544e2d00afeb3a82ae10\/raw\/9adf1d42d876e2b87ef0ecfbf97b06a01c026eba\/error_catch.png\" alt=\"Error with catch\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, hemos agregado el manejador&nbsp;<code>.catch<\/code>, por lo que no obtenemos ning\u00fan error sin captar, solo estamos registrando el error en la consola.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Esto tambi\u00e9n evita que tu aplicaci\u00f3n se detenga abruptamente.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Por lo tanto, se recomienda siempre agregar el manejador&nbsp;<code>.catch<\/code>&nbsp;a cada promesa para que la aplicaci\u00f3n no deje de ejecutarse debido a un error.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"encadenamiento-de-promesas\"><strong>Encadenamiento de promesas<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Podemos agregar multiples manejadores&nbsp;<code>.then<\/code>&nbsp;a una sola promesa de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>promesa.then(function(resultado) {<br \/> console.log(&#8216;Primer manejador .then&#8217;);<br \/> return resultado;<br \/>}).then(function(resultado) {<br \/> console.log(&#8216;Segundo manejador .then&#8217;);<br \/> console.log(resultado);<br \/>}).catch(function(error) {<br \/> console.log(error);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Cuando tenemos agregados m\u00faltiples manejadores&nbsp;<code>.then<\/code>, el valor devuelto por el anterior es traspasado autom\u00e1ticamente al siguiente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gist.github.com\/myogeshchavan97\/e0be7fc4c838544e2d00afeb3a82ae10\/raw\/9adf1d42d876e2b87ef0ecfbf97b06a01c026eba\/promise_chaining.png\" alt=\"Promise Chaining\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, al sumar&nbsp;<code>4 + 5<\/code>&nbsp;se resuelve una promesa, y obtenemos el resultado de la suma en el primer manejador&nbsp;<code>.then<\/code>. All\u00ed imprimimos un mensaje en la consola y devolvemos el resultado al siguiente&nbsp;<code>.then<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Dentro del siguiente manejador&nbsp;<code>.then<\/code>, agregamos una declaraci\u00f3n de consola e imprimimos el resultado que obtuvimos del manejador&nbsp;<code>.then<\/code>&nbsp;anterior.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Este patr\u00f3n de agregar m\u00faltiples manejadores&nbsp;<code>.then<\/code>&nbsp;de forma consecutiva se conoce como encadenamiento de promesas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"c-mo-retrasar-la-ejecuci-n-de-una-promesa-en-javascript\">C\u00f3mo retrasar la ejecuci\u00f3n de una promesa en JavaScript<\/h3>\n\n\n\n<p class=\"has-text-align-left\">Muchas veces no queremos crear una promesa de inmediato, sino que queremos crear una despu\u00e9s de que se complete alguna operaci\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para lograr esto, podemos envolver la promesa en una funci\u00f3n y devolver esa promesa desde dicha funci\u00f3n de esta manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function crearPromesa() {<br \/> return new Promise(function(resolver, rechazar) {<br \/>  setTimeout(function() {<br \/>   const suma = 4 + 5;<br \/>   if(isNaN(suma)) {<br \/>     rechazar(&#8216;Error al calcular la suma.&#8217;);<br \/>   } else {<br \/>    resolver(suma);<br \/>   }<br \/>  }, 2000);<br \/> });<br \/>}<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">De esta manera, podemos usar los par\u00e1metros de la funci\u00f3n dentro de la promesa, haciendo que la funci\u00f3n sea verdaderamente din\u00e1mica.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function crearPromesa() {<br \/> return new Promise(function(resolver, rechazar) {<br \/>  setTimeout(function() {<br \/>   const suma = 4 + 5;<br \/>   if(isNaN(suma)) {<br \/>     rechazar(&#8216;Error al calcular la suma.&#8217;);<br \/>   } else {<br \/>    resolver(suma);<br \/>   }<br \/>  }, 2000);<br \/> });<br \/>}<br \/><br \/>crearPromesa(1,8)<br \/> .then(function(resultado) {<br \/>  console.log(resultado); \/\/ 9<br \/>});<br \/><br \/>\/\/ OR<br \/><br \/>crearPromesa(10,24)<br \/> .then(function(resultado) {<br \/>  console.log(resultado); \/\/ 34<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gist.github.com\/myogeshchavan97\/e0be7fc4c838544e2d00afeb3a82ae10\/raw\/9adf1d42d876e2b87ef0ecfbf97b06a01c026eba\/general_function.png\" alt=\"Output\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-left\"><strong>Nota:<\/strong>&nbsp;Cuando creamos una promesa, se resolver\u00e1 o rechazar\u00e1, pero no ambas al mismo tiempo. Por lo tanto, no podemos agregar dos llamadas a la funci\u00f3n&nbsp;<code>resolver<\/code>&nbsp;o&nbsp;<code>rechazar<\/code>&nbsp;en la misma promesa.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Adem\u00e1s, podemos pasar solo un valor a la funci\u00f3n&nbsp;<code>resolver<\/code>&nbsp;o&nbsp;<code>rechazar<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Si deseas pasar varios valores a una funci\u00f3n&nbsp;<code>resolver<\/code>, puedes utilizar un objeto como en el siguiente ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise(function(resolver, rechazar) {<br \/> setTimeout(function() {<br \/>  const suma = 4 + 5;<br \/>  resolver({<br \/>   a: 4,<br \/>   b: 5,<br \/>   suma<br \/>  });<br \/> }, 2000);<br \/>});<br \/><br \/>promesa.then(function(resultado) {<br \/> console.log(resultado);<br \/>}).catch(function(error) {<br \/> console.log(error);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/gist.github.com\/myogeshchavan97\/e0be7fc4c838544e2d00afeb3a82ae10\/raw\/65fba14b45b22228f49107634d440903eb0c8dbd\/object_resolve.png\" alt=\"Resolving object\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"c-mo-usar-las-funciones-de-flecha-en-javascript\">C\u00f3mo usar las funciones de flecha en JavaScript<\/h3>\n\n\n\n<p class=\"has-text-align-left\">En todos los ejemplos de c\u00f3digo pasados, al crear promesas utilizamos la sintaxis regular de funci\u00f3n en ES5. Pero en su lugar, es com\u00fan usar la sintaxis de funci\u00f3n de flecha de la siguiente manera.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const promesa = new Promise((resolver, rechazar) =&gt; {<br \/> setTimeout(() =&gt; {<br \/>  const suma = 4 + 5 + &#8216;a&#8217;;<br \/>  if(isNaN(suma)) {<br \/>    rechazar(&#8216;Error al calcular la suma.&#8217;);<br \/>  } else {<br \/>    resolver(suma);<br \/>  }<br \/> }, 2000);<br \/>});<br \/><br \/>promesa.then((resultado) =&gt; {<br \/> console.log(resultado);<br \/>});<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Puedes utilizar la sintaxis de funci\u00f3n en ES5 o ES6 dependiendo de tus preferencias y necesidades.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"sintaxis-para-import-y-export-en-es6\"><strong>Sintaxis para Import y Export en ES6<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-left\">Antes de que ES6 entrara en juego, utilizabamos m\u00faltiples etiquetas&nbsp;<code>script<\/code>&nbsp;en un solo archivo HTML para importar diferentes archivos JavaScript de esta manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>&lt;script type=\u00bbtext\/javascript\u00bb src=\u00bbinicio.js\u00bb&gt;&lt;\/script&gt;<br \/>&lt;script type=\u00bbtext\/javascript\u00bb src=\u00bbperfil.js\u00bb&gt;&lt;\/script&gt;<br \/>&lt;script type=\u00bbtext\/javascript\u00bb src=\u00bbusuario.js\u00bb&gt;&lt;\/script&gt;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Entonces, si existiese una variable con el mismo nombre en diferentes archivos JavaScript, se crear\u00eda un conflicto de nombres y el valor que esperabas no ser\u00eda el valor real que obtuviste.<\/p>\n\n\n\n<p class=\"has-text-align-left\">ES6 ha solucionado este problema con el concepto de m\u00f3dulos.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Cada archivo JavaScript que escribimos en ES6 se conoce como m\u00f3dulo. Las variables y funciones que declaramos en cada archivo no est\u00e1n disponibles para otros archivos hasta que las exportamos espec\u00edficamente desde ese archivo y las importamos a otro.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Por lo tanto, las funciones y variables definidas en el archivo son privadas para cada uno, y no se pueden acceder desde fuera hasta que las exportemos.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Hay dos tipos de exportaciones:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li>Exportaciones Nombradas: Pueden haber m\u00faltiples exportaciones con nombre en un solo archivo<\/li>\n\n\n\n<li>Exportaciones por Defecto: Solo puede haber una exportaci\u00f3n por defecto en un solo archivo<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"exportaciones-nombradas-en-javascript\"><strong>Exportaciones Nombradas en JavaScript<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Para exportar un solo valor como una exportaci\u00f3n nombrada, lo exportamos as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>export const temp = \u00abEste es un texto ficticio\u00bb;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Si tenemos varias cosas para exportar, podemos escribir una declaraci\u00f3n de exportaci\u00f3n en una l\u00ednea separada en lugar de delante de la declaraci\u00f3n de variable. Especificamos las cosas a exportar entre llaves.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const temp1 = \u00abEste es un texto ficticio1\u00bb;<br \/>const temp2 = \u00abEste es un texto ficticio2\u00bb;<br \/><br \/>export { temp1, temp2 };<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Ten en cuenta que la sintaxis de exportaci\u00f3n no es una sintaxis literal de objeto. Por lo que, en ES6, para exportar algo no podemos usar pares clave-valor como el siguiente:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p> \/\/ Esta es una sintaxis de exportaci\u00f3n no v\u00e1lida en ES6<br \/><br \/>export { clave1: valor1, clave2: valor2 }<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Para importar las cosas que exportamos como una exportaci\u00f3n nombrada, usamos la siguiente sintaxis:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import { temp1, temp2 } from &#8216;.\/nombreDelArchivo&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Ten en cuenta que al importar algo desde un archivo, no es necesario agregar la extensi\u00f3n&nbsp;<code>.js<\/code>&nbsp;al nombre del mismo, ya que se considera de forma predeterminada.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ importar desde el archivo funciones.js desde el directorio actual <br \/>import { temp1, temp2 } from &#8216;.\/funciones&#8217;;<br \/><br \/>\/\/ importar desde el archivo funciones.js desde el padre del directorio actual<br \/>import { temp1 } from &#8216;..\/funciones&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed hay una demostraci\u00f3n en Code Sandbox:&nbsp;<a href=\"https:\/\/codesandbox.io\/s\/hardcore-pond-q4cjx\">https:\/\/codesandbox.io\/s\/hardcore-pond-q4cjx<\/a><\/p>\n\n\n\n<p class=\"has-text-align-left\"><strong>Una cosa a tener en cuenta es que el nombre utilizado durante la exportaci\u00f3n debe coincidir con el nombre que utilizamos durante la importaci\u00f3n.<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">Por lo que, si est\u00e1s exportando as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>export const PI = 3.14159;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Luego, al importar, debes usar el mismo nombre que usaste al exportar:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import { PI } from &#8216;.\/constantes&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">No puedes usar ning\u00fan otro nombre como este:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import { ValorPI } from &#8216;.\/constantes&#8217;; \/\/ Esto arrojar\u00e1 un error<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero si ya tienes la variable con el mismo nombre que la variable exportada, puedes usar la siguiente sintaxis para renombrar la variable mientras realizas la importaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import { PI as ValorPI } from &#8216;.\/constantes&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed hemos cambiado el nombre de&nbsp;<code>PI<\/code>&nbsp;a&nbsp;<code>ValorPI<\/code>&nbsp;y por lo tanto ya no podemos usar el nombre&nbsp;<code>PI<\/code>&nbsp;como variable. En su lugar, tenemos que usar la variable&nbsp;<code>ValorPI<\/code>&nbsp;para obtener el valor exportado de&nbsp;<code>PI<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Tambi\u00e9n podemos utilizar la sintaxis de cambio de nombre a la hora de exportar:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>const PI = 3.14159; <br \/><br \/>export { PI as ValorPI };<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Luego, al importar, tenemos que usar&nbsp;<code>ValorPI<\/code>&nbsp;as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import { ValorPI } from &#8216;.\/constantes&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Para exportar algo como una exportaci\u00f3n nombrada, primero debemos declararlo.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>export &#8216;hola&#8217;; \/\/ Esto arrojar\u00e1 un error<br \/>export const saludos = &#8216;hola&#8217;; \/\/ Esto funcionar\u00e1<br \/>export { nombre: &#8216;David&#8217; }; \/\/ Esto arrojar\u00e1 un error<br \/>export const objeto = { nombre: &#8216;David&#8217; }; \/\/ Esto funcionar\u00e1<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\"><strong>El orden en el que importamos las m\u00faltiples exportaciones nombradas no es importante.<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-left\">F\u00edjate en el siguiente archivo&nbsp;<code>validations.js<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ utils\/validations.js<br \/><br \/>const esEmailValido = function(email) {<br \/>  if (\/^[^@ ]+@[^@ ]+\\.[^@ \\.]{2,}$\/.test(email)) {<br \/>    return \u00abel email es v\u00e1lido\u00bb;<br \/>  } else {<br \/>    return \u00abel email es inv\u00e1lido\u00bb;<br \/>  }<br \/>};<br \/><br \/>const esTelefonoValido = function(telefono) {<br \/>  if (\/^[\\\\(]\\d{3}[\\\\)]\\s\\d{3}-\\d{4}$\/.test(telefono)) {<br \/>    return \u00abel n\u00famero de tel\u00e9fono es v\u00e1lido\u00bb;<br \/>  } else {<br \/>    return \u00abel n\u00famero de tel\u00e9fono es inv\u00e1lido\u00bb;<br \/>  }<br \/>};<br \/><br \/>function estaVacia(valor) { <br \/>  if (\/^\\s*$\/.test(valor)) {<br \/>    return \u00abla cadena est\u00e1 vac\u00eda o contiene solo espacios\u00bb;<br \/>  } else {<br \/>    return \u00abla cadena no est\u00e1 vac\u00eda y no contiene espacios\u00bb;<br \/>  } <br \/>}<br \/><br \/>export { esEmailValido, esTelefonoValido, estaVacia };<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Y en&nbsp;<code>index.js<\/code>&nbsp;usamos estas funciones como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ index.js<br \/>import { estaVacia, esEmailValido } from \u00ab.\/utils\/validations\u00bb;<br \/><br \/>console.log(\u00abestaVacia:\u00bb, estaVacia(\u00ababcd\u00bb)); \/\/ estaVacia: la cadena no est\u00e1 vac\u00eda y no contiene espacios<br \/><br \/>console.log(\u00abesEmailValido:\u00bb, esEmailValido(\u00ababc@11gmail.com\u00bb)); \/\/ esEmailValido: el email es v\u00e1lido<br \/><br \/>console.log(\u00abesEmailValido:\u00bb, esEmailValido(\u00abab@c@11gmail.com\u00bb)); \/\/ esEmailValido: el email es inv\u00e1lido<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed hay una demostraci\u00f3n en Code Sandbox:&nbsp;<a href=\"https:\/\/codesandbox.io\/s\/youthful-flower-xesus\">https:\/\/codesandbox.io\/s\/youthful-flower-xesus<\/a><\/p>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, pudimos importar solo los elementos exportados requeridos y en cualquier orden, por lo que no es necesario verificar en qu\u00e9 orden fueron exportados en otro archivo. Esa es la belleza de las exportaciones nombradas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"exportaciones-por-defecto-en-javascript\"><strong>Exportaciones por Defecto en JavaScript<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Como dije anteriormente, puede haber como m\u00e1ximo una exportaci\u00f3n por defecto en un solo archivo.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Sin embargo, puedes combinar varias exportaciones nombradas y una exportaci\u00f3n por defecto en un solo archivo.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Para declarar una exportaci\u00f3n por defecto, agregamos la palabra clave&nbsp;<code>default<\/code>&nbsp;&nbsp;delante de la palabra clave&nbsp;<code>export<\/code>&nbsp;de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/constantes.js<br \/>const nombre = &#8216;David&#8217;; <br \/>export default nombre;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Para importar la exportaci\u00f3n por defecto, no agregamos llaves como hicimos en la exportaci\u00f3n nombrada, en cambio lo hacemos as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import nombre from &#8216;.\/constantes&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Si tenemos varias exportaciones nombradas y una exportaci\u00f3n por defecto como esta:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>export const PI = 3.14159; <br \/>export const EDAD = 30;<br \/><br \/>const NOMBRE = \u00abDavid\u00bb;<br \/>export default NOMBRE;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Luego, para importar todo en una sola l\u00ednea, necesitamos usar la variable exportada por defecto antes del corchete.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ NOMBRE es una exportaci\u00f3n por defecto y PI y Edad son exportaciones nombradas<br \/><br \/>import NOMBRE, { PI, EDAD } from &#8216;.\/constantes&#8217;;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\"><strong>Una especialidad de la exportaci\u00f3n por defecto es que podemos cambiar el nombre de la variable exportada durante la importaci\u00f3n:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>const EDAD = 30;<br \/>export default EDAD;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Y en otro archivo, podemos usar otro nombre al importar<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import miEdad from \u2018.\/constantes\u2019; <br \/><br \/>console.log(miEdad); \/\/ 30<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed, hemos cambiado el nombre de la variable exportada por defecto de&nbsp;<code>EDAD<\/code>&nbsp;a&nbsp;<code>miEdad<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Esto funciona porque solo puede haber una exportaci\u00f3n por defecto, por lo que puedes nombrarla como desees.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Otra cosa a tener en cuenta sobre la exportaci\u00f3n por defecto es que la palabra clave&nbsp;<code>export default<\/code>&nbsp;no puede ir antes de la declaraci\u00f3n de una variable como esta:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>export default const EDAD = 30; \/\/ Este es un error y no funcionar\u00e1<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">As\u00ed que tenemos que usar la palabra clave&nbsp;<code>export default<\/code>&nbsp;en una l\u00ednea separada de esta forma:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js <br \/><br \/>const EDAD = 30; <br \/>export default EDAD;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Sin embargo, podemos exportar por defecto sin declarar la variable de esta manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/constantes.js<br \/>export default {<br \/> nombre: \u00abBilly\u00bb,<br \/> edad: 40<br \/>};<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Y en otro archivo usarlo as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import usuario from &#8216;.\/constantes&#8217;;<br \/>console.log(usuario.nombre); \/\/ Billy <br \/>console.log(usuario.edad); \/\/ 40<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Existe otra forma de importar todas las variables exportadas en un archivo usando la siguiente sintaxis:<\/p>\n\n\n\n<p class=\"has-text-align-left\">import * as constantes from &#8216;.\/constantes&#8217;;\n<\/p>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed, estamos importando todas las exportaciones nombradas y por defecto que tenemos en&nbsp;<code>constantes.js<\/code>&nbsp;y estas se almacenaran en la variable&nbsp;<code>constantes<\/code>. As\u00ed que,&nbsp;<code>constantes<\/code>&nbsp;se convertir\u00e1 en un objecto.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>export const USERNAME = \u00abDavid\u00bb;<br \/>export default {<br \/> nombre: \u00abBilly\u00bb,<br \/> edad: 40<br \/>};<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Y en otro archivo, lo usamos de la siguiente manera:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ prueba.js<br \/><br \/>import * as constantes from &#8216;.\/constantes&#8217;;<br \/><br \/>console.log(constantes.USERNAME); \/\/ David<br \/>console.log(constantes.default); \/\/ { nombre: \u00abBilly\u00bb, edad: 40 }<br \/>console.log(constantes.default.edad); \/\/ 40<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed hay una demostraci\u00f3n en Code Sandbox:&nbsp;<a href=\"https:\/\/codesandbox.io\/s\/green-hill-dj43b\">https:\/\/codesandbox.io\/s\/green-hill-dj43b<\/a><\/p>\n\n\n\n<p class=\"has-text-align-left\">Si no deseas exportar en l\u00edneas separadas las exportaciones por defecto y nombradas, puedes combinarlas como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ constantes.js<br \/>const PI = 3.14159; const EDAD = 30;<br \/>const USERNAME = \u00abDavid\u00bb;<br \/>const USUARIO = {<br \/> nombre: \u00abBilly\u00bb,<br \/> edad: 40 <br \/>};<br \/><br \/>export { PI, EDAD, USERNAME, USUARIO as default };<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed, estamos exportando USUARIO como exportaci\u00f3n por defecto y las otras como exportaciones nombradas.<\/p>\n\n\n\n<p class=\"has-text-align-left\">En otro archivo, puedes usarlo as\u00ed:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>import USUARIO, { PI, EDAD, USERNAME } from \u00ab.\/constantes\u00bb;<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Aqu\u00ed hay una demostraci\u00f3n en Code Sandbox:&nbsp;<a href=\"https:\/\/codesandbox.io\/s\/eloquent-northcutt-7btp1\">https:\/\/codesandbox.io\/s\/eloquent-northcutt-7btp1<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"en-resumen-\"><strong>En resumen:<\/strong><\/h3>\n\n\n\n<blockquote class=\"wp-block-quote has-text-align-left is-layout-flow wp-block-quote-is-layout-flow\">\n<ol class=\"wp-block-list\">\n<li>En ES6, los datos declarados en un archivo no son accesibles a otro archivo hasta que se exportan desde ese archivo y se importan a otro archivo.<\/li>\n\n\n\n<li>Si tenemos una sola cosa para exportar en un archivo como una declaraci\u00f3n de clase, usamos la exportaci\u00f3n por defecto, de lo contrario usamos la exportaci\u00f3n nombrada. Tambi\u00e9n podemos combinar exportaciones por defecto y nombradas en un solo archivo.<\/li>\n<\/ol>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"par-metros-predeterminados-en-javascript\"><strong>Par\u00e1metros Predeterminados en JavaScript<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-left\">ES6 ha agregado una caracter\u00edstica bastante \u00fatil para proporcionar par\u00e1metros predeterminados al definir funciones.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Supongamos que tenemos una aplicaci\u00f3n, donde una vez que el usuario inicia sesi\u00f3n en el sistema, les mostramos un mensaje de bienvenida como este:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function mostrarMensaje(primerNombre) {<br \/>  return \u00abBienvenido de nuevo, \u00bb + primerNombre;<br \/>}<br \/>console.log(mostrarMensaje(&#8216;John&#8217;)); \/\/ Bienvenido de nuevo, John<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero, \u00bfqu\u00e9 pasa si no tenemos el nombre de usuario en nuestra base de datos, ya que era un campo opcional al momento de registrarse? Entonces podemos mostrar un mensaje al usuario como:&nbsp;<code>Bienvenido Invitado<\/code>&nbsp;despu\u00e9s de iniciar sesi\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left\">As\u00ed que, primero debemos verificar si se proporciona el&nbsp;<code>primerNombre<\/code>&nbsp;y luego mostrar el mensaje correspondiente. Antes de ES6, habr\u00edamos tenido que escribir un c\u00f3digo como este:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function mostrarMensaje(primerNombre) {<br \/>  if(primerNombre) {<br \/>    return \u00abBienvenido de nuevo, \u00bb + primerNombre;<br \/>  } else {<br \/>    return \u00abBienvenido de nuevo, Invitado\u00bb;<br \/>  }<br \/>}<br \/><br \/>console.log(mostrarMensaje(&#8216;John&#8217;)); \/\/ Bienvenido de nuevo, John <br \/>console.log(mostrarMensaje()); \/\/ Bienvenido de nuevo, Invitado<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Pero ahora en ES6 usando los par\u00e1metros de funci\u00f3n predeterminados, podemos escribir el c\u00f3digo anterior como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function mostrarMensaje(primerNombre = &#8216;Invitado&#8217;) {<br \/>   return \u00abBienvenido de nuevo, \u00bb + primerNombre;<br \/>}<br \/><br \/>console.log(mostrarMensaje(&#8216;John&#8217;)); \/\/ Bienvenido de nuevo, John <br \/>console.log(mostrarMensaje()); \/\/ Bienvenido de nuevo, Invitado<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\"><strong>Podemos asignar cualquier valor como predeterminado al par\u00e1metro de la funci\u00f3n.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function mostrar(a = 10, b = 20, c = b) { <br \/> console.log(a, b, c);<br \/>}<br \/><br \/>mostrar(); \/\/ 10 20 20<br \/>mostrar(40); \/\/ 40 20 20<br \/>mostrar(1, 70); \/\/ 1 70 70<br \/>mostrar(1, 30, 70); \/\/ 1 30 70<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, hemos asignado valores \u00fanicos a los par\u00e1metros de la funci\u00f3n a y b, pero para c estamos asignando el valor de b. Entonces, cualquier valor que hayamos proporcionado para b se asignar\u00e1 a c tambi\u00e9n si no se proporciona un valor espec\u00edfico para c al llamar a la funci\u00f3n.<\/p>\n\n\n\n<p class=\"has-text-align-left\">En el c\u00f3digo anterior, no hemos proporcionado todos los argumentos a la funci\u00f3n. Entonces, las llamadas a las funciones anteriores ser\u00e1n las mismas que las siguientes:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>mostrar(); \/\/ es igual que mostrar(undefined, undefined, undefined)<br \/>mostrar(40); \/\/ es igual que mostrar(40, undefined, undefined)<br \/>mostrar(1, 70); \/\/ es igual que mostrar(1, 70, undefined)<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">De tal manera que, si el argumento pasado es&nbsp;<code>undefined<\/code>, el valor predeterminado se usar\u00e1 para el par\u00e1metro correspondiente.<\/p>\n\n\n\n<p class=\"has-text-align-left\"><strong>Tambi\u00e9n podemos asignar valores complejos o calculados como valor predeterminado.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const usuarioPredeterminado = {<br \/>  nombre: &#8216;Jane&#8217;,<br \/>  ubicacion: &#8216;NY&#8217;,<br \/>  trabajo: &#8216;Desarrolladora de Software&#8217;<br \/>};<br \/><br \/>const mostrar = (usuario = usuarioPredeterminado, edad = 60 \/ 2 ) =&gt; { <br \/> console.log(usuario, edad);<br \/>};<br \/>mostrar();<br \/><br \/>\/* resultado:<br \/><br \/>{<br \/>  nombre: &#8216;Jane&#8217;,<br \/>  ubicacion: &#8216;NY&#8217;,<br \/>  trabajo: &#8216;Software Developer&#8217;<br \/>} 30 <br \/><br \/>*\/<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Ahora, da un vistazo al siguiente c\u00f3digo en ES5:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES5<br \/>function obtenerUsuarios(pagina, resultados, genero, nacionalidad) {<br \/>  var parametros = \u00ab\u00bb;<br \/>  if(pagina === 0 || pagina) {<br \/>   parametros += `page=${pagina}&amp;`; <br \/>  }<br \/>  if(resultados) {<br \/>   parametros += `results=${resultados}&amp;`;<br \/>  }<br \/>  if(genero) {<br \/>   parametros += `gender=${genero}&amp;`;<br \/>  }<br \/>  if(nacionalidad) {<br \/>   parametros += `nationality=${nacionalidad}`;<br \/>  }<br \/><br \/>  fetch(&#8216;https:\/\/randomuser.me\/api\/?&#8217; + parametros) <br \/>   .then(function(respuesta) {<br \/>     return respuesta.json(); <br \/>   })<br \/>   .then(function(resultado) { <br \/>    console.log(resultado);<br \/>   }) <br \/>   .catch(function(error) {<br \/>     console.log(&#8216;error&#8217;, error); <br \/>   }); <br \/>}<br \/><br \/>obtenerUsuarios(0, 10, &#8216;male&#8217;, &#8216;us&#8217;);<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">En este c\u00f3digo, estamos haciendo una llamada API al usuario aleatorio (<a href=\"https:\/\/randomuser.me\/\">Random user<\/a>) pasando varios par\u00e1metros opcionales en la funci\u00f3n&nbsp;<code>obtenerUsuarios<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Entonces, antes de realizar la llamada API, hemos agregado varias condiciones if para verificar si el par\u00e1metro se agrega o no, y en base a eso, construimos una cadena de consulta de la siguiente manera:&nbsp;<code>https:\/\/randomuser.me\/api\/?page=0&amp;results=10&amp;gender=male&amp;nationality=us<\/code>.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Pero en lugar de agregar tantas condiciones if, podemos usar los par\u00e1metros predeterminados mientras definimos los par\u00e1metros de la funci\u00f3n como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function obtenerUsuarios(pagina = 0, resultados = 10, genero = &#8216;male&#8217;, nacionalidad = &#8216;us&#8217;) {<br \/> fetch(`https:\/\/randomuser.me\/api\/?page=${pagina}&amp;results=${resultados}&amp;gender=${genero}&amp;nationality=${nacionalidad}`)<br \/> .then(function(respuesta) { <br \/>  return respuesta.json();<br \/> }) <br \/> .then(function(resultado) {<br \/>   console.log(resultado); <br \/> })<br \/> .catch(function(error) { <br \/>  console.log(&#8216;error&#8217;, error);<br \/>  }); <br \/>}<br \/><br \/>obtenerUsuarios();<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Como puedes ver, hemos simplificado mucho el c\u00f3digo. Entonces, cuando no proporcionamos ning\u00fan argumento a la funci\u00f3n&nbsp;<code>obtenerUsuarios<\/code>, esta tomar\u00e1 valores predeterminados. Tambi\u00e9n podemos proporcionar nuestros propios valores de esta forma:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>obtenerUsuarios(1, 20, &#8216;female&#8217;, &#8216;gb&#8217;);<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Lo cual sobrescribir\u00e1 los par\u00e1metros predeterminados de la funci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-text-align-left\" id=\"null-no-es-igual-a-undefined\"><strong>null&nbsp;<\/strong>no es igual a<strong>&nbsp;undefined<\/strong><\/h3>\n\n\n\n<p class=\"has-text-align-left\">Pero debes tener en cuenta algo importante:&nbsp;<code>null<\/code>&nbsp;y&nbsp;<code>undefined<\/code>&nbsp;son dos cosas diferentes al definir par\u00e1metros predeterminados.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>function mostrar(nombre = &#8216;David&#8217;, edad = 35, ubicacion = &#8216;NY&#8217;){<br \/> console.log(nombre, edad, ubicacion); <br \/>}<br \/><br \/>mostrar(&#8216;David&#8217;, 35); \/\/ David 35 NY<br \/>mostrar(&#8216;David&#8217;, 35, undefined); \/\/ David 35 NY<br \/><\/p><\/blockquote><\/figure>\n\n\n\n<p>Como no hemos proporcionado el tercer valor para el par\u00e1metro de ubicaci\u00f3n en la primera llamada a&nbsp;<code>mostrar<\/code>, este ser\u00e1&nbsp;<code>undefined<\/code>&nbsp;por defecto, por lo dicho valor&nbsp;<code>undefined<\/code>&nbsp;se utilizar\u00e1 en ambas llamadas de funci\u00f3n. Sin embargo, las siguientes llamadas a funciones&nbsp;<strong>no<\/strong>&nbsp;son iguales.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>display('David', 35, undefined); \/\/ David 35 NY\ndisplay('David', 35, null); \/\/ David 35 null\n<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-left\">Cuando pasamos&nbsp;<code>null<\/code>&nbsp;como argumento, estamos diciendo espec\u00edficamente que asignemos un valor&nbsp;<code>null<\/code>&nbsp;(nulo) al par\u00e1metro de&nbsp;<code>ubicacion<\/code>&nbsp;lo cual es diferente que&nbsp;<code>undefined<\/code>&nbsp;(indefinido). Por lo tanto, no tomar\u00e1 el valor predeterminado de&nbsp;<code>NY<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\" id=\"array-prototype-includes\"><strong>Array.prototype.includes<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-left\">ES7 ha agregado una nueva funci\u00f3n que verifica si un elemento est\u00e1 presente en el arreglo o no y devuelve un valor booleano&nbsp;<code>true<\/code>&nbsp;o&nbsp;<code>false<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES5<br \/><br \/>const numeros = [\u00abuno\u00bb, \u00abdos\u00bb, \u00abtres\u00bb, \u00abcuatro\u00bb];<br \/><br \/>console.log(numeros.indexOf(\u00abuno\u00bb) &gt; -1); \/\/ true <br \/>console.log(numeros.indexOf(\u00abcinco\u00bb) &gt; -1); \/\/ false<\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">El mismo c\u00f3digo usando el m\u00e9todo Array&nbsp;<code>includes<\/code>&nbsp;puede escribirse como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>\/\/ C\u00f3digo ES7<br \/><br \/>const numeros = [\u00abuno\u00bb, \u00abdos\u00bb, \u00abtres\u00bb, \u00abcuatro\u00bb];<br \/><br \/>console.log(numeros.includes(\u00abuno\u00bb)); \/\/ true <br \/>console.log(numeros.includes(\u00abcinco\u00bb)); \/\/ false<\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">Por lo tanto, el uso del m\u00e9todo Array&nbsp;<code>includes<\/code>&nbsp;hace que el c\u00f3digo sea corto y f\u00e1cil de entender.<\/p>\n\n\n\n<p class=\"has-text-align-left\">El m\u00e9todo&nbsp;<code>includes<\/code>&nbsp;tambi\u00e9n es \u00fatil cuando se comparan diferentes valores.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Observa el siguiente c\u00f3digo:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const dia = \u00ablunes\u00bb;<br \/><br \/>if(dia === \u00ablunes\u00bb || dia === \u00abmartes\u00bb || dia === \u00abmiercoles\u00bb) {<br \/>  \/\/ hacer algo<br \/>}<\/p><\/blockquote><\/figure>\n\n\n\n<p class=\"has-text-align-left\">El c\u00f3digo anterior se puede simplificar usando el m\u00e9todo&nbsp;<code>includes<\/code>&nbsp;como se muestra a continuaci\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-pullquote has-text-align-left\"><blockquote><p>const dia = \u00ablunes\u00bb;<br \/><br \/>if([\u00ablunes\u00bb, \u00abmartes\u00bb, \u00abmiercoles\u00bb].includes(dia)) {<br \/>  \/\/ hacer algo<br \/>}<br \/><\/p><\/blockquote><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript Moderno Gu\u00eda Definitiva JavaScript Moderno \u2013 Imports, Exports, Let, Const, y Promesas en ES6+<\/p>\n","protected":false},"author":7,"featured_media":14199,"comment_status":"open","ping_status":"open","sticky":false,"template":"templates\/template-full-width.php","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[72],"class_list":["post-14198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollo-web","tag-javascript-moderno","entry entry-center"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JavaScript Moderno - Blog de Nicolas<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JavaScript Moderno - Blog de Nicolas\" \/>\n<meta property=\"og:description\" content=\"JavaScript Moderno Gu\u00eda Definitiva JavaScript Moderno \u2013 Imports, Exports, Let, Const, y Promesas en ES6+\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog de Nicolas\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-01T17:35:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1086\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Blog de Nicolas\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Blog de Nicolas\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/\"},\"author\":{\"name\":\"Blog de Nicolas\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#\\\/schema\\\/person\\\/d1ed6b5e610e5abf520b0df0fca03a12\"},\"headline\":\"JavaScript Moderno\",\"datePublished\":\"2024-10-01T17:35:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/\"},\"wordCount\":5048,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/10\\\/JavaScript-Moderno-e1728724600185.jpeg\",\"keywords\":[\"JavaScript Moderno\"],\"articleSection\":[\"Desarrollo Web.\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/\",\"name\":\"JavaScript Moderno - Blog de Nicolas\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/10\\\/JavaScript-Moderno-e1728724600185.jpeg\",\"datePublished\":\"2024-10-01T17:35:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#primaryimage\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/10\\\/JavaScript-Moderno-e1728724600185.jpeg\",\"contentUrl\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2024\\\/10\\\/JavaScript-Moderno-e1728724600185.jpeg\",\"width\":2000,\"height\":1086},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/2024\\\/10\\\/01\\\/javascript-moderno\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JavaScript Moderno\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#website\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/\",\"name\":\"Blog de Nicolas\",\"description\":\"Nicolas Desarrollo WordPress Multisite\",\"publisher\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#organization\",\"name\":\"Blog de Nicolas\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2025\\\/01\\\/prenom-nicolas-1-300x73-1.png\",\"contentUrl\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/sites\\\/5\\\/2025\\\/01\\\/prenom-nicolas-1-300x73-1.png\",\"width\":300,\"height\":73,\"caption\":\"Blog de Nicolas\"},\"image\":{\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/#\\\/schema\\\/person\\\/d1ed6b5e610e5abf520b0df0fca03a12\",\"name\":\"Blog de Nicolas\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/avatars\\\/7\\\/1737055720-bpfull.jpg\",\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/avatars\\\/7\\\/1737055720-bpfull.jpg\",\"contentUrl\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/wp-content\\\/uploads\\\/avatars\\\/7\\\/1737055720-bpfull.jpg\",\"caption\":\"Blog de Nicolas\"},\"url\":\"https:\\\/\\\/nicolas.cat\\\/blogdnicolas\\\/author\\\/blogdnicolas\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JavaScript Moderno - Blog de Nicolas","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:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/","og_locale":"es_ES","og_type":"article","og_title":"JavaScript Moderno - Blog de Nicolas","og_description":"JavaScript Moderno Gu\u00eda Definitiva JavaScript Moderno \u2013 Imports, Exports, Let, Const, y Promesas en ES6+","og_url":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/","og_site_name":"Blog de Nicolas","article_published_time":"2024-10-01T17:35:16+00:00","og_image":[{"width":2000,"height":1086,"url":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg","type":"image\/jpeg"}],"author":"Blog de Nicolas","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Blog de Nicolas","Tiempo de lectura":"26 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#article","isPartOf":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/"},"author":{"name":"Blog de Nicolas","@id":"https:\/\/nicolas.cat\/blogdnicolas\/#\/schema\/person\/d1ed6b5e610e5abf520b0df0fca03a12"},"headline":"JavaScript Moderno","datePublished":"2024-10-01T17:35:16+00:00","mainEntityOfPage":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/"},"wordCount":5048,"commentCount":0,"publisher":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/#organization"},"image":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#primaryimage"},"thumbnailUrl":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg","keywords":["JavaScript Moderno"],"articleSection":["Desarrollo Web."],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/","url":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/","name":"JavaScript Moderno - Blog de Nicolas","isPartOf":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#primaryimage"},"image":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#primaryimage"},"thumbnailUrl":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg","datePublished":"2024-10-01T17:35:16+00:00","breadcrumb":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#primaryimage","url":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg","contentUrl":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2024\/10\/JavaScript-Moderno-e1728724600185.jpeg","width":2000,"height":1086},{"@type":"BreadcrumbList","@id":"https:\/\/nicolas.cat\/blogdnicolas\/2024\/10\/01\/javascript-moderno\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/nicolas.cat\/blogdnicolas\/"},{"@type":"ListItem","position":2,"name":"JavaScript Moderno"}]},{"@type":"WebSite","@id":"https:\/\/nicolas.cat\/blogdnicolas\/#website","url":"https:\/\/nicolas.cat\/blogdnicolas\/","name":"Blog de Nicolas","description":"Nicolas Desarrollo WordPress Multisite","publisher":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nicolas.cat\/blogdnicolas\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/nicolas.cat\/blogdnicolas\/#organization","name":"Blog de Nicolas","url":"https:\/\/nicolas.cat\/blogdnicolas\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nicolas.cat\/blogdnicolas\/#\/schema\/logo\/image\/","url":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2025\/01\/prenom-nicolas-1-300x73-1.png","contentUrl":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/sites\/5\/2025\/01\/prenom-nicolas-1-300x73-1.png","width":300,"height":73,"caption":"Blog de Nicolas"},"image":{"@id":"https:\/\/nicolas.cat\/blogdnicolas\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/nicolas.cat\/blogdnicolas\/#\/schema\/person\/d1ed6b5e610e5abf520b0df0fca03a12","name":"Blog de Nicolas","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/avatars\/7\/1737055720-bpfull.jpg","url":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/avatars\/7\/1737055720-bpfull.jpg","contentUrl":"https:\/\/nicolas.cat\/blogdnicolas\/wp-content\/uploads\/avatars\/7\/1737055720-bpfull.jpg","caption":"Blog de Nicolas"},"url":"https:\/\/nicolas.cat\/blogdnicolas\/author\/blogdnicolas\/"}]}},"_links":{"self":[{"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/posts\/14198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/comments?post=14198"}],"version-history":[{"count":0,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/posts\/14198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/media\/14199"}],"wp:attachment":[{"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/media?parent=14198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/categories?post=14198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nicolas.cat\/blogdnicolas\/wp-json\/wp\/v2\/tags?post=14198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}