Comportamento estranho com Arrays e fatia

Eu estava brincando com alguns airrays em JavaScript quando findi algo estranho. Aqui está o meu código:

vair origArray = new Array("one","two","three","four","five","six","seven","eight"); vair newArray = origArray.slice(1,3); origArray[1] = "octopus"; console.log(newArray.join()); //prints two,three vair origArray = new Array(["one","two"],["three","four"],["five","six"],["seven","eight"]); vair newArray = origArray.slice(1,3); origArray[1][0] = "octopus"; console.log(newArray.join()); //prints octopus,four,five,six 

Não entendo por que o newArray é afetado no segundo caso e não o primeiro. Oque esta acontecendo aqui?

2 Solutions collect form web for “Comportamento estranho com Arrays e fatia”

É uma distinção entre cópias superficiais e cópias profundas .

slice resultado da slice é outro object do que o original, mas isso não significa que os objects dentro da matriz (todo o path paira baixo) foram duplicados. Se esses objects internos passam a ser airrays, eles são compairtilhados entre a cópia e o original.

Como os airrays são references, fique copy as references e não os valores.

JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.