Why does changing one array alters the other?

It's the same array (since it's an object, it's the same reference), you need to create a copy to manipulate them separately using .slice() (which creates a new array with the elements at the first level copied over), like this:

var a = [1, 2, 3],
    b = a.slice();

b[1] = 3;

a; // a === [1, 2, 3]

Because "a" and "b" reference the same array. There aren't two of them; assigning the value of "a" to "b" assigns the reference to the array, not a copy of the array.

When you assign numbers, you're dealing with primitive types. Even on a Number instance there's no method to update the value.

You can see the same "they're pointing to the same object" behavior with Date instances:

var d1 = new Date(), d2 = d1;
d1.setMonth(11); d1.setDate(25);
alert(d2.toString()); // alerts Christmas day

In addition to the other answers, if you want a copy of an array, one approach is to use the slice method:

var b = a.slice(0)

All Javascript objects are passed by reference - you would need to copy the entire object, not assign it.

For arrays this would be simple - just do something like:

var a = [1, 2, 3];
var b = a.slice(0);

where slice(0) returns the array from offset 0 to the end of the array.

This link has more info.