Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить содержимое массива (https://javascript.ru/forum/misc/30077-udalit-soderzhimoe-massiva.html)

9xakep 23.07.2012 14:38

Удалить содержимое массива
 
Скажи есть ли особая разница, что бы очистить массив такими способами:
var arr = [1,2,3];
alert(arr);
arr = [];
alert(arr);

И:
var arr = [1,2,3];
for (i=0;i<arr.length;i++)arr.splice(i)
alert(arr)

Deff 23.07.2012 14:41

9xakep,
Удаляя через for, лишняя работа имхо - периодически проделываемая чистильщиком

devote 23.07.2012 14:41

var arr = [1,2,3];
alert( arr );
arr.length = 0;
alert( arr );

9xakep 23.07.2012 14:44

Deff,
каким чистильщиком? Сборщик мусора в js? Часто слышу об этом, но честно говоря даже не догадываюсь что он делает.
devote,
хм...интересный способ. То есть по сути разницы нет, и вся так называемая разница в скорости исполнения?

devote 23.07.2012 14:46

Цитата:

Сообщение от 9xakep
и вся так называемая разница в скорости исполнения?

при обычном назначении массиву length = 0, GC уже будет знать что нужно удалить. И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву. А назначение переменной a=[] нового массива, сборщику придется проверять ссылки на массив в других местах. А когда обнуляешь массив, то он понимает что значений нет у любой переменной имеющей ссылку на этот массив

Deff 23.07.2012 14:48

Цитата:

Сообщение от devote
И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву.

А arr = []; - не тож самое ? ( Оно тоже автоматом назначает .length = 0; )
Или там дополнительные действия?

devote 23.07.2012 14:52

Цитата:

Сообщение от Deff
А arr = []; - не тож самое ?

нет конечно, вот пример:
var a = [1,2,3];
var b = a;
a = [];
alert( b ); // 1,2,3 - a потеряло значение, а вот b не потеряло, ссылка то висит на другой переменной

А если делать так:
var a = [1,2,3];
var b = a;
a.length = 0;
alert( b ); // пусто - a и b потеряли значения

9xakep 23.07.2012 14:55

devote,
Ну это тогда уже от задачи, мне может и надо очистить один массив :)

Deff 23.07.2012 15:07

Цитата:

Сообщение от devote
А если делать так:
var a = [1,2,3];
var b = a;
a.length = 0;
alert( b ); // пусто - a и b потеряли значения

Спс - Ценное замечание о различиях!

Deff 23.07.2012 15:29

Ксать забавно - можно даже избегая замыканий иметь кучу переменных
не видимых в глобале
var a = [1,2,3];
var b = a;
a = [0,0,0];
var с = a;
alert('b='+b+'; c='+с );


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