Parece bastante contrario a la intuición que las matrices declaradas como constantes tengan elementos mutables. ¿Cuál es el razonamiento detrás de esta decisión de diseño? Más aún, si uno necesitara una matriz verdaderamente inmutable en JS, ¿cómo se haría eso?
¡Const no está destinado a hacer que su elemento sea inmutable! ¡solo garantiza que su elemento permanezca igual, por lo que no puede asignarle un elemento diferente!
Puede congelar la matriz con Object.freeze . Esto haría que los elementos no se puedan cambiar.
const arr = [1, 2, 3]; arr.push(4); // arr = [1, 2, 3, 4] const frozenArr = Object.freeze(arr); frozenArr.push(5); // Error: Cannot add property frozenArr.pop(); // Error: Cannot delete propertyRespuesta anterior como era, para referencia.
Una matriz const solo evita más asignaciones, pero puede cambiar su contenido.
La mejor práctica para arreglos inmutables es hacer copias, es decir, usar Array.slice() sin argumentos o Array.from() .
Ejemplo:
const originalArray = [1, 2, 3]; let firstNewArray = Array.from(originalArray); firstNewArray.push(4); let secondNewArray = originalArray.slice(); secondNewArray.push(5); console.log(originalArray); // Output -> [1, 2, 3] console.log(firstNewArray); // Output -> [1, 2, 3, 4] console.log(secondNewArray); // Output -> [1, 2, 3, 5] originalArray.push(9); // This is allowed console.log(originalArray); // Output -> [1, 2, 3, 9] originalArray = []; // Error: Assignment to constant variableUna matriz, un número, una cadena son todos objetos. Se diferencian en la forma en que almacenan valores. Una cadena son caracteres y, por lo tanto, se fijan si se ha declarado const. Una matriz es una construcción de cómo se almacenan múltiples valores. Esto significa que const establece el tipo immutable pero no los valores.