Objects
Overview
As a recap, arrays are ordered collections, meaning elements are accessed by their position (index). We cannot assign names to individual values—only reference them by their index.
Objects solve the naming problem by using key-value pairs instead of relying on order.
- Instead of square brackets (
[]
), objects use curly braces{}
. - Each property is followed by a colon (
:
) and corresponding value. - Properties are separated by commas (
,
).
Creating an Object
Curly Braces
To create an object, use curly braces and add the key-value pairs inside.
const Lily = {
firstName: 'Lily',
lastName: 'Page',
job: 'teacher',
};
console.log(Lily);
Output:
[object Object] {
firstName: "Lily",
job: "teacher",
lastName: "Page"
}
Object Constructor
You can also create an object using the new Object()
syntax. This is another valid method aside from using {}
.
var Lily = new Object();
Lily.firstName = 'Lily';
Lily.lastName = 'Page';
Lily.job = 'teacher';
console.log(Lily);
This builds the object step by step by adding each property after creating the object.
Even though both methods work, using curly braces ({}
) is shorter and easier to read in most cases.
Object.create
We can make a new object based on an existing one. This lets us reuse properties and keep things clean.
Object.create()
makes a new object- The new object inherits from the one we pass in
Here’s an example:
const person = {
greet: function () {
console.log('Hello!');
}
};
const Lily = Object.create(person);
Lily.firstName = 'Lily';
Lily.lastName = 'Page';
Lily.greet(); // Hello!
console.log(Lily.firstName); // Lily
This creates a new object Lily
that has access to person
’s greet
method. It's a simple way to share behavior between objects.
Objects vs. Arrays
Feature | Arrays | Objects |
---|---|---|
Structure | Ordered list | Key-value pairs |
Access | By index (arr[0] ) | By property name (obj.key ) |
Best for | Ordered data | Unstructured, named data |
Retrieve Data in Objects
In JavaScript, you can access and modify object properties using dot notation or bracket notation.
Dot Notation (.
)
The simplest way to access an object property.
const user1 = {
firstName: "John",
lastName: "Smith",
birthYear: 1990,
job: "Architect",
permission: ['Administrator', 'Cloud', 'Devops']
};
console.log(user1.lastName); // Output: Smith
Bracket Notation ([]
)
Allows dynamic property access.
console.log(user1["job"]); // Output: Architect
Use bracket notation when:
- The property name is stored in a variable.
- You need to compute the property name dynamically.
Example:
const nameKey = "Name";
console.log(John["first" + nameKey]); // John
console.log(John["last" + nameKey]); // Smith
Dot notation does not work here:
console.log(John.first + nameKey); // ❌ Error
Getting Property from User Input
If the property name comes from user input, use bracket notation:
const getInput = prompt("Choose property: firstName, lastName, job")
console.log(user1[getInput]);
If you use dot notation, it will return undefined
.
Similarly, if the property doesn't exist, it returns undefined
.
Handling Undefined Properties
To avoid errors when accessing unknown properties:
if (user1[getInput]) {
console.log(user1[getInput]);
} else {
console.log("Wrong request! Choose from firstName, lastName, or age.");
}
Adding New Properties
You can add properties using both dot and bracket notation:
user1.location = "Sweden";
user1["twitter"] = "@JohnSmith";
console.log(user1);
Adding a Method
We can add a function as a property inside an object. A function that is attached to an object is called a method.
const user2 = {
birthYear: 1991,
hasDriversLicense: true,
age: function () {
return 2037 - this.birthYear; // use 'this' to refer to another property.
}
};
console.log(user2.age()); // Using dot notation, output: 46
console.log(user2["age"]()); // Using bracket notation, output: 46
We can also rewrite the function so that the calculation will only need to be done once, and the output can then be reused or printed out multiple times.
const user2 = {
birthYear: 1991,
hasDriversLicense: true,
age: function () {
this.age = 2037 - this.birthYear;
return this.age;
}
};
console.log(user2.age()); // Output: 46, compute once
console.log(user2.age); // Output: 46
console.log(user2.age); // Output: 46
console.log(user2["age"]); // Output: 46
console.log(user2["age"]); // Output: 46