Welcome to the complete
JavaScript course. In this course, we're going to learn how to build
complex websites using JavaScript from a beginner to a professional level,
and by the end of this course, we're going to build amazon.com. So this is an interactive
multi-page website we're we can add products to our cart, create an order, and even track our order Along the way, we're also going to build some
smaller projects like a rock paper, scissors game, a to-do
list, and a calculator. Now you don't need any previous coding
or technical experience to follow along. This course will cover everything
that you need to learn JavaScript. We're going to start from the very basics
of JavaScript and we're going to build our way up step by step. We're going to learn the major features
of JavaScript and also how to use JavaScript together with other
technologies like H T M L and C S S. These are the topics we'll
learn in part one of this course. In part two, we'll learn skills that are useful
for bigger and more complex projects, and we're going to start and
finish the final Amazon project. You can find the different lessons of
this course below the video here and here. And after each lesson, I'm going to give you a bunch of
exercises that you can do on your own to practice the skills that
we learned in total. This course will have over 200 exercises. So with that said, let's get started. Before we begin, if something in
this course is not working properly, make sure to check the first comment
below the video for a list of solutions. If you can't find a solution in this
list, you can reply to this comment. I'm going to be doing
this course on Windows, but the steps are the same
if you're using a Mac. We're going to start from the very
basics of JavaScript and build our way up step by step. First of all, what is JavaScript? JavaScript is a technology
that we use to create websites. A website is like
youtube.com or amazon.com. It's how we access YouTube
and Amazon on our computer. If we were using a phone,
we usually use an app, but on our computer we use a website. So there's actually three technologies
that we use to create websites, html, css, and JavaScript. Each of these technologies has a specific
purpose. When creating a website, HTML creates the content of a website. It creates all the buttons,
the text and the images. CSS changes the appearance of the website. By adding css, we can make our website look nice.
And finally, JavaScript makes our website interactive. So if we only have HTML
and CSS and we click one of these buttons, our
website doesn't do anything. But once we add JavaScript, we can make our website do something
when we click a button such as add a product to our
cart or create an order. So this course is focused on JavaScript. If you want to learn HTML
and CSS in more detail, I have a full course just like this
one that you can find in the video description. Let's get
started with JavaScript. The first thing we need to do is to
install a piece of software called a web browser. A web browser lets us view websites
that we create in this course. The most popular web browser for
web development is Google Chrome, so I recommend using that. If
you don't have Google Chrome, you can open the default web browser
on your computer. For Windows, it's Microsoft Edge, and
for Mac, it's Safari. Type in google.com at
the top and press enter. Search for Google Chrome, click the result and follow the
instructions to download and install. Once we've installed
Chrome, we're ready to begin. We're going to start by learning what
exactly is JavaScript and how does it work. The easiest way to understand
JavaScript is we're basically giving instructions to a computer and
then the computer follows our instructions. I find the best way to learn this
is to jump in and give it a try. So first, let's open Google Chrome. Next we're going to click at the top here and type super simple.dev/j-basics and press enter. And now we'll learn how to give our
computer some instructions to follow. To do that, we're going to go
to a blank area of the webpage. We're going to right click, click inspect, and then click the tab. Now, if your console doesn't show
up at the bottom like this, you can click these three
dots here and then select this icon. Okay, so inside the console we can give
some instructions for our computer. Let's learn our first instruction. We're going to type here and
we're going to type, alert, open bracket, single quote, hello, single quote, close
bracket, and semi call it. Make sure to type this out exactly
as I have it here in JavaScript. If you don't type things out
correctly, it won't work. So this is an instruction to
create a pop-up with a text, hello inside to get the computer
to follow our instruction. We can just press enter,
and as you can see, the computer does exactly
what we tell it to do. It creates a pop-up with
a text. Hello inside. Now let's press okay, and let's give another
instruction to the computer. So we're going to type here again
and we're going to type alert again, open bracket, single quote, but this time we're going to type
a different message in the popup, good job and single close bracket and semicolon. So this is an instruction
to create a pop-up again, but this time with a text,
good job inside the pop-up. If we press enter, the computer does exactly what we tell
it to do and it creates a pop-up with a text. Good job inside. And that's basically the
main idea behind JavaScript. We're giving instructions to a computer
and then the computer follows our instructions. So note that we can open and
use this console on any website. We're just using super
simple.dev as an example. Let's press okay and we're
going to learn some terminology. The instructions we give to our computer, these instructions are called code. When we press enter and the
computer follows our instructions. This is called running the code. Now there are many different languages
we can use to write code called programming languages. It's similar to how we have many human
languages that we can use to communicate. Some examples of programming
languages are JavaScript, Python and Java. So here we're writing our code
using the JavaScript programming language. So we call this JavaScript code. Now that we understand
the basic terminology, let's look at some more examples of
what we can do with JavaScript code. Another thing we can do is meth. Let's go back to the
console and type here, and we're going to type two plus two. So this is an instruction or code
that tells a computer to do some math to calculate two plus two.
When we press enter, the computer follows our instruction
or runs this code calculates two plus two and gives us the
result, which is four. Let's do another example. We're going to type 10 minus three and press enter to run this code. Again, the computer does this math calculates
the result and gives us seven. So as you can see, JavaScript can do many different
things like create pop-ups and do math. Let's look at one more example
of what JavaScript can do. We're going to go to the
bottom and type out this code document dot body dot inner capital H T M L equals single quote, hello, single quote and semicolon. Make sure to write this out exactly as
I have it here with the dots and the capital letters, because
JavaScript is case sensitive, let's press enter to run this code. What this code does is that it
removes everything on the page and replaces it with a text.
Hello. In this example, we use JavaScript to modify the webpage. Modifying the webpage is one of the
most important features of JavaScript and we're going to be using this
feature throughout this course, and that's the basics of JavaScript. We're giving instructions to a computer. These instructions are called code, and then the computer
follows our instructions. This is called running the code, and also don't worry about
memorizing all this code. You can find a copy of all the code
that we write in this course in the video description. Now that we understand
the basics of JavaScript, let's learn more about the
JavaScript language itself. If we take a look at this code alert and hello, you might be wondering what the
brackets and the quote mean. All of these characters have a
special meaning in the language. This is something called syntax. Syntax are the rules that we have
to follow when using a programming language like JavaScript.
This is sort of like in English. We also have rules that
we follow called grammar. The difference is that in English, we don't have to follow the
rules of grammar perfectly. People can still understand
us, but in programming, we have to follow the
rules of syntax exactly, otherwise the computer won't
understand our code. For example, if we scroll down and we
type this code, alert, open, hello, close bracket and semicolon, but this time we remove the
first bracket and press enter, it will give us a syntax error. We're not following the rules of syntax, so the computer doesn't
understand this code. Now JavaScript has a lot of syntax
rules and we can't learn them all at once right now. Instead, we're going to learn the syntax rules
one by one as we go through the course. For now, we'll just learn enough syntax to do
the exercises at the end of this lesson, what we need to know is
that if we scroll up, this part of the code tells a
computer to create a pop-up. The text between these quotes
is the text inside the pop-up. If we change this text, we can
change the text inside the pop-up. Same thing for this code down here. If we change the text between the quotes, it will change the text
that appears on the page, and that's all we need to know
about JavaScript syntax. For now, we'll learn exactly what the other
characters like the brackets, quotes and semicolon mean
later on in this course. So in this lesson, we learned that JavaScript is
basically giving instructions to a computer. We wrote our first
few lines of JavaScript code. We learned how to run our code using
the console in our web browser, and we learned about syntax, which are the rules that we had
to follow when writing our code. Here are some exercises you can try on
your own to practice what we learned in this lesson. You can find these solutions to these
exercises in the video description. Now that we understand
the basics of JavaScript, we're going to learn about each feature
of the language. In this lesson, we're going to focus on
numbers and math first. We can close the console for now. So I've actually prepared a project
that we can use for this lesson. To open this project, we're
going to go to our browser, click up here and type super simple.dev/projects/amazon and press enter. So this is actually the final project
we're going to create in this course. This is an e-commerce website
similar to Amazon where we can add products to our cart
and then view our cart by clicking the top right. And on this page we can see
the products in our cart, modify our cart and create and order. For this lesson, we're going
to focus on this right section, which calculates the cost of our cart, including the cost of the products, shipping and taxes. This section is a great way
to learn numbers and math in JavaScript. First, let's open the console again so
we can write JavaScript code. We're going to find a blank area
of the webpage. Write click, click inspect, and then click the console. So we already saw some examples
of math in the previous lesson. For example, we wrote the code two plus two. If we press enter, the computer adds these two
numbers and results in four. We also did 10 minus three. If we press enter, the computer subtracts these
two numbers and gives us seven. In addition to adding and subtracting, we can also multiply
and divide to multiply. We're going to type 10 star three and press enter. So Star is the character
for multiplying to divide. We're going to type 10 forward slash two and press enter. So forward slash is a
character for dividing. Now let's learn the syntax
rules for numbers and math. The syntax for math is pretty
straightforward in JavaScript, we just write it out like normal math. We can also do math with more
than two numbers. For example, we can add two plus two and then plus another two.
If we press enter, the computer will add these three
numbers together and result in six. And finally, JavaScript can handle decimal numbers like 2.2 plus 2.2. If we press enter, it will calculate these
decimal numbers and result in 4.4. Now let's do some practical examples. We're going to calculate the
numbers here in our final project, but first, let's set up our cart. So we have the same products in our cart, so make sure in your
cart you have two socks with free shipping and
you have one basketball with $4 and 99 cents
of shipping and nothing else in your cart. If you need to, you can modify your cart by
clicking update or delete or by going to the homepage by
clicking in the top left and adding any products that you're missing. Once you have the same products
as me in your cart and you have the same numbers on the right, we're ready to begin.
Let's start by calculating this number up here. This is the cost of the products
before shipping and taxes. To calculate this number using JavaScript, we're just going to add
the cost of the products. So in our console we're going
to add the cost of the socks, which is $10 and 90 cents. We have two of them, so we're going to multiply this by two, and then we're going to add
the cost of the basketball. So plus $20 and 95 cents. If we press enter, the computer will do this math
calculation and give us this number, and if we scroll to
the top of our project, you'll see that the number that we
got matches what we have on the page. So that's how we use JavaScript
to calculate this here. Let's do another example. We're going to calculate
this third number, which is the cost of the
products plus shipping. Feel free to pause the video if
you want to try it yourself first. Otherwise we'll do it together.
Let's go back to our console and we're going to add the
cost of the products again, which is $10 and 90 cents times two plus $20 and 95 cents. But this time we're going
to add the cost of shipping, which is $4 and 99 cents. So 4.99 and press enter. The computer will do this
calculation and give us this number which matches what we
see in the final project. Next, we're going to learn a very important
feature of math called the order of operations, adding, subtracting, multiplying and dividing. These are called operations and the
characters in the middle are called operators. Now there's a certain order
that we do these operations. For example, if we go back to our console
and type the calculation one plus one times three and press enter. Notice that it multiplies
one times three first, which equals three and then adds one, which equals four. Notice that it does not
add one plus one first, which equals two and then
two times three equals six. The way math normally works is
that multiply and divide are done first. Add and subtract are done
after this is called the order of operations, and JavaScript follows the same rules.
Multiply and divide are done first, add and subtract are
done after the order of operations is also called
operator precedence in JavaScript. One thing to note is that
multiply and divide have the same priority, so if we have
both in a calculation, it will calculate from left to right, add and subtract also
have the same priority. If we have both in a calculation, it will also calculate from left to right. Another feature of the order of
operations is that we can use brackets to control which part
of the calculation gets done first. For example, let's type out this calculation again, one plus one times three, but this time we're going
to add an open bracket and a closed bracket around one plus one. If we press enter, Now the calculation inside the
brackets will be done first, so it will add one plus one equals two, and then two times three equals six. So when we use brackets, JavaScript will always do the
calculation inside the brackets first and then do the rest of the
calculation brackets have the highest priority in the order of operations. Now let's learn the
syntax rules for brackets. So we just have to have a
matching open bracket and closed bracket. So something like this doesn't
work because we have two open brackets and no closed bracket. We also need to have a complete
calculation in the brackets, so this also doesn't
work because one plus one multiply is not a complete calculation. Now let's do some practical
examples using the order of operations. First, we're going to do some more
setup in the final project, so we're actually going to remove
all the products in our cart, and then once our cart is empty, we'll go to the homepage
by clicking the top left, and this time we're going
to add some new products. So we'll add one basketball and two t-shirts. Now let's go back to our cart
by clicking the top right, We'll scroll down and we're going
to calculate the numbers in this section. Again, let's calculate
this number at the top, which is the cost of the products. We'll go back to our console
And add the cost of the basketball, which is $20 and 95 cents plus the cost of the T-shirts, which is $7 and 99 cents, and we have two of them, so we'll multiply this by two. If we press enter, this will give us the number
that we see in the final project here. Notice that in this calculation
we're taking advantage of the order of operations even though
multiply is written last, we still multiply
these two numbers first. So we calculate the cost of
two t-shirts first and then we add the cost of the
basketball after. Okay, now let's try something
a little more difficult. We're going to learn how to
calculate this 10% tax here. So how do we calculate 10%
of something? Unfortunately, we can't just multiply
by 10% in JavaScript. Instead we have to calculate
the percent manually. So how do we do that? 1% is actually equal to one divided by 100.
That's what percent means. So 10% is equal to 10 divided by 100, which equals 0.1. So to calculate 10% manually, we just multiply this number by 0.1. So we'll type 36.93 multiplied by 10% or 0.1. If we press enter, it will give us a number that is close
to what we have in the final project. It's the same amount of money, but our number is more
accurate than we need. So later in this lesson we'll
learn how to round this number down to exactly what we have
on the webpage. For now, let's do some more practice
with the order of operations. Let's calculate the tax again, except instead of using
the final number, 36.93, let's calculate this number
individually like here. So at the bottom we're going to
add the cost of the basketball 20.95 plus the cost of the T-shirts, 7.99 times two, and then multiply this
by the tax percent times 0.1 and press enter. Unfortunately, this number doesn't match
what we got up here and that's because if we look at this
calculation according to the order of operations, multiply is done first. So it will multiply these three
numbers first and then add 20.95 after. However, this is not what we want. We actually want to
calculate this number first. This is the cost of the products. So how do we get the computer
to calculate this first and then multiply by the tax
percent 0.1. To do this, we can use brackets to control
which part of the calculation gets done first. So let's
create this calculation again, 20.95 plus 7.99 times two. But this time we're going to add
brackets around this part of the calculation to make sure that
this gets calculated first, and then at the end we'll
multiply it by the tax percent, 0.1, and now if we press enter, we will get the same number
that we had before. So that's how we use math and
the order of operations to calculate the numbers in this
section of the final project. So don't worry, you don't have to
be good at math to learn JavaScript. This is just to show you how
math works in JavaScript. In the rest of this lesson, we're going to learn some more
details about numbers and math. The first detail we're going to
learn is a weird behavior of math in JavaScript. First we'll need to learn some
terminology in programming. Whole numbers like two, three, and four are called integers. Decimal numbers like 2.2 and 2.5 are called floating point numbers or floats, and unfortunately, computers have a problem working
with floats. For example, if we go back to our console
and type the calculation 0.1 plus 0.2 and press enter, it will give us this weird
number here that's close to 0.3, but a little bit inaccurate.
So this problem is not specific to JavaScript. Many programming
languages also have this problem. The reason this happens is because
of how computers store numbers, I'll give a simplified explanation. Computers can only store
zeros and ones while humans can count from zero to nine. So there's sort of a mismatch
between our number systems. For integers, this is not a problem. The computer can just use
a bunch of zeros and ones to store it. However, for decimal numbers or floats, sometimes the computer can't
store the number properly. For example, here's how the computer
tries to store 0.2 using only zeros and ones at the
top is what the computer stores at the bottom is what
this is equal to in human numbers, we can see that the computer
gets closer and closer to 0.2 but never actually reaches it. And this is why we get these inaccuracies
when calculating with fill floats because computers can't
store some floats properly. Note that this doesn't happen
with all floats. For example, computers can store 0.25
without any problems, so these inaccuracies only
happen with some floats, but not all of them. However,
when calculating money, we definitely want to
avoid any inaccuracies. So let's learn how to do that. First, we're going to set up our cart again, so make sure in your cart you
have one basketball with free shipping, and this time
you have one t-shirt. So we're going to click update, change this to one and click save. And this t-shirt also has free shipping. Now let's scroll up and we're going to
calculate this number at the top again, which is the cost of the products. Let's go into our console and
we're going to add the cost of the basketball $20 and 95 cents plus the cost of the t-shirt, which is $7 and 99 cents. If we press enter
calculating with these floats causes the inaccuracies that we
saw earlier. So how do we avoid this problem? The best practice when calculating
money is to calculate in cents instead of dollars. So instead of $20 and 95 cents, we're going to calculate 2090 5 cents plus seven 99 cents. Notice we're not using floats anymore, so we avoid the inaccuracies, but now this number is in cents, so we need to convert back
to dollars to do that. We'll surround this calculation
with brackets to make sure we calculate this first, and then at the end we'll divide by 100 to convert back to dollars
because there are 100 cents in each dollar if we press enter and scroll up, that's how we get the exact
number that we see on the page. So remember, in programming calculations with
floats are sometimes inaccurate, and when working with money, the best practice is to do the
calculation in cents and then convert back to dollars at the end. The next detail we're going to
learn is how to round a number in JavaScript. Rounding just means taking a
number and moving it to the nearest integer to round a number.
We can use this code, capital M, math dot round, open bracket, closed bracket, so make sure you use a capital
M because JavaScript is case sensitive. Now between the brackets, we can put a number that
we want to round like 2.2. If we press enter, it will round this number down to two. If we do capital M, math dot round, open
bracket, close bracket, and between the brackets
we put 2.8 and press enter, it will round 2.8 up to three. Now let's do a practical
example with math dot round. We're going to calculate the tax again, but this time we're going to
round the result to exactly this number on the page. So first, let's calculate the tax.
We'll go into our console and add the cost of the products in cents, so 2090 5 cents for the basketball and plus the cost of the t-shirt, which is seven 99 cents. And we'll surround this in brackets
to make sure we calculate this first and then we're going
to multiply this by the tax percent or 0.1. And finally we'll convert
this back to dollars. So let's surround this in
brackets as well to make sure we calculate this first, and at the end we'll divide by 100 to convert back to dollars. So notice here we can have
brackets inside brackets In this situation, JavaScript will calculate the
inner brackets first and then the outer brackets and then
everything else if we press enter, this gives us 2.894, which is close to the number on the page. It's the same amount of money, but our number is more accurate
than we need. So now let's learn how to use math dot
round to round this number to exactly 2.89. First, let's create a copy of this
calculation. So we'll select it, right click copy, and down here, right click and paste. So one thing we might try to
do is to round this entire calculation, however this will round 2.89423 because it rounds to the nearest integer. Instead, what we want to round is this number here. So remember that this number
is the result in cents, which is 289.40 cents. If we round this number, it will round down to 289 cents, which is exactly $2 and 89 cents. So to round this calculation
at the front will type capital M math dot round. So we already have brackets
around this so we don't need extra brackets, so this will round to 289 cents, and finally we'll convert this
back to dollars at the end by dividing by 100.
If we press enter, that's how we round this calculation
to get the exact number on the page. So to summarize, we first calculate the result
in cents and then we round this to the nearest cent, and then at the end we convert
back to dollars. Again, don't worry, you don't have to be
good at math to learn JavaScript. These examples are just for learning. Almost all the math we do in
JavaScript is more simple than this. I'll give you some exercises at the
end of this lesson to help you get more practice. The last thing we're going to learn in
this lesson is how to use Google when you're learning to code. So far I've been giving you
different pieces of code like alert and math dot round.
You might be wondering, where do I find this code? These pieces of code are
features of JavaScript and I find this code by searching
on Google. So we're going to learn how to use Google to learn new
features of JavaScript on our own. Let's go to our browser and
create a new tab at the top and we'll click here and type google.com and press enter and we'll search in Google. So the trick to searching in Google
is to search for what we are trying to do. For example, if we
want to round a number, we would search for JavaScript, how to round a number. If we press enter, sometimes you might get the code
right away in the first result, and sometimes you might have
to go into the other results, define the code that
you need. In my example, I see the code math dot
round in the first result, so I can click into this result, read about what this code does, and also see some examples of
how to use it. One thing to keep in mind is that when
you're searching in Google, you might not understand all the
code that you get in your results. For example, here, there's a lot of
code that we haven't learned yet, and actually that's okay. We just need to look for the pieces
of code that look familiar to us like this part of the code. We can then use this part
of the code in our own code. We don't have to understand every
bit of code that we get from Google, and don't worry as we
move through this course, we will understand more and more of
this code that we get from Google results these days. We also have some artificial
intelligence or AI tools that can help us search for code. I'll provide links to some of these
tools in the video description and that's the end of this
lesson. In this lesson, we learned how to work
with numbers and math. We learned the order of
operations and brackets. We calculated the numbers
in the final Amazon project. We learned that calculations using
floats can be inaccurate and how to avoid this problem when
working with money. We learned how to round numbers
using math dot round and we learned how to search for code on our own. Here's some exercises to help
you practice numbers and math. In the previous lesson, we learned
how to work with numbers and math. In this lesson, we're going to
learn how to work with text, and we're going to create the text
in this section of the final project. First, make sure you have the final project
open and you're on the checkout page. Also, make sure you have the
console open on this page. If not, you can go to a
blank area, right click, click inspect, and then click the console. Now we're going to learn a feature
of JavaScript called strings. A string represents text. Let's go to our console and
create our first string. We're going to type single quote, hello and single quote and press enter. This is a string and it
represents the text. Hello, and we've actually seen this
code before. In the first lesson, the first piece of code
that we learned was alert, open bracket, single quilt, hello, single quilt, closed bracket, and semicolon.
This code creates a popup on the page. If we press enter, it creates a popup. Now, inside these brackets we
actually created a string. This string is the text
that appears in the popup, so as you can see, a
string represents text. Let's press okay, and now let's learn the syntax
rules for strings to create a string, we just write
some text like hello, and then surround this
text with single quotes, one at the beginning and one at the end. We can also add strings
together. For example, let's type the string sum plus the string text and press enter. When we add two strings, it combines the strings
together into a bigger string, and this makes sense. We're adding
two pieces of text together. We can also add more than two
strings at a time. For example, we can type the string sum plus the string more, plus the string text. If we press enter, the computer will combine all
three strings into one big string. By the way, this is called Cate Nation when
we combine strings together. Now in the previous lesson
we learned about numbers. Numbers and strings are two
different types of values. In JavaScript. They
represent different things, and we can actually check what
type of value something is using this code type of, and then space, and then a
value like the number two. If we press enter type
of will tell us that two is a number. If we do type of quote, hello, quote, and press enter, it will tell us that hello is a string. Now what if we added a
string and a number together? For example, let's type the string hello plus the number three and press enter. So when we add a string and a number, JavaScript will automatically
convert this number into a string. So this gets converted into the string, hello plus the string three, and then it combines them together
into the string. Hello, three. This feature is called
type coercion or automatic type conversion. Okay, now that we understand
the basics of strings, let's do some practical examples. We're going to use strings and
numbers to create the text in this section of the project. First, make sure that in your cart you
have one basketball with free shipping and you have one t-shirt also with free shipping and
you have no other products. Let's scroll up and we'll
start by creating this text in the top right. So this
is the cost of the products, but this time we're going to have a
dollar sign. So instead of just a number, this will be text. So one thing we can do to create
this text is just type out the string directly, like quote dollar 28.94 and quote.
However, let's actually calculate this
number using math. Remember, the advantage of JavaScript is
that it's able to do calculations. So instead of typing out 28.94, we're just going to create
the string dollar sign plus, and we're going to calculate
this number using math. So we're going to add the
cost of the basketball, which is $20 and 95 cents, plus the cost of the t-shirt, which is $7 and 99 cents. If we press enter, unfortunately this doesn't look right. Instead of doing math and adding
these two numbers together, it just sort of put the numbers
one after another into the string. So why is this happening?
JavaScript adds from left to right. So the first step is to
add these two values, and as we learned, if we
add a string and a number, JavaScript will automatically
convert this number into a string. So the result of this
calculation will be the string dollar 20.95, and the next step is to add 7.99.
So it will add 7.99, and now we're adding again
a string and a number. So JavaScript will automatically
convert this number into a string and combine them together. That's why it puts 7.99
at the end of this string instead of doing math. So what we actually want to do
here is to add these two numbers first and then combine
the total with the string. So how do we do this? The solution is that strings
also follow the order of operations, just like
numbers. And remember, in the order of operations, we can use brackets to control
which part of a calculation gets done first. So let's type
this calculation out. Again, the string dollar sign plus 20.95 plus 7.99, but this time we're going
to add an open bracket and a closed bracket around this calculation. This tells a computer to
calculate this number first using math and then combine this
result with the string after. If we press enter. Now this is doing math and it
solves our original problem unfortunately. Now we
have another problem. This math is inaccurate. So
remember from the previous lesson, doing calculations with
floats can sometimes cause inaccuracies, and the best practice when calculating
money is always calculate in cents and then convert
back to dollars at the end. So at the bottom here, we're going to add the string dollar plus open bracket, and instead
of $20 and 95 cents, we're going to add 2090 5 cents plus seven 99 cents and close bracket. And then at the end, we're going to convert this
number back to dollars by dividing by 100. If we press enter, this will give us the text that
we see in the final project. Again, strings follow the same order
of operations as numbers. Brackets are always calculated first, multiply and divide are done next, and add and subtract are done after.
So adding this result to the string is the last step. Now let's do a more complicated example. Let's use strings and numbers
to create this entire line of text, not just the dollar
text. To create this, we're going to go from left to right. Let's go back in our console and
we're going to start with the string items, open bracket, and here we could just
type two and close bracket, but let's actually calculate
this number as well using math. So this number is the quantity or
the number of products in our cart. Let's go back to our console. We're going to end the string
here and we're going to add, and we're going to calculate the quantity. So we have one basketball
plus one t-shirt. Again, we run into the
same problem as before. This gets calculated first
and results in a string, and then it will just combine
the one at the end of the string. Instead of doing math. To solve this, we're going to use brackets
again. So around the one plus one, we're going to add open
bracket and close bracket. This tells a computer to add
the numbers first and then combine it with a string. All right, let's keep going from left to right. We're going to add the rest of the string close bracket, and let's just use a space to
represent the space between these two. So we'll type a space dollar sign, and then we're going to calculate
this number again and add it to the string. So we'll end the string and then plus, and we already did this
calculation up here, so we can select this and then right click copy and here, right click and paste and press enter. And that's how we create this first
line of text using strings and numbers. We break up
the string into parts, calculate the numbers, and then
add the parts back together. All right, now let's take these strings that we
created and do something with them. Let's create a popup and
display this first line of text inside the popup. We'll go back to our console and
type the code for creating a popup alert, open bracket, closed bracket, and then inside the popup we're
going to display this string. So let's just make a copy of
this code. We'll select it, right click copy, and between the brackets
right click and paste. If we press enter, the computer displays a popup with
the first line of text of the final project inside. So that's how we use strings to
create the text in the final project. And once we create the strings, we can use them in other JavaScript code. In the rest of this lesson, we're going to learn more details
about strings in JavaScript. There are actually three
ways to create a string. The first way is to use single
quotes, which we already learned. For example, we can type single quote, hello and single quote and press enter. The second way to create a
string is to use double quotes. For example, double hello and double and press enter. This creates the exact same
string as single quotes. So which one should we
use to create a string, single quotes or double
quotes? In JavaScript, I recommend using single
quotes by default, they're a little easier to read and type.
There is one situation where double quotes might be useful, and that is if we have a
single quote inside the string. For example, if we type the string, I'm learning Java script and single and press enter. This doesn't work because there's
a single quote inside the string, and this single quote
will end the string early. To solve this, we can create
the string using double quotes. For example, double I'm learning Java script and double and press enter. So now this works because we
created the string using double quotes. The single quote no
longer has a special meaning, and it will no longer
end the string early. So this is a situation where double
quotes might be useful. Otherwise, we use single quotes by default. Now, there's actually another solution to
this problem other than using double quotes, and that's by
using an escape character. So a character is one letter number or symbol in a piece of text. For example, the text Hello has five characters. A character can be a letter, a number, or also a symbol. These are
all considered characters. Now, in addition to these characters, we have a special set of characters
we can also use in a string called escape Characters. An escape character looks
like this, a backslash, and then another character
like single quilt. This combination actually counts
as one character in a string. This character creates a
single quilt that is just text. It doesn't have a special meaning, and it doesn't start or
end strings. For example, we can create this string with
single quotes again, so single and this time we'll use the
escape character slash single and then M learning Java script and single and press enter. And now this works because
the escape character slash single creates a single
quote that is just text. It doesn't start or end the string. Another escape character that's
useful to know is back slash double. This creates a double that is just text. It doesn't start or end a string. The last escape character will
learn in this lesson is back slash This is called the New Line character. This escape character
doesn't create the letter anymore, it creates a new line of text. For example, let's create a popup using alert and and then inside the brackets
we're going to create a string sum and then back slash n text and single quilt. If we press enter, you'll notice that this escapee
character created a new line of text in the pop-up, and that's why we call this
the new line character. So that's how escape characters work. They're a set of special characters
that start with backslash, and we use them in a string.
Now let's press okay, and we're going to learn the third way
of creating a string in JavaScript, which is using back ticks.
For example, let's type in our console
and we'll type back, tick hello and back tick and press enter. This creates the same string
as single quotes and double quotes. Strings created with
back ticks actually have a name. We call these template strings and
they have a name because they have some special features. The first special feature of template
strings is called interpolation. Interpolation lets us insert
a value directly into a string. For example, let's say we want to create the
first line of text in our project. Earlier in this lesson, we created
this text with concatenation, which means we broke it up into
parts and added them back together. Interpolation gives us a
much easier way to do this. We'll go to our console and we'll
create this text using a template string because interpolation is only
a feature of template strings, so we'll type back tick items, open bracket, closed bracket, and back tick.
And now between these brackets, we want to insert the quantity or
the number of products in our cart. To insert this with interpolation, we're going to type dollar
open, curly bracket, close curly bracket. So this combination of characters
allows us to insert values directly into the string.
Between these curly brackets, we can calculate the quantity, which is one basketball plus one t-shirt. This will add one plus
one, which equals two, and then insert it
directly into the string. Let's keep going and create
the rest of this line. So we're going to type at the end a colon space and dollar, and now we're going to insert
another value into the string, which is the cost of the
products. To insert another value, we're going to type dollar open,
curly bracket, close curly bracket. Again, in between the curly brackets, we're going to calculate
the cost of the products, which is 2090 5 cents plus seven 99 cents.
And we'll surround this in brackets to make sure we calculate
this first, and at the end, we're going to convert back
to dollars by dividing by 100. If we press enter, this creates the first line
of text again in our final project. If we compare this code, which uses interpolation
to our previous code, which uses concatenation, you can see that interpolation is
a much cleaner way of inserting values into a string. So interpolation is a
recommended solution. Next, template strings have another special
feature called multi-line strings. Let's go to our console and
we're going to type a back tick, sum, and then press enter and text and back. Tick. Notice that this string
is on multiple lines, so we call this a multi-line string, and this feature is only
available for template strings. If we press enter, you can see that the new line in
the string just creates the new line escape character that we learned earlier.
So that's the multi-line string feature
of template strings. We're going to use multi-line
strings a lot later in this course, but for now, I just wanted to
introduce you to this feature. Now, you might be wondering again,
what should we use to create a string, single quilts or template strings? Even though template
strings have more features, I find that most JavaScript code
still uses single quilts by default. So my personal recommendation is
to use single quotes by default. And if we need to insert a value
into the string or type the string on multiple lines,
then use template strings. And that's the end of this
lesson. In this lesson, we learned about strength.
A string represents text. We learned how to use strings
and numbers to create the text. In our final project, we learned three different ways of
creating a string, single quotes, double quotes, and back
ticks or template strings. We learned about escape characters, and we learned two useful
features of template strings, interpolation, and multi-line strings. Here's some exercises to help you
practice working with strings. So far in this course, we've learned some basic features
of JavaScript like numbers and strings. In this lesson, we're going to learn how
to use H T M L CSS and JavaScript together because as I
mentioned at the beginning of this course, we use all three technologies
to build a full website. HTML creates the content of a website, like the buttons and the text. CSS changes the appearance of the website, and JavaScript makes
the website interactive. The first thing we're going to do is
review the basics of H T M L and C s s that we will need for
the rest of this course. Now, in order to write H T M L and c s s code, we'll need to install another piece
of software called a code editor. A code editor helps us
write and organize our code. The most popular code editor for
web development is called VS. Code or Visual Studio Code to install VS code. You can go to
google.com in your browser search for VS code, click the result and follow the
instructions to download and install. Once we've installed VS code, we're ready to review the
basics of H T M L and c s s. We'll start with H T M tml. HTML stands for hyper
text markup language, and just like JavaScript, HTML is also giving
instructions to a computer. Now, unlike JavaScript, we can't use the console
to write and run HTML code. Instead, we write HTML code inside
a file using our code editor. Let's do that right now. We'll start by going to our desktop. So I'm going to close my
browser to go to my desktop, and then we're going
to create a new folder. So we can write click new folder. This folder is going to contain all
the code that we write in this course. Let's name this folder,
JavaScript dash course. Next, we're going to open this
folder in our code editor. So let's open vs code, and then we'll click file open folder and find the folder that
we just created. For me, it's on the desktop
And it's this folder right here. So we're going to select the folder
and then click select folder. Now we can close this startup
message and we're going to create an HTML file. We're going to click this
icon to create a new file, and we're going to name
this file website dot html and press enter. Ending the file name with dot html
tells a computer that this file contains HTML code rather than just text. Now, let's review some basic HTML code. We're going to type the
code less than button greater than, and we also need to type less
than slash button greater than, but our code editor might
auto complete this for us. So this code tells a computer
to create a button and inside the button we're going
to have the text. Hello. Now let's save this file by clicking file save or by typing control S on Windows or command S on Mac. Now to run this HTML code, we're going to open this
file in our browser. Let's go back to our desktop. We're going to open the
folder that we created, find the HTML file, select it, and then right click
open with Google Chrome. As you can see, we have a website and we created
a button with a text Hello inside. And if we look back at our code, that's exactly what we told the
computer to do. So just like JavaScript, HTML is also giving
instructions to a computer. Let's review some more HTML code first. I'm just going to rearrange my windows
here so that it's easy to see the website side by side. Next, we're going to click the end of the
first line and press enter to create a new line. And we're going to type the
code less than P, greater than, and we also need to type less
than slash p greater than. So this code creates a paragraph, and inside the paragraph we're
going to put some text, for example, paragraph of text. Now let's save our file by typing
CTRL S on windows or command S on Mac, and to update our
website to the new code, we're going to go to our website
and click refresh or type CTRL R on windows or command R on Mac. And now you can see that the computer
created a paragraph of text just like we told it to do, and
that's the basics of html. The computer reads our code and then
follows our instructions one by one. First it creates a button, and then it creates a
paragraph of text. Now, let's review the syntax rules for html. Each of these things that
we're displaying on a webpage, these are called HTML elements. So a button is a type of HTML element, and a paragraph is another
type of H T M L element. To create an element, we
start with a less than symbol, and then the element name like a button, and then the greater than symbol. So this whole thing is
called an H T M L tag. This tells a computer to
create a button element. Every HTML tag needs a matching tag. The matching tag follows the same syntax, except it has a slash in
front of the element name. So this is called the opening tag,
and this is called the closing tag. You can think of the opening tag as the
start of the button and the closing tag as the end of the button. And in between we have the
contents inside the button. In this case, it's the text.
Hello. In addition to text, we can also have elements
inside an element. For example, we can go to our paragraph
element and we can add a button inside, so less than button, greater than, and we also need less
than slash button greater than. And then inside the button,
we'll also have the text, hello if we save this file and refresh the page. Now our paragraph element
has a button element inside. By the way, this is called nesting. When we have an element
inside, another element, the last syntax rule we have
to review is that in html, if we have multiple spaces, for example, if we go here and type multiple spaces, multiple spaces are combined
into one space on the webpage. So if we save this code and refresh, you'll notice that all of the spaces
that we added only show up as one space on the webpage. In addition, in H T M L, new lines also count as spaces.
So if we go back to our code and we type here and press
enter to create a new line and then save and refresh, notice that the new line
doesn't appear on the webpage. And that's because this new
line here is the same as spaces in html. So all of these get combined
into one space on the webpage. At first, this might seem a little weird, but this feature gives us a lot of
flexibility When organizing our HTML code, for example, we can go into our code
and add a new line here to separate these two elements and
make our code easier to read. Another thing we usually do to make
our code easier to read is to put the contents of an element on its own line.
For example, we're going to type here
and press enter and here and press enter again to put the contents of the
button on its own line. Now, it's a lot easier to see where this
button starts and where it ends. We can do the same thing
with the paragraph. We can type here and press
enter and type here as well, and press enter, and then remove some of the
extra spaces to put the content of the paragraph on its own line. And now, if we save our file and refresh, you notice that none of the new lines
that we added appear on the webpage. By the way, a webpage is a single page like
the homepage or the cart page together. We call this a website. So that's the basics of
HTML and HTML syntax. Now let's review css. CSS stands for cascading
style sheets and CSS changes the appearance of our website.
Let's review some CSS code. We're going to write our CSS
code inside our HTML file. First, let's type here and
create some new lines at the top. And then at the top we're
going to create a special HTML element called the style element. So let's type less than,
style, greater than, and we also need the closing tag,
less than slash style greater than. So the style element is unique because
it doesn't appear visibly on the page. Instead, the purpose of the style element
is that it lets us write CSS code inside. So inside here, let's press enter to create a new line, and we're going to type
button open curly bracket, close curly bracket. And then
inside the curly brackets, we're also going to press
enter to create a new line. So this is CSS code. And this code tells a computer to
change the appearance of all buttons on the page.
And then inside these curly brackets, we can tell the computer how to
change the appearance. For example, we can type background, dash color, colon, red, and semicolon. If we save and refresh, you can see that this CSS code changes
the appearance of all buttons on the page and changes their
background color to red. Let's do another example. We're
going to go back to our CSS code. We're going to type here and press enter
to create a new line and we're going to add color, colon, white and semicolon. Let's save and refresh, and this CSS code changes the
text color of all buttons on the page to white. Let's do one more example. We're going to type the code, order none and semicolon. Let's save this and refresh. And this CSS code removes the
border for all buttons on the page and that's how CSS works. We tell the
computer which elements we want to change and then how to change
the appearance of these elements. Now let's review these
syntax rules for css. This part of the CSS code
is called the CSS selector. It tells a computer which elements
we want to change. In other words, it selects which elements to change. Inside the curly brackets
we have some CSS styles. This tells a computer how to
change the appearance for each style. The left side is
called the CSS property. This tells a computer what we're changing. The right side is called the CSS value. This tells a computer what
we're changing the property to. For example, this style changes
the background color to red. We use a colon to separate the
property and the value and a semicolon at the end to tell the
computer that this is the end of a style.
So that's the basic syntax of css. We tell the computer which elements we
want to change and then how to change the appearance of these elements. The next thing we're going
to review is HTML attributes. Right now this CSS selector
changes the appearance of all buttons on the page. However, what if we only want to
change the appearance of this
one button and we want to style the other button
differently? How do we do that? We're going to review a feature
of HTML called attributes. Attributes change the behavior
of an element. For example, we're going to go to the opening
tag of the first button and then here we're going to add an
HTML attribute by typing space. Title equals double quotes. And then in between the double quotes, we're going to type tool tip. So this is an HTML attribute
and this attribute adds a tool tip to this button.
If you're wondering what a tool tip is, if we hover over some
code in our code editor, it'll show us this sort of
popup with more information. This is called a tool tip. When we
hover over something and this shows up, so if we save our file
and refresh the webpage and now we hover over our button, we can see that the HTML attribute
added a tool tip to our button and then inside the double quotes
is the text inside the tool tip. For example, we can actually change this to good job and if we save and refresh and hover over our button, the text between the double quotes
is what shows up in our tooltip. So that's an example of an HTML attribute. Now let's review the syntax
rules. For attributes, we always put attributes on
the opening tag and we add a space between the element name and
the attribute to separate them. On the left side is the attribute name. This tells the computer What we're
changing about this element on the right side is the attribute value. This tells a computer what we're
changing this attribute to. For example, here we're changing the tool
tip of this element to good job. We separate the name and value with
an EcoSign and make sure there are no spaces around the EcoSign and
we surround the value with double quotes. Now let's go back
to the original problem. How do we style these buttons differently? We can do this using a very important
attribute called the class attribute. Let's review that right now. We're going to go back to our button
and then here we're going to type space class equals double quotes, and then inside the double quotes
we're going to type red dash button. So the class attribute sort
of adds a label to an element. So here we labeled this
button as a red button and now that we label this
element, we can select it in css. To do that, we're going
to go to our CSS code. We're going to remove the
button selector and replace it with.red dash button. When we start the selector with a dot, this means that now we're
looking for a class. So here we're going to look for all
elements with the class red dash button, which is only
this element if we save and refresh. Now only the elements with the
class red button gets these styles. We can also add the same class to
multiple elements. For example, we can go to our other button and add the class equals red dash button if we save and refresh. Now these styles get applied to both
buttons again because they both have the class red dash button. If we want to style this
button differently, we just
give it a different class. For example, we can change this to yellow dash button and then in our CSS we
can add another selector, so we can type dot. This means we're going to select a
class and we're going to select the yellow dash button class, open curly bracket, close curly bracket. And then inside here we can add
some styles for the yellow button. For example, background, dash color, colon, yellow, and semicolon. Now let's save and refresh, and that's how we use the class
attribute in HTML to modify specific elements. The final thing we need to review is
something called the HTML structure. Let's go back to our website. We're going to find a blank area
and then right click and then click inspect. So we already learned
about the console tab here. We can write and
run JavaScript code. Now we're going to go to the elements tab, which is for HTML and css. So in the elements tab we can
see all the HTML on the page as well as all the CSS on the page, and we can play around
with the CSS if we want. Now if we go back to the html, you'll notice that our webpage has some
elements that we didn't add before, the HTML element, the head
element and the body element. So this is the structure that we're
supposed to follow when writing HTML in our code, we didn't
follow the structure, so the browser actually adds it
for us automatically. However, it's still best practice to follow the
structure in our code because it gives us access to some more features of html. Let's review the HTML structure
and add it to our code. We're going to type up here and
we're going to create some new lines. And now every HTML file is
going to start with less than exclamation doc type in capitals and then space HTML and greater than. This is not an HTML element, it's a special line of code that tells
a browser to use a modern version of html. If we don't have this, the browser might fall back to an older
version of HTML that has less features. Next, we're going to
create an H T M L element, so less than H T M L and greater than the H T M L element
represents the entire webpage. So everything on the webpage
should go inside this element and then inside the HTML element, we're also going to split
it up into two sections, the head element and the body element. So the body element is supposed to
contain everything that is visible on the page. In our example that would be
the buttons and the paragraph. So let's actually select this code and we're going to right click and cut. And then inside the body we're going to right click and paste. The head element contains
information about the page. In general, everything that is not visible
on the page goes inside the head. In our example, that would
be the style element. So let's select this as well. We're going to right click and cut, and then inside the head we're going to right click and paste. And at the bottom let's just clean up
by removing all of the extra new lines. So this is a structure that we're
supposed to follow in all of our HTML files. As you can see, this structure uses a lot of
nesting or elements inside elements to organize our code. Okay, so what are the benefits of
following this structure? One benefit is that there are other
elements that we can use inside the head. For example, let's type here, press enter, and we're going to add the title element. So the title element
sets the text in the tabs inside we can type html CSS review. If we save and refresh, the title will show up in the tap. So this is an example of an element
that we can now add in the head. Another benefit that we get from
this structure is the ability to automatically refresh our
webpage when we change our code so far, every time we change our code, we have to save and then
manually refresh the webpage. We can actually automate this by
following the structure and then installing a VS code extension. So let's click the extension area
and we're going to search for the extension live server and click install. Once
we have that installed, we're going to change a setting. Let's open the settings by clicking
this icon in the bottom left and then click settings At the top we're going to search for live server and we're going to look for a setting
called live server custom browser, And we're going to change this to Chrome. Now if Google Chrome is already
your default web browser, you don't need to do this
step, but it's nice to know. Now let's close the settings
and go back to our code next. Instead of opening this
file directly in the browser, like before, we're going to use
live server to open this file. To do that, we're going to right click this file
in our code editor and then click open with live server. If we open a file with Live server, this webpage will automatically
refresh when we change our code. For example, we can go here and change the
background color to green. If we save live server will
automatically refresh the webpage, so we don't have to
do that back and forth anymore. Let's just change it back to red so
that the class name makes sense and save. And we can also
close the previous tab. So this is the H T M L structure. It gives us access to
more features of html, and this is all we need to review
about h, html and css. For now, if you want to learn more, you can check out my HTML and CSS
full course in the video description. Before we add a JavaScript to our website, we're going to review some VS code setup.
So you'll notice that many of these lines have
spaces at the front. These spaces are called
indents, an indent maker code, easier to read. For example, we can easily tell that this
code is inside the brackets because it has an extra
indent in the front. If we didn't have indents, here's
what the code would look like. It's a lot harder to
read. To add an indent, we can type at the beginning
of the line and press tap. To remove an indent, we can press shift tab
or just use backspace. Now by default vs. Code
uses four spaces per indent. However, in html, CSS and JavaScript, we usually use two spaces per indent.
So we're going to update this setting. Let's go to our settings by clicking
this icon in the bottom left and then click settings. And at the top we're
going to search four tab and we're going to change
the tab size from four to two. Now let's close the settings and we're
also going to change the indents for this file. We're going to go down here
and click select indent, and we're going to choose
indent using spaces, and then click two. And now if we type at the
start of a line and press tab, it will only add two spaces per indent. So let's reformat our code to use two
spaces per indent instead of four. First we're going to remove
all the indents in our code. A shortcut for this is to
select all of these lines and press shift tab to remove
one indent for each line. So we're going to keep pressing
shift tab until we remove all the indents. Next we're going to add the indents
back using a similar shortcut. We're going to select the
head element and press tab to add one indent for each line and
then select everything inside the head and press tab
to add another indent and then select everything
inside style and press tab. And then inside each of these brackets, we're going to select the lines press tab, and then here press tab. We'll do the same thing
for the body element. We'll select all these
lines and press tab. We'll select everything
inside the body press tab, and then inside each of these
elements we're going to press tab and press tab. Now if we save, our website will look the same
because all we did was adjust the indents. So there's one other setting in VS
code that we're going to set up, which is line wrapping. If
you look at this line of code, you can see that it's really long and
we need to scroll horizontally to see the rest of the line. Instead, we're going to make this line
wrap around if it gets too long. Let's go back into our settings by
clicking here and then click the settings and then up here we're
going to search for wrap and we're going to look for editor
word wrap and we're going to turn this on. Now if we close our settings
and go back to our code, this line, which is really long will wrap
around to the next line instead of us having to horizontally scroll.
So that's the VS code set up that we need two
spaces per indent and line wrapping. Finally, we're going to add
JavaScript to this website. So we learned that we can use the
console to write and run JavaScript. Well, there's actually another way
to run JavaScript which is inside an HTML file. Let's learn how to do that. So we learned that HTML has a
special element that runs CSS code called the style element, while HTML has another special
element that runs JavaScript code. And this element is
called the script element. So inside our body at
the bottom of the body, we're going to add less
than script, greater than, and the closing tag less than
slash script greater than. And inside the script element
we can put some JavaScript code, we're going to add the code alert, hello and semicolon if we save live server will refresh the page. And now you notice
that the computer now runs our JavaScript code just like
it did in the console. It creates a popup with
a text Hello inside, and we usually put the script element at
the bottom of the body because we want the webpage to be created first and
then we use JavaScript to make it interactive. For the rest of this course, we're going to run our JavaScript
code using an H T M L file. The console that we used in the
previous lessons is more of a way to try out JavaScript code. We wouldn't
use the console for a real website. In addition to the script element, we have another way to run
JavaScript code inside html, and that's by using an attribute. Let's go back to our first button
and here we're going to add another attribute. So let's type space and this
time we're going to add the on click attribute equals double quotes. So this attribute will run
JavaScript code whenever we click this button, that's
what on click means. Between the double quotes,
we can write some JavaScript. For example, let's press enter enter, and then here we're going to type alert. Now if we save live server will refresh the page
and run this line of JavaScript code. Let's press okay and now
if we click this button, it will run this line of JavaScript
code and create a popup with a text. Good job inside. So those are two places where
we can run JavaScript code, the script element and
the on click attribute. The code in the script element
runs first when the page is loaded, the code in the on click attribute
runs after when we click the button on the page, and that's how we use H
T M L CSS and JavaScript together on a website. Notice
that everything starts from h l first creates the website, and then inside the H T M L, we can run CSS code to change
the appearance and we can run JavaScript code to make
the website interactive. Now let's learn some new
features of JavaScript that
we haven't seen yet in this course. The next feature we're
going to learn is called comments, comments or pieces of code
that the computer ignores. So let's create our first comment. We're going to go down to
the script element here and type forward slash forward slash. So this is a comment, anything after the double slash
will be ignored by the computer. So we can type anything we want, like this is a comment if we save it, ignores this line and creates
the popup in the next line. Now let's close this popup
and learn why we use comments. Comments are useful for providing more
information for people reading our code. For example, we can create a comment
above this code like this code creates a pop-up. This comment helps others and
ourselves understand what this code does. So that's one way we use comments. Another way we use comments is if we
don't want to run some code anymore, but we also don't want to
delete it. For example, this code creates a popup
every time we refresh the page and this can be annoying, so I
want to stop running this code, but I also don't want to delete it
because you might want to review this code later. So what we can do here is to add
a double slash in front of this line to turn this code into a comment. Now if we save, the computer will ignore this line
of code and not create the popup. This is called commenting out the code. It's useful if we don't want
to run some code anymore, but we also don't want to delete
it for informational purposes. So JavaScript has another syntax
for writing comments and that syntax is slash star and star slash here. Anything between the stars is a comment. This is called a multi-line
comment because between the stars we can write a comment on
multiple lines. For example, we can type multier line, enter comment on the other hand double slash is
known as a single line comment. Now just like JavaScript, HTML and CSS also have comments, but they use a different syntax. If we scroll up to our HTML here, we can type less than
exclamation dash dash and we also need dash greater than. So anything between these
double dashes is a comment. For example, this is a comment in css to create a comment we can type slash star star slash, so it's the same multi-line
comment as JavaScript between the stars. We can add a comment, so this is a comment if we save our file, nothing changes on our webpage because
comments are ignored by the computer. The last feature of JavaScript we're
going to learn is called console dot log. Let's go back to our code and
at the bottom in the script element, we're going to type the code two plus two. So we learned that this code in
JavaScript does some math. However, if we save this file, where is the result of this math? So we might think that the result
will show up in the console, but if we right click, click inspect and then click the console. You'll notice that the result
doesn't show up here either, and that's because before
we were running two plus two inside the console, so the
result shows up in the console, but now we're not running this
code in the console anymore, we're running this code on the
webpage. So how do we see this result? The solution is we're going to redirect
this result back to the console. To do that, we're going
to use this piece of code console dot log, open bracket, close bracket, and semicolon console dot log will display
whatever's between the brackets back in the console. So if we move
this code between the brackets, so we select this and then right click cut and then between the brackets right click, paste and save. The result of this code is
displayed back in the console and console dot log works for
any code that we learned so far. For example, we can use strings, so let's create a new
line and type console dot log, open bracket close, and then between the brackets,
let's type some strings, some quote plus text quote and save this file. Again, it will display the result of whatever's
between the brackets back in the console. So that's how we see the result of
JavaScript code that is running in a file. We used console dot log
and that's the end of this lesson. In this lesson, we reviewed the basics of HTML and css. We set up our code editor vs code. We learned how to load
JavaScript inside an HTML file using the script element
and the on click attribute, we learned how to create comments
and we learned how to use console dot log. Thanks for watching this course so
far. If you find this content valuable, you can support this
channel by liking the video, clicking subscribe below the video
and recommending this course to your friends. Thanks again and
let's continue with the course. In this lesson we're going to learn
the next feature of JavaScript called variables, and we're going to use variables to build
a simple version of the cart quantity feature of the final project. First, let's create a new HTML
file just for learning variables. We're going to go to our code editor
and click this icon to show our files and then click
this icon to create a new file. And we're going to name this file, zero five dash variables dot html and press enter. So the zero five just means that
this file is for lesson five. Let's also add the lesson
number to website dot html. We'll select this file
and then right click rename and then add the front. We'll add zero four dash and press enter. Next, we're going to copy all the
code in website dot html to variables dot html. So let's click in this file and we're
going to select all of this code by typing control A on
Windows or command A on Mac. And then we're going to right click copy and then inside variables dot html, right click and paste. Let's click this icon to hide
our files for now and we'll prepare this file for this lesson.
So let's scroll up to the top. And first we're going
to change the title to variables. Next we're going to all the CSS
because we're going to start over and we're going to delete all
the HTML except for the script element and let's delete all the JavaScript
from the previous lesson. And finally, let's save and we'll open this file in our
browser by right clicking and then open with live server. And now we can close the previous
tab and the previous code for now. Now we're ready to learn
variables. First of all, what is a variable? A
variable is like a container. We can save a value like a
number or a string inside a variable and then use it later. Let's do an example and
create our first variable inside the script element.
We're going to type the code, let and space the word let creates a new variable, and now we're going to choose
a name for our new variable. Let's name this variable one. So this creates a variable
or a container named variable one, and now we can save a
value inside this variable. To do that, we're going to type space equals space, and then a value, like
a number or a string. So let's save the number
three inside and we'll type a semicolon at the end. So here we used a let to
create a new variable. We named this variable, variable one and we saved
the value three inside this variable. Now that we saved
this value, we can use it later. For example, let's type a new line
and type the code console dot log, open bracket, close bracket and semicolon. Remember from the previous lesson that
this code displays whatever's inside the brackets in the console
so far we put a value inside like the number two if we save and then go to our website
and open the console. So right click inspect
And then click the console. We can see that the number two
was displayed in the console. So now let's try replacing this value
with the variable that we created. So instead of two, we're going to console
dot log variable one. If we save notice that
it now displays three, so it's displaying whatever value
is saved inside the variable. As you can see, we can save a value inside
a variable and then use that variable later on. Let's
do another example. We're going to create another variable. So we're going to create some
new lines and we'll type let, and this time let's name
this variable calculation and we're going to type
space equals space to save a value inside this new variable. And this time instead of just a number, we're going to save a calculation two plus two and semicolon. So this will calculate two plus two
and then save the result which is four into the variable. If we console dot log, open bracket calculation and semicolon and save, it will show us that the value
four is saved inside calculation. Now let's try this code. We're going to type a
new line and then console dot log, open bracket
and calculation again And plus two and semicolon. So here we're using a
variable inside a calculation. What this does is that it takes whatever
value is saved inside the variable right now it is four and then
substitutes that value into the calculation. So this
will be four plus two, which equals six. If we save, we can see that in the
console it displayed six. So we can use a variable
wherever we use a value and JavaScript will substitute whatever
is inside the variable into the code. Let's do another example. We're going to types some new lines
and create a new variable again using let and we're going
to name this variable result and we're going to make
it equal to calculation plus two and semicolon. So this does the same thing
as a code before it will take whatever value is inside
calculation, which is four, and substitute it into this code. So we get four plus two equals six, but this time we have an extra step.
We're going to save this result, which is six into another variable. So if we console dot log, result and save, we can see that six was
saved into the result variable. Again, we can use a variable
wherever we use a value. Now in addition to numbers, we can save any type of value
in a variable including strings. For example, let's create a new variable using let and let's name this message and we're going to save inside
this variable a string this time. So hello and semicolon again. We're going to console
dot log this variable, so console dot log and message and a semicolon at the end. If we save, it will show us that the string
hello is saved inside this variable. Okay, now that we learned how variables work, let's learn the syntax
rules for variables. The word let creates a new
variable and then we give the variable a name. So we can name variables almost
anything we want except for a few restrictions. Number one, we can't use special words
like let as a variable name. That's because let already has
a special meaning in JavaScript, it creates a variable. So let
is a reserved word. However, we can use Let one or let two
as a variable names we just can't use let. Number two, we can't start a variable
name with a number. If we start with a number, JavaScript will think this is a
number instead of a variable name. However, we can use numbers
in the middle or the end. Lastly, we can't use most special
characters like these or a space in a variable name. However, there are two special
characters we can use dollar and underscore. So those are the
rules for naming variables. And then to save something
inside a variable, we just use the equal sign and
then the value we want to save, and that's it. After we create a variable, we can start using it
in the rest of our coat. Now there's one last part of the
syntax that we haven't learned, which is the semicolon. We've seen semicolons in many
places already in JavaScript. A semicolon means this is
the end of an instruction. It's similar to a period in English. In English A period means
this is the end of a sentence. So here this semicolon tells
JavaScript that this is the end of an instruction, and now after this we can
add another instruction like console dot log log, open bracket, and then the string semicolon
and a semicolon at the end. If we save, it will run these two instructions one
after another without any problems. So if we didn't have the
semicolon here and we save, it wouldn't work because JavaScript
thinks that this entire line is one instruction. So we need semicolons to separate
different instructions in JavaScript. If we save, everything goes back to normal. So JavaScript is a little special
because it has a feature called semicolon insertion. That means it will try to insert
the last semicolon in a line of code automatically. For example, if we removed the last semicolon and save, this code will work
without that semicolon, and that's because JavaScript inserts
the last semicolon automatically. However, a lot of companies still prefer to use
semicolons in their JavaScript code because semicolon insertion can sometimes
put the semicolon in the wrong place. For this reason, we're also going to use semicolons in
this course to help you get used to JavaScript code with semicolons. Next, we're going to learn how to change the
value that is saved inside a variable. For example, here we save the number
three inside variable one. Now we're going to change the
value saved inside variable one. To do that, we're going to go to
the bottom and create some new lines and we're type the variable name again, so variable one. And now to change the value saved inside, we're just going to type the
EcoSign and then a different value alike, five and semicolon. And now if we console
dot log this variable console dot log variable one and semicolon and save, it will show us that five is
now saved inside variable One. Notice also that if we
scroll up to the top, the first console dot log
still displays a value three. And that's because at this point in
the code variable one still contained three, we didn't update the variable yet.
So when we first saved a value inside this variable, this is called assigning
a value to a variable. Then when we change the
value inside this variable, this is called reassigning
a value to a variable. Now let's learn the syntax
rules for reassigning a value. Notice that we don't use the
word let when reassigning. That's because let creates a new variable. So if we try to use Let again, it would try to create a new
variable named Variable one. However variable one already
exists and we can't create two variables with the same name.
So this would cause an error. Instead to reassign a variable, we just type out the variable
name and make it equal to something else. So that's the syntax for
reassigning a variable. Now we're going to do one last
example before working on the project, let's go to the end of our code.
We're going to type some new lines, and this time we're going to
reassign variable one again, so we can reassign a variable
as many times as we want. So let's type variable one and then equals, and we're going to type variable one plus one and semicolon. So we learned earlier that we can
use a variable inside a calculation and it will substitute whatever
value is inside the variable. Here we're also using a
variable inside the calculation, but we're using this variable itself. So it's essentially taking this, increasing it by one
and then saving it back. If we console dot log, this variable, variable one and save variable one now contains six. So it took the previous
value in variable one, which was five added one,
and then saved it back. So this is how we increase the value
of a variable by a certain number. Okay, now that we know how to
create and reassign variables, we're ready to work on a project. So I actually prepared a project that
we can do for this lesson and we can see this project by going to our browser, clicking at the top and typing super simple.dev/projects/variables and press enter. So we're going to work on the cart
quantity feature of the final project. So in the final project we have a number
in the top right corner that shows how many products are in our cart. When we click the add to cart
button, this quantity will increase. So what you see here is a simple
version of the cart quantity feature that we can create right now.
Let's go over how it works. First, make sure you have the
console open on this page. Now when we click the
show quantity button, it will show us that there
are zero products in our cart. If we click the add to cart button, it will increase the quantity by
one and display it in the console. If we click add to cart, again, it will increase the
quantity by one again. Now in the final project, we can also add more than one product
at a time using this dropdown. For now, we're going to build
a simpler version of that. We're going to use the plus two and
plus three buttons to add multiple products. So when we
click the plus two button, it will increase the quantity by
two and display it in the console. And when we click the plus three button, it will increase the quantity by three. And finally, when we click
the reset cart button, it will reset the quantity back
to zero and display this message in the console. So now that we understand
how this project works, let's build step by step. First, let's create a new H T M L
file just for this project. We're going to go to our code editor
and click this icon to show our files and then click
this icon to create a new file. Let's name this file, zero five dash cart dash quantity dot html, and press enter. Next, let's open variables dot
html and we're going to copy all the code here into our new file. Let's typer A on windows
or command A on Mac to select all this code. And then right click copy. And then in our new file, right click and paste. Let's close this for now. And in the new file we're
going to change the title to cart quantity and let's remove all
of our JavaScript code, but keep the script element because
we're going to write new JavaScript code. Now we're ready to begin. Let's start by creating these buttons.
Let's go to the body element, going to create a new line. And here as we learn
in the previous lesson, we can create a button
using this HTML code lessen button greater than and the
closing tag lessen slash button greater than inside this button, we're going to have
the text show quantity. And let's save. Now let's open this file in live
server by right clicking and then open with live server. And we can see that we
created the first button. Now let's create the other buttons here. Feel free to pause the video
if you want to try it yourself. We're going to go back to our
HTML and create another button. Inside this one we're going
to have the text add to cart. Let's create another button. This one is going to
have the text plus two, and we'll create another button. This. One is going to be plus three. And finally we'll create the last button, and this one is reset cart. And now let's save. And
if we go back to our tab, we've created all the buttons. Now let's make this webpage
interactive with JavaScript. First of all, we need somewhere
to save the cart quantity. So as we learned in this lesson, variables are the perfect solution
for this variables let us save a value. So let's go into the script element
and we're going to create a variable by typing let, and this variable is going
to save the cart quantity. So let's just name it cart, capital Q quantity. So the cart quantity
will start out at zero, so we're going to type
equals zero and semicolon. Next, when we click the
show quantity button, we want to display the quantity
in the console. To do this, we learned a special H T M L attribute
in the previous lesson called the on click attribute. So we're going to type
in this opening tag here, space on click equals and double quotes. So the on click attribute runs
some JavaScript when we click this button and between the double quotes, we can write JavaScript
code. So let's press enter, enter.
And now when we click this button, we want to display the cart
quantity in the console. So let's type console dot log, open bracket, close bracket, semicolon. And then between the brackets
we're going to display a message. Now if we go back to super simple.dev and we click show quantity, we want to display this
message in the console. So in our code between the brackets, we're going to type the string quote cart, quantity colon zero. Now let's save and go back
to our tab to try it out. So we're going to open the console
first by right clicking and then click inspect and then click the console. And now when we press
the show quantity button, it should display that
message in the console. Okay, so we just made our
project interactive, however, we obviously don't want to display
zero every time we want to display the value inside cart quantity. So we'll need to insert this
value inside this string. Remember from the strings lesson, when
we want to insert a value into a string, we're going to use a template string. So let's switch the single
quotes to back ticks to create a template string. And now instead of zero, we're going to insert a
value using dollar open curly bracket and closed curly bracket. And in between these brackets,
we're going to insert this variable cart, capital Q quantity. Remember that JavaScript
is case sensitive, so make sure you type the
variable name exactly the same. Now let's save and click show quantity again, and now it displays the value
inside cart quantity in the console. So notice that variables also
work with string interpolation. Again, we can use a variable
wherever we use a value and it will just substitute whatever
value is saved inside this variable into the code. Now let's make the rest of
the buttons interactive. So when we click the add to cart button, we're going to add one to this cart
quantity and display it in the console. So again, we're going to type
here and type space on. Click equals double quotes, and between the double quotes
we're going to add JavaScript. Let's also add some new lines here
to make our code easier to read. Okay, so in the on click attribute,
we're going to do two things. The first one is increase
the cart quantity by one. We can do that by reassigning
the cart quantity variable. So we're going to type just the
variable name cart quantity, and we're going to make it equal to itself plus one and semicolon. Next we're going to display the
updated quantity in the console. So let's press enter and we're
going to display this message again, so we can actually just copy this code. So we'll select it and
then right click and copy. And then here, right click and paste. Now if we save and click the add to card button, we'll see that it increased the quantity
by one and displayed the updated quantity in the console. Let's press
it again to make sure it works. So it increases it by one again and
then displays it in the console. So that's basically how the cart quantity
feature works in the final project. First, we need a variable
to save the quantity, and then when we click a button,
we're going to update the quantity. So now let's make the rest
of these buttons interactive. Feel free to pause a video if
you want to try it yourself. For the plus two button, we're going
to add the on click attribute. Again, on click equals double quotes,
And inside we're going to increase
the cart quantity by two, so cart quantity, and then we'll just
make it equal to itself plus two and semicolon. And again, we're going to display the updated
quantity in the console so we can create a new line and just copy
this code. So select it, right click copy, and here, right click and paste. Let's save and click plus two a few times and we can see that it adds two to the
cart quantity and displays it in the console for the plus three
button, we'll do the same. Let's type an on click attribute, click equals double quotes, and here we're going to increase
the cart quantity by three. So cart quantity equals itself plus three and semicolon. And we're going to display this in the
console again. So we'll select this, right click copy, and here, right click and paste. Let's save again and try it
out to make sure it works. So plus three, plus three. And finally let's do
the reset card button. So we'll add the on
click attribute. Again, on click equals double quotes, and inside the double quotes, we're
going to do something a little different. This time instead of
increasing the cart quantity, we'll set it back to zero. To do this, we can just reassign the
cart quantity variable, so cart quantity and just make it equal to zero and semicolon. Now if we go back to super
simple.dev and try out this reset cart button, you'll notice
that it displays two messages. The first message is cart was reset. So we're going to display
that message in our code first console dot log, and the string cart was reset, and the second message is the
same message as the other buttons. So we can just select
this and then right click copy, and then here, right click and paste. And now let's save and go back
to our tab and give this a try. So the cart quantity starts at
zero When we press add to cart increases by one, this increases by two, this increases by three, and
when we click reset cart, it'll display cart was reset and
reset the cart quantity back to zero. And that's it. We just created a simple version of
the cart quantity feature of our final project using everything that we
learned in this course so far. Now we're going to learn some
shortcuts for reassigning variables. So if we look at this line of code
Here, we're increasing the value of this
variable by two and then saving it back. Well, there's actually
a shortcut for this, and that shortcut is cart quantity plus equals two and semicolon. So this does the same thing as the
line above, but it's just shorter. The plus means we're going
to add two to cart quantity and equals means we're going to save
that result back to cart quantity. So we can actually delete this line and the code will work
the same way. If we save and try it out, it will still add a two and then
save it back in card quantity. Let's scroll up and practice
by using this shortcut for cart quantity plus one. So
instead of this line, we can type cart quantity plus equals one and semicolon. So it turns out that in programming
plus equals one is so common that we have an even shorter
shortcut for plus equals one, and that shortcut is cart quantity plus plus and semicolon. So this is the same thing
as plus equals one and all three lines do the same thing. So we can remove these lines and the code will work the same
because it's just a shortcut If we save. So if we click add decart it, it will add one every time. So those are some shortcuts
for reassigning variables. We also have these shortcuts
for the other operators, like minus equals multiply
equals divide equals and minus minus. I'll leave some exercises for these other
shortcuts at the end of this lesson. Next we're going to learn some best
practices for naming variables. So if we scroll down, notice that our variable cart
quantity has two words in it, cart and quantity. We learned earlier that we can't
have spaces in a variable name, so if we want to have multiple words, we have to combine them
together like this. Now you might be wondering why we wrote
it this way with a lowercase C and a capital Q. This is actually a naming
convention called Camel Case. In Camel case, we combine the words together and
capitalize every word except the first word. So for a cart quantity, we capitalize quantity, but we keep cart lowercase
because it's the first word. Camel case is actually the standard
naming convention for JavaScript. All of our variable names
should use Camel Case. Now in programming there are other
naming conventions that exist. Another one is called Pascal Case. Pascal case is the same as Camel
Case except we capitalize the first word. So for cart quantity, Pascal case would be capital
cart and capital quantity. In JavaScript, there is one
feature where we use Pascal case, which we'll learn later in this course. For everything else we use Camel Case.
Another naming convention is Kebab case. Here we keep the words lowercase
and combine them with a dash like cart dash quantity. Kebab case doesn't work in JavaScript
because the dash is already a minus symbol. However, we use kebab case in H
tml and CSS and also in our file names as you can see here. And finally, we have Snake case where we keep
the words lowercase and combine them with underscores. Snake
case is used in other languages, but it's not really used in JavaScript. So those are the common naming
conventions that we use in programming. Now, one more thing I want to note
is that when we name our variables, try to pick a name that is not too
short or too long. For example, instead of cart quantity, we
could have named this variable C, but this name is too short. It's
hard to understand what C means. We could also use a
name like this quantity of products in the cart, but this name is too long. It's
hard to read this in the code. So try to have a balance between a name
that is understandable but not too long, like cart quantity. The last thing we're going to learn in
this lesson is there are three ways to create variables in JavaScript. Let's go back to our
variables dot html file, and we're going to learn those three ways. So the first way is to use
Let, which we already learned. The second way to create a
variable is to use the word cons. So at the bottom we can type const space and then a variable name like variable two and make it equal to three. So Const creates a variable just like let, except we can't change its value later. This value stays constant.
That's why it's called Constant. If we try to change its value, like variable two equals five, and then we save this and we
open this file in the browser by right clicking and then
open with live server and then open the console.
So right click inspect and then click the console. It will give us an error when
we try to change this variable. So this doesn't work. Let's remove this line and save. So why would we ever
use Cons instead of let, while Cons makes our code
safer and easier to understand? When we create a variable with Cons, we know for sure that this
variable will always contain three for let. However, if we create a variable, it's hard to know what value is
inside this variable because later on we can change this value in our code. So in order to keep our code safer, it's actually a best practice to
use cons by default and only use Let When we know that we
need to change the variable. So here it's actually
best practice to use Cons to create this calculation variable
because we're not changing it later. Same thing for the result variable and the message variable. Now for variable one, we have to use Let because we're
changing it later in this code. So that's cons. It creates a
variable that can't be changed later. Finally, the third way of creating a
variable is to use another word var. So at the bottom we can type VAR space and then a variable
name like variable three and make it equal to three. So VAR creates a variable just like Let, and this variable can be changed later. VAR is actually the original way
to create variables in JavaScript. VAR means variable. However, VAR has some issues that we'll
learn later in this course. And because of these issues, we
don't use VAR in new JavaScript code. You might see VAR in older JavaScript
code, so it's still useful to note. So those are three ways to
create variables in JavaScript. Let Const and var, we use Const by default, and if
we have to change a variable, then use Let. So one more thing we're going to
learn is that we can use type of with variables. So remember that type of
tells us what type A value is. For example, if we wrote
Console dot log type of three and save type of will tell us
that three is a number. Well, we can actually use
type of with a variable. So if we change this to variable two and save type of will tell us the type
of value inside the variable, which is a number, and that's
what we see in the console. Now let's check the type
of this variable message. So message contains a string, and if we do console dot log type of message and save, this will tell us that the value
inside the message variable is a string. So we can use type of to check
the type of value that is saved inside a variable. And that's
the end of this lesson. In this lesson, we
learned about variables, which are a way to save
values and use them. Later, we learned how to reassign a variable. We created the cart quantity
feature of the final project. We learned some shortcuts
for reassigning a variable. We learned some naming conventions
and best practices for variable names, and we learned three ways
to create a variable. Let Cons and var. Here's some exercises to help
you practice using variables. In this lesson, we're going to learn two more
features of JavaScript called Bullions and If statements. And we're going to use these features
to build this rock paper scissors project. Let's start by creating a new
HTML file for this lesson. We're going to go to our code editor
and click this icon to show our files and then click this icon
to create a new file. We're going to name
this file zero six dash bullions html and press enter. Let's open variables dot html and we're going to copy all
this code into our new file. Let's select the code using control
A on Windows or command A on Mac. And then right click copy. And in here, right click and paste. Let's close this for now and
prepare this file for this lesson. So we'll scroll to the
top and change this to boos and then remove
all the JavaScript code, but keep the script element. Now let's save and open
this file in live server by right clicking and then
open with live server. And we can close the previous tabs as well as the previous code. For now, we'll start by learning what are
bulls. So far in this course, we learned two types of values in
JavaScript, numbers and strings. Bullying are another type
of value in JavaScript, but bullying are special because
there are only two bullying values. True and false.
Let's click in the script element and type true press enter and type false. So these are the only two bullying
values that exist true and false. So what's the
purpose of bullying values? A bullying value represents
whether something is true or false. For example, in JavaScript
we can compare two numbers. Let's create some new lines
and type the code three less than five. So this code checks whether the
number three is less than five, and of course this is true. So if we console dot
log this code console, dot log and save, and then go to our website
and open the console, right click inspect and console, it will show us that the result of
this code is the boo value. True. Let's try another example. Let's delete this less than
symbol and replace it with a greater than symbol. So now this code checks whether
three is greater than five, and we know that three is not
greater than five. So if we save, the computer will tell us that the
result of this comparison is the bullying value. False. So as you can see, a bullying value represents
whether something is true or false. Now, let's learn these syntax rules
for bullying. To create a bullying, we just type true or false. Note that we don't surround
these with quotes like this. If we surround them with quotes,
this is now a string, not a bullying. We can use type of to check this. So at the front we can type console dot log, type of true. If we save, this will tell us that
this is a string. Now, if we remove the quotes and save, this will tell us that this is now a bull. So when creating a bull, don't put quotes around true or false. Let's save. Now, one way to create a bull
is to compare two numbers, for example, three greater than five.
So this greater than symbol is called a comparison operator. And there are many other
comparison operators we can use. We saw less than earlier, and we also have greater than or
equal to less than or equal to triple equals, which checks if two values are
equal to each other and exclamation double equals, which checks if two
values are not equal to each other. Now JavaScript is a little special
because it has two ways to check if two values are equal, triple
equals and double equals. The difference is that double equals
tries to convert both values into the same type. For example, in our code, let's create some new
lines and console dot log, and let's check if the
number five is equal to the string 5.00. If we save, it will tell us that these two
values are equal to each other, even though one of them is a
number and the other is a string. And that's because the double equals
converts both values into the same type. So converts both of these into
the number five and then compares them. So that's why
they are equal. However, this is not a good idea because
this value is a number and this value is a string. It's a piece of text, so they shouldn't really
be equal to each other. That's why in JavaScript we
always use the triple equals to check if two values are the same, so that we avoid the conversion
behavior of double equals. So if we save, now, it will tell us that these two values
are not equal to each other because one value is a number and
the other value is a string. So this rule also applies to not equal to. In JavaScript we always use
exclamation double equals instead of exclamation equals to avoid
the conversion behavior. All right, so those are
comparison operators. In the order of operations, comparison operators have
a lower priority than math. So if we did something
like five and then minus five, this would calculate
five minus five first, which is zero. And then
compare the two numbers. So three is now greater than zero. So if we save the first
comparison will now be true. So comparison operators have
a lower priority than math operators. Now that we know
what bullying values are, we're going to combine them with a really
useful feature called if statements. An if statement lets us write
multiple groups of code and then decide which code to run. Let's do an example and
create our first if statement. We're going to go to the bottom
and create some new lines and type if and open bracket, closed bracket and open curly
bracket. Closed curly bracket. Between these round brackets, we're going to put a boo value like true and in between the curly brackets
we're going to put some code to run. For example, console dot log. Hello. So the way that an if statement
works is that if this bullying value is true, then we're going to run
the code in the curly brackets. If this bullying value is false,
then we're not going to run the code. If we save the value between the brackets is true. So we're going run this
code and display hello. Now if we change this to false and save, it will not run this code. So an if statement lets us decide
whether or not to run some code based on this bullying value. Now if statements have another
useful feature called else, let's go to the end of
this if statement and type else open curly bracket,
close curly bracket, and then inside these curly brackets
we're going to put some different code like console dot log else. The way else works is if
this bullion value is true, the computer will run this code. Otherwise we will run
the code inside else. Let's give it a try. We'll change this bullying
value to true and save, and because it is true, it will
run this code and display. Hello. Now if this bullying value is false and save
Because it is false, it will not run this code and
it will run the code inside else and display else. So using if and else we can
write two groups of code and then decide which code to run. Now let's do a practical example. We're going to write some code to check
if someone is old enough to drive. Let's go to the bottom
and create some new lines and we're going to type
if brackets and curly brackets and inside here
we're going to compare two numbers. The first
number is a person's age. Let's pretend we have a
person who is 30 years old, so we're going to type 30. Then we're going to check if
this age is greater than or equal to the legal driving age. Let's pretend the legal driving age is 16. Notice that between the brackets we
don't have to just put a bullying value. We can put any code that
results in a bullying value. So this comparison results
in the bullying value. True. That means the computer will run
the code between the curly brackets. So in here, let's type console dot log you can drive. Now if this is not true, let's run some different
code at the bottom or type else and curly brackets
and then inside these brackets will type console dot log. You cannot drive. Now let's save and it will tell me that this
person who is 30 years old can drive If we go back and change
this to a person that is 15 years old and save this comparison will result in false, so it will
display you cannot drive. So that's how we use if statements. We can write multiple groups of code
for different situations and then decide which code to run. Now let's learn the syntax rules
for if statements to create an if statement we type if and then
round brackets with a boo value inside. This is
called the condition. If this condition is true, we will run the code
inside the curly brackets. We can also add an else statement. This code will run if
the condition is false. The else statement is optional.
We don't have to have one. So these curly brackets and the code
inside these are called branches because it's like a tree branch. The code is splitting off into two
directions and we either run this code or we run this code. One more thing to know is in a
branch if we only have one line of code, the curly brackets are actually
optional so we can delete these and the code will still work.
However, if we have more than one line of
code in this branch, for example, if we add another line console dot log, congrats. Now this branch has two lines of code, so the curly brackets are mandatory
so we have to add them back. Now we're going to learn another
feature of if statements, which is we can have more than
one condition. For example, we're going to go to the end
of this if branch and type else if and then brackets and curly brackets else. If let's us add another
branch to our if statement. Between these round brackets
we can add another condition. For example, if a person is
almost old enough to drive, let's display a different
message. So inside this condition, let's check if this person's age, which is 15 is greater than or equal to 14. So we're checking if they're
almost old enough to drive. And now inside the curly brackets we're
going to display a different message console dot log almost there. So the way this works is that the if
statement checks the conditions one by one. First it checks if this is true, if it is it will run this branch.
Then it checks if this is true, if it is, it will run this branch
And if none of the conditions are true, it will run the ELs branch. So here this condition is false, so
we're not going to run this code, but now this second condition is
true, so we're going to run this code. If we save, we display almost there in the console. So using Ls if branches, we can add as many conditions
as we want to an if statement. The next thing we're going to learn is
that we can combine if statements with variables from the previous
lesson. For example, here we wrote the person's age two times. So we can actually save this age in
a variable and then reuse that value. So above the if statement, let's create a variable using cons and let's name this variable
age and we'll make it equal to 15. Remember, the best practice for creating a
variable is to use cons by default and only use Let. If we're going
to change this value later, and now that we saved
this number in a variable, we can use the variable
inside the if statement. So we'll replace 15 with age and here as well with age. So this will take whatever value is
inside the variable and substitute it into the code. If we save the if statement works the same
way as before and we run this line. Okay, now we're ready to use bulls and
if statements to do a project we're going to build a rock
paper scissors game. First, let's take a look at the project. We're going to go to our browser
and at the top create a new tab and we're going to type here super simple.dev/projects/bulls and press enter. Here we can see a simple
version of a rock paper, scissors game and if we click this link, it will take us to the
final version of this game. So in this game we can pick a move and then the computer will pick a random
move and it will show us the result. And we also have a score of
how many times we won lost and tied. So we're going to build
this as we go through the course, but for now, let's go back and we're going
to start by building this simple version of the game. So how this simple version works is we
click one of these buttons to pick a move. So let's pick rock. Then the computer will randomly pick
a move. In this case it's paper, but for you it might be different
and it will compare the two moves and display the results in this popup.
So the rules of rock paper, scissors are rock beats,
scissors, paper beats, rock and scissors beats paper. Let's press okay and we'll
get started on this project. First we'll create a new HTML
file just for this project. Let's go to our code editor and
click here and create a new file and we're going to name this file, zero six dash rock dash paper, dash scissors, do html and press enter. Next, let's copy all the code from
bullions dot html into this new file. So we'll open this again and
then control A or command A to select all the code and
then right click copy. And in here right click and paste. Let's close this and prepare this file. So we'll change this to rock paper scissors and remove all of the JavaScript
code that we had before. Finally, let's save and open this file
in the browser by right clicking and then open with live server. Let's take a look at the project again. So we're going to start by creating
the text first because this text is in the final version of the project. So in our HTML we're going
to create a paragraph element for this text. So less than P, greater than, and the closing
tag less than slash p, greater than insider paragraph.
We're going to have the text, rock,
Paper, scissors. Next, let's create the buttons. So we'll go to our HTML
and create a button. And inside this first button
we'll have the text rock. Let's create another button. This one will be paper and we'll create the last button. This one will be scissors. Now let's save and check our new tab. And now we created all the
elements that we need. Next, let's make these elements
interactive with JavaScript. So when writing JavaScript, a good strategy is to think about
what steps we need to do and then convert those steps into code. So here when we click a button, the first step is the computer
will randomly select a
move and then we're going to compare the moves to get the result. And finally we'll display
the result in a pop-up. By the way, this is called an algorithm. An algorithm is a set of steps
to complete a task or to solve a problem. Now that we know
what steps we need to do, we're going to convert these
steps or this algorithm into code first. We're going to run some
JavaScript when we click these buttons. So let's use the on click attribute again,
We'll go to the opening tag of the button and type on click equals double quotes. And then inside these double
quotes we can add our Java script. So now we have to figure out how to
randomly select a move for the computer. To do this, we need to learn a
new piece of JavaScript code. So here we're going to type capital M math dot random open bracket close bracket math dot random generates a random
number between zero and one. So if we console dot
log this console dot log and save and click this button and then check in our console
by right clicking inspect and the console it will display a random
number between zero and one it we click this button again, it would
generate a different random number. So every time we run math dot random, it generates a different random
number between zero and one. Now to be more precise, it actually generates a number greater
than equal to zero and less than one. Now let's save this random number in
a variable so we can use it later. So we'll replace the
console dot log with const and then a variable name, let's just name it random capital N number and then equals. So we saved this random
number inside this variable. Next we need a way to convert
this random number into a move like rock, paper or scissors. To do this, let's imagine the space between
zero and one and then divide this space into three equal parts. Each part represents a move. If we generate a random number and
it's between zero and one third, the move will be rock. If it's
between one-third and two-thirds, the move will be paper. And if
it's between two-thirds and one, the move will be scissors. This is how we can convert the random
number into a move and this will give the computer an equal
chance of picking rock, paper or scissors.
Now let's convert these steps into code and an if statement is
a perfect solution for this. This already looks like an if statement. So in our on click attribute, let's add some new lines and type if brackets and curly brackets. For this first condition we're going
to check if the random number is between zero and one one-third. So let's check if random number is greater than or equal to zero. But in this case we also
need to check that random number is less than one third because we're checking if the number
is between zero and one third. But how do we do this? How do we check that two
comparisons are both true? To do this we're going to learn another
type of operator in JavaScript called logical operators. Logical operators. Let us combine bull values,
which is what we need to do here. Let's go back into bulls dot
html and we're going to learn logical operators.
So first let's open the tab for this file and we're going to
comment out all the previous code so our console doesn't
get too messy slash star. And then at the bottom star slash Now let's create some new lines and the first logical operator we're
going to learn is called the and operator. Let's type console dot log A bullying value true and another bullying value true. So this is the and operator
and it checks if two bull values are both true. So it checks if the left side is
true and the right side is true. That's why it's called the and operator. So here the left side is true
and the right side is also true. So the and operator will
result in true if we save this displays true. Now if one of these sides
is false, for example, if we change this to false, now let's check is the left side
and the right side both true in this case no so and
will now result in false if we save and now displays false. So that's the logical and operator
it checks if the left side is true and the right side is also true. So this is exactly what we need
for our project. For example, let's create a new line and type console dot log and let's say
that we generated a random number like 0.2 and we
want to check if it's between zero and one third. So we can do 0.2 is greater than or equal to zero and we're also going to check if 0.2 is less than one third. So we're using the logical and operator
to check if the left side is true and the right side is also true. So in this example both sides are true. 0.2 is between zero and one third. So if we save this whole
thing will display true now in the order of operations, logical operators like and have
a lower priority than math and comparisons. So in this example it will
calculate the math first and then it will calculate the comparison on the
left and then the comparison on the right and then at the end the
and operator checks if both sides result in true. Now let's use the and
operator in our project. Let's go back to the file for
our project and then inside this first condition we're going to check
if the random number is greater than or equal to zero and
at the same time is the random number less than one third. So this is how we check if a number
is between zero and one third. In this case the computer will pick
rock. So between the curly brackets, let's just type console dot log rock, let's get some practice and create
the other two branches for picking paper and scissors. Feel free to pause this video if
you want to try it yourself first. So here we're going to type else if to add another branch and then
brackets and curly brackets. And in this condition we're
going to check if random number is greater than or equal to one third and random number is less than two thirds. So if this random number is
between one third and two thirds inside here we're going to console dot log paper. And finally let's create
another branch using else if random number greater than or equal two thirds and random number less than one and console dot log scissors. If we save and then go back
to our rock paper scissors tab and then click the rock
button a few times it will pick some random moves for the computer. So that's how we generate
the computer's move. One thing I want to point out is
that I use the less than comparison instead of less than or equal to. I just did this so that the
comparisons don't overlap. Before we continue in the project, we're going to learn two other
logical operators we can use. Let's go back to bulls
dot html and let's also open the tab for this file. The next logical operator
is called the OR operator. For example, let's type some new lines and type console dot log. True or false. So this is a logical or
operator IT checks if at least one side is true. So it checks if the left side is
true or the right side is true, that's why it's called the OR operator. So here one of these sides is true. So the OR operator will
result in true if we save this displays true. If both sides are true it will also
result in true because at least one side is true. The last logical operator we're going
to learn is called the knot operator. For example, let's create a new line
and type console dot log exclamation true. So the exclamation is called
the knot oper operator. The knot operator only uses
one bull value and it flips it into the opposite value.
So if this value is true, the knot operator will flip
it into false. So if we save, this will result in false.
Now if you think about it, if we say that something is not true, that's the same thing as
saying that it is false. So that's why this is
called the not operator. Now if we change the value to false, again the not operator
will flip this into troop. So if we save, this will now result in troop.
So those are the logical or and not operators. We don't need to use these
in our project right now, but I'll leave some exercises for
these at the end of this lesson. Now let's go back and
continue the project. Let's open the code and open the tab. The next step is to compare the
computer's move to our move, which is rock. So first let's save the computers move
in a variable so we can compare it later. So instead of console dot log, we're going to create
a variable with const computer capital M move and make it equal to the string rock and we'll do the same thing here. Cons, computer move equals paper and here cons, computer move equals scissors. And now at the bottom
let's console dot log the computer move variable
to make sure that it worked. If we save and then click our rock button. Unfortunately it gives us an error
telling us that computer move is not defined even though
we created it right here. So what is happening here, if
statements have a special feature, they create something called a scope, A scope limits where a variable exists. Basically whenever we have
these curly brackets like this, any variable we create inside the
curly brackets will only exist inside the curly brackets and
we can't use these variables outside the curly brackets.
So this is called a scope. Scopes are a feature of many programming
languages and they help us avoid naming conflicts. For example, if I create a variable here called random number equals 0.5 and this didn't create a scope. So if
I delete these curly brackets, this variable name will now conflict
with the variable name up here because we can't have two
variables with the same name. So you can imagine that if we didn't
have scope and we had hundreds or even thousands of lines of code,
we would quickly start to
run out of variable names. So by creating a new scope here, all the variable names inside
the scope only exist between the curly brackets and it won't affect
anything outside in the code. So scopes help us avoid naming conflicts, okay, so I'll delete this example and
we'll learn how to access this variable outside of this scope. So to access this variable
outside of the if statement, we have to create this variable
outside of the if statement. So above here we can create this variable constant computer move and let's just make it equal to the empty string for now. So this variable was not created
inside any curly brackets, so it's accessible from all of
this code inside the on click attribute including
inside the if statement and then inside the IF statement
instead of creating a new variable, we're just going to save the move
inside this variable up here because we can access this variable
anywhere else in the code. So instead of using cons, we're just going to reassign computer
move and we're going to remove it here as well. And here as well. And remember when we reassign a variable, we have to switch from cons to let and now if we save and
then click the rock button, we're able to console dot log
computer move because computer move is no longer inside this scope, it's up here so we can access
it in this line of code. So that's how scope works. Any variable that we create
inside curly brackets will only exist inside the curly brackets. So remember in the previous lesson we
learned a third way of creating variables called var. The issue with VAR is that it doesn't
really follow the rules of scope. For example here if we
create a variable with var, like VAR and random number equals 0.5, this variable will conflict with
the variable up here with the same name even though it's inside a scope. So that's why we don't use a VAR
anymore and we just use cons and let because a var doesn't really
follow the rules of scope. So we can remove this for now
and move on to the next step. So we generated a random
move for the computer, now we have to compare our move which
is rock to the computer's move to get the result and see who wins. To do that we'll use another if
statement. So at the bottom here, let's type if and then
brackets and curly brackets. And then inside this condition, let's check if the computer move is equal to rock. So remember in JavaScript we always
use triple equals instead of double equals to avoid the conversion behavior. And now if the computer's move
is rock and our move is rock, then inside the curly brackets
the result is going to be a tie And let's save the string in a
variable so we can use it later. Again, we have the same situation as before. We don't want to create the variable
inside here because then it only exists in this scope
between the curly brackets. Instead we're going to create the
variable above outside the if statement. So we'll use let to create this
variable because we're going to reassign it in the if statement. Let's name this variable
result and just make it equal to the empty string at the top. And then in the if statement
we'll save the result into this variable. So result equals tie. Now let's create the other
branches of this if statement. So here we'll add else if brackets and curly brackets
and we'll check if the computer move is equal to paper This time, if the computer move is
paper and we picked rock, then we lose. So the result is equal to you lose. And finally we'll add another else if brackets and curly brackets
and we'll check if the computer move is equal to scissors and if the computer picked
scissors and we pick rock, the result is that you win. So that's how we compare our move
to the computer's random move using an if statement. The last step is to display
this result in the popup. So at the bottom let's
create a pop-up using alert, open bracket, close bracket and let's go back to super simple
dev to see the message in the pop-up. So what click this and in
the popup it shows our move, the computers move and then the result. So we can actually just copy this, right click copy and then in here right click and paste. So obviously the computer is not going
to pick this move every time and this is not going to be the
same result every time. Instead we want to insert
computer move into here and we want to insert result into here. So because we want to insert values, we're going to turn this into a
template string using back ticks. And now instead of paper we're
going to insert a value using dollar and curly brackets and we're
going to insert the variable computer move. And instead of this text, every time we're going to insert the variable result. And now if we save and we can click okay to close
this and go back to our tab and click the rock button,
we're going to pick rock, the computer will pick a random move
and it will show us a result in a popup. So that's how we create this simple
version of rock paper scissors in our code we did things step by step. First we generated a random number, we converted it into a move
for the computer and then we compared our move to the computer
move and we displayed the result in a pop-up. So as you can see
when we're writing JavaScript, we first figure out what
steps we need to do. This is called an algorithm and
then we convert these steps or this algorithm into code. So now we can actually remove this
console dot log because we don't need it anymore. And the last step is to make the
other buttons here interactive. So feel free to pause this video if
you want to try it yourself first for the paper button, let's add some new lines to
make it a little easier to read. And again we'll add the on click attribute and then inside here we can actually
make a copy of all the JavaScript we wrote so we can select all of this and then write click copy and then in here right click and paste. If the formatting doesn't look right
we can select all of these lines And press tab to add indents
until the formatting looks good. The one thing we have to change
here is that now we picked paper, so the result is going to be different. If the computer picks
rock and we pick paper, that means you win. If the computer picks
paper now it means that we tie and if the computer picks scissors, that means you lose. And here we'll also change.
You pick rock to paper and that's it. The last step is to make these
scissors button interactive. So again, on click equals double quotes and then we'll make a copy of
the code. So I already have it, so just write click and paste and then again select the code that
we need to fix the formatting for and press tab. And here we pick scissors. So
if the computer picks rock, then the result is you lose. If the computer picks paper, the result is you win and if the computer also picks scissors, the result is a tie and we'll change. You pick rock to scissors. Now if we save and try out our game, if we click rock, we're going to pick rock computer picks
a random move and it will show us the result. Here
Let's press okay and try paper. This also works correctly. Let's press okay and click scissors and this also works
correctly and that's it. We just finished creating a simple
version of this rock paper scissors game. In the rest of this lesson we're going
to learn more details about bulls and if statements. Let's go back to bullions
dot html and open the tab for this file and let's comment out the
previous code using slash star and star slash and create some new lines. The next thing we're going to learn
is called truthy and falsey values. So if statements don't just work
with bullying values like true and false, they actually work with any type
of value including numbers and strings. For example, let's type if brackets and curly brackets and inside this condition, instead of putting a bullion value, we're going to put a number like five. And then inside the curly brackets, let's console dot log the string truthy. If we save the number
five behaves just like true, it causes the if
statement to run this code. So we call this value a truthy
value because it behaves just like true. Now let's change this value
to a different number zero. If we save the number zero behaves just like false, it causes the if statement
to not run this code. We call this value zero
a falsey value because it behaves just like false. So how do we know if a
value is truthy or falsey? In JavaScript, the list of
falsey values are false. The number is zero, the empty string nan undefined and nu, any value that is not on
this list is a truthy value. So why do we use truthy and falsey values? One way we use them is like
a shortcut in our code. For example, let's create a variable
at the bottom using const and let's call it cart
quantity and make it equal to five. Next, let's create an if statement. If brackets and curly
brackets and inside the curly brackets, let's type console dot log. The string cart has products. Now let's say that we only want to
display this message if our cart has products usually inside
this condition we would check if cart quantity is greater than zero, but now instead of doing this
comparison we can actually just type cart quantity and it
will behave the same way. If the cart quantity is not zero,
they will both behave like true. If the cart quantity is zero,
they will both behave like false. So here the cart quantity is five, which is a truthy value if we save, this causes the if statement to
run this code. As you can see, instead of doing comparisons we
can use truthy and falsey values as shortcuts. Truthy and falsey values also
work with logical operators. For example, if we console dot log the knot operator and the number zero zero is a falsey value, it behaves just like false so
the knot operator will flip it into truth.
If we save, this will display truth. Now that we understand
truthy and falsey values, let's go over the list of falsey values
because there are some that we haven't learned yet. We already learned false
zero and the empty string. The next falsy value is nan,
which means not a number. We get nan if we do some
invalid math for example at the bottom, let's type console dot log the string text divided by the number five. So obviously this is not valid math. If we save JavaScript will
tell us that the result of this calculation is not a number or nan the next false value is undefined. Undefined represents that
something doesn't have a value. For example, at the bottom if we
create a variable with let variable one and we
don't give it a value and then we console dot log this variable and we save, it will show us that variable
one contains the value undefined. So undefined represents that this
variable doesn't have a value. One thing to note with undefined is
that we can only use this syntax with let, we can't use it with const. If we really want to use this
with const we have to type out equals undefined directly. The last falsey value is nu. We'll need some extra knowledge to
understand nu so we'll learn about null later in this course. The last thing we're going to learn in
this lesson are some shortcuts for if statements called the turner operator, the guard operator and
the default operator. First, let's comment out this code
so our console doesn't get too messy slash star and then at
the bottom star slash and let's scroll down and we'll start
by learning the turnery operator. We're going to type a
boian value like true and question mark, another value for
example the string truthy and then colon and another
value like the string falsy. So this is the turn operator. This is similar to an if else statement. The first value is like the
condition, if it's truthy, the result of this code is a
value after the question mark. If the first value is falsey, the result of this code is
the value after the colon. So you can think of the question
mark as the IF branch and the colon as the ELs branch.
This is sort of like a shortcut for an IF statement like this. Now an advantage of the ary operator
over an if statement is that we can save a ary operator in a variable. So at the front we can do constant result equals and now if we console dot log the result and save the first value is true. So the value after the question
mark gets saved in the variable. As always we can use truthy and
falsey values instead of just true and false. So here if we change the
first value to a falsely value like zero, this will cause the value
after the colon to get saved inside the variable. If we save, that's exactly what happens. So this is the turn operator, it's sort of a shortcut for an
if else statement like this. The next shortcut is
called the guard operator. Earlier in this lesson we
learned the and operator which checks if two sides are both truthy, the and operator has a special feature. Let's say we have an and operator
and the left side is false. In this situation we already
know it's impossible for both sides to be truth so we don't
even need to check the right side. So the and operator actually
stops early and doesn't even run the code on the right and
this is called a short circuit evaluation. For example, let's go into our code and
create some new lines and we'll type false and console dot log. Hello. If we save, the left side is falsey, so the and operator stops
early or short circuits and it doesn't even run the code on the right. So as you can see we can use
the value on the left to block or guard the code on the right. So when we use the and operator like this, we call it the guard operator. This is sort of like a shortcut
for an IF statement like this and just like the turn operator, we can save the guard operator
in a variable. For example, let's create a variable cons message and make it equal to false and the string, hello. If the first value is falsey, the guard operator will stop early
and the result will be the first value. If we console dot log this message and save the value, false will be saved inside this variable. Now let's change this value to
a truthy value like the number five. Now it will not stop early and
it will give us the second value as the result if we save the string. Hello is now saved inside this variable. This is sort of like a shortcut
for an IF statement like this, so don't worry if it's a bit confusing. All of these are just
shortcuts for an IF statement. They're sort of like an if statement
that we can write on a single line. The last shortcut is called
the default operator, which is similar to the
guard operator but uses or earlier in this lesson we learned
the OR operator which checks if at least one side is truthy. Let's imagine we have an OR
operator and the left side is true in this situation. We already know the result of the
OR operator because the left side is already truthy, we don't even
need to check the right side. So the OR operator also stops
early or short circuits. If the first value is truthy, for example, let's create some new lines and
let's say that in our final Amazon project we can choose a
currency to pay for our order. Let's create a variable with currency and make it equal to the string e u R or euros. Now let's say that choosing
a currency is optional. If we don't choose a currency, we'll use a default value
of U S D or United States dollars to create a default value.
We can go to the end and type or the string U s D. So here the left side is truthy, so the OR operator will stop
early and it will result in the value on the left. If we console dot log the currency and save it will display euros. Now let's say that we didn't choose
a currency because it's optional. So let's go here and we're
going to change this currency to undefined. Now the left side is fy, so the ore operator
does not short circuit. It will continue and the result
will be the value on the right if we save. Now the string U S D is
saved inside currency. As you can see, we can use the ore operator
to set a default value. So when we use the OR operator like this, we call it the default operator. The default operator is sort of a
shortcut for an IF statement like this. So don't worry, remember that everything that we learned
in this last section are basically some shortcuts for if statements. We don't have to use them but
they can save us some typing and that's the end of this lesson. In this lesson we learned about
bullying's and if statements bullying values represent whether
something is true or false. We learned how to use IF statements
to make decisions in our code. We learned how to use comparison
and logical operators. We learned about algorithms and
created a simple version of rock paper, scissors. We learned about truthy and
falsey values and we learned some shortcuts for if
statements, the turn operator, the guard operator, and
the default operator. Here's some exercises to help you
practice bullying and if statements. In this lesson we're going to learn
the next feature of JavaScript called functions and we're going to use
functions to improve our rock paper scissors project. First, let's create a new file for
this lesson we'll go to our code editor and create a new file and let's name this file zero seven dash functions dot html and press enter. Next, let's copy bulls dot html to functions dot html. So we'll click this file and
then select all this code using control A or command A and then right click copy. And in here right click and paste and we'll hide our files and
prepare this file for this lesson. So at the top we'll change the title to functions and we'll remove all the
code in the script element. And let's save and we'll
open this file in live server by right clicking open with live server and we're going to open
the console as well. So right click inspect and then click the console. And finally we can close the previous tabs as well as the previous code. Okay, now we're ready to learn functions. First of all, what is a function? A function let's us reuse code. Let's create our first function. We're going to go to the script element
And type the word function and space. So this creates a new function
and then we're going to give a name to our function. We can
name it almost anything we want, but for now let's just
name it function one and then we're going to type
round brackets and curly brackets. Then inside these curly brackets
we're going to create a new line and we're going to type some code. So console dot log the string, hello, and we'll also type console dot log two plus two and save. So this creates a function. Now let's learn how to use this function.
We're going to type at the bottom the function name, so function one and then open bracket, close bracket and semicolon. When we type the function
name with brackets, this will run the code
inside the function. If we save, notice that it runs the code inside
the function and displays the two lines in the console. So why
do we use functions? A function lets us reuse code. So if we wanted to run both
these lines of code, again, all we have to do is type the
function name again with brackets. So function one and brackets again, if we save,
This will run the code inside the function two times and we can reuse this
code as many times as we want by typing the function name with brackets. So that's what a function
is. It lets us reuse code. Now let's learn the syntax
rules for functions. The word function creates
a new function and then we choose a name for our function. The rules for function names
are the same as variable names. We can't use special words like function. We can't start with a number and
we can't use special characters although dollar sign and
underscore are allowed. And just like variable names, the best practice is to use
camel case for function names. And inside these curly brackets
we put the code that we want to run when we use the function. This is called the function body. Now one very important thing
to remember is that this code only creates a function.
It doesn't run the code in the function or do anything else in order
to actually run the code. We have to use the function
like below by typing the function name with brackets. This is known as calling the function. It's also known as running the
function or executing the function. Now that we learned these
syntax rules for functions, let's do a practical example. We're going to use functions to improve
the code of our rock paper scissors project. First, let's click here to show our files
and we're actually going to make a copy of the project just for this lesson. So we're going to right
click this file copy, and then at the bottom
right click and paste and we're going to rename this
file. So right click rename, remove copy at the end, and then at the beginning
we'll change this to zero seven and press enter. Next we're going to open this
file in live server by right clicking and then open with live server. And let's also open the console
on this page while right click inspect and then click the console. All right, now if we look at the code for
generating a computer move, you'll notice that this code is
the same for all three buttons. So this is a perfect situation
to use a function because a function lets us reuse code. So let's scroll down to the script
element and we're going to make a function here. So let's type function and then a function name.
Let's name this function, pick computer move, and then brackets and curly brackets. So one recommendation for function
names is to use a verb or an action in the name such as pick. So next we're going to move all the
code for picking a computer move into our new function. So let's create a new line
here and we'll scroll up to the scissors button because it's
the closest one and we'll select all of this code for picking a computer move. And then right click cut and inside the function, right click and paste. If we need to fix the formatting, we can select these lines
and press tab to add indents. So the reason we created this function
in the script element is because remember that the script element
runs when the page is loaded. So we want to make sure that we create
the function first and then we use it in the buttons after. Now remember, this code just creates a function. It doesn't actually run the code
inside to run the code inside. We're going to call this function. So let's scroll up to the scissors
button and we're going to call this function by typing the function name, pick computer, move open bracket, close bracket and semi call it if we save and then click the scissors
button. Unfortunately, it now gives us an error saying
computer move is not defined. Now this might seem weird because
down here we actually create the computer move. So what's going on? The reason this happens is
because functions create a scope. In the previous lesson
we learned about scopes, which limit where a variable exists. We learned about if statements and
that if statements create a scope between the currently brackets, this means that any variable created
between the currently brackets only exist between the curly brackets. Functions also create a scope. Any variable that is created
between these curly brackets only exists inside the curly
brackets and we can't use it outside the curly
brackets like we do here. So that's why we're getting this error. So how do we solve this problem?
Remember that with if statements, we solve this by creating the
variable outside of the if statement like this. We can use a similar solution
with functions to make this variable exist outside the function, we just have to create
it outside the function. So let's select this code. We're going to right click and cut and remove these lines. And then outside the function
we're going to right click and paste. So now this variable is no
longer inside the functions scope and it can be used
anywhere else in the code. So variables like this that can be
accessed anywhere are called global variables. If we save and now click the scissors button, everything is working again
because this code above can now access this variable.
Now let's press okay, and let's use this function
to reuse this code. So we'll scroll up to the paper button and now instead of all this code, again, we're just going to remove
it and call the function pick computer, move open
bracket, close bracket, semicolon, and also with the rock button
we'll select all this code and remove it and just call the function, pick computer, move brackets and semicolon. Now if we save and click the rock button, it works just like before, we'll press okay and
click the paper button. It also works just like
before. So as you can see, functions let us reuse code and
they make our code a lot cleaner by removing all the duplication that we had. Another benefit of removing
duplication is that before if we ever wanted to update the code
for picking a computer move, we had to update it in three
places in each of the buttons. But now if we scroll down, we only have to update it in
one place inside this function. So functions also make our code
easier to update in the future. Next we're going to learn a feature of
functions called a return statement. A return statement lets us
get a value out of a function. So at the end of this function,
let's type some new lines and we're going to type return and then a value like the number five and semicolon. Now whenever we call this function, it will result in a value the number five. So up here when we call this function, this will result in the number five. So we can actually console
dot log this console dot log and then save and click
the scissors button and it will show us that calling the
function now results in the number five and we display it in the console. So that's how a return statement works. It lets us get a value
out of this function. Let's press okay and do another example. We'll scroll down and this
time let's change this value to the string rock. Now whenever we call this function, it will result in the
string rock if we save and then click scissors
and scroll up here, calling this function now results
in the string rock and then we display it in the console.
So now let's press okay, and we'll learn these syntax
rules for a return statement. So. We just have to type the word
return and then a value and it will get this value out of the function. Now instead of just a value, we can also return a
calculation or a variable or anything that results in a value. So this is known as returning
a value from a function and this value is known
as the return value. We also don't have to return
anything from a function. If a function doesn't have a
return statement or we return without a value like this, this will return the value undefined. So if we save and then
click scissors again the function will return undefined. And lastly, when we
use a return statement, it ends the function immediately.
So after the return statement, if we type console dot, log the string after and press okay here and save this file and then click the scissors button. Notice that it doesn't run this code. And that's because once we
return the code returns back to where we call the function. That's
why it's called a return statement. So it's not going to run
anything after the return. So we can remove this code and press. Okay, So now that we understand
return statements, we're going to learn a better way of
getting the computer move out of this function. So first, let's actually move this
variable back into the function. So we're right click and
cut, and then in here, right click and paste and delete these lines. So now we're back to the original problem. How do we access computer
move outside of the function? So another solution is to
return this variable because remember a return statement
lets us get a value out of the function. So down here we're going to return the computer move. So this will take whatever value
is saved inside computer move, which is one of these values and
return it out of the function if we save and then click
the scissors button, we were able to get the move
scissors outside of this function. So what happened here is that we
returned this move and then up here we took the move and displayed it
in the console to get scissors. So that's another way of getting
the computer move out of a function using the return statement. However, now we're back to this problem with
computer move not being defined because we moved it back
into the functions scope. So let's scroll up and remember that this return value is just a value. We can use it like any
other value, for example, we can log it or we
can also save this in a variable. So let's do that right now. We're going to remove this and create a new variable with cons. And let's just name this
variable computer move to match what we use down
here and we use equals to save the return value
inside this variable. So note that even though we use
computer move here as well as here, there are different variables. This one is inside the function's scope. So it prevents it from conflicting
with variables outside the function's scope. That's one of the
main benefits of scopes. So now that we save the return
value into this variable, and we're using this variable down here, the code should now work.
If we save and click scissors, everything is back to normal
and let's press. Okay, so don't worry, functions can be a little confusing
at first because the code is no longer simply going from top to bottom. It sort of jumps around a little bit. So let's go through this step by
step. When we click this button, we're going to run this function. So the code is going to jump down
here and then it's going to run all of this code from top to bottom. At the end we're going to return
whatever is inside computer, move back to where we
called this function. So we're going to return
all the way back here, and then we're going to save
that return value into a new variable computer move and then
use computer move down here. So following the code line by line
like this is called tracing the code. It's a useful technique to understand
exactly what the code is doing. Now let's compare the two
solutions that we used a global variable and returning a variable. So returning a variable like
this is actually preferred over using a global variable, and that's because a scope can
help us prevent naming conflicts. So all the variables inside here
will not conflict with anything outside the scope. So generally it's a best practice
to keep things inside a scope if we can. Now let's move on and use this
function in the other buttons. Feel free to pause the video if
you want to try it yourself first. So we'll scroll up to the paper button and then here we're going to
save the returned computer, move into a variable. So cons, computer move so that it matches the code down here. Make it equal
to whatever is returned. And then same thing for the rock button, we're going to save the
return value in a variable. Cons computer move equals if we save and click the rock button, it works.
Let's press okay and click the paper button and this also
works and let's press. Okay, so that's how we use a return statement
to take advantage of the benefits of scope. Next, if we look at the rest of this
code where we compare our move and display the result, you'll notice that this code is very
similar for each of the buttons. The only thing that's different is
the result and the message that we display. So we can actually use functions
here as well to reuse code that has small differences. To do this, we're going to need another feature
of functions called parameters. So let's go back into
functions dot html and let's open the tab for this file. And let's also comment out the
previous code by typing slash star and at the bottom star slash and create some new lines. And now we're ready to learn parameters. So parameters are sort of the
opposite of a return statement. A return statement gets a
value out of a function. A parameter puts a value into a function. So let's do an example. Let's say that we're working on the
final Amazon project and we need to calculate the tax for our order. Let's create a function
to calculate the tax. So function,
Let's name it, calculate late tax brackets and curly brackets, and then inside
the curly brackets, let's say that the cost of our products is 1000 cents or $10 and the tax is 10%. To calculate the tax, we can do 1000 times 0.1, which is 10%. Let's also display
this number in the console. So at the front, we'll type console, dot, log, and brackets. Now let's save and remember, this code only creates a function.
It doesn't run the code inside. To run this code, we're
going to call this function. So down here we're going
to type the function, name, calculate, tax, and then brackets. If we save, it runs this code, and then it displays the tax,
which is 100 cents or $1. However, right now this function only
calculates the tax for 1000 cents. What if we want to calculate
the tax for a different amount? How would we modify this
function to work with any number? To do this, we're going to learn a
feature of functions called parameters. A parameter lets us put
a value into a function. So let's finally create
our first parameter. So inside these round brackets, we're going to choose a
name for our parameter. So let's just name this parameter one. A parameter works the
same way as a variable. We can save a value inside this
parameter and then use it just like a variable. So first, let's save a value inside
the parameter. To do that, we're going to go to where
we call the function, and then inside these brackets
we're going to put a value, for example, 2000. This will save this value
into this parameter, and now we can use it
just like a variable. So instead of 1000, we're going to type parameter one and it will take whatever value
is inside parameter one, in this case 2000 and
substitute it into the code. If we save it now calculates 2000 times 0.1 to give us 200 cents as the tax. Now every time
we call the function, we can save a different value
into the parameter. For example, let's create a new line
and call the function calculate tax. And this time we're going
to save the value 5,000 into parameter one. If we save this line of code will
calculate the tax for 5000 cents and result in 500 cents.
So as you can see, a parameter lets us put
values into a function and this allows our function
to work with any value. Now let's learn the syntax
rules for parameters to create a parameter. We just typed the
parameter name between the brackets, parameter names follow the
same rules as variable names. We can't use special words, we can't start with a number and
we can't use special characters other than dollar sign and underscore. And the best practice is to use camo case. Let's actually change this
parameter name to cost so the code makes more sense and save. Next, when a function has a parameter, we usually say this
function takes a parameter. If this parameter should be a number, we say this function takes a number.
When we put a value into the function like this, we call this passing a
value into the function. Another name for this value
is called the argument. And believe it or not, we've actually used functions
and parameters this whole time. The first code that we learned
in this course was alert. Alert is actually a function. You can tell it's a function because
of the round brackets and between the brackets we put a string. So this is an example of
a parameter. And lastly, a parameter only exists
inside the functions scope. So we can only use this parameter
between the curly brackets, we can't use it outside
the function. Next, a function can actually have more
than one parameter. For example, right now our calculate tax
function can only calculate a 10% tax. But what if we're in a different country
and we want to calculate a different tax percent To solve this, we can add a second parameter
by typing after the first parameter, a comma, and
then another parameter name. Let's name this tax percent. And now to save a value into
the second parameter will go to where we call this function
and also type a comma and a second value like 0.2 or a 20% tax. So the first value gets saved in
the first parameter and the second value gets saved in the second parameter. And now we can use our second
parameter just like a variable. So instead of 0.1 every time
we're going to calculate it with tax percent And it will substitute whatever
value is inside tax percent into the code. If we save, this first line will multiply 2000 by 0.2 and give us 400 cents as the result. So we can have as many parameters
as we want in a function, we just have to separate
them with a comma. Now notice that the second
time we call this function, we didn't give a value
for the second parameter. If we don't save a value
into the parameter, the parameter will get
the value undefined. So here if we console dot log the second parameter tax percent and save it will show us that the
second time tax percent is undefined. And then multiplying the
cost times undefined is not valid math. So we get the result nan or not a number. So now let's remove the console
dot log and we'll learn how to fix this. So to fix this, we can either pass a second value
into the function like this line or we can also set a default
value for the parameter to set a default value. We can just type after
the parameter and then add equals sign and a default value like 0.1 If we save the second function call
will multiply 5,000 by the default value 0.1 and give us 500. So that's how we add a
default value for a parameter. All right, now that we learned parameters, we're going to go back to the rock paper
scissors project and reuse even more code. So let's go back to the file
for the project and also the tab for this project. And now if we look at the code
inside each of the buttons, you'll notice that the code is basically
the same for all three buttons. The only small difference
is the move that we picked. So this is a perfect
situation to use a parameter. So inside the script element, let's create a new function
to reuse all of this code. We'll type function and let's name this function, play game brackets and curly brackets. Next, let's move all of this code inside
the function so we can reuse it. We'll select this code and then right click cut and inside the function right click and paste. And if we need to reformat, we can select these lines and press tap. So the value that is different for
each button is the move that we picked. So we're going to turn this
move into a parameter. So at the top between the brackets
we're going to create a new parameter, let's name it player move. And now let's save a
value into this parameter. So inside our scissors button, we're going to call this
function and run all this code. So let's type play game and call this function. And for the scissors button, let's save the string
scissors into player move. To do that, we'll type between the
brackets here and type the string scissors. So as we learned, this will save scissors into
player move and now we can use player move just like
a variable in the function. Now let's modify the code
based on the parameter. So here this code calculates
the result. However, this only works if the
player move is scissors. So we're going to put
this in an if statement. So we'll type if player move equals scissors, curly brackets inside this if statement, we're going to put this if statement. So let's select this and
then right click cut. And then inside here, right click and paste and select these lines and press tab. So notice that we can put an
if statement inside another if statement and we did this
because this code only makes sense if the player move is scissors.
And finally, let's modify the code
that displays the message. So here instead of displaying scissors, every time we're going to display
whatever is saved inside player move. So we'll replace it with
dollar open curly bracket, close curly bracket and in between insert player move and that's it. We modify this function to use a
parameter instead of always using scissors. Now let's save and click
the scissors button and you notice that it works. We display the move scissors
and we calculated the result correctly. Let's press okay and we're going
to use this function to reuse the code for the other buttons. So we'll scroll up and for the
paper button we're going to use a different if statement
to calculate the result. So let's actually copy
this into the function. We're going to right click, click copy, and then inside the function we're going to create another
branch. If the player move is paper, so here let's type else if brackets and curly brackets. Inside this condition we're
going to check if the player move is equal to paper this time. And then inside these curly
brackets we're going to paste the if statement we copied earlier. So right click and paste And we can select these lines
and press tab to reformat. So now we have the code that
determines the result for paper down here. We don't need to modify this code
because we're always displaying whatever is inside player move. Finally, we can scroll up to the paper
button and remove all this duplicated code and just use our function play game. And we're going to pass paper inside. So now paper will get saved
inside player move and it's going to run this
if statement instead. If we save and click the paper button, in this example I pick paper, computer pick rock in a
calculated the result correctly. Let's press okay and use
this function for the rock button. Feel free to pause a video if you
want to try it yourself first. So let's scroll up to the rock button. And first we need to copy this
if statement into the function. So let's right click copy. And then inside the function let's create a branch for rock else if player move is equal to rock and then curly brackets. And inside here we're going
to right click and paste the if statement we copied earlier.
And now let's select these lines and press tab a
few times to reformat. And again, this doesn't need to change. The last step is to scroll
up to our rock button and instead of duplicating
all of this code, we're going to remove it and
just call our function instead play game brackets and then inside we'll have the string rock. Now let's save and click the rock button. So I picked rock, the computer picked paper and we
calculated the result correctly. Let's press. Okay.
So by using a function with a parameter, we were able to reuse all of the
code in our buttons and you can see that it made our code
a lot cleaner. So lastly, notice that inside a function
we can call other functions. Let's go through the code step by
step so that we understand how it works. So here when we call
the play game function, we go inside here and then we
call the pick computer function. So now we're going to go
inside this function and run all the code and then
when this function returns, we're going to return back to where
we called it and then keep going and run the rest of the code. And then when the play
game function finishes, it's going to return back to here. So inside a function we
can call other functions. Now one last thing we're going to do
for this code is we'll scroll down and we're just going to add some
new lines to this if statement to separate the branches and make
the code a little easier to read and save. And let's scroll up and
that's the end of this lesson. In this lesson we learned about
functions which let us reuse code. We learned how to get a value
out of a function using return. We learned how to put values
into a function using parameters, and we improve the code for our
rock paper scissors project by reusing the code and removing duplication. Here's some exercises you can
do on your own to practice using functions. In this lesson we're going to learn
another type of value in Java script called objects and we're going
to use objects to create a score in our rock paper
scissors project. First, let's create a new file for
this lesson we'll go to our code editor and click this icon and then click this icon to create a new
file and we'll name this file, zero eight dash objects dot html and press enter. Next, we'll copy all the code in
functions dot html to objects dot html. So we'll type here and press
control A or command A to select the code and then right click copy and in here, right click and paste. Now let's hide the files for now
and we'll prepare this for this lesson so we can change this to objects and remove all the code
in the script element. Finally, let's save and open this
in live server by right clicking open with live server. And let's also open the console
on this page. So right click, click inspect and click the console. Let's close our previous tabs and also the previous code. And now we're ready to learn
objects. So what is an object? An object groups multiple values together. Let's do an example and
create our first object. We'll go to the script element
and we'll create a variable using const and we'll name this variable product and make it equal to open curly bracket, closed curly bracket and semicolon.
So this is an object inside this object. We can add some values. So we'll type enter and then name colon and then a value like the string socks. And at the end we'll type a comma and then price colon and another value like the number 1090. So inside our object we
just added two values. So at the bottom here, let's try console dot
logging this object console, dot log product and save and it will display both values into the console. So as you can see, an object lets us group
multiple values together. So for each of these values
we have some code on the left. This code is called the property. And using the property we can access
specific values in the object. For example, let's type and enter and console dot log. We're going to type the
object product and then a dot and then a property like name. So.name will access the
value that is associated with the name property,
which is the string socks. So if we save, it will display the string
socks in the console. Let's do another example and we'll
access this second value using the property price. So we'll type enter console dot log, the object product and then a dot and then a property price. So this will access the
value associated with price, which is 1090. If we save, that's what gets displayed in the console. Now we can also use the property
to change a value inside an object. To do that we're going to
type the object's name, product and then dot and a property like name and just make it
equal to something else like the string cotton socks. So this code will change the
value associated with the name property to cotton
socks. So at the bottom, if we type console dot, log the product again and save. You notice the value associated
with the name property was changed to cotton socks. So that's
how an object works. We group multiple values together
and then we can access or change these values using the
properties on the left. Now let's learn the syntax
rules for objects to create an object, we start with an open curly
bracket and end with a closed curly bracket inside the object. We can put multiple values for each value. The code on the left
is called the property. This is how we access the
value inside the object. We separate the property and
value with a colon and this is called a property value pair. We can have many property
value pairs in an object and we separate them with a comma to access a value inside the object.
We type the object's name and then dot, and then the property we
want to access like name. This will give us the value
associated with the name property. This syntax is called dot notation. If we access a property
that doesn't exist, the value will be undefined. To change a value in an object, we can use the dot notation again, so product.name and just
make it equal to something else. Now using the syntax we can
also add a value to an object. We can type a property that
doesn't exist. For example, here we can type product.new property and make this equal to something
like the bullion value true. If we console dot log the product again and save it will add this value to the
object along with the new property. We can also remove a value
from an object by typing delete, and then the object product dot and then the property we
want to delete like new property. If we console dot log the product again and save this code will delete new
property from the object. And lastly, notice that an object
is just another type of value. We can save an object inside
a variable and we can also console dot log objects if
we check the type of this value. So type of product and save And scroll up in the console, it will tell us that product is an object. So let's remove this and save. And now we'll learn why we use objects. So objects make our code more organized. Instead of creating a bunch of
variables for the products values like the name and the price and other details, we can just group all these
related values together into one object. Objects also allow us to use
multiple values together. Instead of console dot logging
each of these values individually, we can just console log the
whole object and display all the values at once.
So objects, let us group multiple values
together and let us use multiple values together. Next, let's do a practical example with objects. We're going to add a score to
our rock paper scissors game. So I've actually prepared a project
we can use for this lesson to see this project. We're going to go to our
website and then create a new tab. And then up here we're going to type super simple.dev/projects/objects and press enter. So this is our simplified rock
paper scissors game again except in this project when we play the game, it's also going to keep track of a score. So how many times we win lose and tie. And also if we click okay, we have a reset score button. So if we play the game a few times and add to our score and then click the reset score button, this will reset the score back to zero.
So if we play the game again, the score starts from zero again. So we're going to learn how to use
objects to create this feature. Let's press okay. And first let's create
a copy of our project. Just for this lesson we'll go
to our code editor and click this icon to show our files and
we'll make a copy of the rock paper Scissors project
from the previous lesson. So we'll right click and copy and down here right click and paste and we'll right click and rename. This file will, we'll remove the copy at the
end and at the front we'll change this to zero eight and press enter. Now let's hide these files and
we can close the zero seven file for now. And let's open this in live
server by right clicking and open with live server. Let's also open the console on this page. So right click inspect and the console. All right, now let's go into our
code and add a score to our game. So remember when writing JavaScript, a good strategy is to think
about what steps we need to do. This is called an algorithm
and then convert those into code. So we already had an algorithm
for the rock paper scissors game. Let's update this algorithm
to include the score. So first the computer
randomly selects a move. This step will stay the same. Number two, we're going to compare the
moves to get the result. This step will also be the same, but now we're going to add an extra
step. After getting the result, we're going to update a score
and finally we'll display the result and the score in a pop-up. Now let's convert these updated
steps or this algorithm into code. The first thing we need to
change is we added a third step. We're going to save and update a score. So first we need somewhere
to save our score. So one place we can save
it is inside a variable. Let's go to our script
element and at the top we're going to create a variable
for our score using cons score and make it equal to an object. And inside this object we're
going to have the property wins. So this will keep track of
how many wins that we have, what type colon and the
number zero because the score starts at zero and
then a comma and then another property losses. This will be how many losses
we have and then colon and zero and then another comma and ties colon and zero. So we use an object here because these
values are related to each other. You could use separate variables, but
we're using an object for convenience. Another thing you'll notice is that
we're creating this variable outside of a function and outside of a scope. And that's because every time we
make a move we need to update the score from last time. So in order to save the
score from last time, we need to keep it outside the function.
If the score was inside the function, the function would create a new score
every time, which is not what we want. So in this situation, in order
to save a score from last time, we're going to keep this variable outside. Now every time we play the game,
after we calculate the result, we're going to update the score. So let's scroll down to where
we calculate the result, which is here and then below
it we're going to type some new lines and type the code
for updating the score. So we can do that with an if statement. So we'll type if brackets
and curly brackets and inside the condition we're going
to check if the result is a win. If it is a win, we're going to update the wind's
property and increase it by one. So down here, if the result is equal to the string, you win. And make sure that this string
matches the string up here inside the curly brackets
we're going to update score dot wins and will make it equal to itself plus one. So this is how we increase the
wind's property in the score object by one. Now remember from the variables lesson
that we have a shortcut for increasing something by one and that shortcut is plus equals one. Next, let's add another branch to this if
statement for the other two results. So else if brackets and curly brackets. And in the second condition
we're going to check if result is equal to the string you lose. And make sure this string
matches the string up here. So if the result is you lose, we're going to update score dot losses property and increase it by one. So plus equals one. And finally we'll check
if the result is a tie else if brackets and curly brackets result equals to the string tie. And here we'll update score dot ties plus equals one. So we converted this step
in the algorithm to code. The score starts at zero and
every time we play the game after we calculate the result, we're going to update the
score using this code. Now let's convert the last step into code. We're going to display the result and
the score in the popup at the end. So let's actually go back to
the super simple.dev project and we'll see what the popup looks
like. We'll click one of these buttons and in this popup on the second
line we display the score. So in our code this is the
code that displays that popup. So how do we add a
second line to the popup? Remember that template strings
have another special feature called multi-line strings. So we can type at the end of this
template string and press enter to add another line to this string.
So here we can type winds, colon, and we're going to insert a
value using dollar open curly bracket, close curly bracket. And here we're going to insert
the number of wins that we have, which is score wins. So we'll type score wins. Next we're going to show the
number of losses that we have. So after this, let's type a comma and losses colon and insert another value here we'll insert score dot losses. And finally we'll type a
comma and we'll display ties colon and insert value score dot ties and this will display
our score in the popup. So let's save this and give it a try. We'll click okay and
then go back to our tab and play the game. So now on the second line
we will display the score. One small issue here is that we have
a lot of spaces on the second line, so these spaces correspond
to the spaces here. When we use multi-line strings, these extra spaces will
show up in the popup. So to remove these spaces we can
just remove them in the code like this. Now if we save press okay and play the game, it will show our score on the second
line without those extra spaces at the front. Let's press. Okay, we're going to add one more
feature to this project. If we go back to super simple.dev, we have a reset score button
which will reset the score back to zero. When we click it, let's
add this button in our project. So we'll scroll up and inside the HTML we'll add a button with a code less than button greater than, and inside the button have the text reset score. And now when we click this button, we'll run some code using
the on click attribute equals double quotes. And then in here we're going to
write some code to reset this score back to zero. So one way we can do it is
because this score is an object, we can use dot notation to
change everything back to zero. So we can type score dot wins and make it equal to zero.
We'll also type score dot losses and make it equal to zero. And finally score dot ties and make it equal to zero. Now let's save and go back to our tab and play the game a few
times to get a score. Let's press okay and press reset score and then play the game again. And you'll notice that the
score started from zero again. So that's how we create
the reset score button. We just set all of these
properties back to zero and that's it. That's how we add a score feature
to our rock paper scissors project using an object to save the score. Let's press okay and we're going to learn
more details about objects. Let's go back to objects
dot html and we'll open the tab for this file. And let's also comment out
the previous code using slash star and at the bottom star slash and save. Now let's scroll to the bottom
and we'll do some setup. So first let's create
a variable with cons or name it product two and make it equal to another object
Inside. This object will have
the property name colon and the string shirt and
we're going to console dot log this object, so console dot log product two and save. So the next detail we're going to
learn about objects is another way to access the values inside. We previously learned the dot
notation to do this. For example, console dot log product two.name. This will access the value
associated with the name property In JavaScript
we have another way of accessing values inside
objects which is using square brackets. So we'll create a new
line and type console dot log product two. And this time we'll type
square brackets and then inside the square brackets
will have a string with name. So this is called bracket
notation and this does the same thing as dot notation
up here it gets the value associated with the name
property. If we save these two lines of code,
both access the string shirt, which we see here.
So when do we use the bracket notation instead of the dot notation, bracket notation lets us use
properties that normally don't work with dot notation. For example, at the bottom we can type console dot log product two and then use a dot and try to
access a property called delivery dash time. If we save this property
will give us an error and that's because JavaScript thinks
that this dash is a minus sign and it's trying to do math. So in order to use a property like this, we have to use bracket notation. So we're going to replace
the dot with square brackets and turn this into a string. Now if we save it no longer gives us an error
and because delivery time does not exist in the object,
we get the value undefined. So using Bren notation, we can also add values to
the object when we create it. So here we can add a comma
and we'll add another property using bracket
notation and a string delivery dash time and a colon and then a value like the string one day if we save, this lets us add a delivery
dash time property to this object. So as you can see, bracket notation lets us use properties
that normally don't work with dot notation. Another feature of bracket notation
is that between the brackets we don't just have to use a
string, we can use a variable, a calculation or anything
that results in a value. So you might be wondering which
one should we use dot notation or bracket notation. We usually use dot notation by
default because it's shorter and easier to read. But if we need to use properties
that don't work with dot notation, then we use bracket notation. Now a shortcut here is when we
create the object. If we only have a string between the brackets, the brackets are actually
optional so we can just type this If we save the code will still work. Okay, the next detail we're going to learn
is that inside an object we can save any type of value. So this includes numbers, strings, bulls, as well as other objects
because remember objects themselves are also values. For example, we can type a comma and
add a property called rating colon and then an object open curly bracket, close curly bracket. And inside this inner object
we can add more properties like stars, colon 4.5, this is how many stars a
product has and then a comma and a property called count colon 87. This is how many ratings a product has. So this is called a
nested object or an object inside an object. We can use nested objects to
make our values more organized. So inside the product the number
of stars that it has and the number of ratings that it has
are both related to a rating, so makes sense to group them
together further inside the product. Now to access values
inside the inner object, we just use the dot notation or
bracket notation multiple times. For example, at the bottom we can type console dot log product two dot rating. This will get the value
associated with rating. And this is an object, so we can use the dot
notation again, count. So this will get the count
inside the rating object, which is this value right
here. So if we save, it will display 87. And finally, another type of value we can
put in an object is a function. So in this object let's
type comma and another property fun colon. And we're going to create a function
here. So let's type function and we'll name the function function one, brackets and curly brackets. And then inside the function we're
going to have some JavaScript code like usual. So console dot log, the string function inside object. This saves a function inside
the object and this works because a function is actually
just another type of value in JavaScript. But we'll learn more about this feature
of functions later in this course. For now just know that functions
are also values and we can save them in an object.
To access this function, we can use the dot or
bracket notation as usual. So at the bottom we can type the object, product two and then a dot and then the property fun. So this will access the
value associated with the fun property, which is a function. And because this is a function
we can call it as usual using brackets if we save, this will run the function
here and it will display function inside object into the console. So when we save functions
inside an object, this is called a method and we've
actually been using methods this whole time. Console dot log
is actually a method. Console is an object
provided by JavaScript and log is a function that is
saved inside the console object. If we go to the bottom and type console dot log type of console and save, this will confirm that
console is just an object. And if we change this to console dot log and save, this will show us that
console dot log is a function. So log is a function that
is saved inside the console object. So we call this a method. Another example of a
method is math dot random, which we used in the rock paper
Scissors Project Math is also an object provided by JavaScript
and random is a function saved inside the math object. So we call math dot random
a method as well. So we've actually been using objects and
methods all throughout this course and now we understand all the
code that we've been using so far. Next we're going to learn
about built-in objects. So the console object and the
math object are known as built-in objects because they are
built into the language, they are provided by the language. We're going to learn two more
built-in objects called Jason and local storage and we will
use these objects to improve our rock paper scissors project. Let's start with the Jason Builtin object. This object helps us work
with something called Jason. Jason stands for
JavaScript object notation. The easiest way to understand
Jason is it's basically a syntax. It's a similar syntax
to a JavaScript object, but it has less features. For example, the code on the left uses
JavaScript object syntax and the code on the right uses syntax.
So one difference is that all properties
and strings must use double quotes. In Jason, Jason does not
support single quotes. Another difference is that Jason
does not support functions. So as you can see Jason is
basically a syntax that's similar to a JavaScript object
syntax but with less features. So why would we use Jason Syntax
instead of a JavaScript object syntax? A JavaScript object only
makes sense in JavaScript. On the other hand, Jason Syntax can be understood by
almost every programming language. So Jason syntax is more universal. For this reason, we use Jason when we send data
between two computers that might use different programming languages, we'll learn how to do
this later in the course. We also use Jason when we store data. We'll learn how to store
data in this lesson. Now that we understand what Jason is, let's learn about the
built-in Jason object. The Jason object helps us
convert a JavaScript object to Jason. For example, let's convert our object
product two to Jason. So we'll create some new
lines and we'll type the Jason object dot stringy and open bracket close bracket. So stringy is a method
of the adjacent object, so it's a function that is
saved inside this object and we can call this function using
brackets. Between the brackets, we can give it a JavaScript
object we want to convert like product two. This will convert the object into Jason. So now let's console dot log the result And save. And in the console it will display
the product using Jason Syntax. If we scroll up, you notice that the function that we
saved in the object is not inside the Jasons and that's because Jason
does not support functions. So one thing to note about stringy
is that it actually results in a string. So at the front, if we type type of and save, it will tell us that the result
that it gives is actually a string. So if we remove this and save now this Jason string is ready
to be sent to another computer or to be saved in storage. Next, let's learn how to convert the
other way from a Jason back to a JavaScript object. To do that we'll use another
method in the built-in Jason object called Jason dot par. At the end we'll type jason.pars and brackets. And between the brackets we can put a
Jason string that we want to convert. So we actually have a
Jason string up here. So let's just make a copy
of this, we'll select it, write click copy, and let's create an extra
variable to make it more clear. Const jason string and make it equal to right click and paste. And now let's convert this Jason
string back into an object by putting it into pars. And finally we'll console
dot log this result. So console dot log and save and jason.pars will turn
the Jason string back into a JavaScript object. So that's the built-in Jason object. It helps us convert back and
forth between a JavaScript object and Jason. Now we're going to learn the next
built-in object called local storage. Local storage is used to
save values more permanently. So far we've been saving
our values in variables. However, variables are temporary. The only exist on the current page. If we refresh the page or close the page, all the variables are
deleted. For example, if we go back to our rock paper
scissors project and open the tab for this project
and we play a few games and play it again. So we have two games. If we refresh the page notice the score starts from zero again. And that's because when
we refresh the page, all of these variables are deleted
and the score gets reset back to zero. However, if we press okay and
go to super simple.dev and we refresh the page
and we play the game, Notice that the score doesn't start from, it starts from the previous score
even though we refreshed the page. And that's because this project
saves the score in local storage and local storage doesn't get
deleted when we refresh the page. Now let's learn how to use
local storage in our project. Let's press okay and we'll
go back to our code and we'll scroll down to where we update the score. So here after we update the score, we're going to save it in local storage. But first let's learn
how local storage works. So at the bottom here we're
going to type the local capital S storage object to save a value inside local storage. It has a method called set item. So we can type tot set capital i item and brackets because this is a method or a function saved inside the object. And we're going to give two
strings to this method. The first string is a name. This is how we're going to access
the value that we save later. So let's use the string
message as the name and we'll type a comma and then
we'll type the value that we want to save into local storage. So local storage only supports strings. So let's save the string. Hello inside local storage. If we save and then go back to our tab and play the game. It will run all this code and save
the string into local storage. Now let's learn how to get this
string out of local storage. We'll press okay and
we'll scroll to the top. And when we first load the page, we're going to get that value
out of local storage by typing local capital S storage. Get item this time and brackets. So the get item method gets
a value out of local storage and we're going to give it one string. So this string is the name that we
used earlier, which was message. So a type the string message. Now let's console dot log this result. So console dot log and a bracket at the end and save it will get the value that we
saved earlier out of local storage. So we saved the string. Hello. And that's exactly what gets
displayed in the console. So using local storage, we were able to get the value that
we saved earlier even though we refreshed the page. Now let's save our score into
local storage so it doesn't get reset when we refresh the page.
So let's scroll to the bottom and instead of using the name message, we're going to use the name
score to save our score and instead of the string, hello, we're going to save the score object. Now one problem here is that local
storage only supports strings. So we need to convert
our object into a string. And we actually learned how to
do this earlier using Jason dot stringy. So at the front we can type jason dot stringy and then brackets around the score. And this will convert the
JavaScript object score into adjacent string and then it's
ready to be saved in local storage. So if we save this and then play the game, it will run this code and save
our score into local storage. Now let's press okay, and
then scroll up to the top. And now instead of getting the message, we're going to get the score out
of local storage. If we save. Now when we load the page, we're able to get the score that
we saved from last time as a Jason string. The last step is instead of resetting
the score to zero every time we're just going to use the score
from local storage. Before we do that, remember that this is just a string, so we need to convert
this back to an object. We also learned how to do
this earlier using jason.pars. So at the front we can type jason.pars and then open bracket. And at the end a closed
bracket and it will convert this back to an object. If we save It will convert
the score from a Jason string back to an object. So now
we can use it up here. So instead of doing this, we'll remove it and
replace it with this code. So right click cut and then here, right click and paste and we'll remove console dot log and save. So now when we load the page, it will load the score from local
storage. If we play the game, notice that the score
doesn't start from zero, it starts from the score
that we had last time. Let's review what we
did step by step first when we update our score in this code, after we update the score, we're going to save it in local
storage using local storage dot set item. Now local storage
only supports strings, so we have to convert our score
object into a Jason string using Jason stringy. And then after we've saved
this into local storage, when we load the page up here, we're going to load the score that
we just saved from local storage using local storage dot get item.
And the score was saved as a jason string. So we need to convert it
back into an object using jason.pars. So that's how we use the adjacent
object and the local storage object to save our score more
permanently. Let's press. Okay, and the last feature we're going to
add is when we click the reset score button, we also need to remove
the score from local storage. Otherwise if we press reset, score and refresh and then play the game, it will just grab the old
score from local storage. So reset score doesn't really work here. Let's press okay and fix this issue. So here in the reset score
button at the end we're going to remove the score from local storage. So we'll type local storage and then a method called dot remove item and brackets. And between the brackets we're going to
tell local storage which value we want to remove.
So we're going to remove the score. So we'll type the string score if we save and we click the reset button and then we refresh the page
and try to play the game again. Unfortunately it now gives us an
error. So what is happening here? So remember that we remove
the score from local storage. So now when we load the page,
this actually doesn't exist. When something doesn't
exist in local storage, it's going to give us a value called null. And at the bottom, if we try to access any property on nu, it will give us an error.
So that's what we see here. So how do we solve this
problem if we scroll up? One way to solve this problem is
that if there is no score in local storage, we're going to
give it a default value. Let's look at how we can do that. So after this line we're going
to check if the score is null. We can do that using an if statement, if brackets and curly brackets. And we'll check if score is equal to null. And if it is equal to null, we're going to give this a default
score. So inside the curly brackets, we'll just make the score
equal to the default object we had earlier, which was winds zero and then losses zero and ties zero. And remember, if we
need to reassign a variable, we have to change it from cons to let. If we save, the score will be null because
we removed it earlier and now this will give it a default score.
So everything should work as before. If we play the game, you'll notice that the score starts
from zero or this default score and everything is working again. So that's how we create the score feature
in the rock paper scissors project as well as the reset score feature. Next we're going to use some
shortcuts to simplify our code. So these shortcuts are things that
we learned in the bulls lesson. So remember that null is a falsey value. That means it will behave just like false. So a shortcut we can use here is
instead of checking if the score is equal to null, we can also remove this and check if not score. So not score does the same
thing as checking if it's null. If the score is null, not score will flip it into true. So both of these will return true. If the score exists, it's an object, then both of these will return false. So instead of checking if
a value is equal to null, we can just use the knot
operator as a shortcut. Now also from the bullying's lesson, we have an even shorter
shortcut for doing this. So notice here that this
code basically sets a default value if the score doesn't exist. In the bulls lesson we learned
a technique called the default operator, which is
exactly what we need here. So on this line we can
remove the semicolon and type And then a default value. So we want our default
value to be this object. So let's select it and then right click copy. And then here, right click and paste and I'll select these lines
and press shift tab to remove and indent. And I'll add
a semicolon back at the end. So the way that the default operator
works is that if the left side is truthy, so in this case we have a score, it will use the left side. If the left side is falsey or
in this case the score is null, then we will use the right
side as a default value. So this does the same
thing as this code below, but it's just a shortcut. So now let's comment out
this code using slash star and at the bottom star slash. So we'll leave it here just
for reference and then save. And if we click reset
score again and refresh and play the game, it will still work. So this is a perfect situation
to use the default operator to simplify our code. So let's press Okay, And that's all we're going to do
for this project in this lesson. Now let's move on and learn
more details about objects. The first thing we'll
learn is the value null. So NU is one of the falsey
values in JavaScript. It's similar to the value undefined, they both represent that
something doesn't have a value. So what's the difference
between null and undefined? We use null when we intentionally
want something to be empty. For example, in the previous lesson we learned
that if a function has parameters, we can give the parameter a default value. If the parameter is undefined,
it will use the default value. However, if we set this parameter to null, it will not use the default
value and it will just use null. So null means we intentionally
want something to be empty. In most cases though, null and
undefined work the same way. Okay, so the next detail about objects we're
going to learn is called auto boxing. Let's go back to objects
dot html and open the tab for this file. And let's also comment out the previous
code so our console doesn't get too messy. So slash star and at the bottom, star slash and save. So let's scroll down. We learned in this lesson that
objects can have properties and methods, so you might be surprised to
learn that other values also have properties and methods. For example, at the bottom we're going to type console dot log, the string, hello, and then the dot notation
and a property called length. So strings can also have properties. The length property tells us how
many characters or letters are in this string. So hello has five letters. So if we save the length
property will be five. Here's another example, what type console dot log, the string, hello, and then the dot notation
and a method this time two, capital U, upper capital C, case and brackets. So this string also has a
method called two upper case. And this method gives us a copy
of the string with all letters capitalized or in upper case if we save, it will give us hello in capital letters.
So as you can see, simple values like strings
can also have properties and methods. So now you might be wondering, these are strings, not objects. How can strings have
properties and methods? The answer is that JavaScript has a
special feature called auto boxing. JavaScript automatically wraps
this string in a special object first, and this object has the property
length and the method to uppercase. So this is done automatically. We don't see the special object
that's wrapped around this string. So this feature is called
auto boxing because JavaScript automatically wraps the string
in an object like a box. So auto boxing also works with
other types of values like numbers and bulls. The only thing is that auto
boxing does not work with null and undefined. It will just give us an error. The last detail we're going to learn
about objects is a really important detail and that is objects are references.
To demonstrate let's create a new
variable with an object. So const object one and make it equal to an object inside this object. Let's have a property message, colon and the string. Hello. So you might think that when
we create an object like this, we create a value that has other
values inside and we save the whole thing in a variable. However, this actually works a little
differently. When we create this object, the actual value is created
somewhere in the computer's memory, and this variable actually just
gets a reference that points to that location. In the computer's memory, this is like a shortcut on your computer, a shortcut points to where
the actual file or folder is. So there's no way to
actually see this reference, but just know that this is a reference
and the object is somewhere else in the computer's memory. So the reason it works this way is
to make the language more efficient. For example, below this line we can
create a variable cons and call it object two and make it equal to object one. So this code doesn't actually
make a copy of the object, it just makes a copy of the
reference that points to the object. So this makes a language more efficient
because if we had a really big object here, it's not good to copy the entire
object over and over again. Instead, JavaScript just copies
the reference which is much faster. This is called copy by reference. Now that we learned that
objects are actually references, let's learn some interesting
behaviors of references. So at the bottom here, we're going to change the
property message in this object. We can do that by typing
the object object one dot message property and make it equal to something else like the string. Good job. And now if we console dot log object one and save. Notice that we were able to change
the message property even though we created object one with cons. And that's because this variable just
contains a reference that points to the object. So const prevents us from changing
the reference in the variable, but it doesn't prevent us from reaching
into the reference and changing the object that it's pointing to. So just be careful when you're working
with objects. Even though we use cons, we can still change the
values inside the object. Another interesting behavior
is that on this line we're not actually copying the
object into this variable, we're copying the reference. So object two actually has the
same reference as object one. They actually point to the same
object in the computer's memory. So at the bottom, if we type console dot log object two and save, you'll notice that for object two, the message property was also
changed even though we only changed object one. The last interesting behavior is that
we can't compare objects directly. For example, let's go to the bottom and
we'll create a new object using Constant Object three and we'll make it equal to an object. And then inside we're going to
have the same values as object one. So we'll have the property message And the value is the string. Good job. So now let's try comparing
object three to object one. So here we'll type console dot log and check if object three is equal to object one. If we save, it will tell us that these two
objects are not equal to each other even though they have
these same values inside. And that's because remember
objects are references. So Object three also contains a reference, and this code compares the references
and not the values inside the object. So because object three is a
different reference than Object one, that's why this code results in false. If we did console dot log and we check if object two is equal to object one, object two has the same
reference as object one, it points to the same object
in the computer's memory. So if we save, this will tell us that these two
variables have the same reference. So just remember that when
you're comparing two variables
that contain objects, you're actually comparing the
references, not the values inside. If we want to compare the values inside, we would do that manually by checking
the message property against this message property.
So don't worry object references are a little confusing at first,
but the more you work with it, the more you just get used to it. The last thing we're going to learn
in this lesson are some shortcuts for objects. So first let's make a
copy of object three. We'll select the code and right click copy. And then at the bottom we'll scroll down and
right click and paste. And let's rename this variable to object four. So now let's say that we want to
get the message property out of this object. We can do that by typing Object four message. And now let's also say that we want
to save this in a variable also called message. So at the front we'll type const message and make it equal to this value. So now if the variable name and
the property name are the same, we actually have a shortcut
for this. To use a shortcut, we're going to type
constant and curly brackets message and make it equal to object four. So this shortcut is called destructuring. This will take the message property
out of object four and save it in a variable called message. So this line of code does the
same thing as the code above. So let's comment out this line
using double slash and we'll just keep it for reference.
So at the bottom, if we type console dot log message and save, it will display good job. So the Destructuring shortcut took
the property out of the object and saved it in this message variable. Next we can use this destructuring
shortcut for multiple properties. For example, let's add another property
to this object using comma and we'll add a price property colon 7 99. And now we can take the price
property out of this object by typing after message a comma and price. So this will take the price property
out of the object and save it in a variable called price. If we console dot log the price and save it will display 7 99. So that's the destructuring shortcut. It's an easier way to take
properties out of an object. The next shortcut we're going to learn
is called the shorthand property. So at the bottom let's
create some new lines. And let's say we want
to create a new object. So we'll type cons and let's name this object five and we'll make it equal to an object. And inside this object, let's say we want to
create a message property. So we'll type message colon and for the value, let's type the variable message. So what this does is that it takes
whatever is inside the message variable and substitutes it into
this code. So at the bottom, if we console dot log object five and save this object will have a property
called message and the value is whatever is inside
the message variable, which is good job. So now we actually have
a shortcut for this code. If the property and the
variable name are the same, we can actually just type
it out once like message. So this code does the same
thing as message, colon message, and this shortcut is called
the shorthand property. So if we comment out this
line using double slash and save, you can see that this shortcut
creates the same object that we had before. The last shortcut we're going to
learn is called the shorthand method. So at the end let's create a new property and let's name it method colon and we'll save a function in this property. So we'll type function, and let's name it function one brackets and curly brackets. And inside this function let's console dot log method. And now here at the bottom, let's run this function
by typing object five dot method. So this will access this function
and we'll run it by typing brackets.
If we save, this will run the code in the
function and display method in the console. So we actually have
a shortcut for writing this. So at the bottom we can
type method again and just type brackets and curly brackets, console dot log string method. So this code does the same
thing as the code above. So these brackets will create
a function just like here. So this function name
is actually not needed. So if we comment out lines of code and save, it will still display method in
the console because this is a shortcut for these lines of code. So this shortcut is called
the shorthand method syntax, and that's the end of this lesson. In this lesson we learned another
type of value called objects, objects, group related values. Together we added a score to
our rock paper scissors game. We learned about built-in objects
and used the Jason and local storage objects to save
our score more permanently. We learned more details about
objects like null auto boxing and references, and we learned some useful
shortcuts like destructuring shorthand properties
and shorthand methods. Here are some exercises to help
you practice working with objects. In this lesson we're going to learn
one of the most important features of JavaScript called the
document object model or the dom. And we're going to use the DOM to
improve our rock paper scissors project. So first we'll create a
new file for this lesson. Let's go to our code editor
and click this icon to show our files and then
click this icon to create a new file. And we'll name this file, zero nine dash dom dot html and press enter. Next, let's copy objects dot html into dom dot html. So we'll click here to open
the file and then click inside and then type control A or
command A to select the code. And then right click copy. And in here, right click and paste. Now let's hide these and we'll
prepare this file for this lesson. So let's scroll to the top and we'll change the
title to Dom and let's delete all the JavaScript
code from the previous lesson. Now let's save this file and
we'll open it in the browser by right clicking open with live server. And let's also open the
console on this page, we'll right click, click inspect
And then click the console. And now we can close the previous tabs as well as the previous code. For now and for this lesson we're going
to do an extra step in the setup inside the body we're
going to create a button. So here, let's type the code
less than button greater than, and inside the button
we'll have the text. Hello. Now let's save and we should have a button on the page. And now we're ready to learn
the document object model or the dom. In the previous lesson we
learned about objects which group multiple values together. We also
learned about built-in objects, which are objects that are
provided by JavaScript. Some examples of builtin
objects are console math, Jason and local storage. The dom is another
builtin object called the document object. So let's go to our script
element and we're going to type document. So this is a built in object
provided by JavaScript and we've actually seen this document
object before. In the first lesson, one of the first pieces of code
that we learned was document dot body dot inner capital H T M L equals the string. Hello and semicolon. So this code removes everything
on the page and replaces it with a text. Hello. If we save,
It will remove the button and just put hello.
And now that we learned objects in the previous lesson, we can
fully understand this syntax document. Here is a built-in
object and this is the dot notation. This means we're accessing a
property of the document object called body. Now body is also an object, so we can use the dot notation
again to access a property of the body object called inner html. And finally we use an equal
sign to change the inner HTML property to the string. Hello. But as you can see, there's something very special
about the inner HTML property. When we change this property,
it also changes the webpage. So this document object and the
webpage are linked together. Let's do another example. We'll go to the end here and
press enter and we'll type the document object again and we'll
use the dot notation again. And this time let's
access the property title and we'll change the title
property using an equal sign and we'll change it to the string.
Good job if we save changing the title property
will also change the title at the top of the tabs here.
So now this says good job. Again, as you can see, the document object is
linked to the webpage. So from these examples it shows
us that the document object represents or models the webpage. And that's why we call this
feature the document object model or the dom. Now that we know what the dom means, let's learn the syntax rules for the dom. So the dom is just this
built in document object and this object works the
same way as any other object. It contains properties
like body and title that we can access using the dot notation. Now the special thing about the
document object is that it is linked to the webpage. That means if we change certain
properties in this object, it will also change the webpage.
Now in addition to properties, the document object also has
methods we can use and we'll learn about them later in this lesson. Now that we understand the
syntax of the document object, let's learn about the properties
and methods we can use. First, let's comment out this
previous code using slash star, star slash and we'll create
some new lines at the top. So the first property we're going
to learn is called document dot title. So this property will give us the
title at the top of the tabs here. So if we console dot log
this property console dot log and save, this will give us the text at the top, which is Dom and that's what
gets displayed in the console. If we change the document
dot title property, it will change the text
at the top of the tab. So here if we type document dot title and make it equal to the string changed and save.
Now the title at the top of the tab will be changed. So as you can see the title
property is linked to the title at the top of the tab we can
use it to get the title and we can also use it to change the title. Next we're going to learn another
property called document dot body. So let's go into our code and let's type document dot Body. Now document dot body is
a very special property, so this will literally get this body html element and put it inside our JavaScript. So let's actually console dot
log this to see how it works, console dot log, open bracket, and then close bracket and save. And inside the console it will
tell us that document dot body is the body html element. And if I hover over this, it will tell us that it is
exactly the body on our page. If I expand this, you can see that this code is
exactly the code that we have here. And this shows us one of the most
important features of JavaScript. We can have H T M L
elements inside JavaScript. The document object or the
dom combines JavaScript and H T M L together and it gives
JavaScript control of the webpage. So now that we have an HTML
element inside our JavaScript, what can we do with it? A really important thing to know
is that when an HTML element is inside our JavaScript like this, the HTML element is converted
into a JavaScript object. So for example, if we do console dot log type of document dot body A and save it will tell us that the body
H T M L element is just an object when it's inside JavaScript. So just like any other object, this has properties
and methods we can use. So one useful property of
the body element is inner H T M L, which we saw earlier. So down here let's type document dot body dot inner capital H T M L. So the inner HTML
property controls all the HTML inside the body, that's why it's called inner html. So if we access this property, it will give us all the
H T M L inside the body. So let's console dot
log to confirm console dot log and save and inner HTML will
give us all of this HTML inside the body element. And if we change the inner HTML property, it will change the HTML
inside the body element. So let's create a new line and we'll type document dot body dot inner capital T M L, and we'll change it to the string changed. So this will replace all of
the H T M L inside the body with a text changed if we save, that's exactly what it
does and we can actually confirm this by going
into the elements tab. So this tab is for HTML and css. We can find the body element, expand it, and you can see all of the
HTML that we had before was replaced with changed. And
don't worry about this part, this part is just added
by live server after. So this shows that inner
HTML gives us control of all the HTML inside the body. We can get this H T M L
and we can also change this H T M L. Now another feature of inner
H T M L is that we can replace this H T M L with new H T M L code, not just text. So for example, instead of just text, we can replace it with
a code less than button greater than and also
less than slash button greater than.
So this is HTML code for creating a button. And inside the
button, let's put the text. Good job. And now this code will replace
all the HTML inside the body with this new html. If we save, it removes all the previous
HTML and this new HT m L creates this button. So using this inner HTML property, JavaScript can replace the
HTML inside the body to whatever we want. We have
full control of the webpage. All right, now we're going to learn a method of
the document object that we can use. As a reminder, a method is a function that
is saved inside an object. So we're going to learn a very
important method called document dot query selector. We just learned that document
dot body lets us get the body element and put it inside our JavaScript document dot query selector
lets us get any element from the page and put it inside our JavaScript.
Let's give it a try. So first we'll comment out
the previous code using slash star and star slash let's create some new lines at the top and let's type document dot query capital S, selector and brackets. So document dot query selector
lets us get any element from the page and put it inside our
JavaScript between these brackets. We're going to put a string. This string tells JavaScript
which HTML element to get from the page. So if we type button, this will get the first button
element from the page and put it inside our JavaScript. So let's console dot log
this to confirm console dot log, close bracket and save. And let's go back to our console. Now we will tell us that
document doc query selector got this button element and put
it inside our JavaScript, which you can see in the console. And if I hover over this button element, it will tell us that it is
exactly the button on the page. So that's what document
Duck query selector does. It can get any element from the page
and put it inside our JavaScript. This string tells it which element to get. If we type button it will get the
first button element from the page. If we type body, this will now get the first
body element from the page. So it will do the same
thing as document body. But for now, let's just change this back
to button as an example and save. So remember when an HTML
element is inside JavaScript, it's just a JavaScript object. So this button element
is also just an object and it has properties
and methods we can use. Every HTML element actually
has a property called inner html, which lets us control the
HTML inside the element. So for this button element, let's type at the end dot inner html and this will give us the HTML inside the button. If we save, it will give us hello. And again, if we change the inner HTML property, it will change the HTML inside the button. So let's make a copy of this code. We'll select selected
and right click copy. And down here, right click and paste. And let's change the inner
HTML property using an equal sign. And the string changed. So this will only change
the HTML inside the button, which is here to changed. If we save it can see that the text inside
the button is now changed. A little syntax shortcut I'm going
to show you is that for the dot notation, we can actually
put it on multiple lines. So we can type document dot
query selector and then put dot inner html on a separate line
to make it easier to read. And make sure to put a tab at the front
so that we know it's a continuation of the previous line. Okay, so using document doc query selector, we can get any element from the
page, put it inside our JavaScript, and then we can control the
HTML inside that element. And this allows us to only change
the parts of the page that we need. Next, what if we have two buttons on the page?
So let's go up here and we'll create another
button using less than button greater than, and we'll have the text second button and save. So now we have two buttons on the page, but document doc query selector will
only get the first button on the page. How do we get this second button? The solution is that we're going
to add an attribute to this button called the class attribute. So in the opening tag
we're going to type space class equals double quotes. So the class attribute sort of
adds a label to this button. So inside the double quotes we're
going to label this button a js dash button. And now that we labeled this button, we can select it using
document dot query selector. So at the bottom here we'll type document dot query selector again and brackets, and we'll type a string inside. And this time we're going to start
with a dot. When we start with a dot, this means that it's going to
look for a class rather than an element name. So we're going to look
for the class js dash button. And now document dot query selector
will select an element with the class js button, which
is this element here. So let's confirm this by console dot logging this code and save. And now you will see that
this code gives us the second button on the page. So using a class attribute
and then starting with a dot inquiry selector, we can get any specific element
from the page and put it in our JavaScript. By the way,
when we start with a dot, this is called a class selector, and this is also used in CSS to
style elements with a specific class. In fact, anything we use in CSS can
also be used in this string. And also a common practice
is to start the class with JS dash to make it clear
that this class is being used in JavaScript. And again, HTML elements are JavaScript objects. So this second button
is also just an object. And remember, objects are values and we can
save them inside a variable. So instead of console dot log, let's create a variable
using const constant. And we'll name the variable button, capital E element. We usually end the variable
name with Element or lm. To make it clear there's an H T
M L element inside this variable. And finally we'll type an
equal sign to save this element and we can remove this extra bracket. And now if we console
dot log this variable console dot log button element and save it will tell us that the second
button was saved inside this variable. So using the dom, we can get H T M L elements from the page, put it inside our JavaScript
and then save it in a variable. So the DOM combines
JavaScript and HTML together, it gives JavaScript full
control of the webpage. All right, now that we
learned how to use the dom, let's do some practical examples. So I've actually prepared some projects
that we can do for this lesson to open these projects, we'll go to our browser and
create a new tab at the top. And here we'll type super simple.dev/projects/dom and press enter. On this page, we'll be working on three projects,
the YouTube subscribe button, the Rock paper Scissors project we've
been working on for the last few lessons and this Amazon shipping calculator. And you'll notice that these
projects modify the webpage. So we're going to be using the
DOM to create these projects. And in the next lesson we're
going to use CSS to style these projects and make them look nice. And you can preview that by clicking here. So using css, we can make the subscribe button look
like the actual subscribe button on YouTube. And if we click this link to see
the rock paper scissors game, you'll see that will make it look
really nice with these icons. But for this lesson we're only going
to focus on the functionality and not the styling. So let's
go back to the projects, we'll click back and click back again until we're at projects slash
dom and we're going to create the functionality for these projects
first. So before we start, let's create a new file
just for these projects. We'll go to our code
editor and click this icon and then click this icon
to create a new file. Let's name this file, zero nine dash dom dash projects dot html and press enter. Now let's copy dom dot
html into this file. So we'll open it and then
click in here and type ctrl a or command A to select the code. And then right click copy. And in here, right click and paste. Now let's close our files
and we'll prepare this file. So let's scroll up and we'll
change the title to Dom projects and let's remove our html, but keep the script element and we'll also remove the
Java script from before. Finally, let's save this file and we'll
open it in the browser by right clicking open with live server. And let's also open the console
just in case, right click, click inspect, and then click the console. All right, we're ready to
start with the projects. Let's go back to super
simple.dev and we'll start by creating the
YouTube subscribe button. Let's actually press refresh
to get it back to normal. And when we click this button,
it will change to subscribe. First, let's create the HTML
elements for this project. We'll go to the body, we'll create some new
lines and let's create the paragraph first, what's type less than P, greater than. And inside the paragraph
we'll have the text, YouTube subscribe button. And now let's create the
button. So on the next line we'll type less than button greater than. And inside the button subscribe. Now let's save and go back to our tab. And now we have the HTML
elements that we need. So now let's make this
interactive with JavaScript. And remember we have a process for this. First we'll figure out
what steps we need to do. This is called an algorithm, and then we'll convert
these steps into code. So the steps that we need here
are when we click this button. If the text is subscribe,
we'll change it to subscribe, otherwise we'll change it back. Now let's convert these steps into code. Let's go to our button element
and we're going to add an on click attribute. We'll type space on click equals double quotes. And inside here we'll
write some Java script. So first we need to get the
text inside the button and we learned how to do this earlier. We can use document dot query
selector to put this button into our JavaScript and
then use inner html to get this HTML inside the button.
So in our code, let's type document dot query selector brackets and a string. And as we learned, we're going to use a class attribute
to select this specific button. So in the opening tag, let's add a class attribute and let's make the class js dash subscribe dash button. And then inside document
dot query selector, we're going to type a.to select a
class and we're going to select the class js dash subscribe dash button. And now let's console dot log this
to confirm that we got this button. So at the front console dot log and save. And now let's click our button and it will show us that document
dot query selector got the button on the page. So now let's save this button in
a variable so we can use it later. Instead of console dot log, let's type const to create
a variable and we'll name it button element and make it equal to this result. So now that we have the
button inside our JavaScript, we're going to check if the text
inside the button is subscribe. To check the text, we
can use an if statement. So at the bottom here
we're going to type if brackets and curly brackets. And inside this condition, let's get the text inside the button. So we'll type button element dot inner capital H, T M L, and we're going to check
if it's equal to subscribe. So we'll type triple equal the string, subscribe. Now if it is equal to
subscribe inside the curly brackets, we're going to change the text
in the button to subscribe. So let's type the code button element dot inner capital H T M L, and we'll change it with
an equal sign to the string sub described. And the last step is otherwise
we'll change it back. So we'll add an L to this if statement L and curly brackets.
And inside we're going to change the text back to subscribe. So let's type button element dot inner capital H, T M L and make it equal to the string. Subscribe and save. Now before you try out this project, make sure that the text inside
the button has no spaces or new lines around it
and it looks like this. And I'll show you why in a second. Let's go to our project and try it out. So when we click this button, it
will change to the text, subscribe. If we click it again, it will
go back to the original text. So that's how we create the subscribe
button project using the dom. So now let's go back into our
code and I'll show you why. If we add new lines and some
spaces around this text, there's actually going
to be some problems. So if we save this code and
then go back to our project and click the button again, you'll notice that it no longer
changes the text. And that's because now we have a bunch of
spaces around this text and these spaces will show
up in inner html and now inner HTML will not
equal exactly subscribe. So how do we solve this problem when
there are spaces around our text to solve this, we're going to use a different
property of an HTML element. So instead of the inner HTML property, we're going to use the
property inner capital T text. So inner text will give us
the text inside this element, but without all these spaces around it. So now this will equal exactly subscribe. If we save and go back to
our project and click it again, it'll start working again. So that's the inner text
property of an HTML element. It gets us the text
without the extra spaces. So before we move on
to the second project, I'm going to show you how to make
our code cleaner. Right now we're mixing HTML and Java JavaScript together. So to make a code cleaner
and easier to read, we're going to separate
the JavaScript code. And to do that we're going to put
this code in a function instead. So inside the script element, let's create a function using function and we'll name the function, subscribe brackets and curly brackets. And inside these curly brackets,
we're going to move all of this code. So let's select this code and we'll right click cut and in here, right click and paste. And if we need to fix the formatting, we can select these lines
and press tab a few times. And now that we have this function, we're going to go to the on click
attribute and we're going to call this function. So we'll type
the function, name, subscribe and brackets. So this will run all the
code inside the function so it will do the same thing as before, except now our code is cleaner
because we grouped all the JavaScript code at the bottom and we're
no longer mixing as much html and JavaScript together. Now let's move on to the second project. We'll go back to super simple
dev and we're going to work on the rock paper scissors
project. So let's click this link and it will show us the next
version of this project. So you'll notice a few changes here. The first change is that we're going
to show the score on the page instead of in a pop-up. And the second change is that when we
click one of these buttons to play the game, it will show us the result and
the moves that we picked on the page rather than in a pop-up. Let's create a new file for this rock
paper scissors game for this lesson. So let's go to our code editor
and we'll click this icon and click this icon to create a new file. And we'll name this zero nine dash rock dash paper dash scissors dot html and press enter. And let's copy the previous rock
paper scissors, which is here. We'll click here and type
control A or command a right click copy. And here, right click and paste. And let's hide our files and let's save this file
and we can also close zero eight rock paper scissors. And finally we'll open this in
the browser by right clicking open with live server. Now we're ready to begin
the second project. So let's go back to the project at Super
Simple Dev and we're going to start by putting the score on
the page. So to do this, we're going to need
somewhere to put the score. So let's create an HTML element for this. We'll scroll up to our html, which is here. And after
the scissors button, let's add a paragraph element
where we're going to put our score, so less than P, greater then. And let's add a class attribute. So we can select this element in our
Java script. So in the opening tag, we'll type space class equals double quotes JS dash score. Now that we have a class, let's get
this element in our Java script. So let's just do it down here. So we'll type document dot query, selector brackets and a string. And then we're going to type a dot
and we're going to select the class js dash score. So JS dash score. So this will get the paragraph
element from above and put it inside our JavaScript. And now let's put the
score inside the element. To do that we can use inner html dot inner capital H T M L, and we'll make it equal to the score. If we scroll down, We actually create the score
down here so we can actually just copy this string. So we'll select it, right click copy, and let's scroll up to here. And I'll actually put this on a
separate line to make it easier to read. And now here we're going to
type a string using back ticks and inside the string we're
going to right click and paste. So this will put the score that
we used to have in our popup inside this element. So
inside this paragraph, if we save and then go back to our tab, you can see that now it
displays the score on the page. Now before we move on, I want to
point something out with html. So remember that our reset score
button was beside our other buttons and now it's below them. So what determines if an element
appears beside something or below something?
So the paragraph element here is known as a block element. A block element will always
take up an entire line by itself. So this line
already has some buttons, so the paragraph will take up the
entire line under the buttons. That's why this text appears under
the buttons and not beside them. And also because a block element
like this paragraph takes up this entire line, the next
button has to appear below it. So that's why we get this layout here. So this is just a short review of layouts. If you want to learn this in more detail, you can check out my HTML and
CSS full course in the video description. Alright, the next feature we're going
to do is if we play the game. We also want to update
the score right now. If we play it doesn't
update it on the page, let's fix this in our JavaScript.
So let's go down to where we update the score. So we'll scroll down, which is right here. We update the score and
save it in local storage. And after we do this, we're also going to update
the score on the page. So we can actually use the
same code that we used above, which is here. So let's
make a copy of this code, right click copy and down here, right and paste. And I'll add a tab at the front. If we save and then try out our game, we'll click a move press. Okay. And now you'll notice the
score also updates on the page. So let's go back into our
code and do some cleanup. So you notice that this code is
the same as the code we had above. And this is a great situation
to use a function to reuse this code. So at the bottom here, let's create a function using function and we'll call it update score element brackets and curly brackets. And we'll move this code into
the function. So we'll select it, write, click, copy, and in here, right click and paste. And now instead of writing
this code multiple times, we're just going to call the function update score element and brackets. This will run all the code inside the
function so it does the same thing as before, except we can reuse the code. So let's scroll back up and instead of typing
out all this code again, we can just use our function update score element and brackets. Now let's save. It will display the score
on the page at the start. And when we click a move and click okay, it will update the score on the page. So the last feature we're going to do
in relation to the score is when we click the reset score button. We also want to update the score
on the page right now if we click it, it doesn't actually update it.
So let's go into our code and let's go to the reset
button, which is here. And after we reset the score, we're going to call that function again, update score element and brackets if we save. And now let's play the
game and press, okay, so we have a score and
if we click reset score, it will reset everything back to zero. So now we finish the score. Let's go back to super
simple dev and play the game. And now we're going
to work on this section. We're going to show the result and
the moves that we picked on the page. So first, let's create some paragraphs
for these as well. We'll go to our HTML and above the score. Let's add a less than greater than this is going to be the result. So let's give it a class of JS dash result and let's create another
paragraph, less than P, greater than, and we'll give this one a class equals js dash moves.
Now let's use the dom to put the result and the
moves in these paragraphs. Feel free to pause a video if you
want to try it yourself first. So let's scroll down to
where we display the result, which is here. So we display it in a popup
and instead of a popup, we're going to get the paragraph and
put this result inside the paragraph. So we'll type document dot query, selector brackets and a string, and we'll type a dot
and select the class js dash result and then dot inner capital H, T M L. And we'll change this to result. And now let's also display the moves. So we'll types of new lines and document dot query selector, again, brackets and a string dot j s dash moves, dot inner capital H T M L and make it equal to this text right here. So let's type a template string
because we're going to insert our moves inside the string and we'll type you and we'll insert the player move dollar, curly brackets player move and then a dash. And
then the computers move. So dollar curly brackets again and computer move computer at the end. So now that we're
displaying everything on the page, we don't need this popup at the
end so we can actually delete this popup. All right, now let's save and go back to our tab and play our game. Now it will show the result and the
moves that we picked on the page instead of in a pop-up. Let's play
it again to make sure it works. And finally, when we click reset score, it will reset everything
back to zero and that's it. Now we're displaying everything
on the webpage using the dom. Now let's move on to the
third and final project. We'll go back to super simple.dev and we'll click back to go
back to our projects and we're going to create
this third project here, which is an Amazon shipping calculator. The way this works is that inside
this text box we're going to type the cost of an order in dollars. If the order is under $40, for example, $25, and we click calculate, it will add $10 of shipping and
display the total down here. But if we type a cost that is over $40, like 50 and press calculate, it will be free shipping. So it will
display the same total down here. So let's learn how to
create this using the dom. Let's go back to our zero
nine dom projects file, and we'll start by
creating the HTML elements. So under our subscribe button, let's create this
paragraph using less than P, greater than Amazon shipping calculator. And next, let's create this text box. So the HTML element for a
text box is called input. So a type less than input, greater than. So the input element is special
because it doesn't require a closing tag. This is called a void element. And lastly, let's create the button. So here we'll create less than button greater than calculate. Now let's save and open
the tab for this file, which is right here.
And we have the text, the text box, and the button that we need. Now one other thing we're going to
add is that in the final project, if we don't have anything in the text box, we're going to have this gray text. So this is called a placeholder. To add a placeholder to a text box, we're going to use the
placeholder attribute. So inside our input element
we're going to type space, place holder equals double quotes, and inside the quotes we'll put the
text we want as the placeholder, which is cost of order and save. Now if we go
back to our project, we now have a placeholder in our
text box that disappears when we start typing. So that's
all the html that we need. Now let's work on the
JavaScript and again, we'll figure out what steps we need to do. So when we click this button, we're going to get the text
inside the text box. If the amount is below $40, we'll add $10 of shipping and
then we'll display the total on the page. Let's convert
these steps into code. So we'll go to our button and add and on click attribute. And inside here, let's also create a function to
separate our JavaScript code like we did before. So in the script we're
going to create a function function and let's name it calculate total brackets and curly brackets. And inside on click we're just
going to call the function. So calculate total brackets. The next step is to get the
text inside the text box. So first, let's get this input element and
put it inside our JavaScript. To do that we can use document
dot query selector again. So we'll add a class to this
input. So we can select it. Class equals js dash cost dash input. And then inside our
JavaScript will use document dot query selector brackets and a string and a dot. And this class js dash cost dash input. So this code will get the input
element and put it inside our, let's confirm by console dot logging the result and save. And now when we
click the calculate button, it will give us the input
element from the page. Let's save this input element in
a variable so we can use it later. Instead of console dot log, we'll use const and
we'll name the variable input
Element and make it equal to this element and
remove the extra bracket. And next, we need to get the
text inside the input element. So so far in this lesson we've
been using the property inner H T M L to do this. However, for input elements, you notice that there
is no H T M L inside. So for input elements we're going
to use a different property called value. So at the bottom here
we're going to type input element dot value. This is how we get the
text inside a text box. So let's console dot log this
to confirm that it works. So we'll console dot log and save. And now let's type something
in the text box like 50 and click calculate and input value will give us the text inside the text box. Let's save this text in a
variable so we can use it later. Cons and we'll name the variable cost and make it equal to the
text. In the text box. The next step is to check
if this cost is under $40. If it is, we'll add $10. So down here, let's type if brackets and curly brackets. And inside the condition
we'll check if cost is less than 40. And if it is inside the curly brackets, we'll do do cost equals itself plus $10 of shipping. And remember when we change a variable, we have to switch from cost to let. And finally we're going to display
the total cost on the page. So let's create a paragraph
where we can display the cost. So down here we'll create a paragraph less than P, greater than, let's give it a class JS dash total dash cost. And now inside our
JavaScript, let's use document query selector brackets and string and we'll type a dot and the class js dash total dash cost. And we're going to put
the cost inside the paragraph, we can use dot inner capital H T M L and make it equal.
And let's use a template string. So back ticks and we'll have a dollar. And we're going to insert
the cost using dollar and curly brackets cost. Now let's save and try out this project. So first we'll type a
cost that is over $40, like 50. If we press calculate, we're not going to add $10 of shipping
and we'll display the same total on the page. Now let's
try a number under $40, like 25 and press calculate. And this number doesn't look right, it's saying that we have to pay $2,510. So what's going on here? Let's go into our code and let's
use console dot log to figure out what's wrong. So first, let's console dot log the cost to
make sure that we're getting the right number from the text box. So down here, console dot, log, the cost and save. And then let's type 25
again and press calculate and it will give us 25. So we're
getting the correct text from the text box. Now let's console dot log down
here to see if the math is working so we'll type console, dot log, cost and save. And let's try 25 again and calculate. And down here when we add 10, this is where things go
wrong and a result in 2,510. So it's not doing math properly here. So let's check if cost is a number
to make sure that it's doing math. So here we'll type console dot log the type of cost and save. Let's type 25 again and calculate and aha, it's telling us that the cost is a string. So this is actually not
a number, it is a string, that's why it's not doing math. So
remember from the strings lesson, when we add a string with a number, JavaScript will automatically
convert this number into a string and combine them together.
That's why just combines 25 and 10 here. This is called type coercion. So whenever we get a value
from the dom like this, the value will be a string.
So in order to do math, we have to manually convert
the string into a number To do that, JavaScript has a built-in
function called number. So before this code we're
going to type capital N number open bracket and close bracket. So the number function takes whatever's
between the brackets and manually converts it into a
number. So now if we save and we type 25 and press calculate the cost is now a number and
it will do the math properly and give us 35. So remember whenever we
get a value from the dom, the value will be a string. So
if we want to do math with it, we have to manually convert
this value into a number first. So now let's remove the console
dot logs that we use to figure out this problem and save. Okay, we're going to add one
more feature to this project. Let's go back to super simple.dev and inside the text box we're
going to type 25 and press enter. So pressing enter will also
calculate the total and display it on the page. So let's learn
how to create this feature. So if we go back to our code so far
in this course we've been using the attribute on click, which runs some JavaScript
when we click an element, HTML has another attribute
we can use called On Key Down, which runs JavaScript when we
press a key down on our keyboard. So inside the input this time, let's add the attribute on key down equals double quotes. And then inside here, console dot log and the string typing. So now every time we type in
the input it will console dot log this message.
Let's save it and give it a try. We'll go to the tab for this
file and then inside the text box we'll type some numbers and
you can see that every time we type something it will run
this code and display this message. So that's how we do something
when we type in an element. So clicks and key downs
are known as events on click and on key
down are known as event listeners. They check for events and runs
Java script when those events happen. Now in addition
to clicks and key downs, there are many other events we
can listen for in Java script. Okay, so now let's figure out what
steps we need to do for this project. When we press a key down in the text box, we're going to check if the
key is the enter key. If it is, we'll do the same thing
as the calculate button. So how do we know what
key we pressed inside on key down we're actually
given a special object called event. So instead of this string, let's remove it and we'll
console dot log event. So this is an object that's provided
to us by JavaScript and it contains information about the event. Every event listener including
on click also gets an event object. If we save and type in this text box, it will show us that event
is this object and inside the object it has a bunch of
information including the key that we typed. So here let's use the
event object and we'll get dot key and save. So now inside this text box, if we type something it will tell
us the key that we pressed and if we press enter, it will
tell us that the key is enter. So the next step is to
check if the key is enter, and we can do that using an if statement.
So in our code we'll type a new line if brackets and curly brackets. And inside the condition
we'll check if event dot key is equal to the string enter if it is equal to enter, we're going to do the same
thing as the calculate button. So we can actually just use
this function again inside the curly brackets, we'll type calculate total and brackets and save. So now let's go back to
our project and type 25 enter and it will calculate
the total and display it on the page. So that's how we create this
keyboard feature of this project. Lastly, let's clean up our code and move
this into a function like the rest of our code. So
inside the script element, let's create a new function using function and we'll name it, handle cost, key down brackets and curly brackets. And let's move this code into
the function. We'll select it right click cut, and in here right click and paste. If we need to fix the formatting, we
can select these lines and press tab. And let's remove this console dot log. And now up here we're
going to call this function handle cost key down and brackets. Now the last thing we have to
do is that event does not exist inside this function. So we have to put the event
object into the function and remember to put a value
into a function we can use a parameter. So between these brackets we
can create a parameter called event. And now to save
something inside this parameter, we're going to go up to
these brackets and type event. This will take the event object and
put it inside the function where we can use it just like a variable. So now if we save and try out the project 25 enter.
So this still works. And now we finished all three
projects in this lesson. So in the rest of this lesson we're
going to learn some more details about JavaScript. In the last project we learned
how to manually convert a string into a number using the number function. We can also convert the other
way from a number to a string. So let's go to the top
of the script element and we can type capital S string and brackets. So the built-in string function
will convert a value into a string between the brackets. We
can put a number like 25, and this will convert the
number into the string. 25. The next detail we're going to learn
is a special behavior of strings. So below this line we can type console dot log the string 25 minus five. So if a string only contains
a number and we subtract, multiply or divide, JavaScript will automatically
convert the string into a number. So this gets converted into
the number 25 minus five, and if we save it will do math and give us 20. So this is another example
of type coercion or automatic type conversion. However, it's not recommended to do math with
strings like this because adding works differently. For
example, on a new line, let's type console dot log the string 25 plus five and save. This will convert the number into
a string and combine them together into 2 55. So because adding strings
works differently, the best practice is always
do math using numbers, don't do math using
strings. If we need to, we can manually convert the
string into a number using the number function like we did here. The last thing we're going to learn in
this lesson is another built in object called the window object. So in this lesson we learned
about the document object. The document object represents the webpage, the window object represents the browser. So let's go into our script
element and try it out. Below this we'll type window. So this is the window object
and it represents the browser because it represents the browser. Everything inside the browser
is inside the window object. So let's think what's inside the browser. Well the webpage is inside the browser, so the document object is
inside the window object. If we type window dot document, this will give us the same document
object that we've been using in this lesson. So what else is part of the
browser while the console is also part of the browser. So here if we type window dot console, this will give us the same console
object we've been using in this course. So we can actually do console dot log and the string window and save.
And this will do the same thing as console dot log. What else
is part of the browser? Well pop-ups are also part of the browser. So if we type window dot alert, this will give us the same alert function
that we've been using in this course to create pop-ups. However, you might have noticed that we
never type window dot document or window console dot log, and that's because the
window object has a shortcut. We don't have to type window.at the front, we can just type document or
console and JavaScript will automatically add
window.at the front for us. So window is a built-in object
that represents the browser. We don't have to type out window dot
ourselves because JavaScript adds it for us automatically, but it's still nice to know how
this works behind the scenes. And that's the end of this lesson. In this lesson we learned about
the document object model or the dom, which allows JavaScript
to fully control the webpage. We learned how to use document dot
query selector to get elements from the webpage and put them
inside our JavaScript. We learned how to use inner
HTML to modify the HTML inside an element. We worked on three projects using the dom. We learned how to make elements
interactive with the keyboard using on key down. And we learned some more details
about strings as well as the window object, which
represents the browser. Here are some exercises you can do
on your own to practice using the dom. In this lesson we're going to
add CSS to all of our projects and we're going to finish our
rock paper Scissors project. CSS is a different language that
changes the appearance of our website. It's one of the three languages
that we use to create websites. So first let's look at the
projects we're going to work on. In this lesson we'll go to
our browser and create a new tab at the top. And here we're going to type super simple.dev/projects/dom-with-css and press enter. So these are the same three projects
we created in the previous lesson, except this time we're going to
add CSS to make these projects look nice. Let's start by creating a copy
of the project's HTML file from the previous lesson. We'll go to our code editor
and click this icon to show our files. And then here we're going to
select zero nine dash dom dash projects. We're going to right click copy, and down here, right click and paste. And let's rename this
file by right clicking rename. At the end we're going
to remove copy and at the beginning we're going
to change it to 10 and press enter. Now let's hide our files
and we're going to open 10 dom projects in the
browser by right clicking open with live server. Now we can close our previous tabs as well as the previous
code from lesson nine, which is this file and these two. And now we're ready to
add CSS to our projects. We'll start with the
YouTube subscribe button. Let's go to the tab for our project and we're going to
style this button first. So we reviewed CSS in lesson four, and one of the ways we can write
CSS code is using the style element. So inside the head section
we're going to create an element using less than style, greater than. So the style element lets
us write CSS code inside. So inside here we're going to write button open curly bracket, close curly bracket. So the code in front of the
brackets is called the CSS selector. This tells the computer which elements
we want to style or change the appearance. So button will style all
button elements on the page, but in this situation we only
want to style the subscribe button because the calculate button
will be styled differently. So to style a specific element, we can use the class attribute.
So if we look at our button currently, it already has a class
of JS subscribe button, but this class is being
used by our JavaScript. A good practice is to add a
different class that would be used by css. So an element can
have multiple classes, we just separate them with a space. So inside this class attribute, we're going to type space
and add another class, subscribe dash button. Now this element has two classes
and we're going to use this second class in our css. So to
style a specific class, we're going to remove button
and we're going to type a dot. So starting with a dot means we're
going to style a class rather than an element name. So we'll style the class subscribe dash button, which is this button right here. And now inside these curly brackets, we're going to tell the computer how
to style this button. For example, border colon, none. And semicolon, if we save this will remove the border from
the button so it no longer has a border like this button. So that's how we style a
specific element. With css, we add a class to the element. And then inside CSS we
start with a dot and the class. And between the curly brackets, the code on the left is called the
property. This tells a computer. What we want to change on the
right is called the value. This tells a computer what we
want to change the property to. We separate the property and
value with a colon and we end the whole thing with a semicolon. So this is also called
a property value pair. As a reminder, this is
just a review of css. If you want to learn CSS in more detail, you can check out my HTML and
CSS full course in the video description.
So we just added one style to this button. We're going to add more styles so
that it looks like our final design. To make this easier, I'm going to rearrange my windows
and I'm going to put the final design at the bottom and then
our project at the top. This will make it easier to
compare the two designs next to make it look like the final design. We're going to style
our element one by one. Let's go back to our code and press enter. And next, let's change the
background color to black. Do you do that? We'll, type background, dash color, colon, black, and semicolon and save. Now our button has a black background. Let's keep going one by one. We'll change the text color
to white next. So in our code, we'll type color colon, white, and semicolon and save. Now if you're wondering how
I know all these properties, you can usually find them by searching
in Google. Just make sure you search for what you are trying to do. Let's keep going one by one. The next thing will change is
we're going to add spacing on the inside of the button. In CSS space on the inside
of an element is called padding. So we'll create a new line
and we'll use the property padding dash top colon 10 PX and save. So this will add space on the
inside of the element called padding at the top of 10 px. So the PX here means pixels. A pixel is a unit of
measurement in computers. Your screen is made up of
many small little squares. Each of these squares is called a pixel. So a pixel is the smallest thing
that you can have on your screen. Screen sizes are measured in pixels, images and video sizes are
also measured in pixels. And don't worry, the more
you work with pixels, the more you get used to how
big a pixel is. So in this example, 10 pixels is equal to this
amount of space and it looks pretty close to the final
design. So let's keep going. We'll add space on the inside of
the element at the bottom this time. So we'll create a new
line and type padding dash bottom colon 10 PX again and save. And that adds space at the bottom
of the element of 10 pixels. Next, let's increase the space
on the left and the right. We'll go into code and add padding. Dash left colon, 10 pixels and padding. Dash right colon 10 pixels. Let's save. And it added some extra
space on the left and right, but I think our final design has a
little more space on the left and right. So let's go back and increase
our padding. So instead of 10, let's try 15 on both sides. So we'll save.
And now the spacing looks close enough to the final design. So in css, it's normal to do some trial and
error to get the styling right. Let's keep styling this one by one. Next we'll make the text thicker or bold. So let's go into our code and
to change the thickness of the text, we'll use the property font dash weight colon bold. Let's save. And that will make our text
bold. So we're almost there. Now let's make the corners
rounded like in the final design. We'll go back to our css. And the property for making the
corners round is called border radius. And we'll make it colon five pixels. Let's save. And you can see that it
made our corners round. So the pixels here tells the computer
how round we want the corners to be. The higher the pixels, the more round it will get.
So if we change this to 10 pixels and save, it will make the corners even more round. So let's change this to something
really big to make it completely round. We'll change this to 50 pixels and save. And now our button is completely round. The last style we're going to
add is in the final design. If we put our mouses over the
button, it turns into this hand icon. So we call this a pointer and we're
going to do the same thing in our project. So let's go to our code and
to create that pointer icon, we're going to use the property cursor, colon pointer, and let's save and put our mouse over the button and
you'll notice it turns into this hand pointer icon. And that's it. Now our subscribe button looks
like the final design. Next, let's click the subscribe button. You'll notice that it
only changes the text, but if we click the final design, it also changes the background
color and the text color. So we're going to learn how to change
the CSS when we click a button. Let's go back to our code. And this time we're going to
scroll down to our JavaScript, which is here. So we learned in the previous lesson
we can get HTML elements from the page and put them inside our JavaScript. And we also learned that these
HTML elements are just JavaScript objects and they can have
properties like inner text and inner html. Every element has another property
we can use called class list. Class list gives us control
of the class attribute. So one solution we can do
is when we click the button, we can add a class, and then this class will
have different styles. So let's see how we do that in our code. We'll scroll down to
the subscribe function. And when we click the button
and make the button subscribed, we're also going to add a class.
So let's create a new line and we'll type button element dot class, capital L list. So class list itself is an object, which means it has properties
and methods we can use. One method is called dot add, which adds a class to an
element. So after this, let's type dot, add and brackets. And now inside these brackets
we're going to put a string. So this string is a class that we want
to add. When we click this button, let's add a class called is subscribed and save. So now every time we click this button, it will add a class to the
button called is subscribed. Let's give it a try first. We'll right click on the
page and then click inspect and we'll go to the elements tab and
I'll rearrange my windows so you can see it. And then inside the html, pay attention to the class of the button. Now when we click the button, it's going to add an extra
class called is subscribed. So that's what this line of code does. And now that this button
has the is subscribed class, we can style it in our css. So let's go back to our code
and we'll scroll up to our css. And here we'll type.to style a class and will style. The
class is dash subscribed, is dash subscribed and curly brackets. And now inside
these curly brackets, let's change the background color
to gray and the text color to black background dash color colon gray, and then color colon black. And make sure to type these styles
below the subscribe button styles so that these styles will
override the styles above. Now if we save and then click our button, it will add the is subscribe class. And now this button will get our
new styles that we added here. So that's one way to change
the CSS when we click a button. All right, now I'm going to
move this back to the top. And notice that our background color
is different from the final design. The final design uses a much lighter gray. So how do we get this
exact color? To do that, we're going to open
the elements tab again. So on this page we're
going to right click, click inspect, and then click the elements tab
and I'll rearrange my windows so we can see it. So in this section, in the style section, we can see the CSS that the element has. So first let's actually find
this button which is right here and we'll click it And here it will show us
the CSS that this button has and it will show us the background
color that we should use. So let's make a copy of this
color and put it into our code. Right click copy and here we'll remove it. And
right click and paste. Now let's save And go back to our project and try it out. And now we get the exact same
color as the final design. So by the way, this color
is known as an RGB value. RGB means red, green, and blue, and computers can create any
color using a combination of red, green, and blue. So the first number here is how
much red we want in our color. The second number is
how much green we want. And the third number is
how much blue we want. Each number goes from zero to 2 55 0 means less color and darker 2 55 means more color and lighter. So this color here uses two
40 for all of the colors, so it's close to 2 55 and
will give us a very light gray color that you see here. Next, if we go back to the final design
and we click our button again, it will change back to the original style. So we're going to create this
feature in our project as well. So one way to do this is when
we click the button again, we can remove this class. So
let's scroll down to the bottom to the subscribe function. And when we click the button and
we change it back to subscribe, we can remove this class. To do that class list has
another method we can use called remove. So let's create a new line and we'll type button element dot class, capital L, list dot, remove and brackets. So this does the opposite of.ad. It will remove a class from this element. So inside the brackets we'll
type a string and the class we want to remove, which is sub described and save. Now let's try out our project.
We'll click the button, it will get the class is subscribed
and get the extra styles. And now when we click the button
again it will remove the class and it will remove the extra styles. So notice here that when we add a class, we just type the class name. We don't type a dot and the
class name like we did for query selector, typing a dot only makes
sense in query selector. Next we're going to style
the text on the page. Let's scroll up to our css. And one thing we can do is to
style all the paragraph elements on the page using this code P and curly brackets. However, we're
going to use a better solution. Instead of styling all the paragraphs, we're just going to
style the body element. When we change the text
in the body element, it will change the text
in the entire page. So inside these curly brackets,
let's change the text here. So we're going to use a
different style of text. This is called a font. To change the font, we're going to use this property font dash family colon, and we'll change it to aerial, which is what I used in the final design.
So let's save and this will style all the
text inside the body and change the font to aerial. And a good practice is to write
any styles for the body at the top. So if we need to, we
can override it later. So let's move these to the top. We'll right click cut and then up here create some new lines and
right click and paste. And we're going to add one
more style Before moving on, let's add some space between the
subscribe button and the second project. So earlier we learned that space
on the inside of an element is called padding space. On the outside of an
element is called margin. So inside our subscribe
button at the bottom, let's add a property called margin dash bottom colon 30 pixels and save. So this will add space on the
outside of the element at the bottom of 30 pixels. Now let's move on and style the
Amazon shipping calculator with css. Again, we'll add a class to these elements
and then style them in our css. Let's scroll down to the text
box, which is the input element. And we're going to add
another class by typing space. And let's use the class cost dash input. And now we're going to style
this in css. So let's scroll up. And here we'll style
the class using dot cost dash input and curly brackets. And inside we'll style this one by one. Let's look at our final design
and see what styles we need. So first, let's change the text size because
our text is a little smaller than the text here. So the change the text size, we're going to use font dash size colon, and let's try 15 pixels and save. And now our text looks close
enough to the final design. Next, let's add some
space inside the text box. So remember, space inside an
element is called padding. So we're going to type padding dash top of 10 pixels, padding, dash bottom, also 10 pixels. And let's add padding to the left 10 pixels and padding dash right of 10 pixels. So this will add space on the
inside of our text box in every direction if we save. Now it looks just like the final design. Now I'm going to show you a shortcut for
padding that will save us some typing. So if we create a new line, we can actually use a
property called padding and colon and then type 10 pixels. This padding property lets us add
padding on multiple sides at once. If we type one value here, like 10 pixels, it will add 10 pixels to every side. So this line does the same
thing as these four lines above. So let's actually comment
this out using slash star and star slash and save. And you can see that this one
line of CSS did the same thing as the other four lines of css. So this shortcut can save
us some typing. Next, let's move on and style the
calculate button. Again, we'll add a class to this
button so we can style it. So in this button, let's add a class attribute. Class equals calculate dash button. Now let's style this in
our C S s by scrolling up. And here we'll type dot calculate dash button and curly brackets. And inside these curly brackets, we're
going to style this button one by one. So let's start with the background color. So a type background, dash color, colon, green, and semicolon and save. Next, let's change the
text color to white. So we'll type color colon white and save again. Okay, let's keep going and we'll remove
the border around this button. So we'll type border colon, none save. Next, let's make our text a little
bigger like in the final design. So we'll type font dash size and make it 15 pixels and save. Okay, so now let's add the space
on the inside of the button. So we're going to use this shortcut again, we'll type the padding property colon, and this time we're going to
give it two values separated by spaces, 10 pixels and maybe 50 pixels. So it's easier to see what this does. So when we give two values to padding, the first value is the vertical
padding. So the top and bottom. The second value is the
horizontal padding or left and right if we save. So you can see that the left
and right has a lot of padding, which is 50 pixels. So now let's make this
match our final design. So instead of 50 pixels, let's bring it down to 15 pixels and save. Okay, so that looks pretty close. Let's also increase the padding on
the top and bottom so that the text box and the button line up with each
other like in the final project. So let's change the
vertical padding to maybe 12 pixels and save. The last thing we'll style for this
project is when we put our mouse over the button, it turns into the
pointer icon. So to create this, we're going to use the property cursor, colon pointer, and save and give it a try. And that's it. We just finished
styling the Amazon shipping calculator. So now let's give this a try. We'll type 25 in the text
box and press calculate. And at the bottom it will
add $10 of shipping and show $35. Finally, we're going to style the
last project in this lesson, which is the rock paper scissors project. And this will finish the project. Let's go back to super simple.dev
and we'll scroll down on this page and then click this
link to show the final design for rock paper scissors. So I'll rearrange my
windows so we can see this And we're going to change the buttons
to these nice big icons for each of the moves. And when we click a move, it will show the result in
bold and show an icon of the move that we picked and the
move that the computer picked. So we're going to make this
project look really nice. Now let's get started. I'm going to rearrange my windows
back so we have it at the bottom. And let's create a copy of the
Rock paper Scissors project. For this lesson, we'll go to our code editor
and click here to show our files. And we're going to make a copy
of zero nine dash rock paper scissors. So let's click this file
and then right click copy. And down here, right click and paste. And we'll rename this file
by right clicking rename. And at the end we'll remove
copy and at the beginning we'll change it from nine to 10 and press enter. Now let's click here to hide
the files and we can close the zero nine file. And let's open the 10 rock paper
scissors file in the browser. So we'll right click and
then open with live server. And I'll move this tab to
the top here so we can see it side by side. So let's start by styling the body. We want to make the background
color of the entire page, this dark gray color. We'll go into our code and let's
create a style element so we can write some CSS inside the head. Let's type less than style greater than. And then inside here we're
going to style the body. So we'll type body and curly brackets. Now inside here we're going to
change the background color. So background dash color colon, and we're going to get the color
that we see here by right clicking. Click inspect and then go to the elements tab and I'll rearrange it so we can see it. And then here we'll find the
body element and click it. And in this style section we can
find the background color that we need. So let's select this. And right click copy. And in here, right click and paste and a semicolon at the end. Let's save and I'll move
this back to the corner. And now our project has the same
background color as the final design. Next, let's make the tex color white. So in our css we'll use the color property and colon, white and semicolon and save. And that will make our text white. Next, let's change the style
or the font of this text. We'll type font, dash family, colon, aerial, which is what the final
design uses and save. All right, now let's style these elements one
by one to match the final design. We'll start with this
paragraph at the top. So inside the paragraph
element, let's add a class. So we can style it in css, we'll add class equals, let's call this the title.
And then in our css, we can style this class by
starting with a dot and then title and curly brackets. So let's make our title really bake, like the final design will change the font dash size, colon 30 pixels and save. So that looks close enough.
Next, let's make the text bold. In our css, we'll use font dash weight colon bold and save. Now let's move on to styling the buttons. So first we're going to need these
images in our project and I'll show you how to get them. We'll put our mouse over the
rock image and we'll right click and we'll click save image. And now we're going to find the
folder that contains all of our code. So for me, it's on the desktop and
it's this folder right here. So I'll double click this folder
and then leave the file name as the default rock emoji and click save. And now in our code
editor, if we click here, we should be able to see the rock image. Let's do the same with the
paper and scissors image. So we'll hover over it,
right click save image, and in the same folder
that contains our code, we're going to save the
paper image. And finally, right click save image and we'll save the scissors image. All right, now that we have these
images in our code editor, let's learn how to load
them onto the page. So we can do this using an HTML element. So we'll go back to our HTML
code and we'll scroll down an inside the button. We're going to add an image element. So let's type less than I m G and greater than. So this is the
image H T M L element. It loads an image onto the page. The image element doesn't
require a closing tag. This is called a void element.
Now, to load an image, we're going to add an attribute
to this element called src. So SRC stands for source. It tells a computer which
file or image to load. So let's look in our project
For this button we're going to load rock dash emoji png inside the source attribute or type rock dash emoji dot p n g. So what this does is it will
look for the file with this name beside the HTML file and
it finds it right here and it will load it onto the page if we save. Now inside our button,
it loaded the rock image. Right now this image is too big. So let's use CSS to decrease
the size of this image. We'll hide the files and let's
give a class attribute to the image element so we can style it. So we'll type class equals and let's call this a move dash icon. And I'm also just going to add some
new lines to make the code a little easier to read. So we'll
scroll up to the CSS and we're going to style
this class using dot move dash icon and curly brackets. And let's decrease the
height of this image. We can use the property height colon and a pixel value 50 pixels and save. So this will make the height
of this image 50 pixels and it will also resize the width
automatically so that the image keeps its shape. So this size looks pretty close to
the final design so we can move on. Another feature of the source
attribute is that we can put our files into folders. So let's open the files by clicking here. And let's say that we want to organize
all of our images into a folder. So we're going to create a
folder by clicking this icon. And let's name this folder images. And we're going to drag
these images into this folder and drag this in here and in here. Now unfortunately, you can see that
the image doesn't load anymore. And that's because if we look
at our code source tells a computer to look for this
file beside this HTML file. And right now there is no
file called rock emoji dot png because we put it in a folder. So to tell the computer to
look inside this folder, we're going to type the
folder name at the start, which is images, and then we're going to type
a slash to go into the images folder. And then look for this
file, which is right here. If we save the computer is now able to find
this image and load it onto the webpage. So this feature
is called file paths. We can tell the computer to look
for a folder beside the HTML file like images and then use a
slash to tell it to go into the folder and look for a file. Now let's use this code to load
the other images onto our page. So for the paper image, we're
going to go to this button, remove the text, and then create an image
element less than i m G, greater than, and we'll give it an
attribute source equals and we'll locate the image it
is in the images folder, so we'll type images and then slash to go into the folder and we'll
load the file paper dash emoji dot p g. So paper emoji png and save. So our image is really big. Let's give it the same class
that we gave the rock image. So we'll add a class equals move dash icon and save. So these styles get applied to
all elements with a class move dash icon, so it applies
to both of these elements. Now let's do the same thing for the
scissors button. We'll remove the text and we'll replace it with an image element and we'll give it the source attribute images slash scissors dash emoji p n g. And we'll also give this a class Of dash icon to resize the images like up here. Let's save. And now we have all the
images that we need. Now let's make these buttons
look like the final design. We'll scroll up and let's
add a class to these buttons so we can style them with css. So we'll add class equals and let's use move dash button. And for this button we'll
add the same class class equals move dash button as well as for the third button class equals move dash button. Now let's scroll up to our CSS
and we're going to style this class using dot move dash button and curl your brackets. So first let's change the background
color to match the background color of the page. So we'll use background dash color colon and we'll use a special value called transparent and this will
make the button see through if we save. Now these
buttons are see through. Next, let's add this white
border to our buttons. So we'll use the border property colon and we're going to give it three values. The first value is our border
width or how thick the border is. Let's use one pixel for now. The second value is the border
style and we'll use solid because it's a solid border. Other values we can use
here are dotted or dashed. And the third value is the border color. So we're going to use white and semicolon at the end and save. And that will add a border. So let's
make our border a little thicker, like the final design. We'll
change this first value, which is the border width
to three pixels and save. Okay, so that looks pretty close. Now let's change the size of our buttons. Usually we use the padding to
add space on the inside of an element, but in this case our
images have different sizes. So we're going to use width and
height to set an exact size. So in our c s s, we'll type width colon, and let's make it a
hundred pixels and height and also 100 pixels and save. So it looks like our final design is a
little bigger than what we have here. So let's increase the
width and the height. So let's try 120 pixels and save. All right, so that looks pretty close.
Now let's make these buttons route. And the property for that is called border radius, colon. And to know how much we
need to make it round, we can set it to half of
the width or the height. So we'll set it to 60 pixels and save. Okay, so it's
coming along really well. And lastly, we're going to add
some space between the buttons. So remember that space outside
of an element is called margin. So let's add some margin on the right. So what type margin dash right colon and maybe 10 pixels and save. And finally when we put
our mouse over the button, it turns into a pointer. So the property for that is cursor, colon, pointer and save. And now our buttons
match the final design. So let's keep moving and style
the next part of the project, which is the result and the
moves. If you don't see this here, you can just play the game and
it'll give us a new result. So to make this easier to style,
we're going to go into our code, we're going to find the
result which is here, and we're going to add
some fake results like you win. Let's save. And now we have this result
and we're going to style it. So let's give this a class of result. And then in our CSS we're going to style
the class dot result and curly brackets. So let's
make the text bigger. We're going to use font, dash size, colon, and maybe 25 pixels and save. Okay, that looks pretty good.
Let's make the text bold. So we use font dash weight, colon bold and save. And finally we're going to add
extra spaces between this and the buttons. So we'll add margin, dash top and maybe 50 pixels and save. Okay, so I think that looks close
enough. Now let's style the moves. And again, we'll scroll down and we're going
to add some fake moves in here so it's easier to style. So we'll type you and then an image. So let's use the less than image and the source attribute. And let's just load the rock image
and the scissors image for the computer. So to load the rock image will
look inside the images folder slash to go into the
folder and then rock dash emoji png. So rock dash emoji png and greater than. And we'll add another
image less than image source equals images slash the scissors emoji, scissors emoji png and greater than. And finally, the text computer computer. Let's save. And this
will create some results, although the images are really big. So we can use the class
move icon to resize them to be the same size as the buttons.
So for both of these images, let's add the class move dash icon. And here as well, class equals move dash icon and save. And now our images look good. Next, let's style this score section. So the only thing we need here is
to add spaces between these two. So in this score element, let's add a class of score And we'll scroll up and style this element using dot score brackets. And let's add some margin at the top. So margin dash, top colon, 50 pixels and save. And let's compare it. And it looks like our final design
has a little more spacing than this. So let's change this to 60 pixels and save. And that looks close enough. And finally we'll style
the reset score button. So let's go back to our html, we'll add a class to this button. So here class equals reset dash score dash button. Is that the top? What type dot reset dash score. Dash button curly brackets. And we'll make the background color white. So background dash color, colon, white. And let's also remove the
border from our button using border colon, none. Let's save and see how it looks. And then let's increase the size of
this text because the final design looks a little bigger. So we'll add font, dash size, colon, 15 pixels and save. Now let's add some extra space
on the inside of the button. So that's padding, padding, colon, and we'll give it two values. The
first value is the vertical padding. Let's use 10 pixels. And the second value is
the horizontal padding. So let's use 15 pixels and save. And it looks like our final project
is a little shorter than our button. So let's change the
vertical padding to maybe eight and save. And the last step is to add
the cursor pointer. So here, cursor, colon pointer, and save. And that's pretty much it. We finished styling our
rock paper scissors project. So now I'm going to rearrange my
windows so we can see the entire design and it really nice. The last step here is to remove
these fake results and use JavaScript to insert
these results instead. So let's scroll down and we'll remove this result. And let's actually copy this code
because we want our JavaScript to generate this code. So we'll right click and copy. And let's scroll to the bottom
to where we insert the moves onto the page, which is here.
And instead of this text, we're going to right click
and paste the code that we had before. And this time, instead of picking rock every time
we're going to substitute this with the player move. So we'll remove this, and because this is
already a template string, we can insert a value
directly inside using dollar and curly brackets, and we'll insert the player move. Let's also insert the
computer's move in here. So we'll remove this and
insert a value using dollar and curly brackets and
will insert computer move. And now that we're
inserting this with JavaScript, we can scroll up and
remove the fake result, which is here, so we can
select it and delete it. Now let's save and we're not going to have anything in
our results, and when we click a move, it will show us the result and also
show us the moves that we picked. And that's it. We finished the
Rock Paper Scissors project. The last thing we're going to learn in
this lesson is how to organize our code into different files. So notice that right now all of our html, CSS and JavaScript is in one html file, and this makes the code harder to
read because the file is bigger and it mixes three different languages. To make our code more
organized and easier to read, we're going to separate each
language into its own file. So let's scroll down and we'll
start by separating our JavaScript into its own file. We'll click here to show our
files and then click this icon to create a new file
and we'll name this file, 10 dash rock, dash paper, dash scissors dot js, and press enter. So when we end a file with dot js, it tells the computer that this
file contains JavaScript code, not just text. Now let's go back to our
HTML file and we're going to move all of this code
into the JavaScript file. So we'll select this code and then we will right click and copy and inside the JavaScript
file will right click and paste. Now let's save and we'll go back to the HTML
file and we can delete all this JavaScript code. And now we're just going to load our
JavaScript file onto the webpage. To do that, we can use an attribute of
the script element called SRC or source. So we'll make it equal. And this does the same
thing as the image element. It tells a computer which file to load if we type 10 dash rock dash paper dash scissors dot js. This will look for a file called
10 rock paper scissors dot js beside our HTML file, which is this file here, and it will run all the
JavaScript inside this file. So it does the same thing as before, except now our JavaScript
code is in its own file. And this makes our code
cleaner because each file only contains one language and
each file also contains less code.
Now let's go back to the H T M L file and save. And you'll notice that our project
works the same way as before we just organized our code better. Another feature of the source
attribute is that it also uses file paths. So we can put this JavaScript file in
a folder and we'll be able to find it. For example, let's show our files and let's
create a new folder by clicking this icon. And let's name this folder scripts. So this folder will contain
all of our JS files. So we can drag this file into the folder and now we can locate it using
the source attribute by typing the folder name, which is scripts, and then a slash to go inside
this folder and look for this file and it will find it right here if we save. Everything works as normal. Another feature is we can
use multiple script elements. This lets us split our JavaScript
into multiple files and then load them all onto the page from top to bottom. Next we're going to learn how
to separate our CSS into its own file. Let's scroll up to our CSS
so we can do the same thing with css. So let's click the HTML file
And let's create a new folder and we'll call this folder
styles and press enter. So this folder will contain
all of our CSS code. Let's click the folder and we'll
create a new file by clicking this icon. And let's name this file, 10 dash rock dash paper, dash scissors dot css, and press enter. So ending the file with dot
CSS means this file contains CSS code and now we
can go back to our HTML and move our CSS into its own file. So let's select all this code and then right click copy. And in here right click and paste and save this file. Now let's go back to our H
T M L and we can remove this code and we'll learn how to load our
c s s file onto our website. So we're not going to use
the style element for this. We're going to use a different
element called the link element. So we'll type less
than, link greater than, and the link element doesn't
require a closing tag. This is another void element. So the link element uses two attributes. The first attribute is called R E L R E L means relation. This tells a computer what
type of file we're loading. So we're going to set this
attribute to style sheet. This means we're loading a
CSS file and then we will add a second attribute called H Ref. So H ref tells a computer
which file we want to load. So this also supports file paths. So we can type the styles folder. This will look for a folder
beside the HTML called styles, which is this one right here. And then we'll type slash
to go inside the folder and look for this CSS file, which is 10 dash rock dash paper dash scissors dot css. So this will load all the CSS
inside this file and apply it to our page. So it does the
same thing as before, except we separated each
language into its own file. If we save, everything still works and all
the styles get applied. And just like the script element, we can also use multiple link
elements to load multiple CSS files. So that's how we separate
our code into separate files. Using the script element
and the link element, it makes our code a lot easier to
read because each file contains one language and it contains less code. And that's the end of this
lesson. As a final reminder, the CSS we learned in this
lesson is just a review. If you want to learn CSS in more detail, you can check out my H T M
L and CSS full course in the video description. So in this lesson we
reviewed CSS and added CSS to all of our projects. We learned
about the class list property, which lets us control the
class attribute of an element. We finished our rock paper scissors
project and we learned how to organize our JavaScript and
CSS code into separate files. Here are some exercises to
help you practice using html, CSS and JavaScript together. In this lesson we're going to learn
two more features of JavaScript called arrays and loops. And we're going to use these features
to create this to-do list project. First, let's create a
new file for this lesson. We'll go to our code editor
and click up here to show our files. And this time make sure you have
one of these HTML files selected so we don't create the new file
in one of these folders. So now we're going to click this
icon to create a new file and we're going to name this file 11 dash arrays dash and dash loops dot html and press enter. Now let's copy the previous
lesson into this file. So we'll click on 10 dom
projects and we'll type here and type CTRL A or command
A to select the code. And then right click copy. And in here, right click and paste. Now let's hide our files and
we'll prepare this file for this lesson. So we can scroll to the top and we'll change the title to array and loops. And let's remove all of the css and we'll also remove the H T M L, which is right here, and we'll remove all the JavaScript. Now let's save and we'll
open this file in the browser by right clicking open with live server. And let's also open the
console. So we're right click, click inspect and click the console. And now we can close the
previous tabs and the previous code for now Until we just have the lesson 11 file. Now we're ready to learn arrays. And array is another type of
value in JavaScript and it represents a list of other values. So let's do an example and
create our first array. We'll go into the script element
and we're going to type open square bracket and closed square bracket. And inside the square brackets
we'll type a value like the number 10, and then we'll type comma and
another value like the number 20. And then again, and a third value like the number 30. So this is an array and
it represents a list of three numbers, 10, 20, and 30. Now themselves are also values, which means we can save
them in a variable. So at the front we can create
a variable using constant, and let's name it my
array and we'll make it equal to this array and
we'll add a semicolon at the end.
So now we created a list of values and we saved this list in this variable. Let's create a new line and we'll console dot log my array and save, and it will display the list
of values in the console. So that's basically what an
array is. It's a list of values. Now to get a specific value and an
array, we can use square brackets. So let's create a new
line and we'll type my array and square brackets. Inside these brackets we'll
put a number like zero. This number represents
the position in the array. So zero means the first value if we console dot log this code and save my array. Square bracket zero gives us
the first value, which is 10, and that's what's
displayed in the console. Now if we change this to one, this will get us the
second value in the array, which is 20.
If we save, it displays 20. So this number represents
the position in the array. Zero is the first value,
one is the second value, two is the third value, and so on. We can also change a value
in an array also using square brackets. So let's create a new
line and we'll type my array square brackets. And let's say we want to
change the first value, so we'll type zero for the
first value and we just make it equal to something else like 99. Now if we console dot log my array again and save. You can see that this change
the first value to 99. So that's basically how arrays work. We can access a value inside an
array and we can also change a value inside an array. Now that we understand
the basics of arrays, let's learn the syntax
rules To create an array, we start with an open square bracket
and we end with a closed square bracket inside we can put a list of values and we separate each value with a comma. We can also write an array
on multiple lines like this. We just put the new lines after the comma. Now to get a value inside an array, we can use square brackets
and a number like one. This number is called the index. It represents the position in
the array that we want to get. So the first value is index zero, the second value is index one, third value is index two, and so on. Notice that the index starts as zero. This is called a zero indexed array. Now inside an array we
can put any type of value. For example, let's create a new line and
we'll create a new array using square brackets. And inside we can put the
number one and then comma. And we can also put a string like hello and another comma, and we can put a bullion value like true and another comma. And we can even put an
object like curly brackets, name colon socks. Now an array itself is also a value. That means we can save
arrays in variables like this or even save it in an array. For example, in this array, we can add an array inside like one comma two. Next arrays have a weird behavior
when we try to check the type of an array. So on a new line, let's type console dot log type of, and then square brackets one, two and save. This will tell us that
an array is an object, and that's because an array
is actually an object, but it's just a special type of object. If we want to check if something
is specifically an array, we can use this code capital A array.is array brackets and inside the
brackets will put an array like square brackets one comma two. So this will check if
this value is an array. If we console dot log this result an and save it will display true. And finally, because arrays
are just a type of object, they also have properties
and methods we can use. So one useful property
is called dot length. So we'll type console dot log my array length. This will tell us how many
values are in the array. So my array has three values, so if we save, it will display three. Next we'll learn a useful
method of an array called dot push. This adds a value
to the end of the array. If we did my array dot push 100, this will add 100 to the end of my array. If we console dot log my array and save, you can see that 100 was added at the end. The last method we're going to
learn for now is called dot splice. This removes a value from
an array. For example, my array dot splice and brackets. And a splice takes two numbers. The first number is the
index that we want to remove. So let's say we want to
remove the first value, which is index zero. The second number we give to splice
is the number of values we want to remove.
If we give it one, it will remove one value at index zero. If we give it two, it will remove two values
starting at index zero. So for now, let's just remove one value
and let's create a new line and console dot log my array and save. You can see that splice removed
the first value from the array or index zero, which was 99. Alright, now that we understand the basics
of arrays and the syntax rules, let's do some practical examples. So I've prepared a project
we can do for this lesson. We'll go to our browser,
create a new tab at the top, and here we'll type super simple.dev/projects/erase and press enter. So this page contains the to-do list
project we're going to create in this lesson. So down here is the
final version of the project. We can type a name for our to-do like make dinner, give it a due date and
then click add and it will add it to our list. We can add another to-do like wash dishes and then select due
date and click add again and it will add another to-do to our list. And each to-do also has a delete
button so we can delete it when we're finished the task. So this is the final version
of the project and these two up here are simpler versions of the project
that we're going to use to work our way up. So let's start with
the first project up here. We're going to open our
console by right clicking, click inspect and click the console. And the way this first project
works is we can type A to-do in this text box, like make dinner, and when we click add, it will add the to-do to an array
and display it in the console. If we type another to-do like wash dishes and click add, it will add it to the array
and display it in the console. So let's create this project. We'll start
by creating a file for this project. We'll go to our code editor
and click up here to show our files. And click this icon to
create a file and we'll name this 11 dash to do dash list dot html and press enter. Now let's copy the code from
arrays and loops dot html. So we'll click here
control A or command A, and then right click copy. And down here, right click and paste. And let's close this for now. We'll scroll up and change the title to do list and remove all the JavaScript code. And this time, instead of writing
all the JavaScript in here, let's actually put the
JavaScript in a separate file, which we learned in the previous lesson. So we'll open our files again
and this time we'll go to our scripts folder. We'll click this JS file and
we'll click this icon to add a new file to this folder. And let's name it 11 dash to-do dash list dot js and press enter. Next we're going to load
this file into our HTML file. So let's open this. And in the script element we can
remove the spaces and we're going to add an attribute called SRC equals. And we're going to load the
JavaScript file that we just created, which is inside the scripts folder. So we'll type scripts and then a slash to go into this folder
and we'll load the file 11 dash to do dash list js and save. So now I'm going to drag this
file down here so I can see both the HTML and
JavaScript at the same time. Close this for now and I can
close the other code for now as well. And finally, let's
open this in our browser. So we'll right click
open with live server. And let's also open the console
on this page right click, click inspect and click the console. Now one more thing I'm going to do
for this video is I'll rearrange my windows so that we can have
the final design at the bottom. Let's start by creating the HTML elements. Let's go to the body and we'll
actually create a paragraph element to start. Inside the paragraph
we'll put the text to do list. Next, let's create the text box.
So to create a text box, less than input, greater than, and we'll add a placeholder
to this text box. Place holder equals to do name. Finally, let's add this button. So on a new line, let's type less than button greater than, and inside the button
will have the text add. Now let's save and this creates all the
HTML elements that we need. Next, let's write our Java script.
So first we're going to create an array to store our to-dos. And then when we click the add button, we're going to get the text from
the text box and add it to our array. And finally, we will
console dot log the array. Now let's convert these steps into code. Let's create a new array
first using constant, let's name it to do list and we'll make it equal to square brackets. So this is an array with no values inside. We also call this an empty array. Next, when we click the button, let's
get the value from the text box. So let's go to our button and add an on click attribute. And then inside here, let's create a function
for this. So down here, let's create a function. We'll name it, add to-do brackets and curly brackets. And then inside
the on click attribute, we're just going to call this function add to-do and brackets. The next step is to get
the text in the text box. We can do that using
document query selector. So to use query selector, we're going to put a class
on this input element. So we'll type the class attribute js dash name dash input, and then in here
Document dot query selector brackets and a string. And we'll type a.to get a
class and we'll get this class JS dash name dash input. As a reminder, this gets an element with
a class js name input, which is this element and
puts it into our Java script. And now let's save this in
a variable. So at the start, let's type const in input element and make it equal to this result. So now we took this input and
put it into our Java script. To get the text out, we're going to use a property of
the input element called value. So down here input element value, and let's save the value in
the text box in a variable. So we can use it later at the front const name and we'll make it equal
to whatever's in the text box. Before we continue, let's console dot log the name to check if this is working. So let's save this JavaScript
file and let's also save this HTML file. We'll go to our browser and I'll
resize it so we can see the console. And now if we type
something in the text box, like make dinner and click add, It will get the text from the text box
and then display it in the console. Okay, so it's looking good so far. The next step is to add
this name to our to-do list. So we learn how to do this earlier. We can use a method called push. Push will add a value
to the end of the array. So let's remove this for
now. And at the bottom we're going to type our array to do list dot, push brackets. And then between the brackets,
we're going to add our name here. And now the last step is to
console dot log the entire array console dot log to do list and save. Now let's give it a try or type make dinner in the text box and click add. It will take this text,
add it to the array, and then console dot log the array.
And now we have our to-do list. Let's add another to-do we'll type wash dishes and click add. Again, it will get the text in the text
box and then add it to the array. So now our array has two
values and then we display them in the console.
So that's how we create this first version of the to-do list project. Now one more feature we're going to
create is if we add something to our to-do list and click add, it will reset the text box. To do that, let's go into our code and
we'll create some new lines. And remember that the value
property represents the text in the text box. So to change
the text in the text box, we can simply change the value property. So we'll type input element dot value and change it to the empty string. So this will make the text
in the text box become empty if we save. And now type something
in the text box and click add, it will reset the text in the text box.
Let's move on to the second version of the to-do list. So here, when we type something in the text box, like make dinner and click add, it will actually display it on the page. If we type something else like wash dishes and click add, it will
also add it to the page. So how do we take our array
and display each value on the page? To do this, we're going to learn another
feature of JavaScript called Loops. Loops. Let us run some code
over and over, like a loop. So let's go back to our
11 arrays and loops file. And we can close this JavaScript
file for now and we're going to learn loops. So first, let's comment out the
previous code by typing slash star and at the bottom star slash let's scroll down and we'll create our first loop. We'll start by creating a
variable using the word let and we'll name this variable
I and we'll make it equal to one. Next we're going to
type the word while and then brackets and curly brackets. And then inside these curly brackets
we're going to put some code that the computer will run over and
over, just like a loop. Let's put the code console dot log. So this will display the variable
I in the console over and over again. Now obviously we
don't want to loop this forever, so how do we get this loop to stop? We can do that using the
round brackets up here. Inside these round brackets, we're going to put some code
that results in true or false. For example, we can check if I is less than or equal to five. So the way this works is that
if this code results in true, the loop will keep going over and over. Once this results in false, the loop will stop and it
will go to the next line. Now you may notice that this code
will never result in false because I is equal to one and one is
always less than or equal to five. So when does this actually
become false and stop the loop? The answer is inside this loop.
We're also going to update this variable. So we'll type I and we'll
make it equal to itself plus one. So now every time we loop over this code, we're going to increase I
by one and eventually I will be greater than five. This will return false and
it will stop the loop if we save. And then go back to the tab for
this file and I'll rearrange my windows so we can see the console. This loop makes the computer
count from one to five. So let's go over this code step by
step to make sure we understand how it works. First we create a variable
I and we make it equal to one and then we do a loop. So if this condition is true, the computer will keep running
this code over and over again. So the first time it loops, I equals one, and then it displays one in the
console and then we increase I to two. Now we go back to
the top and we check this. Code two is less than or
equal to five. This is true. So we're going to run this code again. This time I equals two and
we display it in the console and then we increase I to three. And now three is still
less than or equal to five. So this is true, which means we keep running
this code and eventually this is going to increase I to six. Once I is six, this will become false, which will cause the loop to stop
and then we go to the next line. So that's why it counts from
one to five and then it stops at five. So this is called a while loop. While this condition is true, it will keep running this code
over and over again just like a loop. As soon as this condition is false, it will stop the loop. All right, now that we understand
how a wild loop works, let's the syntax rules
to create a wild loop. We type the word while and
then round brackets and curly brackets. The code inside the round brackets
is called the loop condition. The code inside the curly
brackets is called the loop body. The variable eye at the top
is called the loop variable. Every time we loop, we're going
to increase the loop variable. This is known as the increment
step. The increment step, make sure that the loop ends at
some point without this increment step, the loop will
just keep going forever. This is known as an infinite loop. Now remember that I
equals i plus one has a shortcut. Instead of this, we can just do i plus equals one. And remember, we actually have an even
shorter shortcut for plus equals one. Instead of this we can also do i plus plus.
So this will increase the value of I by one every time just like before. So those are the three
major parts of a loop, the loop variable, the loop condition, and the increment step. Now each time we run this loop, this is called an iteration. So in this loop we did five iterations, we ran this code five times. And lastly, loops create a scope. Any variable that we create
between these curly brackets will only exist inside the curly brackets. So that's a while loop. While this condition is true, it will keep running this
code over and over again. Once this condition becomes false, it will stop the loop
and go to the next line. So in JavaScript, there's
actually two types of loops. The first type is a wild
loop, which we just learned. Now we're going to learn another
type of loop called a four loop. To create a four loop, we'll create some new lines
and then down here we'll type four and brackets and curly brackets. Inside these brackets we're going
to type three pieces of code. The first piece of code
is a loop variable, which is the same thing
as this line up here. So we'll type let I equals one and then semicolon space, and we'll type a second piece of
code which is the loop condition. So here we'll type I less than equal to five, and then semicolon and space. And the last piece of code
is the increment step, which is this line right here. So we'll type i plus plus, and between these curly brackets we'll
write the code that we want to loop over and over. So let's just type the
code console dot log I and save. So this four loop does the same
thing as the wild loop above. It counts from one to five.
And if we look at this code, we can see that a four loop is
just a shorter version of this wire loop. Instead of writing the loop variable
condition and increment step separately, we group all of
them together at the top. So this loop works the same way. First we create a loop variable, and then as long as this
loop condition is true, we will keep running
this code over and over. And every time we run this code, we're also going to increase
the loop variable by one. So now that we learned two ways of
doing a loop, which one should we use? If we're doing a standard
loop, for example, it has a loop variable, a condition and an increment
step every time it's recommended to use a four loop because a
four loop is shorter and more organized than a wild loop.
However, if it's a non-standard loop, then it might be better
to use a wild loop. So what's an example
of a non-standard loop? So let's say we want to generate random
numbers until we get a number that's at least 0.5. To create this loop, we'll create a variable that will
store the random number using let random number and make it equal to zero to start. And then we'll do a wild loop brackets and curly brackets. Now inside the loop condition, we want to keep running this loop
until random number is at least 0.5. So we'll check if random number is less than 0.5 because if it is less than 0.5, we want to keep running this loop until
we get a random number that's at least 0.5. And then inside this loop we're going
to generate a random number between zero and one and then save
it in the variable up here. So we'll type random number and make it equal to capital M math dot random. So if this random number is less than 0.5, it will keep generating random numbers
until we get a number that is at least 0.5. So at the bottom, if we console dot log random number and save, it will give us a random
number that's at least 0.5. So notice that this is
a non-standard loop. It doesn't really have a loop
variable that we increase every time and it also doesn't
have the increment step. So in this situation when
we have a non-standard loop, it's better to use a wild loop
because they're a bit more flexible. All right, now that we
learn the basics of loops, let's do some practical examples. We're going to learn a technique
called looping through an array. This means we're going to go through
each value of an array one by one and do something with
each value. So first, let's comment out the
previous code using slash star and star slash at the bottom let's create an array of strings.
So we'll create a variable cons to-do list equal to an array, and inside this array
will have the string make dinner, another string wash dishes, and another string watch YouTube. Now let's take each value in
this array and display it in the console. To do that, we're going to run a loop and this
loop is going to count from zero to the last index in the array. So remember that the index is the
position of a value in the array. The first value is index zero, the second value is index
one. Third value is index two, and so on. So below this let's type four brackets and curly brackets. Inside these brackets we're going
to create the loop variable. So here we're going to count the indexes, let index equals zero semicolon space, and we'll
do the loop condition. So we'll keep looping as long as
the index is less than or equal to the last index.
So remember that the index starts from zero. This means that the last index in an
array will be the number of values in the array minus one
or the array dot length minus one to do list dot length minus one. And here we'll add another semicolon
and we'll add the increment step, which is index plus plus. So we'll increase it by one every time. Now inside these curling brackets, we can do something for
each index of this array. For now, let's just console dot log this index and save. So this will count from a zero to two, which is exactly all the
indexes in this array. And now using this index, we can also access the
value at this index. So instead of just the index here, we can do to do list and then square brackets. And between the brackets index, this will take whatever the
index variable is and access that index in the array.
So if the index variable is zero, this will access to-do list index zero, which is the first value.
When the index is one, it will access to-do list index one, which is the second value and so on. So for now, let's save the value in
a variable using cons value and make it equal
to to-do list bracket index. And now let's console dot
log the value. Instead, if we save, this will loop through
each index of the array, get the value at each index,
and then display each value, which is what we see in the console. So this technique is called
looping through an array. We use a loop to go through
each value of an array and then we can something with each value. Now I'm going to show you a few shortcuts
we can use when looping through an array. Instead of checking if index is
less than or equal two to do list dot length minus one, we can shorten this to
index less than to-do list length. So this check does the
same thing as before. The loop will stop at index
equals length minus one, but it saves us some typing. Another shortcut is instead of
naming the loop variable index, we can shorten this to I and we'll shorten this as well and this as well. And that's why we often
name the loop variable I means index. Next we're going to learn a
technique that we can combine with looping through an array
called the accumulator pattern. So first, let's comment out the
previous code using slash star and star slash and at the bottom. Let's say we have an array
of numbers like this. How do we calculate the total
of all the numbers in the array? Let's set up this problem. Let's say we have an
array of numbers, cons, numbs equals array, and then the numbers one, one and three. And we want to calculate the total
of all the numbers in this array. To calculate the total will
learn the accumulator pattern. The first step of the accumulator
pattern is to create a variable to store the result. So below this, let's create a variable constant total and we'll make it equal to zero. And the next step is to loop through
this array and update the result. So down here, four brackets and curly brackets, and inside the round brackets
will create the loop variable, let I or index equals zero semicolon space and
we'll create the loop condition I less than numbs dot length and then
semicolon and the increment step I plus plus.
So as we learned earlier, this loop will go through
each index of this array. And now between these curly brackets, first let's use the
index to get each value. So we'll type numbs and
then square brackets and access the index I. And let's save this in a
variable using constant numb equals this value. And finally, we're going to
add each number to the total. We can type total and make it equal to itself plus each number. And remember, we have a shortcut for this, which is plus equals. And finally, since we're changing this total variable, we have to change from cons to let. All right, so after this loop, we should have added each number
in the array to the total. So at the bottom, let's console dot log the total and save and it will display five, which is the exact total of all
the numbers in this array. So that's the accumulator pattern. We first create a variable
to store the result, and then we loop through the
array and update the result. So notice that as we
loop through the array, we're adding or accumulating
the results into this variable. And that's why this is called
the accumulator pattern. And we call this variable
the accumulator variable. All right, let's do another example
using the accumulator pattern. Let's say we're given this array of
numbers again and we want to create a copy of the array where
each number is doubled. So if the array is 1, 1 3, we're going to create a
new array with 2, 2, 6. So at the bottom we'll create
some new lines and use the accumulator pattern. The first step is to create a
variable to store the result. Let's type const and let's name this numbs doubled and we'll make it equal to an array this time.
So notice in the previous example the accumulator variable was
a number. In this example, the accumulator variable is an array. So we can use different types of
values to accumulate the result. It all depends on the problem
we're trying to solve. So now the next step is to loop
through this array and update the result. At the bottom we'll create a four loop brackets and curly brackets. Inside the round brackets
will create the loop variable, let I equals zero and will create the loop condition I less than numbs dot length, and then the increment step i plus plus. And now between the curly brackets, we're going to get the number
at each index. So cons, numb equals numbs square bracket I, and then we're going
to update the result. So down here we're going to
add this number doubled to this array. So remember to add a value to an array, we can use the method push. So we'll type numbs doubled dot push brackets, and we're going to add to
this array the number numb multiplied by two. And now at the bottom, let's console dot log the result NUS doubled and save. So this second loop will create
an array where each number is doubled. So that's how we
solve this example. All right, now that we understand how to loop through
an array and the accumulator pattern, let's go back and we'll create the second version of our to-do list. So
when we add something to the list, it will appear on the page. Let's go to our code editor
and we'll open 11 to-do list html. And we're also going to
open the JavaScript file. So it's this one. And for the video I'm going to drag
it to the bottom of my code editor so that I can see the files side by side. So I'll close this for now and
I'll rearrange my windows a bit. Let's open the tab for this project. So we'll review what we have so far. We can click in this text
box and type A to do like make dinner and click add. And it will add this to do to this array, which is this array right here. We can type another to-do like wash dishes and click add and it will
add it to the end of the array. So now that we
have this array of to-dos, we want to display it
on the page. To do that, we're going to loop through this array
and we're going to create some HTML code for each to do and
then put that code on the webpage using the dom. So first, let's loop through this
array. To make this easier, let's make a copy of this array. So right click copy, and then here we'll remove
this and right click and paste.
So this will give us some default values to work with. So at the top, let's loop through this
array using a four loop. So we'll type four brackets
and curly brackets. And then inside the round brackets
we're going to create the loop variable, let I or index equal zero semicolon and the loop condition I less than to-do list dot length semicolon, and then the increment step I plus plus. So this will loop through
each index of this array. And then inside the curly brackets, let's get the string for each index. So we'll create a variable to save it, cons to do, and we'll make it equal to do list square brackets. And now for each to do, we're going to create some H T M L code. So we'll create a new line
and create a variable cons H T M L and make it equal.
And we'll create some H T M L code using this to do using a template string. And then inside will
create a paragraph element, so less than P, greater than, and then less than slash
p greater than inside this paragraph, we're going to insert this
to-do so we'll type dollar and curly brackets and to-do, all right, so now we're looping through this array. And for each to-do we
created some HTML code. And now we're going to combine all
of this HTML code together and put it on the webpage. To combine
this HTML together, we're going to use the
accumulator pattern. So at the top of the loop we'll
create a variable to store the result, let to do list capital H T M L, and we'll make it equal to
the empty string at the start. And then as we loop through the array, we're going to add this H T
M L to the variable up here. So let's create a new
line and we'll do to do list capital H T M L plus equals H T M L to combine all of this H T M L code together. So now after the loop, let's console dot log to do list H, T M L to see what we get. If we save, we took this array of strings
generated paragraph elements for each string and then
combine them all together. So now that we have all this html, we can put it on the page using the dom. So first let's create an
element where we can put this html. So inside the HTML file after the button, we're going to create a different type
of element called a diviv element. So what type less than
diviv, greater than. So the diviv element
represents a container. It's purpose is to contain
other elements inside like paragraphs, buttons, and even other divs. So in this situation, we can't actually use a
paragraph element because in HTML we cannot have a paragraph
inside another paragraph. So that's why we have to use
a div element here. For now, let's put some text inside this
element so we can learn more about it. What type text and save. So like the paragraph element, the
diviv element is a block element. That means it will take up an
entire line by itself and that's why it appears below the
text box and the button. Now one difference between a
diviv and a paragraph is that a paragraph adds extra space
above and below the paragraph, while a diviv does not add
any extra space above or below, so it doesn't have any default styling.
All right, so now that we learned the diviv, let's put this HTML
code inside this diviv. First we need to get this
element into our JavaScript. And to do that, we'll add a class to this element class equals js dash to do list. And then down here, let's scroll down and we'll put
this diviv element inside our JavaScript. We can do that using document dot query selector brackets and a string. And we'll type a.to select
a class and we'll select the class JS dash todo dash list. So this will get this diviv
element and put it inside our JavaScript. And then every HTML element
has a property called dot inner capital H T M L, which controls the H T
M L inside this element. And now to put the to-do list H
T M L into this diviv element, we're going to make the
inner h t TML equal to the to-do list html. And now let's save this file and also save the HTML file. So this code will take the
HTML that we created using the loop and put it
into the diviv element, and that's how we make
them show up on the page. So now let's try adding
another to-do we'll type watch YouTube and click add. And unfortunately this new
to-do doesn't show up on the page, and that's because
when we click add, it will run this add to-do
function and update the list, but we didn't actually
update the HTML on the page. So to update the html, we need to run all this code again. Every time we add a to-do so, let's create a function for
this code so we can reuse it. So at the top we'll create a function and let's name this render to-do list brackets and curly brackets. So the word render means to
display something on the page. So we'll put all of this code
into this function so we can delete this curly bracket.
And then at the end we'll type a closed curly bracket
and let's reformat this code by selecting these lines
and then press tab to add an indent. So now let's use this
function at the start. We'll display this to-do list on the page. So we'll call this
function by typing render to-do list and brackets. And then let's scroll down. Every time we add a to-do to the list, we're also going to
display the list again. So at the bottom render to-do list and brackets again. So if we save at the start, it will display the list on the page, and then if we add to the list like watch YouTube and click add, it will add it to the list and
also display it on the page. So that's how we create the second
version of the to-do list project. By the way, if we scroll up to
the render to-do list function, this technique is called
generating the H T M L. Instead of writing all the
H T M L by hand up here, we looped through an array
and we generated the H T M L using JavaScript. Let's take a break before continuing
with the rest of this lesson, here are some exercises you can do on
your own to practice what we learned so far. Now let's create the final
version of the to-do list. We'll go back to super simple.dev and then here we'll scroll down and
we'll create this final version. So in this version we
can type A to-do like make dinner, and we can
also add a due date. And when we click add each
to do will now have a name and a due date, and they will also have a delete
button that we can click to remove it from the list. So let's build this out
one feature at a time. We'll start by creating
this delete button. We'll go into our code and
remember we're generating the HTML for the to-do list. So for each value in the array
we create a paragraph element. So to add a delete button, we just have to add a
delete button inside here. So inside the paragraph
will create a less than button greater than and
then less than slash button greater than. And
then inside this button, we'll put the text, delete, let's save. And in the console you'll see
that the H T M L we generated now has a delete button inside the
paragraph and that's what shows up on the page. Next we're going to reformat this
HTML to make it a little easier to read. So we'll create some new
lines here and at the end, and let's put the content of the
paragraph on its own line like this and also put the delete
button on its own line. So remember that template strings have
a feature called multi-line strings. So this is perfect for
writing html code. Next, let's make our delete button do
something when we click it. To do that, we use the on click attribute as usual. So inside this button
we're going to add an on click attribute equals double quotes. And then inside
these double quotes, we can run some JavaScript
when we click this button. So this works the exact same
way as what we've been doing so far in this course. The only difference now is that
here we're generating this HTML using JavaScript. Okay, so when we click one of
these delete buttons, we want to remove this to
do from the list. Earlier. In this lesson we learn how to
remove a value from an array using a method called splice. So inside this on click attribute, we're going to type the to-do list dot, splice and brackets. So splice takes two numbers. The first number is the
index that we want to remove. So if we click this delete button, how do we know which index to remove?
Well, if we look at our loop up here,
we already have the index. It's this variable I, so we're going to insert I into
this string and we can do that by typing dollar curly brackets. And I now splice also takes another number, so we'll type comma. And the second number is how
many values we want to remove. So here we just want to remove
one value at this index. And finally, because we
updated the to-do list, we need to display the list
again on the page to display the list. We can use this
function render to-do list. So down here we're going to type render to-do list and brackets. Now if we save, you can see that in the
generated html when we click the first delete button, it will remove the value at index
zero, which is the first value. If we click the second button, it will remove the value at index one, which is the second value.
So we're basically generating all this HTML using a loop. So now if we click this delete button, it will remove it from the list and
then display the updated list on the page. So that's how we
create the delete button. Next, let's go back to super simple.dev
and we're going to create the due date feature. So first, let's create this date
selector in our html. We'll go to our HTML file. And then under the text box we're
going to add another input element. So less than input, greater than, and to make it a date selector input
elements have an attribute called type. So this attribute determines
what kind of input it is. If the type is text, which
is the default value, it's going to be a text box. Now if we change the type to date and save, it's going to
create a date selector. Now let's go back into our JavaScript
code and first we're going to scroll up and remember that right
now our to-do list is just an array of strings, but this time each to do is
also going to have a due date. So how do we group the name
and the due date together? We can do that using an object. So here instead of just a string, we're going to create an
object and we'll give it a name property, which is make dinner
and we'll give it a due date property and we'll
make the due date a string. So you can type whatever date
you have on the page for me. It's 2022 dash 12 dash 22, and I'll end this object
with a curly bracket. And I'll turn this second to
do into an object as well. So open curly bracket name and do date 2022 dash 12 dash 22 and closed curly bracket. Now that each to do is an object, we
need to update the rest of our code. Let's scroll down and we'll
start with the render function. So here inside the loop each
to do is no longer just a string, it's an object. So let's change this variable name to do object to make it more clear. And now we need to get the
name and due date out of this object. So type cons, name equals to do object.name and cons, do date equals to do object dot due date. And now instead of inserting
to-do, which no longer exists, we're going to insert the name And we're also going to insert the do date if we save. Now each to do will
also display a due date. Before we continue, we're going to review a shortcut
we can use with objects called destructuring. So here you'll notice the variable
name is the same as the property name. We actually have a shortcut
for this using cons, curly brackets, name equals to do object. So this is called destructuring. This takes the name property out of
the object and puts it in a variable also called name. And this is a shortcut for this
line up here so we can comment out this line. We can also use multiple
properties in this shortcut to also take the due date out of the object. We can just add a comma and do date. So this will do the same thing as
this line of code and we can comment this out if we save everything still works. Next, let's scroll down and we're
going to update our add to do function. So this time when
we click the add button, we're going to get the name and the
due date and put it into our list. So let's get the due date out
of this date selector first. We can do that using the
dom like we did here. So let's add a class attribute
so we can get it using query selector js dash do dash date dash input. And then down here let's create a variable constant date input element and make it equal to document dot query selector and a string dot. And then the class we want to select, which is this class js dash do dash date dash input. So this will get the date selector
element and put it into our JavaScript. And now below this, let's get
the due date out of the element. We can do that using the
value property again. So let's create a variable first, constant due date and we'll make it equal to the date input element dot value. So this will get the date that we
selected and save it in this variable. And now when we add a to-do
to our list instead of just a name, we're going to add an object. So open curly bracket
Will add a name property and the value will be the
name variable up here. So name and then comma and a due date property. And the value will be this
due date variable up here. So do date and then a closed curly bracket. And remember that objects
also have a shortcut for this. If the property and the
variable name are the same, we can just type it out once like this will do the same thing as this line above. Same thing with the second line. If the property and the
variable name are the same, we can just type a comma
and type it out once. This is called the
shorthand property syntax. So these two lines do the same
thing as these lines above. So we can comment this out
using double slash and double slash. So that's all the code
that we needed to update. Now let's save our JavaScript
file and we'll also save our HTML file. And let's go to our project. We'll add a new to-do like watch YouTube and select a date and click add and scroll down. You can see that it added our
new to-do with a name due date and a delete button. If we
click this delete button, it will remove that to-do.
If we click this one, it will also remove the correct
to-do and that's actually all the functionality that
we need for this project. So let's go into our code and we're
going to clean up by removing the console dot log here and the console dot log up here And save. Finally, let's add CSS to our project. To make it look like the final design,
We'll go into our code editor and scroll to the top. And instead of writing
all the CSS in here, let's put the in a separate
file, just like our JavaScript. So we'll click here to show our files and then find the styles folder. And we'll click the styles
folder and click this icon to create a new file inside. And we'll name this file 11 dash to-do dash list dot css and press enter. And for the video I'm going to
take this CSS file and put it at the bottom of my code editor so I
can see these files side by side. And now I'll click here to close it and we will load this CSS into our html. To do that we can use a link element. So inside the head section, let's type less than link greater than, and we're going to give it two attributes equals style sheet and href equals the file that we want to load.
So we created this in the styles folder, so we'll type styles
and then a slash to go into the folder and
we'll load this file 11 dash to-do dash list dot css and save. Now let's style our project one by
one until it matches the final design. We'll start with the text on the
page, we're going to change the font. So in here, let's type body curly brackets and then we'll change the font dash family colon, aerial and save. So that looks pretty good. Now let's work on styling
the to-do list first, let's add some more to-dos to the list. So we'll type watch YouTube and then we'll select
a date and click add. And we're going to learn how to
style our list to look like this. So notice that this list
creates a sort of grid. We're going to create this grid
using a feature called CSS grid. So let's go into our HTML first, we're going to add a class to this
diviv element, so we can style it to dash grid. And let's save. And inside our css, we're going to style
this class using.to do dash, grid and curly brackets.
And to turn this into a grid, we're going to use the
property display and grid. And we're going to add
another property called grid dash template dash columns. So this basically sets how
many columns are in our grid. The number of values that we
give it is the number of columns. For example, if we give it 200 pixels, one 50 pixels and 100 pixels, this will create three
columns in the grid. The first column will be 200 pixels. The second column will be one 50 pixels, and the third column will be 100 pixels. And now each element inside this
div will go into the columns. So the first element will
go in the first column, second element will go in
the second column and the
third element will go in the third column. If we have
more than three elements, it will wrap around and create a new row. So let's save. And unfortunately that didn't
quite work and that's because if we go back to our Java script, remember that each to-do
is one paragraph element. So this entire to-do with the
name due date and delete button will go inside the first
column and then the next entire to-do will go inside the second column. But what we actually want is for
the name to go in column one, due date, column two, and
delete button column three. To do this, we're going to separate this element
into three elements so that each element will go into each column. So instead of one paragraph, let's actually use a diviv
element. So less than diviv, greater than, and less than
slash diviv greater than, and in between will insert the name. So the reason we used a diviv element
is because diviv elements don't have any default styling, so it's a little easier to
style with CSS for the due date. Let's also create a diviv element, so less than diviv and then at the end, less than slash diviv greater than. And finally for the delete button,
we already have an element. So let's just reformat these lines. We'll select these lines and
then press shift tab To remove the indent, let's remove the extra line. And we basically separated
each to do into three elements. If we save, now the grid is working because
this element goes into the first column. This element goes into the second
column and the button goes into the third column. And that's how we lay out these elements
in a grid like the final design. Next, let's also layout out the inputs
and the ad button in a grid. We'll go to our HTML and
let's put these three elements in a diviv. So we can use grid. So we'll create a less
than diviv graded than. And then inside, let's remove this and
we'll add it at the end less than slash diviv. And let's reformat these lines
by selecting them and then press tab to add an IND debt. And now let's make this
diviv a grid as well. Let's go back to our CSS and
we'll add a class to this diviv class equals let's call it to do dash input dash grid. And instead of writing all the css again, we can use a feature of css. So here we're going to
type a comma and enter. So when we type a comma, we can style multiple
classes at the same time. So we're also going to style.to do dash input dash grid if we save the CSS file.
And let's also save the HTML file. Now the input and the add button
are also laid out in the same grid. Next, let's adjust the
spacing inside our grid. So grid has some properties
for this, we'll go to our css, press enter, and we'll use the
property column dash gap. So this sets the spacing
between the columns of the grid. So let's make this colon 10 pixels and save. So now it will add 10
pixels between each column. Let's add some spacing
between the rows as well. And grid has another property for this row dash gap, colon 10 pixels and save. So that will add 10 pixels
of space between the rows. Now notice it didn't add
space between these two rows, and that's because these
two are separate grids. This is the to-do list and
this is the to-do input grid. So to add space between them, we're just going to use
margin at the bottom will style.to do dash input dash grid, and we'll just add some
margin under this grid. So margin dash, bottom colon, 10 pixels, and save. All right, now let's move on to
styling the inputs and the buttons. We'll start with the inputs first, let's add a class so
we can style them here. Let's add a class name, dash input. And down here, let's
also add another class. Do dash date dash input. Let's save. And now insider css while
style, both of these inputs. So a style.name dash input curly brackets. And first
let's make the text bigger, like the final design. We'll set the font dash size colon, 15 pixels and save. Okay, so that looks pretty good. Now let's add spacing on
the inside of this input. So we'll add padding, six pixels and save. And that looks pretty good. Let's
move on to the due date input. So we actually want the same
styles as the name input. So again, we can use that feature of c s s.
We'll type a comma and then.do dash date dash input. So now these styles will be
applied to this class and to this class. Let's save. And that looks pretty good to me. Let's move on and style the buttons. We'll go into our HTML
and find the add button. Let's add a class so we
can style it and we'll use add dash to do dash button. Let's save. And then inside our CSS
will style that class using dot add dash to do dash button curly brackets. And let's start with the
background color will set the background color, colon, green and save. Now let's do the text color, color colon, white and save. Now let's remove the border
around our button using border colon. None save. And let's make the text a little bigger. So we'll do font dash size, colon, 15 pixels and save. And the last thing we'll add is when
we put our mouse over the button, it turns into this pointer icon.
We can do that using cursor, colon, pointer and save. Next, let's dial the delete buttons. So these delete buttons are
created in our Java script. We'll go into our JavaScript
file and then here, let's add a class to each of the
delete buttons so we can style them. So we'll add class equals double quotes and then delete dash to do dash button. Let's save. And then inside our CSS at the bottom we'll style dot delete dash to do dash button curly brackets. And let's start
with the background color. So we'll set background dash color colon. And for this design I
use the color dark red and save. So that will
style our delete buttons. Now let's change the text color to white. So we'll use color colon, white and save. Now let's remove the border using border colon. None save. And let's also make the text bigger using font dash size colon 15 pixels save. Let's add this pointer icon using cursor, colon pointer, save. And let's add some padding at
the top and bottom of the button. So we'll add padding dash top colon 10 pixels and padding dash bottom colon 10 pixels and save. So that's all the styles we
need for the delete button. And we can also close the
console to see the entire list. However, now we have another problem which
is this text and this button are not vertically aligned
in the center to vertically align in the center. We're going
to go back to the grid styles. So we'll scroll up to the to-do grid and css grid has another
property for vertical alignment and that is align dash items colon center to vertically align in the center. If we save, now the text is aligned with the button, but now we have a new problem. Our ad button is no longer stretching
to be the same as the inputs. So by default align items is stretch. That's why this button
stretches to match the inputs. And now that we changed
it to align center, it's no longer going to stretch.
So to solve this problem, we just have to make this grid stretch. So down here in the
to-do input grid styles, we'll change a line dash items back to stretch and save. And that will cause this grid at
the top to stretch vertically again. And that's it. That's all
the styling that we need. And now we've finished this to-do
list project. In the rest of this lesson we're going to learn
more details about arrays and loops. So I'm going to put this
back in the same window and I'll rearrange this window. And now let's go back to
11 arrays and loops dot html and we'll open the tab for that file and we can also close
these other files for now. And first, let's comment
out the previous code using slash star and at the bottom star slash and we'll scroll down and save. The first detail we're going to
learn is that arrays are references. So in the object lesson we learn
that objects are references. Arrays work the same way. So for example, if we create an array, constant array, one equals the array 1, 2, 3. This variable doesn't actually
contain the values. 1, 2, 3. This array is saved somewhere
in the computer's memory. And this variable only contains a
reference that points to where this array is in memory. And that means if we create
a copy of this variable, cons array two equals array one, array two doesn't contain
a copy of the values, it actually just contains
a copy of the reference. So now both of these variables
are pointing to the same array. So if we did array two, push
Four, and then we console dot log array one and we console log array two and save, It will show us that even though
we added four to array two, array one and two were both modified. And that's because arrays are references. So both of these point to
the same array in memory. To avoid this behavior, we can create a copy of the
values in the array using a method called slice. So here if we did array one dot slice instead, this will make a copy of
the values in array one. And now these two variables
point to two different arrays. If we save, now you'll see that this
line only affected array two. The second detail we're going to learn
is a shortcut called destructuring. So at the bottom here,
let's create a new array. Cons array three equals the array. 1, 2, 3. And let's say we want to get the
first value and the second value out of this array. One way to do this is to
use the index like this. Another way is to use a
shortcut called destructuring. So here we're going to replace
this with square brackets, and now we can type some variable names. If we type first value, it will take the first value and
save it in a variable called first value. If we type and second value, it will take the second value
and save it in this variable. So this is an easier way to
get values out of an array and save them inside a variable. Next we're going to learn
more details about loops. So loops have two features
called break and continue. Break lets us exit a
loop early. For example, let's create some new lines and
let's create a loop that counts from one to 10. So as usual, we can use a four loop let I equals one I less than or equal to 10 and i plus plus and will console dot log I and save. So this will count from one to 10. So now let's say that when I is eight, we want to stop this loop early. So first let's check if I is equal to eight. If it is equal to eight, we're going to stop this
loop by typing break and semicolon, if we save once this reaches eight break
will cause this loop to stop and now it only counts up to eight. So that's the break feature of a loop. It lets us stop a loop early. The next feature is
called continue. Continue. Let's us skip one iteration
of the loop or one run of the loop. For example, let's say we want to
skip the number three. So at the top we can check if I is equal to three. And if it is, we can
use the code continue. This will skip the rest of this
code and go back up to the top of the loop. And do I equals four? If we save, this will skip three in the loop. So continue, let's us skip one iteration of the loop.
So now let's say that we want to skip a number.
If it's divisible by three, divisible by three means the number
can be divided evenly into three. For example, three and six are both divisible by three, but seven is not divisible
by three because there's one remaining. This is called the remainder. And we can calculate the remainder
using the remainder operator, which looks like this. So to check if a number
is divisible by three, we can check if the remainder is zero. So here we're going to replace this with I remainder three and we'll
check if the remainder is equal to zero. If we save, this will skip three and
six because they're both divisible by three. Next, let's use continue in a wild loop. So at the end here we'll
create some new lines and let's say we want to count
from one to 10 using a wild loop. So we'll create a loop variable, let I equals one, and we'll create a wild loop I less than or equal to 10 curly brackets. And the increment step I plus plus and inside the loop will just console dot log I and save. So this will count from one to 10 again. And let's say we want to not count
numbers that are divisible by three, so three, six, and nine. So at the top here we can check if I remainder three is equal to zero and curly brackets. And we might just try
to do continue. However, in a wild loop continue will
actually skip the increment step and this will cause an infinite loop. So when using continue in a wild loop, we have to do this
increment step manually. So before continue we have to do i plus plus to avoid an infinite loop. If we save, it will skip the numbers that are
divisible by three, which is three, six, and nine.
So remember in a wild loop if we use continue, always do the increment step
manually in a four loop. However, the increment step is done
automatically after every iteration. All right, the last detail we're going to learn
is how to use loops with functions. So let's say we have an array of
numbers and we want to create a copy of this array where
each number is doubled. So we already have the code for this, we can scroll up and the
code for this is here. So let's actually make a copy
of this code from before. We'll right click copy and scroll down here. And at the bottom right click and paste at the top, let's create an array called numbs. So cons, numbs equals array, and one, one and three. If we save ave, this will create an array
where each number is doubled. Now what if we wanted to use this
loop on a different array other than one, one and three? We can do that using a function. So let's create a
function around this loop. We'll create function, let's name it double array brackets and curly brackets
will remove the closed curly bracket. And at the bottom we'll
add it back and we'll select these lines
And press tap. So now instead of doing this loop
on the same array every time, we can turn this into a
parameter. So at the top here, we'll create a parameter called numbs, and we're going to delete this line and we're going to loop
over this parameter instead. So at the bottom we can
call our function using double array and brackets. And between the brackets we're
going to save an array into nus. So square bracket one, one, and three. If we save, this will do the same thing as before, but now because it's in a function, we can use this loop with
any array, not just one, one and three. So at the end we can do double array brackets and an array 2, 2, 5 this time and save. And it will create an array
where these numbers are doubled. So using a function, we can
reuse this loop for any value. Another feature of using a
function with a loop is that we can break out of this loop
using a return instead. So first, let's actually use
a return in this function. Instead of console dot
log, we're going to return. Now numbs doubled, And here we're going to
console dot log the result console, dot log and console dot log and save. So this does the same thing as before, except we're returning the result
and console dot logging outside of the function. Now let's say
that if we see the number zero, we want to stop this
loop early. To do that, we can click here and check if numb is equal to zero. And if it is, we can
break out of this loop. Now when we're inside a function, we can also use a return statement
to break out of this loop. So we can also do return numbs doubled. So a return statement will
end this function immediately. So this is another way of ending the loop. So down here if we add the number zero and then five and save, you'll notice that the loop stops
when we see the number zero. So return is another way of
breaking out of a loop when it's inside a function. And that's
the end of this lesson. In this lesson we learned about array, which represent a list of
values. We learned about loops, which led us run some code over
and over, just like a loop. We learned a technique we can use with
loops called the accumulator pattern, and we used it to create
a to-do list project. We learned that arrays are references
and the destructuring shortcut, and we learned more features
of loops like break, continue, and using
loops inside a function. Here are some exercises to help
you practice arrays and loops. In this lesson we're going to learn
some advanced features of functions and we're going to use them to
improve our previous projects. First, let's create a
new file for this lesson. We'll go to our code editor
and click here to show our files. And click here to create
a new file and we'll name this 12 dash advanced functions HTML and press enter. Now let's copy 11 arrays
and loops into this file. So we'll click here,
control A or command A, and then right click copy. And in here, right click and paste. And we can close this for now
and let's prepare this file for this lesson. So we'll scroll up and change the title to advanced functions. And let's remove all the
JavaScript code from before. And now let's save and open
this file in the browser by right clicking open with live server. Now let's also open the console on
this page. So we'll right click, inspect and open the console. And now we can close the previous tabs as well as the previous files. And now we're ready to begin. So first we're going to
review how to use functions inside the script element. Let's create a function
using the word function. We'll give it a name, greeting brackets and curly brackets. And inside the function
we'll type the code console dot log the string. Hello. So this is a function
and it lets us reuse code to run the code. Inside this function we
can type the function name, which is greeting, and then brackets if we save this line of code will run the
code inside the function and display. Hello. This is known as calling the
function or running the function. So now that we understand functions, we're going to learn an
advanced feature of functions, which is functions are values. So we learned many types of values
in this course, like numbers, strings, and bulls. And we can save a value in
a variable. For example, let's create some new lines
and will create a variable constant numb equal two. So this will save the value
to inside the variable numb. Now functions are also values
and this means just like a number, we can save a
function inside a variable. So let's give it a try. We'll create a new line and type const function one and we'll make this equal to a function this time. So we'll just type function and a name, greeting brackets and curly brackets and inside the function
we'll type console dot log the string. Hello two. And we'll put a semicolon at the end
since we're saving in a variable. So this variable now contains a function. We're using the exact
same syntax as before, except we're just taking this
function and saving it in a variable because functions are values. So now that this function
is inside this variable, let's actually console dot log it. So well console dot log function one and save. And this will show us that the
variable function one actually contains this function. Now on a new line we can also do console dot log and check the type of function one and save. And it will tell us that the type
of this variable is a function. So as you can see, a function is just another type
of value and we can save it in a variable. We can also run the function
inside this variable by typing the variable name function one. And because this contains a function, we can actually just
call it using brackets. So this will run the code
inside this function if we save it. Displays. Hello two. Now let's do some cleanup
in this code in JavaScript. As long as there's a way
to access a function, this function name is not needed. So here we can access this
function using this variable. So this function name is not needed
and we can actually just delete it like this. And now this is called
an anonymous function, which means a function without a name. Now an interesting thing to know is
that the function syntax that we've been using this entire course up
here is actually a shortcut for this code. Now even though this syntax uses
var and we usually don't recommend var, this syntax actually
has a couple advantages. Number one, it's easier
to read. And number two, it gives us a feature called hoisting, which means we can call
dysfunction greeting brackets before we create it in the code. So using hoisting, we don't have
to worry about what order we write. This code hoisting doesn't work
when we create our function and save it in a variable like this. So in JavaScript functions are values, and just like any other value, we can save it in a variable.
Now let's think, what else can we do with a value? Well, we can save a value in
an object, for example, let's scroll down and
create some new lines and will create an object. Constant object one equals curly brackets and inside
this object will have a property numb with the value two. So this saves the number
two inside this object. Now because functions are values, we can also save a function
inside this object. So we'll type comma
and then a property fun colon. And we'll create
a function this time function greeting brackets and curly brackets. And inside what type console dot log the string. Hello, three. So this saves a function
inside this object under the property. Fun. Now to
access this function, we just use the dot notation as normal. So object one.fun. And because this value is a function, we can call it using brackets if we save, this will run the code inside
the function and display. Hello three. So remember this is called a method. When we have a function
saved inside an object, again, as long as there's a way to
access this function, for example, using object one, fun, then we don't this function name. So we'll delete it and
use an anonymous function. Now let's think, what else
can we do with a value? We can pass a value into
a function. For example, down here let's create a function function dis display brackets and curly brackets. And we'll give
this function a parameter. So in here we'll create a
parameter and name it parameter. And inside the function we can use
a parameter just like a variable. So we'll console dot log the peram, and then down here, let's call this function using display brackets. And two, this will take the value
two, save it inside, and then we can use it just
like a variable. If we save, this will display two in the console. So this is known as passing a value into a function. Now because
functions are values, we can also pass a
function into a function. So let's give it a try. Down here we'll create a new function function, run brackets and curly brackets. And this function will
also have a parameter, let's call it per and down here we'll call this function run brackets. And between the brackets we're going
to give it a function this time. So we'll type function brackets and curly brackets, and inside the function
will type console dot log the string.
Hello, four. So this will take this
function and save it inside. And now up here we can use
peram just like a variable. So we can type peram. And because peram contains a function, we can actually just
call it using brackets. If we save, this code will run the function
that we created down here and display. Hello four. So this is called passing
a function into another function. The function that we're passing
in is called a callback function or a callback. So to summarize, functions are values. Anything we can do with a value
we can also do with a function. Now let's do some practical examples. Using functions as values, we're going to learn a feature
of JavaScript called set timeout. Set timeout allows us to run
a function in the future. First we'll comment out
the previous code using slash star and at the bottom star slash and let's create some new lines and we're going to type
the code set capital T time out. So set time out is a built in function. So we can type brackets
to call this function. Now set timeout takes two
parameters inside these brackets. The first parameter is a function
that we want to run in the future. Let's create a function brackets and curly brackets. And inside this function
let's type console dot log the string time out. So here we're using a function
as a value and we're passing it into another function. At the end we'll type a comma
and we'll give set timeout a second parameter. The second parameter is how long to
wait before running this function. So this is a number in milliseconds, 1000 milliseconds is equal to one second. So if we type 3000 milliseconds, this is equal to three
seconds. So set time out, we'll wait for three seconds
and then call this function. If we save after three seconds, it's going to display
timeout in the console. So that's set timeout, we give it a function and it
will call this function after a certain amount of time. So now we're going to learn an important
concept called asynchronous code. So after set timeout, let's type console dot log the string next line and save. So notice that it displays next
line first and then after three seconds it displays timeout.
So what's happening here? Why are they reversed? Set? Timeout sets up a timer and
after three seconds it will call this function. However, it doesn't actually wait for
the three seconds to finish, it just sets up the timer and
immediately goes to the next line. So that's why this line
is displayed first. So this is called asynchronous code. Asynchronous code means the
computer won't wait for this line to finish before going on to the next line. So for set timeout, it'll just set up the timer and then
immediately go to the next line. Synchronous code on the other hand means
the computer will wait for one line to finish before going to the next line. So all the code we've written in this
course so far has been synchronous code. In addition, all the code inside this function
is also synchronous code. So if we added console dot log the string timeout two and save the code inside the function will still run line by line.
It will wait for each line to finish before going to the next line. And after three seconds it will
display timeout followed by timeout two. So don't worry, all the code that we normally
write will be synchronous code, it will run line by line as usual. The only time that code becomes
asynchronous is when we use certain features of JavaScript like set timeout. So set timeout is the only
part that is asynchronous. Now the advantage of set timeout
being asynchronous is that it doesn't block our code for three seconds
waiting for this timer to finish. It just sets up the timer
in the background and then
goes to the next line of code. So this allows our code to do other
things while this timer is running in the background. And this is
similar to real life. If you set up a timer on your alarm clock, you're not going to stop and
wait for the timer to finish. You're going to go and do something else. Asynchronous code is
the exact same concept. Next we're going to learn a similar
function to set timeout called set interval. So at the bottom let's type the code, set, capital I interval and set interval is
another built-in function. So we can call it using brackets. And set interval takes the same
two parameters as set timeout. The first parameter is a function
that we want to run in the future. So let's type function brackets and curly brackets and
inside will type console dot log the string interval. Now let's add a comma and the
second parameter is also a number in milliseconds. So we'll type 3000
milliseconds or three seconds. So set interval will run this
function three seconds in the future, but this time it will keep running
the function every three seconds. If we save in the console every three seconds, it will run the function
and display interval. So set interval is also asynchronous. Below it if we type console dot, log the string, next line two and save it will set up the interval and
then immediately go to the next line and display next line two.
So that's set interval. We give it a function and it will
keep running this function after a certain period of time. So now let's do a project
using what we learned so far. Let's go to our browser and we'll
create a new tab at the top. And here, let's type super simple dev slash projects slash advanced dash functions and press enter. So this is basically the rock paper
scissors game that we created earlier, except this time it has an
extra button called autoplay. If we click this button every second, the computer will play by itself. So this feature will help us
practice using set interval. So first let's make a
copy of the project files. We'll go into our code
editor and click this icon to show our files. And let's make a copy of 10
rock paper scissors for this lesson. So we'll right click copy and down here, right click and paste. And I'll stop this for now. So here we're going to change
the name by right clicking rename. We'll remove copy at the end
and at the beginning we'll change it to 12 and press enter. And let's also make a copy of
the Java script and CSS files. So we'll click this file
and right click copy and then click the
folder right click paste and we'll rename this
file right click rename, remove copy at the end and
at the beginning change it to 12 and press enter. And let's also make a
copy of the CSS file. Select it right click copy, click the folder, right click and paste. And right click rename, remove copy, and at the front change
it to 12 and press enter. Now let's scroll down to
12 rock paper scissors. And I'll close this for
now and inside the head, let's change this to load
12 rock paper scissors. And we'll scroll to the bottom
and here instead of the lesson 10 file, we'll load the
lesson 12 JavaScript file. Let's save and we'll open
this in the browser by right clicking open with live server. So now we're ready to begin. Let's go back to super simple.dev. And the first thing we're going
to create is this autoplay button. So beside the reset score
button, which is here, we're going to create a new button, less than button, greater than, and inside will have the text auto plate. Let's save and go back to our tab. And now we have this button. So next, let's style this button with css. So we'll give it a class class equals auto dash play button and save. And now let's open the CSS file. I'm going to take this file and then
drag it to the bottom so I can see it side by side. So I'll close this for now and
rearrange this a little bit. And then down here, and we're
going to style the autoplay button. So let's just make the style the
same as the reset score button. So in the CSS we'll scroll down to the reset score button styles. So we'll add a comma at the end and type.auto dash play dash button. So now these styles will apply
to the class reset score button and the autoplay button. If we save, now we styled our project. So next, let's make this button interactive. So at the top here we'll add an on click attribute. And then in here we're going
to run some JavaScript code. Let's actually create a function so we
can separate the JavaScript into its own file.
So we'll run a function called autoplay and brackets. So now let's save. And right now this function doesn't exist, so we have to create this function
in the JavaScript file. So for me, the file's right here, I'll select it and then drag it down
here so I can see it side by side. So let's scroll down and I'm going
to create it just above the play game function. So here we'll create some
new lines and type function, auto play brackets and curly brackets. And now inside this function we
want to play the game every second. So we can use set interval to
run some code every second. So let's type set interval brackets and inside the
brackets will give it a function that we want to run. So brackets and curly brackets. And then at the end let's
type a comma and we'll give it 1000.
So this means it will run this function every 1000 milliseconds or one second. And now inside this function we're
going to automatically play the game. And to play the game we can use
this function right here. Play game. So here we'll type play game brackets. Now we need to provide this
function with a player move. And remember we have another
function pick computer move, which will give us a random
move. So above this line, let's create a variable cons player move and we'll make it equal and we'll pick a random move using pick, computer, move and brackets. And finally we'll take this move
that we picked and pass it into this function. So player move. So now when we click this button, it should play the game every second. Let's save and click autoplay. And it works. The computer is
playing against itself every second. So now let's make this button stop
playing when we click it again. So at the top let's create
a variable to keep track of whether or not we're playing. So we use let is auto playing, and at the start we'll
make it equal to false and save. And now inside this function, what check using an if statement, brackets and curly brackets.
And inside this condition, let's check if we're not playing, so not is auto playing. So if we're not playing then we
want to start playing the game, which is this code down here. So let's select this
code and then right click cut and in here, right click and paste. And also after we start playing the game, we're going to change
this variable to true. So is auto playing and will make it equal to true
because now we are auto playing. So now let's add the ELs
branch to this statement else curly brackets. So now we need to stop this
interval. So how do we do that? The answer is that set interval
actually returns a number and this number is like an id. We can use this ID to stop the interval. So at the front let's create
a variable to save this id d constant interval ID and equals. However, there's another problem here. Every time we run the function
we're going to get a different id. So in order to save the ID from last time, we need to put this variable
outside the function. So let's select this and
remove it for now. And we'll scroll up. And here we'll create the variable let interval ID and we'll leave it undefined to start. And now down here we're going to
save the return value into this variable by typing interval ID equals set interval. And now at the bottom we're
going to use the interval ID to stop the interval. Let's scroll down. And to stop an interval we can
use a function called clear interval. So we'll type clear capital I, interval and brackets. And between the brackets we're going
to give it an ID that we want to stop. So we'll give it this interval id, interval id. And then at the bottom let's
also change is autoplaying to false because we just stopped it. So is auto playing equals false and save. So now if we try out this button, it will start playing the game by
itself every second. And if we click the button again, it will
stop playing the game. So that's how we stop an interval. We need to save the ID and
then call clear interval with this id. So now I'll up the code a little
by removing this extra line and save. And now we're
finished with this feature. So next let's go back to
our advanced functions file. So I'll click up here and
then at the bottom I'll open 12 advanced functions and hide the files for now. And we're going to learn some more
features of functions as values. So let's actually close the
other files that we opened. And first let's comment
out the previous code with slash star. And at the bottom star slash let's scroll down and save. And let's open the tab for this file. So now we're going to learn another
way to loop through an array. First let's create an array. We'll type square brackets and
inside the array we'll have the string make dinner and another string wash dishes. And another string watch YouTube. So in the previous lesson we
learned how to loop through an array using a for loop or a wire loop. Another way to loop through an
array is using a method of the array called four each. So at the bottom let's type dot four capital E each and brackets. So this is the four each
method and it allows us to loop through this array. Inside these brackets we're going
to give for each a function. So we'll type function brackets and curly brackets. So again, we're just passing a function
into another function. However, this function
will be a little different. We're going to give it a parameter. So up here let's create a parameter called value. So what for each does is that
it loops through the array and for each of these values it
will save the value in the parameter and run the function. So let's console dot log value and save. So this will loop through the
array and display each value in the console. So let's go
through this step by step. So it'll take the first value, save it in this parameter
and run the function. Then it will take the second value, save it in the parameter
and run the function. Then it will take the third value, save it in the parameter
and run the function. So the four each method is actually
the preferred way to loop through an array because this is easier
to read than a four loop like this.
And four each also has another feature. We can give this function a
second parameter so we can type comma. And the second parameter
is the index or the position of the value in the array. So for the first value index will be zero. For the second value index
will be one third value, index will be two, and so
on. So above this line, let's also console dot log the index and save. And this will also display
the index of each value. All right, now let's do a practical example
using the for each method we're going to go back to the to-do list
project that we created in the previous lesson. So we'll click up
here to show our files. And let's scroll up
and let's open 11 to-do list dot js. So in this code we used a for loop
to display the to-do list on the page. We're going to switch this to
using A for each method instead. So first let's actually make a
copy of the files for this project. We'll click up here and let's click 11 to-do
list and right click copy. And let's click the script folder, right click and paste. And now we'll rename this
by right clicking rename. Remove copy from the end
and change the beginning to 12 and press enter. Let's also make a copy of the
CSS and HTML file for this project. So we'll click this CSS file, right to click copy, click the styles folder,
right click and paste, right click rename, remove copy, and at the front change
it to 12 and press enter. And finally we'll scroll down, click 11 to-do list dot html, right click copy. And then down here, right click and paste, right click rename, remove copy at the end and
at the beginning change it to 12 and press enter. Now we can hide these files and we can close the lesson 11 files. And now here we're going to
change the CSS file that we load to 12 to-do list and we'll scroll down and we'll also change the JavaScript
file that we load to 12 to-do list. Now let's save and we'll open this in the
browser by right clicking open with live server. Okay, now let's go back to the JS file. So I'll take this file
and drag it to the bottom and I'll rearrange the windows here and we're going to scroll down and we'll
change this four loop to use a four each method. So first, let's type above this four loop
and we'll type the array that we want to loop through, which is to-do list and we'll type dot and use the four each method and brackets inside the brackets
we'll give it a function that we want to run for each. To do so we'll type function brackets and curly brackets. And this function can have two parameters. The first parameter will
contain each value in the array. So we'll call it to do object, we'll type a comma and the
second parameter contains each index in the array. So
we'll just call it index. And now inside this loop we basically
want to do everything that we did here. So let's just
make a copy of this code, right click copy, and then up here inside
for each right click and paste. So now if we scroll up, we already have the to-do object up here, so we don't need to get it
from the array like before. So we can remove this line
and let's also remove these comments. The other thing we have to change is
that previously we were using I for the index, but now the index is called index. So we just changed this to index. So that's how we use a for each
method instead of a four loop, if we compare this code to the
four loop that we had before the four, each method is easier to read. So for the rest of this course we're
going to prefer to use four each instead of a four loop. So we're
going to remove this four loop. Let's scroll back up and save and the project still works. So that's a practical example
of using the for each method. Now let's go back and learn some
more details about for each. We'll close the JavaScript
file for now and go back to advanced functions dot html
and open the tab for this file. So in the previous lesson we
learned a feature of loops called continue. Continue let's us skip to the next
iteration or the next run of the loop for each methods don't have continue, but we can do the same thing
with a return statement. So let's say in this loop we
don't like washing dishes. If the value is wash dishes, we're going to skip it and
not display it in the console. So above we'll create an if statement and then inside the condition
we'll check if value is equal to the string wash dishes. And then in the curly brackets, if it is equal, will return and semicolon. So this return statement will end
this function early and it will go on to the next function. So it basically does the same
thing as continue in a for loop. If we save, you'll notice that it's
skipped wash dishes. In the previous lesson we also learned
a feature of loops called break. Break lets us exit a loop early. Unfortunately there's not an easy
way to break in a four each loop. So if we need to use break
to exit this loop early, then it's better to use
a regular four loop. Let's take a break before continuing
what the rest of this lesson here are some exercises you can do on your own
to practice what we learned so far. So next we're going to move on
and learn a shorter way to write functions called arrow functions. So let's go to the bottom of this code, we'll create some new lines
and let's create a variable cost and we'll name the variable arrow function and we'll make it equal to brackets equal greater than or an arrow. And then curly brackets inside the curly brackets
we'll type some code console dot log brackets and the string, hello. And we'll put a
semicolon at the end. So this is an arrow function. It works the same way as a
regular function. For example, we can call this arrow function
by typing the variable name arrow function and brackets. If we save, this line of code will run the
code inside this arrow function and display. Hello. So arrow functions mostly
work the same way as regular functions. So to compare them, let's actually type above this
code will create some new lines and type const regular function equals the word function. Brackets and curler brackets, console dot log string. Hello. So these two syntaxes do the same thing. The difference is that instead of
using the word function and arrow function just uses an arrow. Now parameters work the same
way in an arrow function we just type the parameter between
these round brackets. So here let's type per and here as well. If we want multiple parameters, it also works the same
way up here we can type two and down here two. And finally, return statements also work the same way. So in this function we can return five and in the arrow function
we can also return five. So now let's learn some differences
between these two arrow functions have a few shortcuts that
regular functions don't have. For example, at the bottom let's create
an arrow function using cons and we'll name it one peram and make it equal
to an arrow function, brackets, arrow and curly brackets. Now in this arrow function we're
going to give it one parameter per and inside the function will console dot log peram plus one. So when an arrow function
only has one parameter, these round brackets are optional
so we can actually remove them if we do one per brackets. Two, if we save it will display two plus one, which is three. Let's
learn another shortcut. We'll create some new lines and type cons. One line and make it equal to an arrow function racks arrow and curly brackets and inside will return two plus three. So when an arrow function
only has one line like this, we can actually put it on
the same line as the arrow. And now that everything's
on the same line, the curly brackets are actually optional. So we can remove them and we can
also remove the return statement. So this is a one line arrow
function. If we just have an arrow, it will automatically return
the result on the right. So at the bottom we can console dot log and call the one line function with brackets. If we save this function will return two
plus three and it will display five in the console. So
that's arrow functions. It's a shorter way of writing a
regular function and it has a few shortcuts for now. Let's get some practice
using arrow functions. So let's scroll up in
this code to the for each method. So let's use
an arrow function here. Instead we just have to
remove the word function. And after the round brackets add an arrow equals greater than if we save the loop still works. So when we're passing a
function into another function, like for each, it's recommended to use arrow functions
because it makes our code easier to read. So now let's use arrow
functions in some of our previous projects. We'll start with
the rock paper scissors game. Let's open our files by clicking here and we'll find the 12
rock paper scissors dot js file. And then inside this file we're
going to scroll down to the autoplay function. So here we're passing
a function into another function. So it's recommended
to use an arrow function. Let's remove the word function and add an arrow. So now this code is
a little easier to read. Now what about this function
up here function autoplay, should we also switch
this to an arrow function? So this situation is more personal
preference. So above this, let's actually create an arrow
function version of this. Cons auto play equals brackets and arrow and curly brackets. So even though we could create
an arrow function version of this, I actually prefer the regular
function syntax here for two reasons. Number one, I think this is
easier to read than this. And number two, this function
syntax enables hoisting, which means we can call this function
before we create it and we don't have to worry about which order we write
the code. So for these reasons, I actually prefer this situation
to use a regular function syntax and not an arrow function. So we'll comment out the arrow
function using double slash and double slash.
Now let's save and let's open the tab for this
project and we'll give it a try. So click autoplay and this still works after
replacing with an arrow function. Next, let's go to the to-do list project
and switch to arrow functions. So we'll go to our code
editor and find the to-do list project, which is here. And let's scroll down. So inside render to-do list
we're using for each and we're passing this function
into another function. So it's recommended to use
an arrow function here. So we'll remove the word
function and after the brackets we'll add an arrow. And again, I'll leave this function syntax as a
regular function because it's easier to read and enables hoisting. So let's save and go
back to our to-do list and everything still works. Next, let's go back to 12 advanced functions dot html and we'll scroll to the bottom and we'll open the tab for this file and we'll review another place. We could use arrow functions
which is inside an object. So at the bottom here,
let's create a new object. Const object two equals object. And then inside let's
type the property method colon and an arrow function brackets arrow and curly brackets.
So even though we could save an arrow function
inside an object like this, objects already have a
shortcut for functions. So at the bottom we could just type method Brackets and curly brackets. So this syntax is called
the shorthand method syntax. So this shorthand method syntax
is actually easier to read than an arrow function. So when saving
a function in an object, it's actually recommended
to use this syntax instead. There's also another difference between
regular functions and arrow functions, but we'll learn about it later in this
course because it's a more advanced feature. Now let's move on and we're going to
learn another improvement we can make to our projects. So let's
comment out this code. We'll scroll up and type slash star and at the bottom star slash and save. And next we're actually going to
scroll up to the very top of this file and we're going to create
a button on the page. So inside the body we'll type less than button greater than, and inside the button
we'll have the text click. Now let's say that we want to run some
JavaScript code when we click this button. So here we can type on click equals double quotes and write
some JavaScript inside this double quotes. Now we're going to learn a better
way of doing this called add event Listener to use add event
listener first we're going to get this button and put it into
our Java script using document dot query selector. So let's add a class to this
button so we can select it and we'll set it to js dash button. And now inside the script element
we're going to use document dot query selector brackets and the string dot js dash button. So now let's save this button in
a variable so we can use it later at the front. We'll type cons button element equals this result. Now every HTML element
has a method called add event listener.
Add Event Listener lets us run some code when we interact with the element, so it sort of does the
same thing as on click. So at the bottom, let's button element dot add, capital E, event, capital L, listener and brackets. So add event listener has two parameters. The first parameter is the event
or what type of interaction we want to listen for. So between these brackets, let's type the string click. So this will run some code
when we click the button. The way to find these event names
is to look at this attribute. The word after on is the event next. The second parameter is a function
that we want to run when we click this element. So we'll type a comma and
because we're passing a function into another function,
we're going to use an arrow function. So we'll type brackets, arrow and curly brackets.
So inside here let's just do console dot log string, click and save. And now when we click this button, it will run this function
and display click. So this code does the
same thing as the on click attribute. However, add event listener has some
advantages over using an attribute. First it lets us add multiple
event listeners for an event. For example, let's add
another click event listener. We can select this code and right click copy. And then down here, right click and paste. And let's change this to log click two. If we save and click the button, it will run both these functions. So at Event Listener let's us
add multiple listeners to one event. Another advantage of doing this is
that we can remove an event listener using a method called
remove event Listener. So under this code we can type button element dot remove, capital E, event, capital L, listener and brackets and remove Event Listener also has two parameters.
The first parameter is the event. So in this case it is the string click and we'll type a comma. And the second parameter is the
function that we want to remove so that when we click this button it
will no longer run that function. Now we can't just type
a copy of this function, we need to use this exact function
inside remove event listener. To do that, we'll save
this in a variable first. So above this, let's create a variable constant event listener equals and we'll select this code right click copy, and in here right click and paste. And now we'll replace
this with the variable event listener. And down here we'll
remove this same variable event listener. If we save and click the button again, it will only display click two
because we added this event listener and then we removed it
so it will no longer run this function when we click the
button. So as you can see, add event listener gives us more
control over event listeners. We can add multiple listeners
to an event and we can also remove a listener from an event.
So because of these advantages, the best practice is to use add
event listener instead of an on click attribute. So let's go back into our projects
and switch to using ad event listener. We'll start with the rock
paper scissors project. So we'll open our files
and we'll open 12 rock paper scissors and click here and save. And we'll scroll up to 12
rock paper scissors dot js. And for the video I'll
drag this down to the bottom and I'll hide the files for now and then rearrange the windows and finally open the tab for this file. Now let's go to the html. We'll scroll up to these move buttons, which is up here. So here we're using the on click
attribute and we're going to switch it to add event listener. So first let's get this
button into our Java script. We'll add a class so we can select it js dash rock dash button and save. And then down here, let's go below the autoplay
function right here and we'll use add event listener. So we'll get this button into
our JavaScript using document dot query selector brackets and a string dot js dash rock dash button. And we're going to use dot add event listener brackets. So we're going to listen for a click and a comma and we'll give it a
function that we want to run. So a comma mistake here is
to actually run the function. For example, play game brackets and the string rock. So we're supposed to give a
function to add event listener. However this doesn't result in a function. This will actually run play game
and give us the return value which is undefined. So this code will actually result
in undefined and then we're giving undefined to add event
listener so it won't work. So in order to give add
event listener a function, we need to create a function here. So let's remove this code and
we'll create a function using brackets, arrow and curly brackets. And then inside this function
we're going to call play game. So we'll type play game brackets and rock. So now when we click the rock button, it will run this function
and play the game. So let's remove the on click attribute and save the HTML and also save the JavaScript. And then go to our project
and click the rock button. You can see that it works except
this time we're using add event listener. So let's do the same for the
paper and the scissors button. Feel free to pause the video
if you want to try it yourself. So we'll scroll down here and
let's add a class to the paper button. So we can select it js dash paper dash button. And then in our java script
we'll make a copy of this code. So right click copy, And then down here, right click and paste. And now we're going to replace
the rock button with paper. And when we click this button, we're
going to play the game with paper. Now let's save and we'll
remove the on click attribute and save the h html. If we click the paper
button, it works as before. Finally, let's do the scissors button. So we'll add a class js dash, scissors dash button, and then inside our java script
we'll make a copy of this, right click copy. And then down here, create some new lines, right click and paste. And now switch to the
scissors button and play game with scissors. Let's save and remove
the on click attribute, save the html and try the scissors button so everything still works. And I'll leave switching the reset
score button and the autoplay button as exercises. So now let's try add event
listener with a different event. We'll use it with key down. So let's say that in our project we want
to make it so we can play the game with our keyboard. If we type
R, it will play rock. If we type P, it will play
paper and if we type S, it will play scissors.
Let's go into our JavaScript and we'll scroll down And we're going to add an event listener
to the body this time so that if we type anywhere on the
page we can run some code. So we're going to get the
body element using document dot body and then dot add event listener and brackets. This time the first parameter
or the event will be the string key down. And let's type comma and give it
a function that we want to run brackets, arrow and curly brackets inside here. Let's just type console dot log key down for now and save. So now if we go to the project
and we open the console, right click and click inspect, click the console and
then click on the page. If we type a key on our keyboard, it will run this function
and display key down. So now we have to check what key
was pressed and play the game. So how do we know which key
that we pressed earlier in this course we used the attribute
on key down and we learned that it gets a special object
called event and the event object contains which key was pressed add. Event Listener also
provides this event object, but it provides it as a
parameter to this function. So inside the round brackets,
let's add a parameter event. Now every time we type on our
keyboard add event listener will save the event object in
here and run the function. And this event object contains
the key that we pressed. So in the console dot log, let's display event dot key this time and save. Now if we click on the page and type R event dot key will contain R. If we press P event dot
key, we'll contain P. So that's how we know which key we
pressed. So now let's close this and instead of console dot log, we'll create an if statement
to check which key we pressed. So if brackets and curly brackets, and here we'll check if event dot key is equal to the string R. If it is, we're going to
play the game with rock. So inside here we can just
run this play game function, play game and brackets and inside we'll type these string rock. Now let's check if we pressed P. So we'll add another branch else if brackets and curly brackets. And in the second condition
we'll check if event dot key is equal to the string P. If it is, we'll play the game with paper. So inside here we'll run play game brackets and the string paper. And finally we check if we pressed S. So at the end we'll add another else if brackets, curly brackets.
And inside here we check if event dot key is equal to the string S. If it is, we'll play the game with the string scissors. Now let's save click our page and type R and it plays a game with rock. If we type P, it will play the game with
paper and if we type S, it will play the game with scissors. So that's an example of using ad event
listener with a different type of event with a key down. If
we need the event object, we can get it using a parameter up here. So those are all the features we're going
to create for our rock paper scissors project. Now let's move on to the to-do list
project and switch To add event listener, we'll go into our code editor, click up here and find 12 to-do list dot html. We'll also scroll up
to the scripts folder, find 12 to-do list js and open this file. And I'm going to put it at the bottom
here so I can see it side by side. I'll close this for now
and close rock, paper, scissors and then open
the tab for this project. Okay, so let's start by switching the ad
button to use add event listener. We'll go into our H T M L and
find the add button which is here. And we're going to add a class. So we can select it in JavaScript js dash add dash to do dash button. Now let's go to our Java
script and scroll down above the add to do function, we'll get this button into
our Java script using document dot query selector brackets and then a string dot. And the class we want to get js dash add dash to do dash button. And then after this we'll use dot add event listener brackets. Inside these brackets
we'll give it the event, the string click and then a function to run
when this event happens. So brackets, arrow and curly brackets. And in here we just want to do the
same thing as the on click attribute, which is add to do and call this function. Let's save. And then in the html, let's
remove the on click attribute and save and let's try it out. So we'll type A to do watch YouTube, select a due date and then click add. And the add button still works as before, but we're just using ad
event listener. Next, let's switch all the delete buttons. Let's scroll up to where we
create these delete buttons, which is here. And first we'll add a class
to all the delete buttons. So we can select them in JavaScript JS dash delete dash to-do dash button. And now we're going to use document
dot query selector and add an event listener to all of these buttons. However, there's two problems here. First is that at this point in
the code, this is just a string. We haven't actually put
this button on the page yet. We do that down here.
In this line of code, we put the HTML that we
generated onto the page. So in order to add an event listener, we need to put the H T
M L on the page first. So we have to do it after this code. So down here we're going
to type document dot query selector brackets and the string dot, and we'll select this class js dash, delete dash to do dash button. However, there's also
a second problem here, which is we're going to
have multiple delete buttons and query selector only gives
us the first one. So how do we select all the buttons on the
page that match this criteria instead of just the first one? To do that, the document object has another
method called query selector all. So query selector all will give
us all the elements on the page that have the class js
delete to do button. So down here let's console dot log
this result to see what it looks like, console dot log brackets and close bracket and save. And then here right click inspect and the console and expand this. You'll see that document dot
query selector all gives us a list of elements. And this list
works just like an array. This is index zero or the first button, and this is index one,
which is the second button. So now let's remove console dot log and add event listeners
to all of these buttons. To do that we're going to loop
through this list of delete buttons. So again, this list works like nra, so we can use a for each
method to loop through it. So at the end, let's type enter and tab and then dot for each and brackets as usual, we'll give for each a function that
we want to run for each of these values. So we'll type brackets, arrow and curly brackets. And now every time we loop through
the list for each will give us two parameters. The first
one is a value in the list, which is a delete button element. So let's name it delete button and we'll type comma. And the
second parameter is index. So index. So now we want to add an event
listener to each delete button. So inside here we'll type delete button dot, add event listener and brackets. Inside these brackets we'll tell
it what event we want to listen to, which is the string click and comma. And then a function that we want
to run when this event happens. So brackets, arrow and curlier brackets. So now when we click a delete button, we want to do the same thing as
this on click attribute above. So let's select this code.
Whoa, right click copy, and then down here, right click and paste. And now we can remove these characters
because we're not in a string anymore and that's all we need
to do. So to summarize, we used query selector all to
get a list of all the delete buttons on the page and then we
looped through the list using for each and for each
delete button we added a click event listener and ran the
same code that we did before. So now we can scroll up
and remove this on click attribute and save. Go back to the page, close a console and try
out the delete button and you can see that it still works. So that's how we switch the to-do list
project to use add event listener. So now we're finished
improving all of our projects. In the rest of this lesson we're going
to learn more features that use functions as values. So let's close this for
now and we'll go back to 12 advanced functions dot html and we'll open the tab for this file. And let's also comment out
this JavaScript code using slash star and star slash Let's save. And now let's scroll to
the bottom of this code And create some new lines. So in this lesson we learned
the array method for each, which lets us loop through an array. Now we're going to learn two more
array methods called filter and map. So let's start with filter. Let's say we have an array of
numbers and we want to create a copy of this array with all
the negative numbers removed. So let's go up here and
create an array of the number one negative three, five and type the method dot filter and brackets. So filter works the same way as for each. We give it a function, so bracket, arrow and curly bracket. And this function has two parameters, the value and the index. So filter will take the first value, save it in here and run the function. Then it will take the second value,
save it in here, run the function, and the third value, save it and run the function.
Now the only difference is that this time this inner
function will return a value. So we'll type return and
we're going to return a bull like true. So now the return value matters. So what filter does is
it creates a new array. If the inner function returns true, it will put this value in the new array. If the inner function returns false, it will not put this value in
the new array. For example, at the front, let's console
dot log the result of this. So we'll type console dot log, open bracket, and down here, close bracket and save. So in this example, the inner
function always returns true. So all three values will
be in the new array. If we change the return
value to false every time and save all three values will not
be added to the new array. So now let's use this to solve
our problem. We want to remove the negative numbers from this array. So inside this inner function we're
going to return true if the number is positive and return false
if the number is negative. So we'll check if value is greater than or equal to zero. Curly brackets will true and include it in the new array else will return false and not include it in the new array. So let's remove this and save. So now only values that are greater
than zero will be in the new copy. So using this we can sort of
filter out values based on a criteria. That's why this
method is called filter. Now we can shorten this
logic by using this code return value greater than or equal to zero. So this comparison will return true
if it's greater than or equal to zero and it will return false otherwise. So this line does the same
thing as this code up here. So we can comment this
out with slash star and star slash and save. And as always we can return
a truthy or falsey value instead of just true or false. The last array method we're
going to learn is called map. So let's create some new
lines and scroll down. And let's say we have an array of numbers, again like the array 1, 1 3, and we want to make a copy of this
array with each number doubled. So at the end what type dot map brackets and map works
just like for each and filter between the brackets, we'll give it a function bracket, arrow and curly brackets. And this function will get two parameters. The first parameter is
each value in the array, and the second parameter
comma is the index. So map will take the first value, save it in this parameter and run
the function. Take the second value, save it in this parameter, run the
function, third value, save it, and run the function. And inside this function
we're going to return a value. So what map does is it
creates a new array and then whatever we return will
be added to the new array. So if we return 10 and then we console dot log this result console, dot log and close bracket and save, it will create an array
where each value becomes 10. Now the interesting thing is that
we can actually use the value itself in the return. So here if we did value plus 10 and save, it will take each value
in the original array, add 10 and put it in the new array. So map will transform an
array into another array based on the return value. So if we want to return an array
where each number is doubled, we just have to multiply each value by two and save.
And this will give us 2, 2 6. Next we're going to review some
shortcuts of arrow functions to make this code more compact. First, let's make a copy of this code, right click copy and down here, right click and paste. So notice in the inner
function we're not using index, so let's just remove it for now. And now that this arrow
function only has one parameter, these round brackets are optional. So we can also remove these to make
the code more compact. Compact. Another shortcut is if we only
have one line of code in an arrow function, we can put the code on one line like this. And now the curly brackets
and the return are optional. So we can actually just
remove all of this code. So if we have just an arrow, it will automatically return this
result on the right and we don't have to type return ourselves. So this code does the same
thing as the code above. But as you can see, these shortcuts make our
code very compact and clean. So let's save and this will
give us the same result. The last thing we're going to learn in
this lesson is a feature of functions called a closure. A closure means if a function
has access to a value, it will always have access to that value. So let's take a look at an example. We're going to go back to
the to-do list project. So we'll click up here
and then scroll up to 12 to-do list js and close this and then open
the tab for the to-do list, which is here. And let's scroll down to
the query selector all. So we're going to focus on
this inner function here. So notice that this function
uses index from above. Now the interesting thing about
index is that as soon as this four, each ends index gets deleted. For example, if we add some new lines
and we try to console dot log index and save and then go into our project, right click Inspect and the console, it'll tell us that the
index is not defined. So as soon as we end the four, each loop index doesn't
exist anymore. However, if we move this into the inner function, so inside here and we console dot log, index and save, and we click a delete button, it will tell us that the index is zero. So even though index gets
deleted right away down here, if we click one of these buttons later on, it still has access to index.
This feature is called a closure. If a
function has access to a value, it will always have access to that value. The value like Index
gets packaged together or enclosed with the function.
That's why we call it a closure. So even if the value index
gets deleted after the loop, we can click the delete button
five seconds later or even five minutes later, and this function
will always have access to index. So closures are something that naturally
happens as we write JavaScript code, and it's nice to know
how this feature works. There are some advanced techniques
that we can do with closures, but they're not used that often, so I
won't be covering them in this course, but maybe in a different video. Now let's remove console dot log and save, and that's the end of this
lesson. In this lesson, we learned that functions
are values. We learned, set, timeout and set interval, which lets us run a
function in the future. We learned an array
method called for each, which is a cleaner way of
looping through an array. We used for each arrow
functions and add event listener to improve our projects. We
learned two more array methods, filter and map, and we learned a feature of
functions called closures. Here are some exercises to help you
practice what we learned in this lesson. Here are some projects you can try
on your own to practice combining everything we learned in this course.
These projects are open-ended, meaning it's up to you
how they look and work. You can find example solutions for
these projects in the video description. So that's the end of
part one of this course. Great job in making it this
far. In this part of the course, we learned all the major features of
JavaScript and now we know everything we need to build projects. In the second part of this course, we're going to focus on building
bigger and more complex projects, and we're going to start and
finish the final Amazon project. Along the way, we're going to learn advanced techniques
like the ones listed here that are useful for bigger projects.
Also, from now on, I'll be posting one lesson at a
time as soon as I finish them, and then combine them
all together at the end. If you want to be notified
of future lessons, you can click the subscribe
button below the video. If you want to learn HTML
and CSS in more detail, you can check out my HTML
and CSS full course here. If you want to support this channel, you can like this video and recommend
this course to anyone you know who is interested in learning
JavaScript. Thanks again, and I'll see you in the next one.