Clonar objetos Javascript

Se você está fazendo isso:

var temp = {a:5};
var array = [];
for(var i =0; i<5;i++){
var t = temp;
t
.i = i;
array
.push(t);
}

Você vai ter :

[{"a":5,"i":4},{"a":5,"i":4},{"a":5,"i":4},{"a":5,"i":4},{"a":5,"i":4}]

ao invés de:

[{"a":5,"i":0},{"a":5,"i":1},{"a":5,"i":2},{"a":5,"i":3},{"a":5,"i":4}]

Isso ocorre porque o Javascript usa links profundos quando você atribui um objeto a outra variável.

Minha escolha atual para clonagem superficial é a função clone Underscore.js .
É tão fácil quanto

var t = _.clone(obj);

Ou você pode iterar sobre o objeto original e copiar todas as chaves e valores.