Object References in JavaScript mean that variables do not store full objects but only their references in memory.
Table of Content
What is an Object Reference in JavaScript
An object reference points to the place in memory where the object lives. A variable does not hold the real object but only its reference.
Here is an example:
let obj = { name: "Ali" };
let copy = obj;Here, the variable copy does not store a new object. It points to the same object as obj.
A copy does not always mean a new object in memory. Sometimes both variables point to one object and changes affect both.
Difference Between Shallow Copy and Deep Copy
A shallow copy makes a new object but still points to nested objects. A deep copy makes a full new object with no shared parts.
| Aspect | Shallow Copy | Deep Copy |
|---|---|---|
| Nested Objects | Same reference | New reference |
| Memory Use | Less | More |
| Change Effect | Reflects in both | Stays separate |
A shallow copy works well for small objects. A deep copy works well for complex data with many nested values.
Use Object.assign() for copying
You can make a shallow copy with Object.assign().
let obj = { a: 1, b: 2 };
let copy = Object.assign({}, obj);The object copy has a new reference but nested objects still share links with the old one.
Copy with the spread operator ...
The spread operator also makes a shallow copy.
let obj = { a: 1, b: 2 };
let copy = { ...obj };The variable copy now points to a new top-level object. Nested objects still share links with the original one.
Deep copy with structuredClone() and JSON.parse()
You can use structuredClone() to make a deep copy.
let obj = { a: { b: 2 } };
let deep = structuredClone(obj);You can also use JSON methods for deep copy but they work only for JSON-safe data.
let obj = { a: { b: 2 } };
let deep = JSON.parse(JSON.stringify(obj));This method does not handle functions or special objects.
Examples of Object References in JavaScript
Simple reference:
let a = { x: 10 };
let b = a;
b.x = 20;
console.log(a.x);In this case variable a shows the value 20. Both variables point to the same object and one change affects both.
Shallow copy with spread:
let obj = { x: 1, y: { z: 2 } };
let copy = { ...obj };
copy.y.z = 50;
console.log(obj.y.z);The console shows 50. The spread makes a new top object but nested objects still stay linked to the original one.
Deep copy with structuredClone:
let obj = { user: { name: "Sara" } };
let copy = structuredClone(obj);
copy.user.name = "Omar";
console.log(obj.user.name);The console shows Sara. The deep copy makes a full new object so nested parts do not stay linked.
JSON deep copy limit:
let obj = { date: new Date(), num: 10 };
let copy = JSON.parse(JSON.stringify(obj));
console.log(copy.date);The console shows a string instead of a date. JSON copy breaks special types like dates and turns them into plain strings.
Wrapping Up
You learned about object references in JavaScript and ways to copy them.
Here is a quick recap:
- Shallow copy shares nested data.
- Deep copy makes full new data, and each method has limits.
FAQs
What is the difference between JavaScript object reference and copy?
- Reference: Both variables point to the same object.
- Copy: A new object is created with the same values.
let obj1 = {name: "Alex"};
let obj2 = obj1; // reference
obj2.name = "Sam";
console.log(obj1.name); // Sam
How do you create a shallow copy of an object in JavaScript?
Object.assign() or the spread operator to make a shallow copy.
// Using Object.assign()
let obj1 = {age: 25};
let copy1 = Object.assign({}, obj1);
// Using spread operator
let copy2 = {...obj1};
Shallow copy duplicates the first level only.
How do you make a deep copy of an object in JavaScript?
structuredClone() or JSON.parse(JSON.stringify()) for deep copies.
// Using structuredClone
let obj1 = { user: { name: "Tom" } };
let deepCopy = structuredClone(obj1);
deepCopy.user.name = "Eva";
console.log(obj1.user.name); // Tom
- structuredClone is the modern way.
- JSON.parse works but loses methods and special values.
Similar Reads
JavaScript arithmetic operators let you add, subtract, multiply, or divide numbers. You can also use them to find remainders or…
JavaScript Math.log() was added to help people find the natural log of a number. It solves real problems in science…
JavaScript object methods are simple ways to handle data inside objects. An object can hold many values, and methods give…
JavaScript toReversed returns a new array with the reversed order of its elements. It does not change the original array…
If you are a coder, one of your primary requirements is to have a trustworthy code- editor. A Code editor…
JavaScript gives you several ways to round numbers, but not all of them round the same way. If you want…
JavaScript optional chaining lets you access object values without runtime errors. It checks if a property exists before access and…
Logical operators in JavaScript let you check conditions and combine multiple checks in your code. In this guide, you will…
JavaScript added Math.cbrt to solve cube roots. Before that, developers used custom code or Math.pow with 1/3. It works with…
JavaScript Ninja Code points to ways that help a person write code that runs fast and stays easy to read.…