¿Cuál es la diferencia entre primitivos y objetos?
Los primitivos — strings, numbers, booleans, null, undefined, symbols, bigints — se copian por valor. Los objetos, incluyendo arrays y funciones, se copian por referencia, así que dos variables pueden apuntar a lo mismo y cambiarlo a través de una es visible a través de la otra. Casi todo bug de "por qué cambió mi array" es esto.