<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Fernando Mercadal - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Fernando Mercadal - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 15 Jun 2026 12:38:24 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/fermercadal/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ La guía completa sobre `this` en JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ En JavaScript, cada función tiene una referencia this creada automáticamente cuando la declaramos. El this de JavaScript es similar a lo que podríamos encontrar en otros lenguajes basados en clases como Java o C# (JavaScript en realidad es un lenguaje basado en prototipos y no tiene un concepto de "clase"): ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/la-guia-completa-sobre-this-en-javascript/</link>
                <guid isPermaLink="false">5ff314a18c7cd154bb9840c2</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Wed, 03 Mar 2021 05:34:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1551641145-a1e18544acb9.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>En JavaScript, cada función tiene una referencia <code>this</code> creada automáticamente cuando la declaramos.</p><p>El <code>this</code> de JavaScript es similar a lo que podríamos encontrar en otros lenguajes basados en clases como Java o C# (JavaScript en realidad es un lenguaje basado en prototipos y no tiene un concepto de "clase"): apunta al objeto que está llamando a la función (este objeto a veces se llama <em>contexto</em>). Sin embargo, en JavaScript, las funciones internas de la referencia<em><em> <code>this</code> </em></em> pueden vincularse a diferentes objetos dependiendo de dónde se llame a la función.</p><p>Aquí hay 5 reglas básicas para enlazar <code>this</code> en JavaScript:</p><h3 id="regla-1"><strong><strong><strong><strong>R</strong></strong></strong>egla<strong><strong><strong> 1</strong></strong></strong></strong></h3><p>Cuando se llama a una función en el ámbito global, <code>this</code> hace referencia de forma predeterminada al objeto global (<code>window</code> en el navegador, o <code>global</code> en Node.js). Por ejemplo:</p><pre><code class="language-javascript">function foo() {
  this.a = 2;
}

foo();
console.log(a); // 2</code></pre><p>Nota: Si declaramos la función <code>foo()</code> en modo estricto, y luego la llamamos en el ámbito global, <code>this</code> será <code>undefined</code> y la asignación <code>this.a = 2</code> &nbsp;arrojará una excepción &nbsp;<code>Uncaught TypeError</code> (error de tipo no detectado).</p><h3 id="regla-2"><strong><strong><strong><strong>R</strong></strong></strong>egla<strong><strong><strong> 2</strong></strong></strong></strong></h3><p>Veamos el siguiente ejemplo:</p><pre><code class="language-javascript">function foo() {
  this.a = 2;
}

const obj = {
  foo: foo
};

obj.foo();
console.log(obj.a); // 2</code></pre><p>Claramente, en el fragmento anterior, la función <code>foo()</code> se llama en el <em>contexto</em> del objeto <code>obj</code>, por lo tanto <code>this</code> ahora hace referencia a <code>obj</code>. Entonces, cuando se llama a una función con un objeto de contexto, la referencia &nbsp;<code>this</code> se vincula a dicho objeto.</p><h3 id="regla-3"><strong><strong><strong><strong>R</strong></strong></strong>egla<strong><strong><strong> 3</strong></strong></strong></strong></h3><p><code>.call</code>, <code>.apply</code> y <code>.bind</code> pueden utilizarse para enlazar explícitamente <code>this</code>. Usar <code>.bind(this)</code> es algo que podemos ver en muchos componentes de React.</p><pre><code class="language-javascript">const foo = function() {
  console.log(this.bar)
}

foo.call({ bar: 1 }) // 1</code></pre><p>Aquí vemos algunos ejemplos rápidos de como utilizar cada uno para enlazar <code>this</code>:</p><ul><li><code>.call()</code>: <code>fn.call(thisObj, fnParam1, fnParam2)</code></li><li><code>.apply()</code>: <code>fn.apply(thisObj, [fnParam1, fnParam2])</code></li><li><code>.bind()</code>: <code>const newFn = fn.bind(thisObj, fnParam1, fnParam2)</code></li></ul><h3 id="regla-4"><strong><strong><strong><strong>R</strong></strong></strong>egla<strong><strong><strong> 4</strong></strong></strong></strong></h3><pre><code class="language-javascript">function Point2D(x, y) {
  this.x = x;
  this.y = y;
}

const p1 = new Point2D(1, 2);
console.log(p1.x); // 1
console.log(p1.y); // 2</code></pre><p>Lo que notamos aquí es que al llamar a la función <code>Point2D</code> utilizando la palabra clave <code>new</code>, la referencia <code>this</code> se vincula al objeto <code>p1</code>. Entonces, cuando llamamos a una función utilizando <code>new</code>, un nuevo objeto es creado y la referencia<code>this</code> se vincula al mismo.</p><p>Nota: A una función que llamamos utilizando la palabra clave <code>new</code> también la conocemos como <em>función constructora.</em></p><h3 id="regla-5"><strong><strong><strong><strong>R</strong></strong></strong>egla<strong><strong><strong> 5</strong></strong></strong></strong></h3><p>JavaScript determina el valor de <code>this</code> en tiempo de ejecución, según el contexto actual. Por eso a veces <code>this</code> podría no estar apuntando a dónde esperamos.</p><p>Veamos este ejemplo, una clase Gato que tiene un método llamado <code>hacerSonido()</code>, siguiendo lo que vimos en la regla anterior, utilizamos una función constructora y la palabra clave <code>new</code>.</p><pre><code class="language-javascript">const Gato = function(nombre, sonido) {
  this.nombre = nombre;
  this.sonido = sonido;
  this.hacerSonido = function() {
    console.log( this.nombre + ' decir: ' + this.sonido );
  };
}

const gatito = new Gato('Papá Gordo', 'Mrrooowww');
gatito.haceSonido(); // Papá Gordo dice: Mrrooowww</code></pre><p>Ahora vamos a agregarle al gato el método <code>molestar()</code> para que puedan molestar a las personas repitiendo su sonido 100 veces, con un período de repetición de medio segundo.</p><pre><code class="language-javascript">const Gato = function(nombre, sonido) {
  this.nombre = nombre;
  this.sonido = sonido;
  this.hacerSonido = function() {
    console.log( this.nombre + ' decir: ' + this.sonido );
  };
  this.molestar = function() {
    let contar = 0, max = 100;
    const t = setInterval(function() {
      this.hacerSonido(); // &lt;-- esta línea falla con `this.hacerSonido no es una función` 
      count++;
      if (contar === max) {
        clearTimeout(t);
      }
    }, 500);
  };
}

const gatito = new Gato('Papá Gordo', 'Mrrooowww');
gatito.molestar();</code></pre><p>Esto no funcionará porque dentro de <code>setInterval</code> hemos creado un nuevo contexto con alcance global, entonces <code>this</code> ya no apunta a nuestra instancia gatito. En el navegador, <code>this</code> apuntará al objeto Window, que no tiene un método <code>hacerSonido()</code>.</p><p>Algunas formas de solucionarlo:</p><p>1. Antes de crear el nuevo contexto, asignar <code>this</code> a una variable local llamada <code>me</code>, o <code>self</code>, o cualquier nombre que elijamos, y referenciar esa variable dentro del callback.</p><pre><code class="language-javascript">const Gato = function(nombre, sonido) {
  this.nombre = nombre;
  this.sonido = sonido;
  this.hacerSonido = function() {
    console.log( this.nombre + ' decir: ' + this.sonido );
  };
  this.molestar = function() {
    let contar = 0, max = 100;
    const self = this;
    const t = setInterval(function() {
      self.hacerSonido();
      contar++;
      if (contar === max) {
        clearTimeout(t);
      }
    }, 500);
  };
}

const gatito = new Gato('Papá Gordo', 'Mrrooowww');
gatito.molestar();</code></pre><p>2. Con ES6 podemos evitar tener que asignar <code>this</code> a una variable local usando una arrow function, que automáticamente enlaza <code>this</code> al contexto del código donde ha sido definida.</p><pre><code class="language-javascript">const Gato = function(nombre, sonido) {
  this.nombre = nombre;
  this.sonido = sonido;
  this.hacerSonido = function() {
    console.log( this.nombre + ' decir: ' + this.sonido );
  };
  this.molestar = function() {
    let contar = 0, max = 100;
    const t = setInterval(() =&gt; {
      this.hacerSonido();
      contar++;
      if (contar === max) {
        clearTimeout(t);
      }
    }, 500);
  };
}

const gatito = new Gato('Papá Gordo', 'Mrrooowww');
gatito.molestar();</code></pre><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/the-complete-guide-to-this-in-javascript/">The Complete Guide to this in JavaScript</a><br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript promesas explicado ]]>
                </title>
                <description>
                    <![CDATA[ ¿Qué es una promesa en JavaScript? JavaScript tiene un hilo de proceso único, lo que significa que dos porciones del script no pueden ejecutarse al mismo tiempo, deben hacerlo una después de la otra. Una promesa es un objeto que representa la terminación o el fracaso de una operación asíncrona, ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/promesas-javascript-explicado/</link>
                <guid isPermaLink="false">5ff2686a8c7cd154bb983ca0</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Tue, 16 Feb 2021 05:45:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1531417666976-ed2bdbeb043b.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="-qu-es-una-promesa-en-javascript"><strong><strong>¿Qué</strong> es una promesa en<strong><strong> JavaScript?</strong></strong></strong></h2><p>JavaScript tiene un hilo de proceso único, lo que significa que dos porciones del script no pueden ejecutarse al mismo tiempo, deben hacerlo una después de la otra. Una promesa es un objeto que representa la terminación o el fracaso de una operación asíncrona, y el valor resultante.</p><pre><code class="language-JavaScript">var promise = new Promise(function(resolve, reject) {
  // hacemos algo, entonces…

  if (/* todo funciono */) {
    resolve("Mira, funcionó!");
  }
  else {
    reject(Error("Se rompe"));
  }
});</code></pre><h2 id="una-promesa-existe-en-uno-de-estos-estados"><strong><strong>Una Promesa existe en uno de estos estados</strong></strong></h2><ul><li><strong>Pendiente</strong>: Estado inicial, ni cumplida ni rechazada.</li><li><strong>Cumplida</strong>: la operación se completó satisfactoriamente.</li><li><strong>Rechazada</strong>: la operación falló.</li></ul><p>El objeto promesa funciona como un contenedor para un valor que no necesariamente conocemos cuando la promesa es creada. En una operación asíncrona, nos permite asociar distintos controladores al resultado si se cumple con éxito, o a los motivos del error si ha fallado.</p><p>Esto le permite a un método asíncrono devolver un valor de manera síncrona: en lugar de devolver el valor final, devuelve una promesa de proporcionar ese valor en algún momento del futuro.</p><h2 id="usando-then-para-encadenar-promesas"><strong><strong><strong>Us</strong>ando<strong> ‘Then’ </strong>para encadenar promesas</strong></strong></h2><p>Para tomar varias llamadas asíncronas y sincronizarlas una luego de la otra, podeos utilizar el encadenamiento de promesas. Esto nos permite utilizar el valor resultante de una promesa en subsecuentes callbacks.</p><pre><code class="language-JavaScript">Promise.resolve('alguna')
  .then(function(string) { // &lt;-- Esto sucederá luego de que se resuelva la promesa anterior (devolviendo el valor 'alguna')
    return new Promise(function(resolve, reject) {
      setTimeout(function() {
        string += ' cosa';
        resolve(string);
      }, 1);
    });
  })
  .then(function(string) { // &lt;-- Esto sucederá luego de que la nueva promesa del .then anterior se resuelva
    console.log(string); // &lt;-- Se muestra 'alguna cosa' en la consola
  });</code></pre><h2 id="promesas-api"><strong><strong>Promesas<strong> API</strong></strong></strong></h2><p>Hay cuatro métodos estáticos en la clase Promesa:</p><ul><li>Promise.resolve</li><li>Promise.reject</li><li>Promise.all</li><li>Promise.race</li></ul><h2 id="las-promesas-pueden-encadenarse"><strong><strong>Las promesas pueden encadenarse</strong></strong></h2><p>Cuando escribimos promesas para resolver un problema particular, podemos encadenarlas para crear una lógica.</p><pre><code class="language-JavaScript">var add = function(x, y) {
  return new Promise((resolve,reject) =&gt; {
    var sum = x + y;
    if (sum) {
      resolve(sum);
    }
    else {
      reject(Error("No se pudo realizar la suma!"));
    }
  });
};

var subtract = function(x, y) {
  return new Promise((resolve, reject) =&gt; {
    var sum = x - y;
    if (sum) {
      resolve(sum);
    }
    else {
      reject(Error("No se pudo realizar la resta!"));
    }
  });
};

// Empezando cadena de promesas
add(2,2)
  .then((added) =&gt; {
    // suma = 4
    return subtract(added, 3);
  })
  .then((subtracted) =&gt; {
    // resta = 1
    return add(subtracted, 5);
  })
  .then((added) =&gt; {
    // suma = 6
    return added * 2;    
  })
  .then((result) =&gt; {
    // resultado = 12
    console.log("My result is ", result);
  })
  .catch((err) =&gt; {
    // Si alguna parte de la cadena es rechazada, devolver mensaje de error.
    console.log(err);
  });</code></pre><p>Esto es útil para seguir un <em>paradigma de programación funcional.</em> Al crear funciones para manipular datos, podemos encadenarlas para ensamblar un resultado final. Si en cualquier punto de la cadena de funciones se <em>rechaza</em> un valor, la cadena saltará al controlador <code>catch()</code> más cercano.</p><p>Para más información sobre Programación Funcional: <a href="https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional">Programación Funcional</a></p><h2 id="generadores-de-funciones"><strong>Generadores de Funciones</strong></h2><p>En versiones recientes, JavaScript introdujo nuevas formas de manejar Promesas de manera nativa. Una de ellas son los generadores de funciones. Estos generadores son funciones que pueden ser pausadas. Al ser usados con Promesas, los generadores hacen su lectura más fácil y de apariencia síncrona.</p><pre><code class="language-JavaScript">const myFirstGenerator = function* () {
  const one = yield 1;
  const two = yield 2;
  const three = yield 3;

  return 'Terminado!';
}

const gen = myFirstGenerator();</code></pre><p>Aquí tenemos nuestro primer generador, que podemos identificar por la sintaxis <code>function*</code>. La variable <code>gen</code> no va a ejecutar <code>myFirstGenerator</code> directamente, pero alistará al generador para ser usado.</p><pre><code class="language-JavaScript">console.log(gen.next());
// Returns { value: 1, done: false }</code></pre><p>Al ejecutar <code>gen.next()</code> se reanudará el generador. Como es la primera vez que llamamos <code>gen.next()</code> ejecutará <code>yield 1</code> y volverá a pausarse hasta que volvamos a llamar <code>gen.next()</code>. Cuando <code>yield 1</code> es llamado, nos devolverá el <code>value</code> que se obtuvo y si el generador está hecho (<code>done</code>) o no.</p><pre><code class="language-javascript">console.log(gen.next());
// Devuelve { value: 2, done: false }

console.log(gen.next());
// Devuelve { value: 3, done: false }

console.log(gen.next());
// Devuelve { value: 'Terminado!', done: true }

console.log(gen.next());
// Arroja un error</code></pre><p>A medida que seguimos llamando <code>gen.next()</code> continuará hacia el siguiente <code>yield</code> y se pausará cada vez. Cuando se terminen los <code>yield</code>, procederá a ejecutar el resto del generador, que en este caso solo devolver <code>'Terminado!'</code>. Si llamamos <code>gen.next()</code> una vez más, obtendremos un error porque el generador ha concluido.</p><p>Ahora bien, imaginemos que cada <code>yield</code> en este ejemplo es una promesa, en ese caso el código luciría extremadamente síncrono.</p><h3 id="promise-all-iterable-es-muy-til-para-m-ltiples-consultas-a-distintas-fuentes"><strong><strong><strong>Promise.all(iterable)</strong></strong> es muy útil para múltiples consultas a distintas fuentes</strong></h3><p>El método Promise.all (iterable) devuelve una única Promesa que se resolverá cuando todas las promesas del argumento iterable se hayan resuelto o cuando el argumento iterable no contenga promesas. Rechaza con la razón de la primera promesa que rechaza.</p><pre><code class="language-JavaScript">var promise1 = Promise.resolve(catSource);
var promise2 = Promise.resolve(dogSource);
var promise3 = Promise.resolve(cowSource);

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// resultado esperado: Array ["catData", "dogData", "cowData"]</code></pre><h3 id="m-s-informaci-n-sobre-promesas-">Más información sobre promesas:</h3><ul><li><a href="https://www.freecodecamp.org/news/how-javascript-promises-actually-work-from-the-inside-out-76698bb7210b/">How JavaScript promises actually work</a></li><li><a href="https://www.freecodecamp.org/news/how-to-implement-promises-in-javascript-1ce2680a7f51/">How to implement promises in JavaScript</a></li><li><a href="https://www.freecodecamp.org/news/how-to-write-a-javascript-promise-4ed8d44292b8/">How to write a JavsScript promise</a></li></ul><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/javascript-promises-explained/"><strong>JavaScript Promises Explained</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tipos de datos en JavaScript: typeof explicado ]]>
                </title>
                <description>
                    <![CDATA[ typeof es un operador JavaScript que al ser llamado sobre una variable, devuelve el tipo de dato que dicha variable contiene. Entre otras cosas, podemos utilizarlo para validar de parámetros de una función o para comprobar si una variable ha sido definida. El operador typeof es muy útil porque nos ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tipos-de-datos-en-javascript-typeof-explicado/</link>
                <guid isPermaLink="false">5ff1ce998c7cd154bb98377b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Tue, 16 Feb 2021 04:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1461958508236-9a742665a0d5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p><code>typeof</code> es un operador JavaScript que al ser llamado sobre una variable, devuelve el tipo de dato que dicha variable contiene. Entre otras cosas, podemos utilizarlo para validar de parámetros de una función o para comprobar si una variable ha sido definida.</p><p>El operador <code>typeof</code> es muy útil porque nos permite consultar fácilmente el tipo de datos que una variable contiene. Esto es importante en JavaScript porque se trata de un <a href="https://developer.mozilla.org/es/docs/Glossary/Tipado_din%C3%A1mico">lenguaje escrito dinámicamente</a>. Esto significa que no necesitamos asignar un tipo de datos fijo a una variable cuando la creamos. Al no restringir las variables de esta manera, el tipo de datos que contienen puede cambiar durante la ejecución de un programa.</p><p>Por ejemplo:</p><pre><code class="language-javascript">var x = 12345; // number
x = 'string'; // string
x = { key: 'value' }; // object</code></pre><p>Como podemos ver en el ejemplo anterior, una variable puede cambiar de tipo durante la ejecución de un programa. En nuestro trabajo diario puede ser complejo llevar un registro de estos cambios y es en esos casos donde el operador <code>typeof</code> será útil.</p><p>El operador <code>typeof</code> devuelve una cadena de texto que representa el tipo de dato actualmente contenido en una variable. Para usarlo podemos escribir <code>typeof(variable)</code> o <code>typeof variable</code>. Volviendo al ejemplo anterior, podemos utilizarlo para comprobar el tipo de dato de la variable <code>x</code> en cada paso:</p><pre><code class="language-javascript">var x = 12345; 
console.log(typeof x) // number
x = 'string'; 
console.log(typeof x) // string
x = { key: 'value' };
console.log(typeof x) // object</code></pre><p>De esta manera, por ejemplo, podemos comprobar el tipo de dato de una variable dentro de una función y continuar en caso de obtener el resultado esperado.</p><p>Aquí tenemos una función de ejemplo que puede tomar una variable y anunciar si es una cadena de texto o un número:</p><pre><code class="language-javascript">function doSomething(x) {
  if(typeof(x) === 'string') {
    alert('x is a string')
  } else if(typeof(x) === 'number') {
    alert('x is a number')
  }
}</code></pre><p>También podemos utilizar el operador <code>typeof</code> para asegurarnos de que una variable ha sido definida antes de utilizarla en nuestro código. Esto puede ser útil para prevenir un error muy común, intentar acceder a una variable cuyo valor aún no ha sido definido.</p><pre><code class="language-javascript">function(x){
  if (typeof(x) === 'undefined') {
    console.log('variable x is not defined');
    return;
  }
  // aquí continuamos con la función...
}</code></pre><p>Cuando trabajamos con números, el valor que devuelve el operador <code>typeof</code> puede no ser lo que estamos esperando. </p><p>Los números pueden convertirse en <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/NaN">NAN (No es un número)</a> por distintos motivos.</p><pre><code class="language-javascript">console.log(typeof NaN); //"number"</code></pre><p>Quizás estamos intentando multiplicar un número con un objeto, porque olvidamos acceder al número que ese objeto contiene:</p><pre><code class="language-javascript">var x = 1;
var y = { number: 2 };
console.log(x * y); // NaN
console.log(typeof (x * y)); // number</code></pre><p>En este caso, no será suficiente utilizar <code>typeof</code> para comprobar que el resultado es un número, ya que <code>NaN</code> también cumple con esta condición. </p><p>En la siguiente función, vamos a comprobar que el valor es un número pero excluyendo a <code>NaN</code> de la condición:</p><pre><code class="language-javascript">function isNumber(data) {
  return (typeof data === 'number' &amp;&amp; !isNan(data));
}</code></pre><p>Si bien este es un método muy útil para validar tipos de datos, también debemos tener cuidado porque JavaScript tiene algunas rarezas y entre ellas encontramos el resultado de <code>typeof</code> en algunas situaciones particulares. En JavaScript muchas cosas son inesperadamente objetos, como por ejemplo los arreglos (arrays) y los valores <code>null</code></p><pre><code class="language-javascript">var x = [1,2,3,4]; 
console.log(typeof x)  // object

console.log(typeof null)  // object</code></pre><p>Traducido del artículo - <a href="https://www.freecodecamp.org/news/javascript-data-types-typeof-explained/">JavaScript Data Types: Typeof Explained</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Accesibilidad Web: ¿Cuáles son los seis errores más comunes y como solucionarlos? ]]>
                </title>
                <description>
                    <![CDATA[ La Accesibilidad es un aspecto fundamental de la Web. Para construir herramientas accesibles para el mayor número de personas posibles, conozcamos cuáles son los errores que cometemos con más frecuencia y de qué manera solucionarlos. La Accesibilidad Web es un estándar desarrollado por el World Wide Web Consortium (W3C) [https://www.w3c.es] ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/accesibilidad-web-cuales-son-los-seis-errores-mas-comunes-y-como-solucionarlos/</link>
                <guid isPermaLink="false">6007890fa4e0700982a9f343</guid>
                
                    <category>
                        <![CDATA[ Accesibilidad Web ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Sun, 24 Jan 2021 14:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1482062364825-616fd23b8fc1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>La Accesibilidad es un aspecto fundamental de la Web. Para construir herramientas accesibles para el mayor número de personas posibles, conozcamos cuáles son los errores que cometemos con más frecuencia y de qué manera solucionarlos.</p><p>La <strong>Accesibilidad Web</strong> es un estándar desarrollado por el <a href="https://www.w3c.es">World Wide Web Consortium (W3C)</a> que incluye guías, herramientas y material de soporte. Nos permite <strong>optimizar nuestras interfaces para garantizar el acceso a personas con discapacidades o que puedan experimentar algún tipo de impedimento para acceder al contenido,</strong> ya sea temporal o permanente.</p><p>Al navegar en la web, estas personas hacen uso de funcionalidades propias del dispositivo o del navegador, sumando en algunos casos tecnologías de asistencia adicionales, como lectores de pantalla o controles de navegación. Estas herramientas requieren que nuestro código respete una serie de recomendaciones o buenas prácticas que muchas olvidamos. Tan así es que el útimo <strong>WebAIM Millon</strong> (un test anual que realiza el W3C sobre una muestra de un millón de sitios web) arrojó un resultado alarmante: <strong>el 98.1% de los sitios analizados mostraron problemas de Accesibilidad.</strong> Peor aún, este porcentaje viene aumentando en los últimos años.</p><p>Las herramientas utilizadas en este análisis fueron la <strong>Guía de Accesibilidad para Contenido Web</strong> <a href="http://www.sidar.org/traducciones/wcag20/es/">WCAG 2.0</a> y un software de evaluación de uso libre llamado <strong>Wave</strong>. Si bien el análisis no cubre la totalidad de los requerimientos para hacer que un sitio sea accesible, es un buen punto de partida.</p><p>Repasemos entonces cuáles son los seis errores más comunes identificados por el estudio del millón (el número corresponde al porcentaje de sitios donde se encontró el error):</p><ul><li><strong>Bajo contraste 86.3%</strong></li><li><strong>Imágenes sin texto alternativo 66%</strong></li><li><strong>Links vacíos 59.9%</strong></li><li><strong>Entradas sin etiqueta label en formularios 53.8%</strong></li><li><strong>Botones vacíos 28.7%</strong></li><li><strong>Documento sin atributo de lenguaje 28%</strong></li></ul><p>Existen muchos problemas que exceden las posibilidades del testing automático, ya que requieren un análisis cualitativo o lo que es aún mejor, realizar pruebas con personas usuarias reales. Pero desde nuestro lugar, podemos empezar a contribuir solucionando estos errores que, como veremos a continuación, no requieren un gran esfuerzo técnico, de tiempo o presupuesto.</p><h2 id="bajo-contraste-86-3-">Bajo contraste (86.3%)</h2><p>El contraste entre texto y fondo es fundamental para lograr legibilidad. WCAG 2.0 establece para el nivel AA que el contraste mínimo entre el color de texto y el de fondo debería ser mayor o igual a 4,5:1, en una escala dónde 1:1 es blanco sobre blanco y 21:1 negro sobre blanco.</p><p>Este ratio puede variar en función al tamaño, estilo y finalidad del texto. Lo bueno es que no necesitamos aprender todos esos números de memoria y tomarnos el tiempo para hacer los cálculos, podemos utilizar esta <a href="https://webaim.org/resources/contrastchecker/">herramienta online para chequear contraste de colores</a> que hará todo el trabajo por nosotros. Solo debemos ingresar los colores con los que queremos trabajar y nos indicará, en cada caso, si el contraste es adecuado o necesitamos hacer ajustes.</p><h2 id="im-genes-sin-texto-alternativo-66-">Imágenes sin texto alternativo (66%)</h2><p>El texto alternativo <code>alt</code> es un <strong>atributo de la etiqueta html Imagen </strong><code>&lt;img&gt;</code> y como su nombre lo indica, ofrece una alternativa en formato texto al contenido expresado o representado en la imagen.</p><pre><code class="language-html">&lt;img src="imagen.jpg" alt="Texto alternativo de la imagen" /&gt;
</code></pre><p>El texto que debemos incluir en este atributo varía según la función que cumple la imagen, veamos algunos casos:</p><h3 id="im-genes-decorativas">Imágenes decorativas</h3><p>Si se trata de una imagen decorativa, que no transmite información indispensable para comprender el contenido, como por ejemplo un borde, o una textura de fondo, debemos utilizar un atributo <code>alt</code> vacío. Aunque parezca un error, esta es la manera correcta de indicar que una imagen es irrelevante para la comprensión del contenido.</p><pre><code class="language-html">&lt;img src="textura-fondo.png" alt="" /&gt;</code></pre><h3 id="-conos-y-botones-gr-ficos">Íconos y botones gráficos</h3><p>En un interface de usuario, es común que utilicemos imágenes en forma de íconos que actúan como botones. Aquí podemos distinguir dos situaciones diferentes.</p><p>Si no hay texto acompañando a la imagen / ícono, podemos utilizar el atributo &nbsp;<code>alt</code> &nbsp;para indicar la función que cumple ese ícono, por ejemplo:</p><pre><code class="language-html">&lt;a href="documento.pdf"&gt;
  &lt;img src="icono-descargar.jpg" alt="Descargar documento en formato PDF." /&gt;
&lt;/a&gt;</code></pre><p>En cambio, si la imagen está acompañada de texto, ese texto debería ser suficiente para describir la acción. La imagen, al ser solo un elemento decorativo, debe incluir un atributo &nbsp;<code>alt</code> &nbsp;vacío.</p><pre><code class="language-html">&lt;a href="./documento.pdf"&gt;
  &lt;img src="icono-descargar.jpg" alt=""/&gt; 
  Descargar documento en formato PDF.
&lt;/a&gt;</code></pre><h3 id="im-genes-ilustrativas-o-representativas">Imágenes ilustrativas o representativas</h3><p>Por último, encontramos las imágenes o gráficos que se utilizan para transmitir contenido. En este caso, el texto alternativo debe ser equivalente a esa información que transmite la imagen, teniendo en cuenta el contexto en el que se presenta.</p><p>Es importante prestar atención a los siguientes aspectos:</p><ul><li>Tratar de ser conciso y específico al describir el contenido o la acción.</li><li>No excluir información vital para entender el significado de la imagen en relación con el contenido que acompaña y al contexto en el que se presenta.</li><li>No incluir información redundante.</li><li>No es necesario incluir las palabras “Imagen de.. ” o “Imagen que representa.. “. Si el formato de la imagen es relevante para el contenido, puede indicarse al final, por ejemplo <code>alt="Paisaje montañoso y nevado, ilustración digital."</code> &nbsp;</li><li>Siempre terminar la frase con un punto (.) para que la oración no suene inconclusa.</li></ul><h2 id="links-vac-os-59-9-">Links Vacíos (59.9%)</h2><p>En el punto anterior vimos un ejemplo de este error. Si definimos un enlace con la etiqueta html <code>&lt;a&gt;</code> pero dentro de la etiqueta solo agregamos una imagen, ese link será considerado vacío. Como ya vimos, podemos utilizar el atributo &nbsp;<code>alt</code> para incluir este texto y permitir que las tecnologías de asistencia puedan <em>leer</em> nuestro enlace.</p><pre><code class="language-html">&lt;a href="index.html"&gt;
  &lt;img src="logotipo.png" alt="Ir a la página principal"&gt;
&lt;/a&gt;</code></pre><h2 id="elementos-interactivos-sin-etiqueta-label-en-formularios-53-8-">Elementos interactivos sin etiqueta label en formularios (53.8%)</h2><p>En html disponemos de muchos elementos interactivos que nos permiten ingresar datos en un formulario, como por ejemplo entradas de texto &nbsp;<code>&lt;input type="text"&gt;</code> o desplegables con opciones para seleccionar &nbsp;<code>&lt;select&gt;</code>. Estos elementos deben ir siempre acompañados de una etiqueta que describa su propósito. En la mayoría de los casos, usaremos la etiqueta html <code>&lt;label&gt;</code> con un atributo &nbsp;<code>for</code> que debe apuntar al &nbsp;<code>id</code> del elemento interactivo, por ejemplo:</p><pre><code class="language-html">&lt;label for="nombre"&gt;Ingrese su nombre:&lt;/label&gt;

&lt;input type="text" id="nombre"/&gt;
</code></pre><p>Ahora bien, supongamos que el departamento de diseño determinó que la función del elemento interactivo es obvia y no necesita una descripción textual que sea visible en la pantalla. En este caso tenemos algunas opciones:</p><ul><li>Incluir la etiqueta &nbsp;<code>&lt;label&gt;</code> &nbsp;pero ocultarla utilizando CSS</li><li>Utilizar el atributo &nbsp;<code>aria-label</code> &nbsp;</li></ul><pre><code class="language-html">&lt;input type="text" aria-label="Ingrese su nombre."/&gt;
</code></pre><ul><li>Utilizar el atributo &nbsp;<code>aria-labelledby</code> apuntando al <code>id</code> de otro elemento que describa esa funcionalidad: &nbsp; </li></ul><pre><code class="language-html">&lt;h3 id="titulo"&gt;Ingrese su nombre&lt;/h3&gt;

&lt;input type="text" aria-labelledby="titulo"/&gt;
</code></pre><h2 id="botones-vac-os-28-7-">Botones vacíos 28.7%</h2><p>En el caso de los botones, vemos el mismo patrón que en las imágenes. Si un botón no contiene texto en su interior, necesitamos incluirlo de alguna manera. Si tenemos una imagen en el interior, podemos usar el atributo <code>alt</code> como vimos antes.</p><pre><code class="language-html">&lt;button&gt;
  &lt;img src="cerrar.png" alt="Cerrar ventana." /&gt;
&lt;/button&gt;
</code></pre><p>Si el botón está completamente vacío, porque la imagen es un fondo o pseudo elemento css, también podemos utilizar el atributo &nbsp;<code>aria-label</code> &nbsp;</p><pre><code class="language-html">&lt;button aria-label="Cerrar ventana."&gt;&lt;/button&gt;
</code></pre><h2 id="documento-sin-atributo-de-lenguaje-28-">Documento sin atributo de lenguaje 28%</h2><p>La regla verifica que al menos el elemento raíz de una página HTML incluya un atributo <code>lang</code> con un valor de idioma conocido, por ejemplo <code>es</code> (español) o <code>en</code> (inglés):</p><pre><code class="language-html">&lt;html lang="es"&gt;
  &lt;head&gt;...&lt;/head&gt;
  &lt;body&gt;
    &lt;!-- Contenido en español --&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>También podemos agregar el atributo <code>lang</code> en un elemento interior, que contenga contenido en otro idioma:</p><pre><code class="language-html">&lt;html lang="es"&gt;
  &lt;head&gt;...&lt;/head&gt;
  &lt;body&gt;
    &lt;!-- Contenido en español --&gt;
      
    &lt;section lang="en"&gt;
      &lt;!-- Contenido en inglés --&gt;
    &lt;/section&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>Como podemos imaginar, esta información será de gran utilidad para que el contenido pueda ser transmitido adecuadamente por los lectores de pantalla, pero también supone beneficios a la hora de traducir e indexar ese contenido.</p><h2 id="-buen-trabajo-">¡Buen trabajo!</h2><p>Logramos solucionar al menos algunos de los errores más comunes en el desarrollo de sitios web accesibles. &nbsp;Como ya mencionamos, este análisis solo cubre los errores que pueden ser detectados con herramientas automáticas, pero sirven como punto de partida para empezar a prestar atención y contribuir a transformar obstáculos en herramientas de inclusión. &nbsp;</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo comprobar si un Arreglo está vacío utilizando la propiedad length en Javascript ]]>
                </title>
                <description>
                    <![CDATA[ Programando en JavaScript, es habitual que necesitemos saber si un arreglo está vacío o no. Para eso podemos utilizar la propiedad length Esta propiedad establece o devuelve la cantidad de elementos en un arreglo. Por lo tanto nos permite saber si está vacío o no. Un arreglo vacío tendrá 0 ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-comprobar-si-un-arreglo-javascript-esta-vacio/</link>
                <guid isPermaLink="false">5fdbf49d8c7cd154bb97952f</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Fri, 25 Dec 2020 13:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1524077410193-2f667f9ab09a.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Programando en JavaScript, es habitual que necesitemos saber si un arreglo está vacío o no. Para eso podemos utilizar la propiedad <code>length</code></p><p>Esta propiedad <em>establece o devuelve</em> la cantidad de elementos en un arreglo. Por lo tanto nos permite saber si está vacío o no. Un arreglo vacío tendrá <code>0</code> elementos dentro.</p><p>Veamos algunos ejemplos.</p><h2 id="ejemplos-de-la-sintaxis-al-utilizar-length"><strong>Ejemplos de la sintaxis al utilizar .length</strong></h2><pre><code class="language-javascript">Const miArreglo = [‘Free’, ‘Code’, ‘Camp’];</code></pre><p>Aquí hemos creado una variable y asignamos como valor un arreglo que contiene tres elementos. </p><p>Utilizando la propiedad <code>length</code> podemos comprobar esta cantidad:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">miArreglo.length</code></pre><figcaption>Como toda propiedad en un objeto Javascript, vamos a llamarla utilizando dot notation, es decir: nombre de la variable + punto + nombre de la propiedad.&nbsp;</figcaption></figure><p>Esto devuelve &nbsp;<code>3</code> &nbsp;porque hay tres elementos dentro del arreglo.</p><p>Ahora veamos tres alternativas a la hora de usar la propiedad <code>length</code><strong>:</strong></p><h3 id="ejemplo-1"><strong>Ejemplo 1</strong></h3><p>Primero creamos un arreglo sin elementos:</p><pre><code class="language-javascript">const arr = [];</code></pre><p>Ahora vamos a comprobar si el arreglo está vacío llamando a la propiedad <code>length</code></p><pre><code class="language-javascript">arr.length</code></pre><p>Esto devuelve <code>0</code> porque no hay elementos dentro de <code>arr</code></p><h3 id="ejemplo-2"><strong>Ejemplo 2</strong></h3><p>También podemos ser aún más específicos y comprobar si el valor de <code>length</code> es igual a cero:</p><p><code>if (arr.length === 0) { console.log("Está vacío!") }</code></p><p>Si nuestro arreglo está vacío, el mensaje se registrará en la consola. Si el arreglo contiene al menos un elemento, el código dentro del bloque condicional <code>if</code> no se ejecutará. </p><p>Veamos una tercer forma de utilizar la propiedad <code>length</code>.</p><h3 id="ejemplo-3"><strong>Ejemplo 3</strong></h3><p>Combinando el uso de la propiedad <code>length</code> con el operador lógico <strong>"</strong>not<strong>"</strong> de Javascript, el símbolo <code>!</code>, podemos <em>preguntar</em> si un arreglo está vacío.</p><p>El operador <code>!</code> niega la expresión que precede. Es decir que podemos utilizarlo para reemplazar el resultado de un dato booleano por su opuesto. Y por es en este caso podemos devolver <code>true</code> si el arreglo está vacío.</p><p>Para este ejemplo podemos a usar la consola Javascript. En Chrome podemos encontrarla en Inpsect -&gt; Console.</p><p>Primero, vamos a crear un arreglo sin elementos:</p><pre><code class="language-javascript">const arr = []
// undefined</code></pre><p>A continuación, vamos a usar el operador <code>!</code> (not) junto a la propiedad <code>length</code> para comprobar que está vacío:</p><pre><code class="language-javascript">const arr = []
// undefined

!arr.length
// true</code></pre><p>Sin usar el operador "not" <code>arr.length</code> devolvería <code>0</code> que en Javascript es equivalente a <code>false</code>. Al utilizar el operador <code>!</code> lo que ocurre primero es que Javascript convierte a &nbsp;<code>0</code> &nbsp;en un valor booleano, por lo tanto <code>0</code> &nbsp;se convierte en su equivalente <code>false</code> para que luego el operador pueda transformarlo en su opuesto, es decir <code>true</code>.</p><p>A continuación vamos a <em>preguntar</em> si el arreglo está vacío, utilizando un condicional <code>if</code> para imprimir un mensaje con la respuesta:</p><pre><code class="language-javascript">const arr = []
// undefined

!arr.length
// true

if(!arr.length) {console.log("El array está vacío!")}
// El arreglo está vacío!</code></pre><p>Ya que estamos trabajando con arreglos, veamos también cómo comprobar que un dato es en efecto del tipo arreglos.</p><h3 id="c-mo-usar-el-m-todo-array-isarray-"><strong>Cómo usar el método Array.isArray()</strong></h3><p>Supongamos que recibimos un dato y esperamos que sea un arreglo, por ejemplo &nbsp;<code>["free", "code", "camp"]</code> pero en realidad recibimos esa misma información <em>transformada</em> en una cadena de texto <code>"free, code, camp"</code> </p><p>En este caso, el valor de <code>length</code> sera diferente para cada tipo de dato:</p><pre><code class="language-javascript">const miArreglo = [‘Free’, ‘Code’, ‘Camp’];
miArreglo.length; // 3

const myString = ‘Free, Code, Camp’;
myString.length; // 16
</code></pre><p>Este error es mas común de lo que podría parecer, por eso es una buena idea utilizar el método <code>Array.isArray()</code> para asegurarnos de que estamos trabajando con el tipo esperado. Este método determina si el dato que le estamos pasando es realmente un arreglo y en ese caso, devuelve <code>true</code>.</p><p>Vamos a agregarlo a nuestro ejemplo anterior:</p><pre><code class="language-javascript">const arr = []
// undefined

!arr.length
// true

if(Array.isArray(arr) &amp;&amp; !arr.length) {console.log("Es un arreglo y está vacío!")}
// Es un arreglo y está vacío!</code></pre><h2 id="en-resumen"><strong>En resumen</strong></h2><p>En este artículo aprendimos como usar la propiedad <code>length</code> en JavaScript, siguiendo distintas alternativas para comprobar si un arreglo está vacío o no. Esta propiedad <code>length</code> devuelve el número de elementos que un arreglo contiene.</p><p>También aprendimos que es recomendable usar el método <code>Array.isArray</code> antes de consultar la propiedad <code>length</code> de un dato, para asegurarnos que es del tipo arreglo como esperamos.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/madisonkanna/"><strong>Madison Kanna</strong></a> - <a href="https://www.freecodecamp.org/news/check-if-javascript-array-is-empty-or-not-with-length/"><strong>How to Check if a JavaScript Array is Empty or Not with .length</strong></a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Ejemplo de Cadena de Texto dividida en Javascript – Cómo dividir una cadena de texto en un Arreglo en JS ]]>
                </title>
                <description>
                    <![CDATA[ Una cadena de texto (string) es una estructura de datos que representa una secuencia de caracteres, mientras que un arreglo (array) es una estructura de datos que contiene múltiples elementos o valores. Sabías que una cadena de texto puede ser dividida y transformada en un arreglo de multiples cadenas de ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/dividir-cadena-de-texto-en-partes-javascript/</link>
                <guid isPermaLink="false">5fd814c18c7cd154bb976a41</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Fernando Mercadal ]]>
                </dc:creator>
                <pubDate>Wed, 23 Dec 2020 20:54:35 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2021/04/photo-1517101786168-dfe159a17eab.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Una cadena de texto (string<strong>)</strong> es una estructura de datos que representa una secuencia de caracteres, mientras que un arreglo (array) es una estructura de datos que contiene múltiples elementos o valores.</p><p>Sabías que una cadena de texto puede ser dividida y transformada en un arreglo de multiples cadenas de texto? En Javascript podemos hacer esto utilizando el método &nbsp;<code>split</code>. &nbsp;Veamos como funciona con algunos ejemplos.</p><h2 id="tl-dr"><strong>TL;DR</strong></h2><p>Si sólo estas buscando el código, aquí va:</p><pre><code class="language-javascript">const editor = 'free code camp'
editor.split(' ') // [ 'free', 'code', 'camp' ]
</code></pre><h2 id="sintaxis">Sintaxis</h2><p>De acuerdo con <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/split">MDN</a>, la sintaxis que necesitamos para dividir una cadena de texto es <code>str.split([separador [, limite ]])</code>. Si lo aplicamos al ejemplo anterior:</p><ul><li><code>str</code> es nuestra cadena de texto, la constante <code>editor</code></li><li><code>separador</code> es <code>' '</code> y será el valor tomado como punto de referencia para dividir las partes.</li><li>No existe un <code>limite</code> por lo tanto el arreglo tendrá tantos elementos como partes puedan resultar de la división (en este caso tres).</li></ul><h2 id="-cu-ndo-necesitamos-dividir-una-cadena-de-texto-de-esta-manera"><strong>¿</strong>Cuándo <strong>necesitamos dividir una cadena de texto de esta manera?</strong></h2><h3 id="ejemplo-1-obteniendo-una-parte-de-la-cadena-de-texto-"><strong>Ejemplo 1: obteniendo una parte de la cadena de texto.</strong></h3><p>Aquí tenemos un ejemplo común que implica obtener un token desde un encabezado auth que es parte de un sistema de autenticación basado en token. </p><p>Si no tienes idea que significa eso, no hay problema. &nbsp;Todo lo que necesitas saber es que existe una cadena de texto con el valor <code>bearer token</code>, pero sólo necesitamos <code>token</code> (porque es la parte que identifica al usuario):</p><pre><code class="language-javascript">const authHeader = 'bearer token'
const split = authHeader.split(' ') // (1) [ 'bearer', 'token' ]
const token = split[1] // (2) token</code></pre><p>Repasemos lo que ocurre en el código anterior:</p><ol><li>La cadena de texto es dividida utilizando <code>' '</code> como separador y las partes resultantes son almacenadas en un arreglo.</li><li>Accedemos a la segunda entrada de ese arreglo.</li></ol><h3 id="ejemplo-2-aplicar-m-todos-de-arreglo-a-una-cadena-de-texto"><strong>Ejemplo 2: aplicar métodos de arreglo a una cadena de texto</strong></h3><p>Muchas veces el dato que estamos manejando es del tipo cadena de texto, pero necesitamos aplicarle métodos de arreglo (por ejemplo <code>map</code>, <code>filter</code>, or <code>reduce</code>).</p><p>Supongamos que tenemos una cadena de texto en código morse y queremos traducirlo: </p><pre><code class="language-javascript">const morse = '-.-. --- -.. .'
// (1)
const morseToChar = {
  '-.-.': 'c',
  '-..': 'd',
  '.': 'e',
  '---': 'o',
}

const ArregloMorse = morse.split(' ') // (2) [ '-.-.', '---', '-..', '.' ]
const arregloTexto = arregloMorse.map((char) =&gt; morseToChar[char]) // (3) [ 'c', 'o', 'd', 'e' ]
const texto = arregloTexto.join(") // (4)
</code></pre><p>Veamos que pasa con este código:</p><ol><li>Creamos un objeto literal para asignar los caracteres morse al alfabeto</li><li>El código morse es dividido y transformado en un arreglo utilizando <code>' '</code> como separador.. (Sin <code>' '</code> como argumento, terminaríamos con un arreglo conteniendo entradas separadas para cada <code>.</code> y <code>-</code> .)</li><li>El arreglo de código morse se asigna/ transforma en un arreglo de texto.</li><li>Utilizamos el método <code>join()</code> para crear y devolver una nueva cadena de texto del arreglo, utilizando <code>''</code> como separador. (Sin <code>''</code> como argumento el resultado sería <code>c,o,d,e</code>.)</li></ol><h2 id="c-mo-a-adir-un-l-mite-al-split"><strong>Cómo añadir un límite al split</strong></h2><p>Como podemos ver en <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/split">MDN</a>, el método <code>split</code> también puede recibir <code>limite</code> como argumento limitando al número de elementos creados dentro del arreglo resultante. Nunca he necesitado hacer esto, pero veamos como aplicarlo:</p><pre><code class="language-javascript">const editor = 'free code camp'
editor.split(' ', 1) // [ 'free' ]
</code></pre><p>En este ejemplo el arreglo resultante sólo contiene el elemento &nbsp;<code>'free'</code> porque establecimos el límite de un elemento. Sin el argumento, el resultado del arreglo hubiese sido <code>[ 'free', 'code', 'camp' ]</code>.</p><h2 id="antes-de-que-te-vayas-">Antes de que te vayas…</h2><p>Gracias por leer este artículo! Escribo sobre mis experiencias profesionales y educativas como desarrollador de software autodidacta, así que no dudes en visitar mi <a href="https://learnitmyway.com/">sitio web</a> o suscribirse a <a href="https://learnitmyway.com/newsletter">mi boletín</a> para obtener más contenido.</p><p>Traducido del artículo de <a href="https://www.freecodecamp.org/news/author/learnitmyway/"><strong>David</strong></a><strong> - <a href="https://www.freecodecamp.org/news/javascript-split-string-example/">JavaScript Split String Example – How to Split a String into an Array in JS</a></strong></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
