Javascript Avanzado V

🔤 Strings y 🔢 Numbers en JavaScript: no todo es lo que parece ¿Alguna vez escuchaste que “los strings son arrays de caracteres”? Bueno… no exactamente. ❌ ¿Strings son arrays? No. Aunque se pueden recorrer y usar algunos métodos similares, los string no son array en JavaScript. Son un tipo…

🔤 Strings y 🔢 Numbers en JavaScript: no todo es lo que parece

¿Alguna vez escuchaste que “los strings son arrays de caracteres”? Bueno… no exactamente.


❌ ¿Strings son arrays?

No. Aunque se pueden recorrer y usar algunos métodos similares, los string no son array en JavaScript. Son un tipo primitivo con comportamiento especial.

Ejemplo:

let a = "foo";
let c = a.toUpperCase();

console.log(a); // "foo"
console.log(c); // "FOO"

Importante: los strings son inmutables. Cada operación devuelve una nueva copia. En cambio, los arrays son mutables.


🧮 Números: comportamiento básico

let a = 0.1;
let b = 0.10;
let c = 001;
let d = 1.;

console.log(a); // 0.1
console.log(b); // 0.1
console.log(c); // 1
console.log(d); // 1

Todos esos valores son del mismo tipo: number. En JS no hay distinción entre enteros y flotantes. Todo es número de punto flotante bajo el estándar IEEE 754.


🤖 ¿Los números son objetos?

No, pero gracias al boxing automático, podemos usar métodos de Number.prototype:

let a = 1;
console.log(a.toExponential()); // '1e+0'

console.log(1..toExponential()); // '1e+0'
// El segundo punto es para acceder al método

Internamente, JavaScript envuelve los primitivos con un objeto temporal para que podamos usar sus métodos.


⚠️ WTF con los decimales (IEEE 754)

Uno de los temas más conocidos (y odiados) de JavaScript: los errores con decimales. Mirá este caso:

0.1 + 0.2
// 0.30000000000000004 😬

Esto pasa porque JS usa punto flotante en 64 bits (IEEE 754), lo cual no puede representar ciertos decimales con exactitud binaria.

Numeric operators such as +, ×, =, and ≥ refer to those operations as determined by the type of the operands… [and] refer to the relevant operations within IEEE 754-2019.


✅ Comparaciones seguras de decimales

Cuando necesites comparar decimales, podés usar este truco con Math.abs y Number.EPSILON:

function numbersCloseEnoughToEqual(n1, n2) {
  return Math.abs(n1 - n2) < Number.EPSILON;
}

numbersCloseEnoughToEqual(0.1 + 0.2, 0.3); // true

Este enfoque evita los errores de precisión y te permite hacer comparaciones “prácticamente iguales”.


🔗 Recursos útiles

+

Deja un comentario