Now you know the fundamentals of JavaScript. You’ve created variables and functions, you’ve used if
statements to conditionally take different actions in your code, you’ve used for
loops to repeat code multiple times, and you’ve used arrays to store multiple values in a single variable.
This tutorial introduces objects, which let you group multiple values into a single logical unit. This makes it easier to work with data and groups of items.
So far, you’ve been using primitive types like string, number, and boolean. A primitive type holds a single, standalone value. For example:
let firstName = 'Ada';
When you read this line of code, you know that name
holds a primitive value of 'Ada'
, but you don’t know whether there’s an associated lastName
value. It’s a single value, without any extra information.
Let’s start with some code that uses two primitive values to show a message about a person:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
Next, let’s say you wanted to show messages for multiple people. You might create separate firstNameOne
, firstNameTwo
, firstNameThree
variables, and do the same thing for the birth year variables. Or you might use arrays:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
This code uses two arrays: one that holds the first names of the people, and another that holds their birth years. This approach of using multiple arrays to hold related data is called parallel arrays. This approach works, but it’s generally considered a bad idea because it can be difficult to understand code that uses a bunch of different arrays.
Plus, it’s probably not how you think about information in your own brain. Forgetting about computers for a second: if you wanted to organize information about a bunch of people in the real world, how would you do that? You probably wouldn’t write their names in one stack of index cards, then their birthdays in another stack of index cards. You’d use a single stack of index cards, where each index card contains all of the information about an individual person. That’s where objects come in handy!
To create an object, start with { }
curly braces, and then inside those curly braces, add name: value
pairs, separated by comms. You can then use that object just like any other value, e.g. by storing it in a variable.
It looks like this:
let person = {firstName: 'Ada', lastName: 'Lovelace', birthYear: 1815};
Then to access the fields inside an object, use the name of the variable, followed by the .
dot operator, then the name of the field.
let message = person.firstName + ' was born in ' + person.birthYear;
document.write(message);
Putting it all together, it looks like this:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
This code creates a variable named person
and sets it equal to an object that contains three fields: firstName
, lastName
, and birthYear
. It then uses two of those fields to create a message, and writes that message to the page.
One of the most important concepts to understand with objects is that objects can have the same fields, but different values for those fields.
For example, this code creates two different objects that each represent a different person:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
This code creates two variables, each pointing to a different object. Each object contains the same fields, but different values for those fields.
This is a powerful idea, and it lets you organize your code as it gets more complicated. It’s also pretty confusing, and “thinking in objects” can take some time. Try changing the above code to add a third person.
Just like you can create an array of primitive values, you can also create an array of objects:
let people = [
{firstName: 'Ada', lastName: 'Lovelace', birthYear: 1815},
{firstName: 'Grace', lastName: 'Hopper', birthYear: 1906},
{firstName: 'Alan', lastName: 'Turing', birthYear: 1912}
];
This code creates a people
variable, and sets it equal to an array that holds three objects. Each of those objects contains firstName
, lastName
, and birthYear
fields.
Now that you have an array, you can use a for
loop to iterate over each object in the array:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
So far, the above objects have each contained fields that point to primitive values. But remember that you can use objects pretty much anywhere you can use a primitive, including inside objects!
In other words, your objects can contain other objects. Here’s an example:
See the Pen by Happy Coding (@KevinWorkman) on CodePen.
This code expands the example so that now each person’s birthdate is an object containing year
, month
, and day
fields. Also note that each object contains a knownFor
field that points to an array of string values!
Objects are a new way of organizing your code, but more importantly, they’re a new way of thinking about your code.
For example, when you think of a bunch of people, you probably don’t think of them as a bunch of first name values and a bunch of last name values. You probably think of each person as a cohesive unit, where each unit has a first name and a last name value. Objects let you structure your code closer to how you structure the ideas in your brain.
This new way of thinking can be confusing. I remember being frustrated by it when I first started learning. But I also remember having an “ah-ha!” moment after working with objects for a while, where I finally understood them. I honestly believe that it has affected the way I’ve thought about not just code, but also the real world ever since.
So if all of this still feels confusing, that’s okay! It’ll become more natural as you write more code and see more examples that use objects.
This way of “thinking in objects” is called object oriented programming and it’s at the core of many languages and libraries.
Use JavaScript objects to group related variables together.
Happy Coding is a community of folks just like you learning about coding.
Do you have a comment or question? Post it here!
Comments are powered by the Happy Coding forum. This page has a corresponding forum post, and replies to that post show up as comments here. Click the button above to go to the forum to post a comment!