You can use the method slice
without pass arguments to a shallow copy ( source ), or something like angular.copy
for a deep copy:
var b = a.slice();
// ou
var b = angular.copy(a);
In your example above it makes no difference to use one or the other, but if the array elements were complex objects, the shallow copy would simply copy the references to the elements, while the deep copy would also copy the elements themselves (recursively):
var a = [true, 10, "teste", [1,2,3], { outro:"objeto" }];
var b1 = a.slice(); // cópia rasa
var b2 = angular.copy(a); // cópia profunda
// Modificando "a"
a[0] = false; // Não afeta b1 nem b2
a[1] = 20; // Idem
a[2] = "blábláblá"; // Idem
a[3][1] = 20; // Afeta b1, pois o sub-array modificado é o mesmo
a[4].um = a[4].outro; // Idem, para o objeto referenciado
delete a[4].outro;
// Visualização
document.body.innerHTML += "<pre>a = " + JSON.stringify(a) + "</pre>";
document.body.innerHTML += "<pre>b1 = a.slice() = " + JSON.stringify(b1) + "</pre>";
document.body.innerHTML += "<pre>b2 = angular.copy(a) = " + JSON.stringify(b2) + "</pre>";
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>