recursal/MDN huggingface dataset:
Truthy
======

En JavaScript, un **valor verdadero** es un valor que se considera `true/verdadero` cuando es evaluado en un contexto Booleano. Todos los valores son verdaderos a menos que se definan como falso (es decir, excepto `false`, `0`, `""`, `null`, `undefined`, y `NaN`).

JavaScript usa coerción (en-US) en los contextos Booleanos.

Ejemplos de valores *verdaderos* en JavaScript (los cuales se traducirán a verdaderos y por lo tanto ejecutarán el bloque condicional `if`):


```js
if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
```

Ver también
-----------

* Falsy (en-US)
* Coercion (en-US)
* Boolean
ASCII
=====

**ASCII** (*American Standard Code for Information Interchange*) es uno de los métodos de codificación más utilizados por las computadoras para convertir letras, números, signos de puntuación y códigos de control en formato digital. Desde 2007, UTF-8 lo reemplazó en la Web.

Aprender más
------------

### Conocimientos generales

ASCII en Wikipedia
Vendor Prefix
=============

Los proveedores de navegadores a veces agregan prefijos a las propiedades de CSS experimentales o no estándar y las API de JavaScript, por lo que los desarrolladores pueden experimentar con nuevas ideas mientras que, en teoría, evitan que se confíe en sus experimentos y luego rompan el código de los desarrolladores web durante el proceso de estandarización. Los desarrolladores deben esperar para incluir la propiedad sin prefijar hasta que se estandarice el comportamiento del navegador.

**Nota:** Los proveedores de navegadores están trabajando para dejar de usar los prefijos de proveedores para funciones experimentales. Los desarrolladores web los han estado utilizando en sitios web de producción, a pesar de su naturaleza experimental. Esto ha hecho que sea más difícil para los proveedores de navegadores garantizar la compatibilidad y trabajar en nuevas características; También ha sido perjudicial para los navegadores más pequeños que terminan obligados a agregar prefijos de otros navegadores para cargar sitios web populares.

Últimamente, la tendencia es agregar características experimentales detrás de las banderas o preferencias controladas por el usuario, y crear especificaciones más pequeñas que puedan alcanzar un estado estable mucho más rápidamente.

Prefijos CSS
------------

Los principales navegadores usan los siguientes prefijos:

* `-webkit-` (Chrome, Safari, nuevas versiones de Opera, casi todos los navegadores iOS (incluyendo Firefox for iOS); basicamente, cualquier navegador basado en WebKit)
* `-moz-` (Firefox)
* `-o-` (Versiónes antiguas, pre-Webkit, de Opera)
* `-ms-` (Internet Explorer y Microsoft Edge)
Prefijos API
------------

Históricamente, los proveedores también han usado prefijos para las API experimentales. Si una interfaz completa es experimental, entonces el nombre de la interfaz tiene un prefijo (pero no las propiedades o los métodos incluidos). Si se agrega una propiedad o método experimental a una interfaz estandarizada, entonces el método o la propiedad individual tiene el prefijo.

### Prefijos de interfaz

Los prefijos para los nombres de interfaz son en mayúsculas:

* `WebKit` (Chrome, Safari, versiones más recientes de Opera, casi todos los navegadores iOS (incluido Firefox para iOS); Básicamente, cualquier navegador basado en WebKit.)
* `Moz` (Firefox)
* `O` (Versiónes antiguas, pre-Webkit, de Opera)
* `MS` (Internet Explorer y Microsoft Edge)
### Prefijos de propiedad y método

Los prefijos para propiedades y métodos son minúsculas:

* `webkit` (Chrome, Safari, versiones más recientes de Opera, casi todos los navegadores iOS (incluido Firefox para iOS); básicamente, cualquier navegador basado en WebKit)
* `moz` (Firefox)
* `o` (Versiónes antiguas, pre-Webkit, de Opera)
* `ms` (Internet Explorer y Microsoft Edge)
Aprende más
-----------

### Conocimientos generales

* Vendor prefix on Wikipedia
Nombre de dominio
=================

Un nombre de dominio es la dirección de un sitio web en Internet. Los nombres de dominio se utilizan en URLs para identificar a qué servidor pertenece una página web específica. El nombre de dominio consiste en una secuencia jerárquica de nombres (etiquetas) separados por puntos y que terminan con una extensión (en-US).

Saber más
---------

### Conocimientos generales

* Dominio de Internet en Wikipedia
* Entendiendo los nombres de los dominios
Coerción
========

La coerción es la conversión automática o implicita de valores de un tipo de dato a otro (Ejemplo: de cadena de texto a número). La conversión es similar a la coerción porque ambas convierten valores de un tipo de dato a otro pero con una diferencia clave - la coerción es implícita mientras que la conversión puede ser implícita o explícita.

Examples
--------


```js
const valor1 = "5";
const valor2 = 9;
let suma = valor1 + valor2;

console.log(suma);
```


En el ejemplo anterior, JavaScript ha coercido el `9` de número a cadena de texto y luego ha concatenado los dos valores resultando en una cadena de texto de `59`. JavaScript tuvo la opción de coercer a cadena de texto o número y decidió usar número.

El compilador pudo haber coercido el `5` a un número y retornar el valor de 14, pero no lo hizo. Para retornar ese resultado, tendrías que convertir explícitamente el `5` a un número usando el método `Number()`:


```js
sumar = Number(valor1) + valor2;
```
Variable
========

Una variable es una ubicación nombrada para almacenar un valor. De esta manera se puede acceder a un valor impredecible por medio de un nombre predeterminado.

Aprende más
-----------

### Conocimientos generales

* Variable (computer science) en Wikipedia
### Referencia técnica

* `Declarar variables en JavaScript`
* `Declaración var en JavaScript`
Compilar
========

Compilar es el proceso de transformar un programa informático escrito en un lenguaje en un conjunto de instrucciones en otro formato o lenguaje. Un **compilador** es un programa de computadora que realiza dicha tarea.

Normalmente, un compilador transforma código escrito en un lenguaje de alto nivel como C++, Rust o Java en código ejecutable — llamado **código binario** o **código máquina**. WebAssembly, por ejemplo, es una forma de código binario ejecutable que puede ser compilado desde código escrito en C++, Rust, C#, Go, Swift y muchos otros lenguajes y luego puede ser ejecutado en cualquier página web de cualquier navegador.

La mayoría de los compiladores realizan compilación anticipada (ahead-of-time, AOT) o en tiempo de ejecución (just-in-time, JIT).

El compilador GNU `gcc` es un ejemplo muy conocido de compilador AOT. Los compiladores AOT son invocados típicamente desde la línea de comandos en un ambiente shell (desde una terminal o una consola) o dentro de un IDE.

Los compiladores JIT no son invocados típicamente de forma directa, sino que se integran internamente en software de entornos de ejecución, con el propósito de mejorar el rendimiento. Por ejemplo, la mayoría de los navegadores de ahora usan motores JavaScript que tienen compiladores JIT integrados.

Los compiladores también pueden traducir entre lenguajes de alto nivel — por ejemplo, de TypeScript a JavaScript — en tal caso, a menudo se les denomina transpiladores.

Véase también
-------------

* Compilar de C/C++ a WebAssembly (en-US)
* Compilar de Rust a WebAssembly (en-US)
* Wikipedia: Compilador
Grid Column
===========

Una **columna de grid** es una pista vertical en un CSS Grid Layout, y es el espacio entre dos líneas verticales de cuadrícula. Está definido por la propiedad `grid-template-columns` o por las propiedades abreviadas `grid` o `grid-template` (en-US).

Además, se pueden crear columnas en la *cuadrícula implícita* cuando los elementos se colocan fuera de las columnas creadas en la *cuadrícula explícita*. Estas columnas serán de tamaño automático por defecto, o pueden tener un tamaño especificado con la propiedad `grid-auto-columns`.

Cuando se utiliza la alineación en CSS Grid Layout, el eje sobre el que corren las columnas es conocido como el eje del bloque o de la columna.

Aprende Más
-----------

### Propiedades de referencia

* `grid-template-columns`
* `grid-auto-columns`
* `grid`
* `grid-template` (en-US)
### Otras lecturas

* Guía de diseño CSS Grid: *Conceptos básicos de diseño de cuadrículas (Grid).*
IIFE: Expresión de función ejecutada inmediatamente
===================================================

Las expresiones de función ejecutadas inmediatamente (**IIFE** por su sigla en inglés) son funciones que se ejecutan tan pronto como se definen.


```js
(function () {
  statements;
})();
```


Es un patrón de diseño también conocido cómo **función autoejecutable** (Self-Executing Anonymous Function (en-US) ) y se compone por dos partes. La primera es la función anónima con alcance léxico encerrado por el `Operador de Agrupación` `()`. Esto impide accesar variables fuera del IIFE, así cómo contaminar el alcance (scope) global.

La segunda parte crea la expresión de función cuya ejecución es inmediata `()`, siendo interpretado directamente en el engine de JavaScript.

Ejemplos
--------

La función se convierte en una expresión de función que es ejecutada inmediatamente. La variable dentro de la expresión no puede ser accesada desde afuera.


```js
(function () {
  var aName = "Barry";
})();
// Variable name is not accessible from the outside scope
aName; // throws "Uncaught ReferenceError: aName is not defined"
```


Asignar el IIFE a una variable almacena el valor de retorno, no la definición de la función.


```js
var result = (function () {
  var name = "Barry";
  return name;
})();
// Immediately creates the output:
result; // "Barry"
```

Aprende más
-----------

### Aprende acerca de

* Publicación en el blog de Ben Alman definiendo IIFEs
* Ejemplo rápido "Ejemplo Rápido"(al final de la sección "Functions" , justo después de "Custom objects")
### Conocimiento general

* IIFE en Wikipedia
Funcion de primera clase
========================

Un lenguaje de programación se dice que tiene **Funciones de primera clase** cuando las funciones en ese lenguaje son tratadas como cualquier otra variable. Por ejemplo, en ese lenguaje, una función puede ser pasada como argumento a otras funciones, puede ser retornada por otra función y puede ser asignada a una variable.

Ejemplo | Asignar función a una variable
----------------------------------------

### JavaScript


```js
const foo = function () {
  console.log("foobar");
};
// Invocación usando una variable
foo();
```


Asignamos una **Función Anónima** a una Variable, la cual utilizamos para invocar la función añadiendo paréntesis `()` al final.

**Nota:** **Aunque la función no sea anónima (función nombrada),** se puede utilizar la variable para invocarla. Nombrar las funciones puede ser útil cuando estamos depurando el código. *Pero no afectará como invocamos a la función.*

Ejemplo | Pasar la función como argumento
-----------------------------------------

### JavaScript


```js
function diHola() {
  return "Hola ";
}
function saludar(saludo, nombre) {
  console.log(saludo() + nombre);
}
// Pasamos `diHola` como argumento de la función `saludar`
saludar(diHola, "JavaScript!");
```


Pasamos nuestra función `diHola()` como argumento de la función `saludar()`, esto explica como tratamos la función como un **valor**.

**Nota:** Una función que pasamos como argumento a otra función, se llama **Callback function**. *`diHola` es una función Callback.*

Ejemplo | Devolver una función
------------------------------

### JavaScript


```js
function diHola() {
  return function () {
    console.log("¡Hola!");
  };
}
```


En este ejemplo; Necesitamos devolver una función desde otra función - *Podemos devolver una función porque JavaScript trata la función como un **value**.*

**Nota:** Una función que devuelve una función se llama **Higher-Order Function**.

Volviendo al ejemplo; Ahora, necesitamos invocar la función `diHola` y su `Función Anónima` devuelta. Para ello, tenemos dos maneras:

### 1- Usando una variable


```js
const diHola = function () {
  return function () {
    console.log("¡Hola!");
  };
};
const miFuncion = diHola();
miFuncion();
```


De esta manera, devolverá el mensaje `¡Hola!`.

**Nota:** Debes usar otra variable para que devuelve el mensaje. Si invocas `diHola` directamente, devolvera la función en si misma **sin invocar a la función devuelta**.

### 2- Usando paréntesis doble


```js
function diHola() {
  return function () {
    console.log("¡Hola!");
  };
}
diHola()();
```


Usamos paréntesis doble `()()` para invocar también a la función retornada.

* First-class functions en Wikipedia
* Glosario de MDN Web Docs
    + Callback function
    + Function
    + Variable
Buffer
======

Un búfer es un espacio de memoria en el que se almacenan datos de forma temporal mientras se están transfiriendo de un sitio a otro.

Saber más
---------

### Conocimiento general

* Búfer de datos en Wikipedia
Long task
=========

Una '**long task'** (tarea larga) es una tarea que tarda más de 50 ms en completarse. Es un período ininterrumpido en el que el subproceso de la interfaz de usuario principal está ocupado durante 50 ms o más. Los ejemplos comunes incluyen controladores de eventos de ejecución prolongada, reflujos costosos y otras representaciones, y el trabajo que realiza el navegador entre diferentes turnos del bucle de eventos que supera los 50 ms.

Ver también

* API de tareas largas (Long task) (en-US)
Clase
=====

En programación orientada a objetos, una clase define las características de un objeto. Una clase es una plantilla que define propiedades y métodos, es un modelo abstracto a partir del cual se pueden crear instancias más específicas.

Saber más
---------

### Conocimientos generales

* Lenguajes de programación basados en clases vs. basados en prototipos (como JavaScript)
* Uso de funciones como clases en JavaScript
* Programación basada en clases en Wikipedia
* Programación orientada a objetos en Wikipedia
Mozilla Firefox
===============

Mozilla Firefox es un navegador gratuito de codigo abierto cuyo desarrollo es supervisado por Mozilla Corporation. Firefox functiona sobre Windows, OS X, Linus y Android.

Lanzado en Noviembre del 2004, Firefox es completamente personalizable con temas y complementos. Firefox usa Gecko (en-US) para renderizar paginas webs, e implementa tanto actuales como próximos estandares Web.

Aprende más
-----------

### Conocimientos generales

* Sitio oficial de Mozilla Firefox
### Referencias técnicas

* Documentación/Información para desarrolladores en MDN
FTP
===

FTP (del inglés *File Transfer Protocol*, Protocolo de transferencia de archivos) fue el protocolo estándar durante muchos años para transferir archivos entre equipos a través de Internet. Sin embargo, cada vez más los equipos y las cuentas de alojamiento no permiten el FTP y en su lugar dependen de un sistema de control de versiones como Git. Se encuentra todavía en funcionamiento en las cuentas de alojamiento más antiguas, pero no es exagerado decir que el FTP ya no es considerada la mejor práctica.

Aprenda más
-----------

### Conocimiento general

* FTP en Wikipedia
* Beginner's guide to uploading files via FTP
Blink
=====

Blink es un motor de renderizado para navegadores de código abierto desarrollado por Google, que forma parte de Chromium (y por lo tanto también de Chrome). Concretamente, Blink es una copia de la librería WebCore de WebKit, que se encarga del diseño, renderizado, y del DOM.

Para saber más
--------------

### Cultura General

* Página principal de Blink
* Blink en Wikipedia
* FAQ de Blink
Arreglos (Matrices)
===================

Un arreglo (matriz) es una colección ordenada de datos (tanto primitivos u objetos dependiendo del lenguaje). Los arreglos (matrices) se emplean para almacenar multiples valores en una sola variable, frente a las variables que sólo pueden almacenar un valor (por cada variable).

Cada elemento del arreglo (matriz) tiene un número al que está asociado, llamado **"índice numérico"** (numeric index), que permite acceder a él.

En JavaScript, los arreglos (matrices) comienzan a partir del índice cero y pueden ser manipulados con varios métodos.

Un arreglo (matriz) en JavaScript se ve de esta forma:


```js
var myArray = [1, 2, 3, 4];

var catNamesArray = ["Jacqueline", "Sophia", "Autumn"];

//Los arreglos en Javascript pueden guardar distintos tipos de datos como se muestra anteriormente
```

Saber más
---------

### Conocimiento general

* Array en Wikipedia
### Referencia técnica

* JavaScript `Array` en MDN
AJAX
====

AJAX (de las siglas en Inglés **A**synchronous JavaScript **A**nd XML ) es una práctica de programación utilizada para construir páginas web más complejas y dinámicas, utilizando una tecnología conocida como XMLHttpRequest (en-US).

Lo que AJAX nos permite hacer, es modificar partes específicas del DOM de una página HTML sin la necesidad de refrescar la página entera. AJAX tambien nos permite trabajar asincrónicamente; esto significa que tu código seguirá corriendo mientras esa parte de la página de tu sitio web intenta recargarse (en comparación, una carga síncrona bloquearía tu código hasta que esa parte de la página web terminara de recargarse)

Con los sitios web interactivos y los estándares web modernos, AJAX está siendo reemplazado gradualmente por funciones dentro de frameworks de JavaScript y por la oficial `Fetch API` Standard.

Saber más
---------

### Conocimiento general

* AJAX en Wikipedia
* Comunicación sincrona vs asincrona
### Información técnica

* El objeto `XMLHttpRequest`.
* Documentación AJAX en MDN
* Fetch API en MDN
Pseudo-clase
============

En CSS, un selector de **pseudo-clase** apunta a elementos dependiendo de su estado en lugar de en su información en el arbol del documento. Por ejemplo, el selector `a` `:visited` aplica estilos solamente a los links que el usuario ha visitado.

Aprender más
------------

### Referencía técnica

* Pseudo-class documentación
Palabra clave
=============

Una **palabra clave** es una palabra o frase que describe contenido. Las palabras clave en línea se utilizan como consultas para los motores de búsqueda o como palabras que identifican el contenido de los sitios web.

Cuando usas un motor de búsqueda, utilizas palabras clave para especificar lo que estás buscando y el motor de búsqueda devuelve páginas web relevantes. Para obtener resultados más precisos, prueba con palabras clave más específicas, como "Mustang GTO azul" en lugar de simplemente "Mustang". Las páginas web también utilizan palabras clave en una etiqueta `<meta>` (en la sección `<head>`) para describir el contenido de la página, de manera que los motores de búsqueda puedan identificar y organizar mejor las páginas web.

Aprende más
-----------

### Conocimientos generales

* Keyword on Wikipedia
XML
===

*XML* (eXtensible Markup Language en español **Lenguaje de Marcado eXtensible**) es un lenguaje de marcado genérico especificado por la W3C. La industria de tecnologías de la información (*IT Industry*) utiliza muchos lenguajes de descripción de datos (*data-description language*) que están basados en XML.

Las etiquetas XML ó *tags* son muy similares a las de HTML, pero en el caso de XML, es mucho más flexible debido a que permite a los usuarios definir sus propias etiquetas. En este sentido XML actúa como un metalenguaje (debido a esto, puede ser usado para definir otros lenguajes como por ejemplo RSS). Además de esto, cabe señalar que HTML es un lenguaje de presentación, miestras que XML es un lenguaje descripción de datos.

Esto significa que XML tiene una mayor aplicación; por ejemplo, a través de XML los servicios web pueden intercambiar peticiones y respuestas.

Para saber más
--------------

### General knowledge

* XML en Wikipedia
* Introducción a XML
Sistema de gestión de contenidos
================================

Un sistema de gestión de contenidos o CMS es un programa informático que permite a los usuarios publicar, organizar, cambiar o eliminar diferentes tipos de contenido como texto, imágenes incrustadas, video, audio y código interactivo.

Saber más
---------

### Conocimiento general

* Sistema de gestión de contenidos en Wikipedia
BigInt
======

En JavaScript, **BigInt** es un tipo de dato numerico que puede representar números enteros en el formato de precision arbitrario. En otros lenguajes de programación pueden existir diferentes tipos numéricos, por ejemplo: enteros, flotantes, dobles o bignums (numeros grandes).

Aprende más
-----------

### Conocimientos generales

* Tipos numéricos en Wikipedia
### Referencia tecnica

* La estructura de datos JavaScript: `BigInt`
* El objeto global de JavaScript `BigInt` (en-US)
Elemento vacío
==============

Un **elemento vacío** es un elemento de HTML, SVG, o MathML que **no puede** tener nodos secundarios (es decir, elementos anidados o nodos de texto).

Las especificaciones HTML, SVG, y MathML definen con precisión lo que cada elemento puede contener. Muchas combinaciones no tienen sentido semántico, por ejemplo un elemento `<audio>` anidado dentro de un elemento `<hr>`.

En HTML, el uso de una etiqueta de cierre en un elemento vacío normalmente no es válido. Por ejemplo, `<input type="text"></input>` es un elemento HTML no válido.

Los elementos vacíos en HTML son los siguientes:

* `<area>`
* `<base>`
* `<br>`
* `<col>`
* `<embed>`
* `<hr>`
* `<img>`
* `<input>`
* `<link>`
* `<meta>`
* `<param>`
* `<source>`
* `<track>`
* `<wbr>`
Criptoanálisis
==============

El criptoanálisis es la rama de criptografía que estudia cómo romper códigos y criptosistemas. El criptoanálisis crea técnicas para romper cifrados, en particular por métodos más eficientes que una búsqueda por fuerza bruta. Además de los métodos tradicionales como el análisis de frecuencia y el índice de coincidencia, el criptoanálisis incluye métodos más recientes, como el criptoanálisis lineal o el criptoanálisis diferencial, que puede romper cifrados más avanzados.

Saber más
---------

### Conocimiento general

* Criptoanálisis en Wikipedia
Encriptación
============

En criptografía, la **encriptación** es la conversión del lenguaje natural (en-US) en un texto codificado o cifrado. Un texto cifrado es utilizado para ser ilegible por lectores no autorizados.

La encriptación es una primitiva criptográfica: transforma un mensaje en texto plano en un texto cifrado usando un algoritmo criptográfico. La encriptación en los algoritmos modernos se lleva a cabo usando un algoritmo específico y un secreto, llamado la clave. Ya que la mayoría de los algoritmos son públicos, la clave debe ser secreta para que la encriptación sea segura.

![How encryption works.](/es/docs/Glossary/Encryption/encryption.png)

Sin conocer el secreto, la operación inversa, desencriptación, es matemáticamente costosa de realizar. Cómo de difícil resulte depende de la seguridad del algoritmo criptográfico elegido y evoluciona con el progreso del criptoanálisis.

Saber más
---------

* Saber má sobre Encriptación y Desencriptación
Node (DOM)
==========

En el contexto del DOM, un **nodo** es un único punto en el arbol de nodos. Los nodos pueden ser varias cosas el documento mismo, elementos, texto y comentarios.

Saber más
---------

### Referencia técnica

* El node tree WHATWG spec
Block (CSS)
===========

Un **bloque** en una página web es un elemento HTML que aparece en una nueva línea, por ejemplo debajo del elemento precedente y encima del siguiente elemento (comúnmente conocido como *block-level element)*. Por ejemplo, visto que `<a>` es un *elemento en línea* — puedes colocar varios enlaces uno al lado del otro en el código HTML y no se posicionarán en la misma línea como uno al otro en la salida representada.

Usando la propiedad `display` puedes cambiar si un elemento se muestre en línea o en bloque (entre muchas otras opciones); los **bloques** también están sujetos a los efectos de posicionaresquemas y usar la propiedad `position`.

Aprender más
------------

### Conocimiento general

* Modelo de formato visual (en-US)