🔤 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