Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему стал pointer-ом? (https://javascript.ru/forum/misc/44696-pochemu-stal-pointer-om.html)

rubo-21 29.01.2014 18:16

Почему стал pointer-ом?
 
Привет всем.
допустим у меня есть такой код:
var obj1 = {
	a: 1,
	b: 2,
};

var obj2 = {
	a: 3,
	b: 4,
};

var array1 = [obj1,obj2];
var array2 = array1;

console.log('array1');
console.log(array1);
console.log('array2');
console.log(array2);

array2.splice(0, 1);

console.log('array1');
console.log(array1);
console.log('array2');
console.log(array2);


и вот результат кода:


мне интересно почему array2 стал pointer-ом array1?
вить это "=" не оператор присваивания?

Пожалуйста объясните почему это происходит и как обойтись?

Дополнения:
<script>

var obj1 = {
	a: 1,
	b: 2,
};

var obj2 = {
	a: 3,
	b: 4,
};

var array1 = [obj1,obj2];
var array2 =  new Array;

for(var i=0;i<array1.length;i++){
	array2.push(array1[i]);
}

console.log('array1');
console.log(array1);
console.log('array2');
console.log(array2);

array2.splice(0, 1);

console.log('array1');
console.log(array1);
console.log('array2');
console.log(array2);

</script>




вот так я получаю то что хочу,но мне кажется что это не очень хорошая решения.

Яростный Меч 29.01.2014 18:24

Цитата:

Сообщение от rubo-21
мне интересно почему array2 стал pointer-ом array1?

так всегда было. переменные-объекты - это всегда ссылки на объекты (массив тоже объект)
Цитата:

Сообщение от rubo-21
вить это "=" не оператор присваивания?

оператор присваивания. одной ссылке присваивается значение из другой ссылки. объект общий.
Цитата:

Сообщение от rubo-21
как обойтись?

обойтись без чего?

var array2 = array1.slice(0); - это может спасти гиганта мысли?

rubo-21 29.01.2014 18:30

а как решить эту проблему ?
у меня есть массив(friends),в котором я храню друзей,и есть 2-ой массив(tmpFriends) на котором та же самое, но каждый раз из 2-ого массива(tmpFriends) я удаляю один элемент,мне надо что тот элемент который я удалил из второго массива (tmpFriends),не удалился из первого(friends)....как это делать ?


Часовой пояс GMT +3, время: 14:12.