Strange Javascript Array Syncing Trick?

I found JS weird behavior:

var myArray = [ [1] , [2] , [3] ];

var myArrayCopy = [];

myArrayCopy.push( myArray[1] );

alert( myArrayCopy ); // 2, as expected.

myArrayCopy[0][0] = 'foo';

alert( myArrayCopy ); // 'foo', as expected.

alert( myArray ); // 1, foo, 3  =  WTF ? :)

See Demo .

Note that this does not work if we push values ​​directly instead of arrays.

For me, it is like pushing arrays into an array, something translates as if we were only clicking on the links to these arrays and not the copies (which should not be expected, please correct if I am mistaken).

Can someone explain why?

+4
source share
4 answers

Aliasing

myArrayCopy (), myArray. - , , , .

, JavaScript , , . ( , ..), .

, , , :

var o = { "foo": " bar" };
myArray[0] = o;
myArrayCopy[0] = myArray[0];
o.foo = "nolongerbar";

myArrayCopy[0].foo? myArray[0].foo?

aliasing OO, , .

, , .: -)

+2

myArray[1] - ([2]). myArrayCopy myArrayCopy.push( myArray[1] );, , ([2], 2).

(myArrayCopy[0][0] = 'foo';), , , , .

+2

, , myArray 1 myArrayCopy [0] .

enter image description here

9 myArray myArraycopy 'foo'

0

.

, .

var myArray = [ [1] , [2] , [3] ];

myArray ( addr-1).

, , [1], [2], [3] say addr-2, addr-3, addr-4 .

, , :

addr-1 = [addr-2,addr-3,addr-4]

var myArrayCopy = [];

: addr-5 = []:

myArrayCopy.push(myArray[1]);

myArray myArrayCopy. addr-3. addr-5 = [addr-3]:

`alert( myArrayCopy ); // 2, as expected

, , addr-3 = [2]:

myArrayCopy[0][0] = 'foo';

myArrayCopy, addr-3 foo

alert( myArrayCopy ); // 'foo', as expected

, :

alert( myArray ); // 1, foo, 3

myArraynow has addr-1 = [addr-2, addr-3, addr-4]where addr-2 = [1] , addr-3 = ["foo"]and addr-4 = [3].

-2
source

Source: https://habr.com/ru/post/1616157/


All Articles