23.07.2012, 14:38
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Удалить содержимое массива
Скажи есть ли особая разница, что бы очистить массив такими способами:
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)
__________________
оляля, ололо
|
|
23.07.2012, 14:41
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
9xakep,
Удаляя через for, лишняя работа имхо - периодически проделываемая чистильщиком
|
|
23.07.2012, 14:41
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
var arr = [1,2,3];
alert( arr );
arr.length = 0;
alert( arr );
|
|
23.07.2012, 14:44
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Deff,
каким чистильщиком? Сборщик мусора в js? Часто слышу об этом, но честно говоря даже не догадываюсь что он делает.
devote,
хм...интересный способ. То есть по сути разницы нет, и вся так называемая разница в скорости исполнения?
__________________
оляля, ололо
|
|
23.07.2012, 14:46
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от 9xakep
|
и вся так называемая разница в скорости исполнения?
|
при обычном назначении массиву length = 0, GC уже будет знать что нужно удалить. И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву. А назначение переменной a=[] нового массива, сборщику придется проверять ссылки на массив в других местах. А когда обнуляешь массив, то он понимает что значений нет у любой переменной имеющей ссылку на этот массив
|
|
23.07.2012, 14:48
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от devote
|
И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву.
|
А arr = []; - не тож самое ? ( Оно тоже автоматом назначает .length = 0; )
Или там дополнительные действия?
|
|
23.07.2012, 14:52
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от 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 потеряли значения
|
|
23.07.2012, 14:55
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
devote,
Ну это тогда уже от задачи, мне может и надо очистить один массив
__________________
оляля, ололо
|
|
23.07.2012, 15:07
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от devote
|
А если делать так:
var a = [1,2,3];
var b = a;
a.length = 0;
alert( b ); // пусто - a и b потеряли значения
|
Спс - Ценное замечание о различиях!
|
|
23.07.2012, 15:29
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Ксать забавно - можно даже избегая замыканий иметь кучу переменных
не видимых в глобале
var a = [1,2,3];
var b = a;
a = [0,0,0];
var с = a;
alert('b='+b+'; c='+с );
|
|
|
|