Почему меняется значение переменной
есть переменная lmp типа Date. В ней записана дата 1 сентября 2011. Делаю так
alert(lmp); //выводит 1 сентября 2011 incrementedDate = lmp; incrementedDate.setDate(incrementedDate.getDate() + (lenOfCycle - 17) ); alert(lmp); // выводит 5 сентября 2011, т.е. значение incrementedDate Почему значение lmp меняется???? Убейте, но не пойму!!! |
Потому что lmp и incrementedDate ссылаются на один и тот же объект. И он изменяется.
|
а я думал, что lmp просто копируется в incrementedDate..
В чем же тогда смысл переменных, если простое присваивание приводит к такому результату? И вообще, не знал, что в JS есть ссылки :) Удивлен :) |
В JS вообще везде ссылки... ужас :)
|
Цитата:
|
Цитата:
|
Цитата:
|
Я использую эту функцию, когда надо создать клон объекта.
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); |
Цитата:
|
Цитата:
|
А хз) Я JavaScript знаю еле-еле :D
Я знаю как с этим обстоит в Java. А тут - ХЗ Наверное, нет... |
Легко проверить.
// primitive type var a = 5; var b = a; b = 100; alert('a: ' + a + '; b: ' + b); // object var a = {}; var b = a; b.test = 21; alert('a.test: ' + a.test); |
Спс)
|
Цитата:
var a = b = 5; b += 5; alert( 'a: ' + a + '; b: ' + b ); |
Цитата:
|
Часовой пояс GMT +3, время: 05:14. |