Comprender cómo funcionan los strings en JavaScript te ayuda a escribir código más claro y eficiente. Aquí verás por qué los strings son inmutables, cómo se guardan en memoria como si fueran un array y qué implica al intentar “modificarlos”. Además, se anticipa el paso a hash tables, una estructura clave que verás a continuación.
¿Cómo se guardan los strings en memoria en JavaScript?
Los strings no son una estructura de datos como tal, pero la forma en que se almacenan en memoria se comporta “como si lo fueran”. En muchos lenguajes, incluido JavaScript, un string se guarda internamente como un array de caracteres, lo que permite acceder a cada letra por índice.
const saludo ="hola";
Se guarda “como un array” de caracteres en memoria.
Permite acceder a cada carácter por su índice.
Facilita recorrer letras y posiciones sin convertir el tipo.
¿Se accede por índice como en un array?
Sí. Al almacenarse como un array, cada letra ocupa una posición y puede leerse por índice, igual que en una colección ordenada.
Acceso directo a letras por posición.
Lectura sin necesidad de transformar el string.
¿Qué implica que los strings sean inmutables?
En JavaScript, los strings son inmutables: una vez creado, su valor no cambia. Cualquier “modificación” produce un nuevo string en memoria.
No se altera el valor original tras su creación.
Para “cambiarlo”, se debe copiar el contenido.
Se buscan nuevos memory slots disponibles y se pega el valor con los nuevos elementos.
¿Cómo impacta en rendimiento y diseño?
Este proceso de copiar y reasignar puede costar más tiempo de cómputo, sobre todo si se repite con frecuencia o con valores grandes.
Copiar y pegar datos implica trabajo extra para el motor.
Puede generar demoras al hacer muchas concatenaciones o cambios repetidos.
¿Qué conceptos y habilidades clave aparecen y qué sigue?
El foco está en entender el modelo de memoria y la inmutabilidad para tomar mejores decisiones al manipular texto. También se adelanta el estudio de hash tables, una estructura más compleja que los arrays.
String inmutable: no se puede modificar in place; cualquier cambio crea un nuevo valor.
Modelo de memoria: los caracteres se guardan “como un array”, con acceso por índices.
Índices: posibilidad de leer letras por posición.
Memory slots: espacios donde se pega el nuevo valor tras copiar.
Tiempo de cómputo: el proceso de copiar y ubicar nuevos memory slots puede tardar más.
Hash tables: próxima estructura de datos mencionada como siguiente paso.
¿Tienes dudas o un ejemplo donde la inmutabilidad te haya sorprendido? Compártelo en comentarios y enriquecemos la explicación juntos.
Inmutabilidad de Strings y Almacenamiento en Memoria
String inmutables se refiere a que una vez definido no lo podemos cambiar
Apuntes
De por si no es una estructura de datos, pero la forma en la que se guarda en memoria es como una estructura de datos
Tenemos un string en una variable
const saludo ="Hola";
Cabe recalcar que en muchos lenguajes incluyendo JavaScript, los strings son inmutables
para generar un cambio en el string sera necesario:
Tomar todos los datos de los memory slots
Buscar nuevos memory slots
Pegar en los memory slots necesarios con los nuevos elementos
Hacer todos estos pasos puede llegar a ser un problema generando un problema de computo
Cuando generamos strings con JavaScript casi nunca tenemos modificarlos
Los strings se guardan como un arreglo
Teniendo acceso a cada letra de la cadena definida
RESUMEN: Los strings son inmutables es decir que una vez definidos no podemos cambiar "letra por letra" si no que tendremos que tomar todos los items y comenzar a realizar la operación deseada también significa mayor esfuerzo de computo
EN JS las cadenas las puedes escribir usando comillas simples o dobles, que se tratan de manera idéntica, si usas la comilla sencilla invertida se vuelve un template literal, que permite evaluar variablkes o expresiones, saludos .)
De hecho en otros lenguajes es algo mas instrinsico. Es por eso que si en una variable guardas el valor de hola y si quieres acceder solo a cierta letra puede hacerlo mediante su indice.
let saludo ="hola";console.log(saludo[0]);// h
Esto nos permite usar la misma notacion de posiciones que en los arrays
Los strings no son una estructura de datos perse, pero se pueden comportar como un array, con la diferencia es que un string no es mutable, una vez declarado no se puede modificar dicho valor, se debe crear otra variable, o re asignar el valor.
Cosas a tener en cuenta
Cuando generamos strings con JavaScript casi nunca tenemos modificarlos
Los strings se guardan como un arreglo (Array), esto nos permite acceder a los caracteres por su indice (Recuerda que siempre empezamos a contar desde el 0)
Es inmutable porque está definida con "const", recuerda que "const" viene de "constante" que prácticamente significa "un valor que nunca va a cambiar" :D
Se discutió sobre los strings en JavaScript, resaltando que aunque no son estructuras de datos, su almacenamiento en memoria es similar a un array. Los strings son inmutables, lo que significa que no se pueden modificar una vez creados. Cualquier cambio implica crear un nuevo string. Esto puede generar problemas de rendimiento, ya que se necesita copiar datos a nuevos slots de memoria. La clase concluyó con la introducción a las hashtables, que se abordarán en la siguiente sesión.
En JavaScript, los strings se almacenan como una secuencia inmutable de caracteres Unicode. Cada carácter en un string ocupa una posición específica, accesible mediante índices, comenzando desde cero. A pesar de ser inmutables, lo que significa que no pueden ser modificados directamente una vez creados, se pueden manipular utilizando diversos métodos y operadores que generan nuevos strings a partir de los existentes. La gestión interna de strings en JavaScript incluye la asignación dinámica de memoria, lo que facilita el manejo eficiente de texto en las aplicaciones web
1.substring()
este metodo recibe dos argumentos, el primero es para saber desde donde empezara a seleccionar el texto al que quieres modificar y el segundo argumento o valor que recibe el metodo dentro de los parentesis es para indicar cuando detener su seleccion El primer valor es inclusivo y el segundo osea cuando debe parar es exclusivo.
ejemplo:
let saludo = 'Hola';
saludo.substring(0,3)
resultado: 'Hol'
cuando digo exclusivo, quiere decir que el valor que pusiste como segundo valor o argumento del metodo, debes de pensar que no sera incluido, como si fuese 3 -1. Osea el valor que pusiste menos 1.
Acuerdense que los numeros son los indices de las letras.
2.slice() funciona de la misma manera pero este acepta indices negativos, lo que quiere decir es que puedes seleccionar las letras pero empezando desde el final y no solo desde el principio osea lado izquierdo.
En una const podemos almacenar un array en el que cada item ocupe un espacio.
Hice un 'Hola Mundo'
classMyStrings{constructor(){this.length=0;this.data={};}push(item){this.data[this.length]= item;this.length++;returnthis.data;}print(){for(let i =0; i <this.length; i++){console.log(this.data[i]);}}}const myStrings =newMyStrings();myStrings.push('H');myStrings.push('o');myStrings.push('l');myStrings.push('a');myStrings.push(' ');myStrings.push('M');myStrings.push('u');myStrings.push('n');myStrings.push('d');myStrings.push('o');myStrings.print();