Oi Fernando,
Quando usamos constantes (const
) os valores não podem ser reatribuídos - ou seja, não podemos modificar o valor de uma const
usando o operador de atribuição =
nem redeclarados. Por exemplo:
const curso = "JavaScript";
curso = "Node.js";
Uncaught TypeError: Assignment to constant variable.
// erro de tipo: atribuição a uma variável constante.
Por outro lado, se o valor da constante for do tipo array ou objeto, seus elementos (no caso de um array) ou propriedades (no caso de um objeto) podem ser atualizados ou removidos. Essa é uma definição da linguagem JavaScript.
Então é perfeitamente possível atualizar um array, mesmo em uma constante:
const numeros = [1, 2, 3];
numeros.push(4); // [ 1, 2, 3, 4 ]
Porém não é possível reatribuir um valor diferente a uma constante (como no primeiro exemplo) e nem "trocar" o tipo de dado, como abaixo:
const numeros = [1, 2, 3];
numeros = 123;
Uncaught TypeError: Assignment to constant variable.
Quanto ao uso da const
vs let
, normalmente usamos muito mais const
mesmo, pois são muito mais frequentes os casos em que não queremos modificar o valor de uma variável e só usamos let
quando realmente é preciso atualizar um valor - por exemplo, para criar variáveis contadoras em um laço de repetição.
E como prevenir a modificação de um array? Há diversas formas, como utilizar o método Object.freeze()
ou, por exemplo, métodos de array como array.map()
que retorna um array novo ao invés de modificar o original. Porém vai depender muito do que se quer fazer no código.
Espero ter ajudado!
Bons estudos ;)