Rápido, simples e direto:
copia_array = array.slice()
Abaixo um demonstração da importância e da diferença entre uma mera atribuição e a cópia.
var arr_original = [0,1,2,3]; //Atribuição por referência var arr_copia_referencia = arr_original; //Atribuição por valor var array_copia_valor = arr_original.slice(); //Remove o primeiro elemento do array original arr_original.pop(); //Verificando o valor do array original, verificamos que o mesmo foi modificado console.log(arr_original); //[1,2,3]; //O array cópia por referência também foi afetada console.log(arr_copia_referencia); //[1,2,3]; //Mas o array que recebeu a atribuição por cópia não foi afetado console.log(array_copia_valor); //Agora, alterando o array por referência arr_copia_referencia.pop(); //Verificando o valor do array original, verificamos que o mesmo foi modificado console.log(arr_original); //[2,3]; //O array cópia por referência foi afetado, como esperado console.log(arr_copia_referencia); //[2,3]; //Mas o array que recebeu a atribuição por cópia não foi afetado em nenhuma das vezes console.log(array_copia_valor);
Este comportamento ocorre como esperado, visto que em Javascript, array é um objeto. E objeto são atribuidos por referência. Seja com o uso do igual, seja através de passagem de argumento em uma função.
Tenha muita atenção. Alterações efetuadas dentro de uma função neste caso, com um array passado como argumento, irá afetar o valor do array fora da função, se o mesmo for modificado dentro da função.