Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.07.2012, 14:38
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 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)
__________________
оляля, ололо
Ответить с цитированием
  #2 (permalink)  
Старый 23.07.2012, 14:41
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

9xakep,
Удаляя через for, лишняя работа имхо - периодически проделываемая чистильщиком
Ответить с цитированием
  #3 (permalink)  
Старый 23.07.2012, 14:41
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var arr = [1,2,3];
alert( arr );
arr.length = 0;
alert( arr );
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2012, 14:44
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Deff,
каким чистильщиком? Сборщик мусора в js? Часто слышу об этом, но честно говоря даже не догадываюсь что он делает.
devote,
хм...интересный способ. То есть по сути разницы нет, и вся так называемая разница в скорости исполнения?
__________________
оляля, ололо
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2012, 14:46
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от 9xakep
и вся так называемая разница в скорости исполнения?
при обычном назначении массиву length = 0, GC уже будет знать что нужно удалить. И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву. А назначение переменной a=[] нового массива, сборщику придется проверять ссылки на массив в других местах. А когда обнуляешь массив, то он понимает что значений нет у любой переменной имеющей ссылку на этот массив
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 23.07.2012, 14:48
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от devote
И этого обычно всегда достаточно. И работает свойство length в разы быстрее, чем итерация элементов по массиву.
А arr = []; - не тож самое ? ( Оно тоже автоматом назначает .length = 0; )
Или там дополнительные действия?
Ответить с цитированием
  #7 (permalink)  
Старый 23.07.2012, 14:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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 потеряли значения
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #8 (permalink)  
Старый 23.07.2012, 14:55
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

devote,
Ну это тогда уже от задачи, мне может и надо очистить один массив
__________________
оляля, ололо
Ответить с цитированием
  #9 (permalink)  
Старый 23.07.2012, 15:07
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от devote
А если делать так:
var a = [1,2,3];
var b = a;
a.length = 0;
alert( b ); // пусто - a и b потеряли значения
Спс - Ценное замечание о различиях!
Ответить с цитированием
  #10 (permalink)  
Старый 23.07.2012, 15:29
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить элемент из массива, не убирая с экрана KamalovRadik Javascript под браузер 0 15.10.2011 12:48
как найти и удалить массив из массива? FRIE Общие вопросы Javascript 8 14.03.2011 15:48
Изменить содержимое элементов, Или удалить сами улементы muratti Events/DOM/Window 7 01.12.2010 08:38
Как удалить повторные элементы из массива? YISHIMITSY Общие вопросы Javascript 1 04.05.2010 00:04
Как удалить элемент массива? velo Общие вопросы Javascript 2 05.02.2010 15:58