Qual é a diferença entre primitivos e objetos?
Primitivos — strings, numbers, booleans, null, undefined, symbols, bigints — são copiados por valor. Objetos, incluindo arrays e funções, são copiados por referência, então duas variáveis podem apontar para a mesma coisa e mudá-la através de uma é visível através da outra. Quase todo bug de "por que meu array mudou" é isso.