Objects: the basics

In this article, we are going to cover:
- Object creation
- Literal and properties
- Square brackets
- Computed properties
- "in" operator
- "for...in" loop
- Object reference

As we know that there are 8 types of Data Types in Javascript:
- number
- bigint
- string
- boolean
- null
- undefined
- object
- symbol
Out of these 8 data types, 7 are primitive type because their value contains only one thing.
In contrast, objects are used to store keyed collection of various data and some complex entities.
Object creation
An object is created with the {...} brackets with the properties.
Property is a key: value pair, where key is a string and value can be anything.
Objects are created with 2 syntaxes:
let user = new Object(); //"object constructor" syntax
let user={}; //"object literal" syntax
Usually, we use {} syntax i.e. object literal
Literal and properties
Let's take one object as an example:
let user = {
name: "sam",
age: 21
}
In this user object, there are 2 properties:
- The first property has the key
nameand value assam - The second property has the key
ageand value as21
The property value can be access using dot notation:
console.log(user.name);
console.log(user.age);
We can add the new property as:
user.isAdmin = true;
console.log(user); //user = {name: "sam", age: 21, isAdmin: true}
To remove the property we use the delete operator:
delete user.age;
console.log(user); //user = {name: "sam", isAdmin: true}
We can use multiword property names as well, but they must be quoted.
let user = {
name: "sam",
age: 21,
"likes animes": true //must be quoted
}
Square brackets
We cannot access the multiword property using the dot operator.
//This will give a syntax error
user.likes animes = true
The dot requires a key to be a valid variable identifier.
Valid variable identifiers are those which
- contain no spaces
- doesn't start with the number
- doesn't contain special characters ( except
$and_)
We can use "square brackets notation" that works with any string.
let user = {};
//set
user["likes anime"] = true;
//get
console.log(user["likes anime"]); //true
//delete
delete user["likes anime"];
Computed properties
We can use square brackets inside the object literal to set the dynamic key.
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {
[fruit] : 5 //the fruit is taken from prompt
}
alert(bag.apple); //5 if we set fruit as apple
That's called computed properties.
"in" operator
To check if a particular property exists in our object or not we can use the in operator.
The syntax is:
"key" in object
For example:
let user = { name: "sam", age: 21};
alert("name" in user) //true, user.name exists
alert("height" in user) //false, user.height not exists
The "for...in" loop
To walk over the keys in an object we use the for...in loop.
The Syntax:
for(key in object){
//walk over all keys in object
}
For example:
let user={
name: "sam",
age: 21,
isAdmin: true
}
for(let key in user){
//to get the keys
alert(key); //name, age, isAdmin
//to get values
alert(user[key]); // sam, 21, true
}
Object references
One of the fundamental differences between Object and primitive is that objects are stored and copied "By the reference", whereas the primitive type such as string, number, boolean, etc. are stored and copy "By the value".
What does this mean?🤔 Let's understand by the example.
Let's start with primitive, such as string
let message1 = "Ohayo mina!";
let message2 = message1;
Here we stored the value of message1 into the message2. As this is a primitive type the whole new copy of the variable is created and stored in message2.
As a result, we have 2 independent variables, each one storing the string "Ohayo mina!"
Quite an obvious result, right?

Objects are not like that.
let user={
name: "sam"
}
Here the user does not store the object itself, but it's "address in memory" - in other words, a "reference" to it.
The object is stored somewhere in the memory, while the user variable has a "reference" to it.
Now here is something important.
When an object variable is copied, the reference is copied, but the object itself is not duplicated.
For example:
let user = {name: "sam"};
let user1 = user; //only copy the reference
Here we have assigned the user object to user1. But just like user, user1 only stores the reference to that object, not the object itself.
To explain this even more. Let's try to modify the content.
let user = {name: "Sank"};
let admin = user;
//changed by admin reference
admin.name = "Sam";
alert(user.name); //Sam, changed because of the same reference
As we can see in the example, we have changed the name from the admin reference still if we try to access the user.name the value is changed.
This explains that we don't have copied the object itself but the reference of that object.
Comparision by reference
Two objects are equal only if they are the same object.
Here a and b reference the same object. thus they are equal:
let a = {};
let b = a; //copy reference
console.log(a == b); //true, both have same reference
console.log(a === b); //true
Here a and b reference the different objects. thus they are different:
let a = {};
let b = {};
console.log( a == b); //false
console.log( a === b); //false
That's it for this article!
Thanks for reading🤗




