Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.09.2011, 00:57
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

Почему меняется значение переменной
есть переменная lmp типа Date. В ней записана дата 1 сентября 2011. Делаю так

alert(lmp); //выводит 1 сентября 2011
incrementedDate = lmp;
incrementedDate.setDate(incrementedDate.getDate() + (lenOfCycle - 17) );
alert(lmp); // выводит 5 сентября 2011, т.е. значение incrementedDate


Почему значение lmp меняется???? Убейте, но не пойму!!!
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2011, 01:09
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Потому что lmp и incrementedDate ссылаются на один и тот же объект. И он изменяется.
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2011, 01:29
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

а я думал, что lmp просто копируется в incrementedDate..

В чем же тогда смысл переменных, если простое присваивание приводит к такому результату? И вообще, не знал, что в JS есть ссылки Удивлен
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2011, 01:49
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

В JS вообще везде ссылки... ужас
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2011, 11:21
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Сообщение от popov654
В JS вообще везде ссылки... ужас
Неправда. Но все объекты передаются по ссылке. Если надо по значению, надо клонировать.
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2011, 11:28
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от ваый
Но все объекты передаются по ссылке.
Неправда. Ссылка на объект передаётся по значению, а не объект передаётся по ссылке.
Ответить с цитированием
  #7 (permalink)  
Старый 07.09.2011, 19:09
Аспирант
Отправить личное сообщение для Ichigeki Посмотреть профиль Найти все сообщения от Ichigeki
 
Регистрация: 24.10.2008
Сообщений: 48

Сообщение от ваый Посмотреть сообщение
Неправда. Но все объекты передаются по ссылке. Если надо по значению, надо клонировать.
а как клонировать?
Ответить с цитированием
  #8 (permalink)  
Старый 07.09.2011, 19:20
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Я использую эту функцию, когда надо создать клон объекта.
function clone(obj) {
    if (obj == null || typeof(obj) != 'object') {
        return obj;
    }

    var temp = obj.constructor();

    for (var key in obj) {
        temp[key] = clone(obj[key]);
    }

    return temp;
}
Тогда
incrementedDate = clone(lmp);
Ответить с цитированием
  #9 (permalink)  
Старый 07.09.2011, 19:39
Профессор
Отправить личное сообщение для popov654 Посмотреть профиль Найти все сообщения от popov654
 
Регистрация: 22.09.2010
Сообщений: 217

Цитата:
Но все объекты передаются по ссылке.
Секундочку. Надеюсь, это не распространяется на примитивные типы данных?
Ответить с цитированием
  #10 (permalink)  
Старый 07.09.2011, 21:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от popov654
Надеюсь, это не распространяется на примитивные типы данных?
А примитивный тип данных это объект?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Значение переменной не может привысить 30 и опуститься ниже 1-го, как сделать? libinstyle Events/DOM/Window 3 12.07.2010 23:27
как передовать и парсить значение переменной по URL? FATALITY Общие вопросы Javascript 10 25.03.2010 19:32
Как считать/передать значение переменной во фрейм pashin76 Events/DOM/Window 1 03.10.2009 12:06
как в ячейку твблицы вставить значение переменной firudin Общие вопросы Javascript 1 01.07.2009 09:13
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25