0

I am facing a strange problem in JavasSript.

There are three variables (declared as var), they all store an object; say var object1, object2 and object3.

Ok, so what I do now is I assign object2=object1 and object3=object1.

And when I add something to object2, it automatically gets added to object3. Strange? :|

Please help. I think I am missing some basic funda here, but I am not able to catch it.

katspaugh
18k12 gold badges69 silver badges107 bronze badges
asked Feb 18, 2012 at 12:30
3
  • 1
    Well yes, an Object in Javascript is passed by reference. object2=object1 changes the object2 variable to reference the object in object1, it doesn't copy it. Commented Feb 18, 2012 at 12:34
  • How can I make sure object3 doesn't get modified when object2 is modified? Commented Feb 18, 2012 at 12:35
  • @JamesMcLaughlin: They are not passed by reference (pass by reference has very specific and different meaning). But yes, they are reference types and all three variables store things called references. The terminology here is awful. Commented Feb 18, 2012 at 12:45

3 Answers 3

2

So how is that strange?

You pass reference to the object and do not clone the object. So any modification of your variables object1 to object3 actually refer to the same object, thus "automatically updating all variables".

answered Feb 18, 2012 at 12:34
Sign up to request clarification or add additional context in comments.

3 Comments

How can I clone the object then without knowing the attributes of the Object? Thanks..
have a look at the answers here.
Thanks man, I did this and it works like a charm! var newObject = jQuery.extend(true, {}, oldObject);
2

When you assign opject2 = object1, you are not making a copy of object1, you are simply asking that both names refer to the same object. You need to make a new object and copy the attributes from object1 into it. How you do that depends on what Javascript libraries you have available to you.

jQuery provides copying techniques described here

answered Feb 18, 2012 at 12:34

2 Comments

Well, I have done something like the following : object3=new Object() and then object3=object1. But the problem stays? Any means of copying it if I dont know the attributes of the object? I have access to jquery 1.7.1; can this do any help?
Not true for all types of variables, see @katspaugh's answer.
1

you have to clone the object or use Object.create(object) function and pass the object so it will create new one object not assign the reference

see images

var obj1 = {key: 1}
var obj2 = Object.assign({},obj1)

enter image description here

answered Jun 5, 2020 at 10:17

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.