Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:00,719 --> 00:00:04,759
welcome to the complete JavaScript
2
00:00:02,679 --> 00:00:06,839
course in this course we're going to
3
00:00:04,759 --> 00:00:09,519
learn how to build complex websites
4
00:00:06,839 --> 00:00:11,799
using JavaScript from a beginner to a
5
00:00:09,519 --> 00:00:14,360
professional level and by the end of
6
00:00:11,799 --> 00:00:17,320
this course we're going to build
7
00:00:14,360 --> 00:00:20,279
amazon.com so this is an interactive
8
00:00:17,320 --> 00:00:24,400
multi-page website where we can add
9
00:00:20,279 --> 00:00:26,760
products to our cart create an order and
10
00:00:24,400 --> 00:00:29,359
even track our
11
00:00:26,760 --> 00:00:32,200
order along the way we're also going to
12
00:00:29,359 --> 00:00:36,600
build some smaller projects like a rock
13
00:00:32,200 --> 00:00:38,680
paper scissors game a to-do list and a
14
00:00:36,600 --> 00:00:41,079
calculator now you don't need any
15
00:00:38,680 --> 00:00:43,879
previous coding or technical experience
16
00:00:41,079 --> 00:00:45,920
to follow along this course will cover
17
00:00:43,879 --> 00:00:48,000
everything that you need to learn
18
00:00:45,920 --> 00:00:50,120
JavaScript we're going to start from the
19
00:00:48,000 --> 00:00:53,039
very basics of JavaScript and we're
20
00:00:50,120 --> 00:00:54,680
going to build our way up step by step
21
00:00:53,039 --> 00:00:57,079
we're going to learn the major features
22
00:00:54,680 --> 00:00:59,039
of JavaScript and also how to use
23
00:00:57,079 --> 00:01:02,719
JavaScript together with other
24
00:00:59,039 --> 00:01:05,199
Technologies like HTML and
25
00:01:02,719 --> 00:01:08,280
CSS we're also going to learn more
26
00:01:05,199 --> 00:01:12,479
advanced features like objectoriented
27
00:01:08,280 --> 00:01:15,240
programming backend callbacks promises
28
00:01:12,479 --> 00:01:18,000
and async await and we'll use these
29
00:01:15,240 --> 00:01:20,759
features together to build a complex
30
00:01:18,000 --> 00:01:23,200
project which is the Amazon
31
00:01:20,759 --> 00:01:26,920
Project this will let you practice what
32
00:01:23,200 --> 00:01:28,960
you learn and deepen your
33
00:01:26,920 --> 00:01:30,840
understanding you can find the different
34
00:01:28,960 --> 00:01:32,399
lessons of this course course below the
35
00:01:30,840 --> 00:01:34,479
video
36
00:01:32,399 --> 00:01:37,320
here and
37
00:01:34,479 --> 00:01:40,320
here if you need to you can adjust the
38
00:01:37,320 --> 00:01:43,000
speed of the video
39
00:01:40,320 --> 00:01:45,360
here and after each lesson I'm going to
40
00:01:43,000 --> 00:01:47,640
give you a bunch of exercises that you
41
00:01:45,360 --> 00:01:50,640
can do on your own to practice the
42
00:01:47,640 --> 00:01:52,719
skills that we learned in total this
43
00:01:50,640 --> 00:01:56,560
course will have over
44
00:01:52,719 --> 00:01:59,719
250 exercises so with that said let's
45
00:01:56,560 --> 00:01:59,719
get started
46
00:02:04,159 --> 00:02:08,720
before we begin if something in this
47
00:02:06,200 --> 00:02:10,920
course is not working properly make sure
48
00:02:08,720 --> 00:02:14,400
to check the first comment below the
49
00:02:10,920 --> 00:02:14,400
video for a list of
50
00:02:18,920 --> 00:02:23,400
solutions I'm going to be doing this
51
00:02:20,879 --> 00:02:26,080
course on Windows but the steps are the
52
00:02:23,400 --> 00:02:28,000
same if you're using a Mac we're going
53
00:02:26,080 --> 00:02:31,440
to start from the very basics of
54
00:02:28,000 --> 00:02:35,640
JavaScript and build our way up step by
55
00:02:31,440 --> 00:02:37,760
step first of all what is Javascript
56
00:02:35,640 --> 00:02:41,640
JavaScript is a technology that we use
57
00:02:37,760 --> 00:02:43,720
to create websites a website is like
58
00:02:41,640 --> 00:02:46,480
youtube.com or
59
00:02:43,720 --> 00:02:49,920
amazon.com it's how we access YouTube
60
00:02:46,480 --> 00:02:53,720
and Amazon on our computer if we were
61
00:02:49,920 --> 00:02:56,400
using a phone we usually use an app but
62
00:02:53,720 --> 00:02:58,560
on our computer we use a
63
00:02:56,400 --> 00:03:00,879
website so there's actually three
64
00:02:58,560 --> 00:03:06,159
technologies that we use to create
65
00:03:00,879 --> 00:03:08,080
websites HTML CSS and JavaScript each of
66
00:03:06,159 --> 00:03:12,200
these Technologies has a specific
67
00:03:08,080 --> 00:03:14,879
purpose when creating a website HTML
68
00:03:12,200 --> 00:03:18,200
creates the content of a website it
69
00:03:14,879 --> 00:03:21,879
creates all the buttons the text and the
70
00:03:18,200 --> 00:03:25,080
images CSS changes the appearance of the
71
00:03:21,879 --> 00:03:28,959
website by adding CSS we can make our
72
00:03:25,080 --> 00:03:30,439
website look nice and finally JavaScript
73
00:03:28,959 --> 00:03:34,000
makes our website
74
00:03:30,439 --> 00:03:37,080
interactive so if we only have HTML and
75
00:03:34,000 --> 00:03:40,000
CSS and we click one of these buttons
76
00:03:37,080 --> 00:03:42,080
our website doesn't do anything but once
77
00:03:40,000 --> 00:03:44,560
we add JavaScript we can make our
78
00:03:42,080 --> 00:03:48,280
website do something when we click a
79
00:03:44,560 --> 00:03:50,640
button such as add a product to our cart
80
00:03:48,280 --> 00:03:54,120
or create an
81
00:03:50,640 --> 00:03:57,079
order so this course is focused on
82
00:03:54,120 --> 00:04:00,000
JavaScript if you want to learn HTML and
83
00:03:57,079 --> 00:04:02,079
CSS in more detail I have a full whole
84
00:04:00,000 --> 00:04:03,720
course just like this one that you can
85
00:04:02,079 --> 00:04:06,879
find in the video
86
00:04:03,720 --> 00:04:09,239
description let's get started with
87
00:04:06,879 --> 00:04:11,400
JavaScript the first thing we need to do
88
00:04:09,239 --> 00:04:15,000
is to install a piece of software called
89
00:04:11,400 --> 00:04:17,959
a web browser a web browser lets us view
90
00:04:15,000 --> 00:04:19,799
websites that we create in this course
91
00:04:17,959 --> 00:04:22,400
the most popular web browser for web
92
00:04:19,799 --> 00:04:25,080
development is Google Chrome so I
93
00:04:22,400 --> 00:04:27,360
recommend using that if you don't have
94
00:04:25,080 --> 00:04:30,160
Google Chrome you can open the default
95
00:04:27,360 --> 00:04:33,400
web browser on your computer for windows
96
00:04:30,160 --> 00:04:37,400
it's Microsoft Edge and for Mac it's
97
00:04:33,400 --> 00:04:41,759
Safari type in google.com at the top and
98
00:04:37,400 --> 00:04:45,360
press enter search for Google
99
00:04:41,759 --> 00:04:48,759
Chrome click the result and follow the
100
00:04:45,360 --> 00:04:50,720
instructions to download and install
101
00:04:48,759 --> 00:04:51,919
once we've installed Chrome we're ready
102
00:04:50,720 --> 00:04:54,639
to
103
00:04:51,919 --> 00:04:57,280
begin we're going to start by learning
104
00:04:54,639 --> 00:05:00,080
what exactly is Javascript and how does
105
00:04:57,280 --> 00:05:02,759
it work the easiest way to understand
106
00:05:00,080 --> 00:05:05,199
JavaScript is we're basically giving
107
00:05:02,759 --> 00:05:07,400
instructions to a computer and then the
108
00:05:05,199 --> 00:05:09,320
computer follows our
109
00:05:07,400 --> 00:05:11,919
instructions I find the best way to
110
00:05:09,320 --> 00:05:17,240
learn this is to jump in and give it a
111
00:05:11,919 --> 00:05:20,199
try so first let's open Google
112
00:05:17,240 --> 00:05:21,199
Chrome next we're going to click at the
113
00:05:20,199 --> 00:05:24,319
top
114
00:05:21,199 --> 00:05:25,919
here and type
115
00:05:24,319 --> 00:05:27,479
super
116
00:05:25,919 --> 00:05:30,560
simple
117
00:05:27,479 --> 00:05:35,000
dodev slj
118
00:05:30,560 --> 00:05:37,440
s- Basics and press
119
00:05:35,000 --> 00:05:40,919
enter and now we'll learn how to give
120
00:05:37,440 --> 00:05:43,560
our computer some instructions to follow
121
00:05:40,919 --> 00:05:46,759
to do that we're going to go to a blank
122
00:05:43,560 --> 00:05:49,560
area of the web page we're going to
123
00:05:46,759 --> 00:05:53,319
rightclick click
124
00:05:49,560 --> 00:05:56,039
inspect and then click the console
125
00:05:53,319 --> 00:05:58,840
tab now if your console doesn't show up
126
00:05:56,039 --> 00:06:01,400
at the bottom like this you can click
127
00:05:58,840 --> 00:06:03,639
these three dots here here and then
128
00:06:01,400 --> 00:06:07,280
select this
129
00:06:03,639 --> 00:06:10,240
icon okay so inside the console we can
130
00:06:07,280 --> 00:06:13,160
give some instructions for our computer
131
00:06:10,240 --> 00:06:15,639
let's learn our first instruction we're
132
00:06:13,160 --> 00:06:17,240
going to type here and we're going to
133
00:06:15,639 --> 00:06:22,720
type
134
00:06:17,240 --> 00:06:26,080
alert Open Bracket single quote hello
135
00:06:22,720 --> 00:06:28,440
single quote close bracket and
136
00:06:26,080 --> 00:06:31,479
semicolon make sure to type this out
137
00:06:28,440 --> 00:06:33,400
exactly as I have it here in JavaScript
138
00:06:31,479 --> 00:06:37,160
if you don't type things out correctly
139
00:06:33,400 --> 00:06:40,160
it won't work so this is an instruction
140
00:06:37,160 --> 00:06:43,039
to create a popup with the text hello
141
00:06:40,160 --> 00:06:46,080
inside to get the computer to follow our
142
00:06:43,039 --> 00:06:48,840
instruction we can just press
143
00:06:46,080 --> 00:06:51,759
enter and as you can see the computer
144
00:06:48,840 --> 00:06:55,080
does exactly what we tell it to do it
145
00:06:51,759 --> 00:06:57,919
creates a popup with a text hello
146
00:06:55,080 --> 00:07:00,840
inside now let's press
147
00:06:57,919 --> 00:07:03,160
okay and let's give another instruction
148
00:07:00,840 --> 00:07:07,160
to the computer so we're going to type
149
00:07:03,160 --> 00:07:11,039
here again and we're going to type alert
150
00:07:07,160 --> 00:07:13,000
again Open Bracket single quote but this
151
00:07:11,039 --> 00:07:14,560
time we're going to type a different
152
00:07:13,000 --> 00:07:20,160
message in the
153
00:07:14,560 --> 00:07:22,039
popup good job and single quote close
154
00:07:20,160 --> 00:07:24,879
bracket and
155
00:07:22,039 --> 00:07:27,800
semicolon so this is an instruction to
156
00:07:24,879 --> 00:07:31,360
create a popup again but this time with
157
00:07:27,800 --> 00:07:32,479
a text good job in inside the popup if
158
00:07:31,360 --> 00:07:35,280
we press
159
00:07:32,479 --> 00:07:37,840
enter the computer does exactly what we
160
00:07:35,280 --> 00:07:41,240
tell it to do and it creates a popup
161
00:07:37,840 --> 00:07:43,440
with the text good job inside and that's
162
00:07:41,240 --> 00:07:46,000
basically the main idea behind
163
00:07:43,440 --> 00:07:48,800
JavaScript we're giving instructions to
164
00:07:46,000 --> 00:07:49,960
a computer and then the computer follows
165
00:07:48,800 --> 00:07:52,520
our
166
00:07:49,960 --> 00:07:55,599
instructions so note that we can open
167
00:07:52,520 --> 00:07:58,039
and use this console on any website
168
00:07:55,599 --> 00:07:59,639
we're just using superimple dodev as an
169
00:07:58,039 --> 00:08:01,159
example
170
00:07:59,639 --> 00:08:03,360
let's press
171
00:08:01,159 --> 00:08:06,800
okay and we're going to learn some
172
00:08:03,360 --> 00:08:06,800
terminology or
173
00:08:07,520 --> 00:08:13,159
naming the instructions we give to our
174
00:08:10,319 --> 00:08:15,759
computer these instructions are called
175
00:08:13,159 --> 00:08:18,319
code when we press enter and the
176
00:08:15,759 --> 00:08:21,639
computer follows our instructions this
177
00:08:18,319 --> 00:08:23,960
is called running the code now there are
178
00:08:21,639 --> 00:08:27,440
many different languages we can use to
179
00:08:23,960 --> 00:08:29,240
write code called programming languages
180
00:08:27,440 --> 00:08:31,519
it's similar to how we have many human
181
00:08:29,240 --> 00:08:33,959
Lang languages that we can use to
182
00:08:31,519 --> 00:08:38,719
communicate some examples of programming
183
00:08:33,959 --> 00:08:41,440
languages are JavaScript Python and Java
184
00:08:38,719 --> 00:08:44,039
so here we're writing our code using the
185
00:08:41,440 --> 00:08:46,240
JavaScript programming language so we
186
00:08:44,039 --> 00:08:49,279
call this JavaScript
187
00:08:46,240 --> 00:08:51,279
code now that we understand the basic
188
00:08:49,279 --> 00:08:53,480
terminology let's look at some more
189
00:08:51,279 --> 00:08:56,800
examples of what we can do with
190
00:08:53,480 --> 00:08:57,880
JavaScript code another thing we can do
191
00:08:56,800 --> 00:09:00,920
is
192
00:08:57,880 --> 00:09:07,760
math let's go back to the console and
193
00:09:00,920 --> 00:09:10,760
type here and we're going to type 2 + 2
194
00:09:07,760 --> 00:09:13,360
so this is an instruction or code that
195
00:09:10,760 --> 00:09:17,399
tells the computer to do some math to
196
00:09:13,360 --> 00:09:19,560
calculate 2 + 2 when we press
197
00:09:17,399 --> 00:09:22,760
enter the computer follows our
198
00:09:19,560 --> 00:09:26,440
instruction or runs this code calculates
199
00:09:22,760 --> 00:09:29,800
2+ 2 and gives us the result which is
200
00:09:26,440 --> 00:09:35,279
four let's do another example we're
201
00:09:29,800 --> 00:09:38,959
going to type 10 minus 3 and press enter
202
00:09:35,279 --> 00:09:41,560
to run this code again the computer does
203
00:09:38,959 --> 00:09:44,720
this math calculates the result and
204
00:09:41,560 --> 00:09:47,200
gives us seven so as you can see
205
00:09:44,720 --> 00:09:51,079
JavaScript can do many different things
206
00:09:47,200 --> 00:09:52,959
like create popups and do math let's
207
00:09:51,079 --> 00:09:55,839
look at one more example of what
208
00:09:52,959 --> 00:10:01,000
JavaScript can do we're going to go to
209
00:09:55,839 --> 00:10:01,000
the bottom and type out this code
210
00:10:02,880 --> 00:10:13,320
document.body do inner Capital
211
00:10:08,120 --> 00:10:15,160
HTML equals single quilt hello single
212
00:10:13,320 --> 00:10:17,360
quilt and
213
00:10:15,160 --> 00:10:20,160
semicolon make sure to write this out
214
00:10:17,360 --> 00:10:22,120
exactly as I have it here with the dots
215
00:10:20,160 --> 00:10:24,120
and the capital letters because
216
00:10:22,120 --> 00:10:27,760
JavaScript is case
217
00:10:24,120 --> 00:10:30,480
sensitive let's press enter to run this
218
00:10:27,760 --> 00:10:32,920
code what this code does is that it
219
00:10:30,480 --> 00:10:36,639
removes everything on the page and
220
00:10:32,920 --> 00:10:39,880
replaces it with the text hello in this
221
00:10:36,639 --> 00:10:42,800
example we use JavaScript to modify the
222
00:10:39,880 --> 00:10:44,839
web page modifying the web page is one
223
00:10:42,800 --> 00:10:46,839
of the most important features of
224
00:10:44,839 --> 00:10:49,639
JavaScript and we're going to be using
225
00:10:46,839 --> 00:10:52,279
this feature throughout this course and
226
00:10:49,639 --> 00:10:55,000
that's the basics of JavaScript we're
227
00:10:52,279 --> 00:10:57,600
giving instructions to a computer these
228
00:10:55,000 --> 00:10:59,320
instructions are called code and then
229
00:10:57,600 --> 00:11:02,200
the computer follows our instru
230
00:10:59,320 --> 00:11:04,839
instuctions this is called running the
231
00:11:02,200 --> 00:11:07,480
code and also don't worry about
232
00:11:04,839 --> 00:11:09,680
memorizing all this code you can find a
233
00:11:07,480 --> 00:11:13,360
copy of all the code that we write in
234
00:11:09,680 --> 00:11:13,360
this course in the video
235
00:11:14,760 --> 00:11:19,680
description now that we understand the
236
00:11:17,120 --> 00:11:22,079
basics of JavaScript let's learn more
237
00:11:19,680 --> 00:11:26,079
about the JavaScript language
238
00:11:22,079 --> 00:11:29,440
itself if we take a look at this code
239
00:11:26,079 --> 00:11:33,240
alert and hello you might be wondering
240
00:11:29,440 --> 00:11:35,000
ing what the brackets and the quote mean
241
00:11:33,240 --> 00:11:37,279
all of these characters have a special
242
00:11:35,000 --> 00:11:38,680
meaning in the language this is
243
00:11:37,279 --> 00:11:41,560
something called
244
00:11:38,680 --> 00:11:43,839
syntax syntax are the rules that we have
245
00:11:41,560 --> 00:11:46,839
to follow when using a programming
246
00:11:43,839 --> 00:11:49,680
language like JavaScript this is sort of
247
00:11:46,839 --> 00:11:52,880
like in English we also have rules that
248
00:11:49,680 --> 00:11:54,800
we follow called grammar the difference
249
00:11:52,880 --> 00:11:57,560
is that in English we don't have to
250
00:11:54,800 --> 00:12:00,079
follow the rules of grammar perfectly
251
00:11:57,560 --> 00:12:02,519
people can still understand us but in
252
00:12:00,079 --> 00:12:05,839
programming we have to follow the rules
253
00:12:02,519 --> 00:12:09,839
of syntax exactly otherwise the computer
254
00:12:05,839 --> 00:12:13,839
won't understand our code for example if
255
00:12:09,839 --> 00:12:19,440
we scroll down and we type this code
256
00:12:13,839 --> 00:12:22,480
alert Open Bracket quote hello quote
257
00:12:19,440 --> 00:12:25,880
close bracket and semicolon but this
258
00:12:22,480 --> 00:12:27,240
time we remove the first bracket and
259
00:12:25,880 --> 00:12:30,920
press
260
00:12:27,240 --> 00:12:33,519
enter it will give us a syntax error
261
00:12:30,920 --> 00:12:36,360
we're not following the rules of syntax
262
00:12:33,519 --> 00:12:39,560
so the computer doesn't understand this
263
00:12:36,360 --> 00:12:41,880
code now JavaScript has a lot of syntax
264
00:12:39,560 --> 00:12:44,720
rules and we can't learn them all at
265
00:12:41,880 --> 00:12:47,880
once right now instead we're going to
266
00:12:44,720 --> 00:12:50,760
learn the syntax rules one by one as we
267
00:12:47,880 --> 00:12:53,440
go through the course for now we'll just
268
00:12:50,760 --> 00:12:56,399
learn enough syntax to do the exercises
269
00:12:53,440 --> 00:13:00,279
at the end of this lesson what we need
270
00:12:56,399 --> 00:13:02,399
to know is that if we scroll up
271
00:13:00,279 --> 00:13:06,000
this part of the code tells a computer
272
00:13:02,399 --> 00:13:09,880
to create a popup the text between these
273
00:13:06,000 --> 00:13:12,399
quotes is the text inside the popup if
274
00:13:09,880 --> 00:13:15,760
we change this text we can change the
275
00:13:12,399 --> 00:13:17,240
text inside the popup same thing for
276
00:13:15,760 --> 00:13:20,000
this code down
277
00:13:17,240 --> 00:13:22,320
here if we change the text between the
278
00:13:20,000 --> 00:13:24,959
quotes it will change the text that
279
00:13:22,320 --> 00:13:27,480
appears on the page and that's all we
280
00:13:24,959 --> 00:13:30,199
need to know about JavaScript Syntax for
281
00:13:27,480 --> 00:13:32,800
now we'll learn exact ly what the other
282
00:13:30,199 --> 00:13:36,680
characters like the brackets quotes and
283
00:13:32,800 --> 00:13:38,680
semicolon mean later on in this course
284
00:13:36,680 --> 00:13:40,880
so in this lesson we learned that
285
00:13:38,680 --> 00:13:44,040
JavaScript is basically giving
286
00:13:40,880 --> 00:13:47,120
instructions to a computer we wrote our
287
00:13:44,040 --> 00:13:49,600
first few lines of JavaScript code we
288
00:13:47,120 --> 00:13:52,320
learned how to run our code using the
289
00:13:49,600 --> 00:13:55,160
console in our web browser and we
290
00:13:52,320 --> 00:13:57,480
learned about syntax which are the rules
291
00:13:55,160 --> 00:14:00,480
that we have to follow when writing our
292
00:13:57,480 --> 00:14:00,480
code
293
00:14:01,000 --> 00:14:05,120
thanks for watching this course so far
294
00:14:03,360 --> 00:14:07,199
if you want to support this channel you
295
00:14:05,120 --> 00:14:09,440
can check out the premium version of my
296
00:14:07,199 --> 00:14:11,880
courses just like this one where you can
297
00:14:09,440 --> 00:14:14,160
get a certificate of completion and a
298
00:14:11,880 --> 00:14:16,920
Better Learning platform if you're
299
00:14:14,160 --> 00:14:19,480
interested in extra videos from me more
300
00:14:16,920 --> 00:14:22,199
in-depth videos and behind the scenes
301
00:14:19,480 --> 00:14:24,880
content you can check out these links
302
00:14:22,199 --> 00:14:27,759
here you can also support the channel by
303
00:14:24,880 --> 00:14:29,639
liking the video subscribing and sharing
304
00:14:27,759 --> 00:14:33,120
this video with others
305
00:14:29,639 --> 00:14:35,639
thanks again and let's continue with the
306
00:14:33,120 --> 00:14:38,000
course here are some exercises you can
307
00:14:35,639 --> 00:14:40,320
try on your own to practice what we
308
00:14:38,000 --> 00:14:42,800
learned in this
309
00:14:40,320 --> 00:14:46,560
lesson you can find the solutions to
310
00:14:42,800 --> 00:14:46,560
these exercises in the video
311
00:14:52,480 --> 00:14:56,880
description now that we understand the
312
00:14:54,839 --> 00:14:59,120
basics of JavaScript we're going to
313
00:14:56,880 --> 00:15:01,600
learn about each feature of the language
314
00:14:59,120 --> 00:15:05,800
language in this lesson we're going to
315
00:15:01,600 --> 00:15:07,839
focus on numbers and math first we can
316
00:15:05,800 --> 00:15:10,800
close the console for
317
00:15:07,839 --> 00:15:13,800
now so I've actually prepared a project
318
00:15:10,800 --> 00:15:15,839
that we can use for this lesson to open
319
00:15:13,800 --> 00:15:20,839
this project we're going to go to our
320
00:15:15,839 --> 00:15:23,839
browser click up here and type
321
00:15:20,839 --> 00:15:26,639
super simple
322
00:15:23,839 --> 00:15:29,839
dodev SL
323
00:15:26,639 --> 00:15:31,839
projects SL Amazon
324
00:15:29,839 --> 00:15:34,560
and press
325
00:15:31,839 --> 00:15:36,800
enter so this is actually the final
326
00:15:34,560 --> 00:15:40,079
project we're going to create in this
327
00:15:36,800 --> 00:15:42,920
course this is an e-commerce website
328
00:15:40,079 --> 00:15:45,600
similar to Amazon where we can add
329
00:15:42,920 --> 00:15:48,480
products to our cart and then view our
330
00:15:45,600 --> 00:15:51,519
cart by clicking the top
331
00:15:48,480 --> 00:15:55,160
right and on this page we can see the
332
00:15:51,519 --> 00:15:56,480
products in our cart modify our cart and
333
00:15:55,160 --> 00:15:59,120
create an
334
00:15:56,480 --> 00:16:01,800
order for this lesson we're going to
335
00:15:59,120 --> 00:16:04,279
focus on this right section which
336
00:16:01,800 --> 00:16:07,240
calculates the cost of our cart
337
00:16:04,279 --> 00:16:09,199
including the cost of the products
338
00:16:07,240 --> 00:16:12,000
shipping and
339
00:16:09,199 --> 00:16:15,000
taxes this section is a great way to
340
00:16:12,000 --> 00:16:18,120
learn numbers and math in
341
00:16:15,000 --> 00:16:21,240
JavaScript first let's open the console
342
00:16:18,120 --> 00:16:23,480
again so we can write JavaScript code
343
00:16:21,240 --> 00:16:27,920
we're going to find a blank area of the
344
00:16:23,480 --> 00:16:31,440
web page rightclick click
345
00:16:27,920 --> 00:16:34,240
inspect and then click the
346
00:16:31,440 --> 00:16:37,199
console so we already saw some examples
347
00:16:34,240 --> 00:16:43,399
of math in the previous lesson for
348
00:16:37,199 --> 00:16:44,399
example we wrote the code 2 + 2 if we
349
00:16:43,399 --> 00:16:47,199
press
350
00:16:44,399 --> 00:16:49,680
enter the computer adds these two
351
00:16:47,199 --> 00:16:56,360
numbers and results in
352
00:16:49,680 --> 00:16:59,319
four we also did 10 minus 3 if we press
353
00:16:56,360 --> 00:17:01,600
enter the computer subtracts these two
354
00:16:59,319 --> 00:17:04,600
numbers and gives us
355
00:17:01,600 --> 00:17:07,919
seven in addition to adding and
356
00:17:04,600 --> 00:17:11,760
subtracting we can also multiply and
357
00:17:07,919 --> 00:17:16,000
divide to multiply we're going to type
358
00:17:11,760 --> 00:17:19,760
10 star 3 and press
359
00:17:16,000 --> 00:17:22,480
enter so star is the character for
360
00:17:19,760 --> 00:17:23,880
multiplying to divide we're going to
361
00:17:22,480 --> 00:17:25,880
type
362
00:17:23,880 --> 00:17:29,120
10
363
00:17:25,880 --> 00:17:32,960
slash2 and press enter
364
00:17:29,120 --> 00:17:35,520
so forward slash is the character for
365
00:17:32,960 --> 00:17:39,160
dividing now let's learn the syntax
366
00:17:35,520 --> 00:17:41,559
rules for numbers and math the Syntax
367
00:17:39,160 --> 00:17:44,200
for math is pretty straightforward in
368
00:17:41,559 --> 00:17:47,760
JavaScript we just write it out like
369
00:17:44,200 --> 00:17:51,640
normal math we can also do math with
370
00:17:47,760 --> 00:17:58,559
more than two numbers for example we can
371
00:17:51,640 --> 00:18:01,840
add two plus 2 and then plus another two
372
00:17:58,559 --> 00:18:04,360
if if we press enter the computer will
373
00:18:01,840 --> 00:18:08,640
add these three numbers together and
374
00:18:04,360 --> 00:18:12,360
result in six and finally JavaScript can
375
00:18:08,640 --> 00:18:15,360
handle decimal numbers like
376
00:18:12,360 --> 00:18:19,440
2.2 plus
377
00:18:15,360 --> 00:18:23,640
2.2 if we press enter it will calculate
378
00:18:19,440 --> 00:18:27,360
these decimal numbers and result in
379
00:18:23,640 --> 00:18:28,760
4.4 now let's do some practical examples
380
00:18:27,360 --> 00:18:31,960
we're going to calculate the number
381
00:18:28,760 --> 00:18:34,720
numers here in our final project but
382
00:18:31,960 --> 00:18:37,840
first let's set up our cart so we have
383
00:18:34,720 --> 00:18:42,000
the same products in our cart so make
384
00:18:37,840 --> 00:18:45,799
sure in your cart you have two socks
385
00:18:42,000 --> 00:18:48,039
with free shipping and you have one
386
00:18:45,799 --> 00:18:51,520
basketball with
387
00:18:48,039 --> 00:18:55,039
$4.99 of shipping and nothing else in
388
00:18:51,520 --> 00:18:58,480
your cart if you need to you can modify
389
00:18:55,039 --> 00:19:00,919
your cart by clicking update or delete
390
00:18:58,480 --> 00:19:03,760
or or by going to the homepage by
391
00:19:00,919 --> 00:19:05,159
clicking in the top left and adding any
392
00:19:03,760 --> 00:19:08,159
products that you're
393
00:19:05,159 --> 00:19:11,280
missing once you have the same products
394
00:19:08,159 --> 00:19:14,200
as me in your cart and you have the same
395
00:19:11,280 --> 00:19:17,120
numbers on the right we're ready to
396
00:19:14,200 --> 00:19:20,200
begin let's start by calculating this
397
00:19:17,120 --> 00:19:24,200
number up here this is the cost of the
398
00:19:20,200 --> 00:19:27,000
products before shipping and taxes to
399
00:19:24,200 --> 00:19:29,400
calculate this number using JavaScript
400
00:19:27,000 --> 00:19:32,600
we're just going to add the cost of the
401
00:19:29,400 --> 00:19:35,840
products so in our console we're going
402
00:19:32,600 --> 00:19:38,000
to add the cost of the socks which is
403
00:19:35,840 --> 00:19:42,039
$10 and
404
00:19:38,000 --> 00:19:44,640
90 we have two of them so we're going to
405
00:19:42,039 --> 00:19:47,520
multiply this by
406
00:19:44,640 --> 00:19:52,400
two and then we're going to add the cost
407
00:19:47,520 --> 00:19:52,400
of the basketball so plus
408
00:19:53,120 --> 00:19:58,240
$20.95 if we press
409
00:19:55,520 --> 00:19:59,480
enter the computer will do this math
410
00:19:58,240 --> 00:20:02,840
calculation
411
00:19:59,480 --> 00:20:04,280
and give us this number and if we scroll
412
00:20:02,840 --> 00:20:06,480
to the top of our
413
00:20:04,280 --> 00:20:10,440
project you'll see that the number that
414
00:20:06,480 --> 00:20:12,520
we got matches what we have on the page
415
00:20:10,440 --> 00:20:15,880
so that's how we use JavaScript to
416
00:20:12,520 --> 00:20:18,880
calculate this number here let's do
417
00:20:15,880 --> 00:20:21,679
another example we're going to calculate
418
00:20:18,880 --> 00:20:25,000
this third number which is the cost of
419
00:20:21,679 --> 00:20:26,919
the products plus shipping feel free to
420
00:20:25,000 --> 00:20:30,159
pause the video if you want to try it
421
00:20:26,919 --> 00:20:32,960
yourself first otherwise we'll do it
422
00:20:30,159 --> 00:20:35,520
together let's go back to our
423
00:20:32,960 --> 00:20:39,840
console and we're going to add the cost
424
00:20:35,520 --> 00:20:45,880
of the products again which is
425
00:20:39,840 --> 00:20:45,880
$10.90 * 2 plus
426
00:20:46,200 --> 00:20:53,919
$20.95 but this time we're going to add
427
00:20:49,360 --> 00:20:56,760
the cost of shipping which is
428
00:20:53,919 --> 00:20:59,720
$4.99 so
429
00:20:56,760 --> 00:21:02,159
4.99 and press and
430
00:20:59,720 --> 00:21:05,280
enter the computer will do this
431
00:21:02,159 --> 00:21:08,480
calculation and give us this number
432
00:21:05,280 --> 00:21:11,559
which matches what we see in the final
433
00:21:08,480 --> 00:21:14,039
project next we're going to learn a very
434
00:21:11,559 --> 00:21:15,720
important feature of math called the
435
00:21:14,039 --> 00:21:18,600
order of
436
00:21:15,720 --> 00:21:21,240
operations adding subtracting
437
00:21:18,600 --> 00:21:24,000
multiplying and dividing these are
438
00:21:21,240 --> 00:21:26,240
called operations and the characters in
439
00:21:24,000 --> 00:21:29,080
the middle are called
440
00:21:26,240 --> 00:21:32,919
operators now there's a certain order
441
00:21:29,080 --> 00:21:35,799
that we do these operations for example
442
00:21:32,919 --> 00:21:43,840
if we go back to our console and type
443
00:21:35,799 --> 00:21:47,880
the calculation 1 + 1 * 3 and press
444
00:21:43,840 --> 00:21:52,679
enter notice that it multiplies 1 * 3
445
00:21:47,880 --> 00:21:53,919
first which equals 3 and then adds 1
446
00:21:52,679 --> 00:21:58,200
which equals
447
00:21:53,919 --> 00:21:59,240
4 notice that it does not add 1 + 1
448
00:21:58,200 --> 00:22:04,200
first
449
00:21:59,240 --> 00:22:07,960
which equal 2 and then 2 * 3 =
450
00:22:04,200 --> 00:22:11,559
6 the way math normally works is that
451
00:22:07,960 --> 00:22:14,840
multiply and divide are done first add
452
00:22:11,559 --> 00:22:17,799
and subtract are done after this is
453
00:22:14,840 --> 00:22:20,640
called the order of operations and
454
00:22:17,799 --> 00:22:24,159
JavaScript follows the same rules
455
00:22:20,640 --> 00:22:27,960
multiply and divide are done first add
456
00:22:24,159 --> 00:22:30,760
and subtract are done after the order of
457
00:22:27,960 --> 00:22:32,880
operations is also called operator
458
00:22:30,760 --> 00:22:35,360
precedence in
459
00:22:32,880 --> 00:22:38,039
JavaScript one thing to note is that
460
00:22:35,360 --> 00:22:40,840
multiply and divide have the same
461
00:22:38,039 --> 00:22:43,640
priority so if we have both in a
462
00:22:40,840 --> 00:22:47,559
calculation it will calculate from left
463
00:22:43,640 --> 00:22:50,520
to right add and subtract also have the
464
00:22:47,559 --> 00:22:53,400
same priority if we have both in the
465
00:22:50,520 --> 00:22:56,600
calculation it will also calculate from
466
00:22:53,400 --> 00:22:59,640
left to right another feature of the
467
00:22:56,600 --> 00:23:02,400
order of operations is that we can use
468
00:22:59,640 --> 00:23:06,720
brackets to control which part of the
469
00:23:02,400 --> 00:23:10,760
calculation gets done first for example
470
00:23:06,720 --> 00:23:17,440
let's type out this calculation again 1
471
00:23:10,760 --> 00:23:18,919
+ 1 * 3 but this time we're going to add
472
00:23:17,440 --> 00:23:24,880
an Open
473
00:23:18,919 --> 00:23:26,480
Bracket and a Clos bracket around 1 + 1
474
00:23:24,880 --> 00:23:29,440
if we press
475
00:23:26,480 --> 00:23:32,440
enter now the calculation inside the
476
00:23:29,440 --> 00:23:40,840
brackets will be done first so it will
477
00:23:32,440 --> 00:23:43,679
add 1 + 1 = 2 and then 2 * 3 = 6 so when
478
00:23:40,840 --> 00:23:46,440
we use brackets JavaScript will always
479
00:23:43,679 --> 00:23:49,520
do the calculation inside the brackets
480
00:23:46,440 --> 00:23:51,960
first and then do the rest of the
481
00:23:49,520 --> 00:23:54,799
calculation brackets have the highest
482
00:23:51,960 --> 00:23:57,400
priority in the order of
483
00:23:54,799 --> 00:23:59,440
operations now let's learn the syntax
484
00:23:57,400 --> 00:24:02,240
rules for brackets
485
00:23:59,440 --> 00:24:05,720
so we just have to have a matching Open
486
00:24:02,240 --> 00:24:08,760
Bracket and close bracket so something
487
00:24:05,720 --> 00:24:12,960
like this doesn't work because we have
488
00:24:08,760 --> 00:24:15,799
two Open brackets and no Clos bracket we
489
00:24:12,960 --> 00:24:18,880
also need to have a complete calculation
490
00:24:15,799 --> 00:24:23,200
in the brackets so this also doesn't
491
00:24:18,880 --> 00:24:25,159
work because 1 + 1 multiply is not a
492
00:24:23,200 --> 00:24:27,760
complete
493
00:24:25,159 --> 00:24:30,919
calculation now let's do some practical
494
00:24:27,760 --> 00:24:33,320
examples using the order of
495
00:24:30,919 --> 00:24:36,480
operations first we're going to do some
496
00:24:33,320 --> 00:24:38,200
more setup in the final project so we're
497
00:24:36,480 --> 00:24:40,720
actually going to remove all the
498
00:24:38,200 --> 00:24:43,960
products in our
499
00:24:40,720 --> 00:24:46,320
cart and then once our cart is empty
500
00:24:43,960 --> 00:24:47,799
we'll go to the homepage by clicking the
501
00:24:46,320 --> 00:24:50,480
top
502
00:24:47,799 --> 00:24:55,000
left and this time we're going to add
503
00:24:50,480 --> 00:25:00,000
some new products so we'll add one
504
00:24:55,000 --> 00:25:01,960
basketball and two T-shirts
505
00:25:00,000 --> 00:25:04,840
now let's go back to our cart by
506
00:25:01,960 --> 00:25:04,840
clicking the top
507
00:25:05,159 --> 00:25:11,080
right we'll scroll down and we're going
508
00:25:08,480 --> 00:25:14,039
to calculate the numbers in this section
509
00:25:11,080 --> 00:25:17,440
again let's calculate this number at the
510
00:25:14,039 --> 00:25:19,120
top which is the cost of the products
511
00:25:17,440 --> 00:25:22,279
we'll go back to our
512
00:25:19,120 --> 00:25:26,039
console and add the cost of the
513
00:25:22,279 --> 00:25:26,039
basketball which is
514
00:25:26,520 --> 00:25:34,200
$20.95 Plus the cost of the
515
00:25:30,159 --> 00:25:34,200
t-shirts which is
516
00:25:34,520 --> 00:25:42,520
$799 and we have two of them so we'll
517
00:25:38,159 --> 00:25:45,600
multiply this by two if we press
518
00:25:42,520 --> 00:25:49,919
enter this will give us the number that
519
00:25:45,600 --> 00:25:52,360
we see in the final project here notice
520
00:25:49,919 --> 00:25:54,720
that in this calculation we're taking
521
00:25:52,360 --> 00:25:57,240
advantage of the order of
522
00:25:54,720 --> 00:25:58,880
operations even though multiply is
523
00:25:57,240 --> 00:26:01,440
written last
524
00:25:58,880 --> 00:26:04,520
we still multiply these two numbers
525
00:26:01,440 --> 00:26:08,080
first so we calculate the cost of two
526
00:26:04,520 --> 00:26:10,159
T-shirts first and then we add the cost
527
00:26:08,080 --> 00:26:13,080
of the basketball
528
00:26:10,159 --> 00:26:15,200
after okay now let's try something a
529
00:26:13,080 --> 00:26:19,240
little more difficult we're going to
530
00:26:15,200 --> 00:26:22,840
learn how to calculate this 10% tax here
531
00:26:19,240 --> 00:26:25,440
so how do we calculate 10% of something
532
00:26:22,840 --> 00:26:28,960
unfortunately we can't just multiply by
533
00:26:25,440 --> 00:26:30,960
10% in JavaScript instead
534
00:26:28,960 --> 00:26:35,399
we have to calculate the percent
535
00:26:30,960 --> 00:26:40,120
manually so how do we do that 1% is
536
00:26:35,399 --> 00:26:46,039
actually equal to 1 / 100 that's what
537
00:26:40,120 --> 00:26:48,880
percent means so 10% is equal to 10 /
538
00:26:46,039 --> 00:26:53,000
100 which equals
539
00:26:48,880 --> 00:26:55,880
0.1 so to calculate 10% manually we just
540
00:26:53,000 --> 00:27:00,360
multiply this number by
541
00:26:55,880 --> 00:27:05,520
0.1 so we'll type 30 3
542
00:27:00,360 --> 00:27:07,919
6.93 multiplied by 10% or
543
00:27:05,520 --> 00:27:10,640
0.1 if we press
544
00:27:07,919 --> 00:27:12,679
enter it will give us a number that is
545
00:27:10,640 --> 00:27:15,880
close to what we have in the final
546
00:27:12,679 --> 00:27:18,360
project it's the same amount of money
547
00:27:15,880 --> 00:27:21,480
but our number is more accurate than we
548
00:27:18,360 --> 00:27:24,840
need so later in this lesson we'll learn
549
00:27:21,480 --> 00:27:28,320
how to round this number down to exactly
550
00:27:24,840 --> 00:27:30,159
what we have on the web page for now
551
00:27:28,320 --> 00:27:31,640
let's do some more practice with the
552
00:27:30,159 --> 00:27:35,159
order of
553
00:27:31,640 --> 00:27:38,200
operations let's calculate the tax again
554
00:27:35,159 --> 00:27:41,919
except instead of using the final number
555
00:27:38,200 --> 00:27:45,960
36.9 3 Let's calculate this number
556
00:27:41,919 --> 00:27:48,080
individually like here so at the bottom
557
00:27:45,960 --> 00:27:51,080
we're going to add the cost of the
558
00:27:48,080 --> 00:27:51,080
basketball
559
00:27:57,120 --> 00:28:05,279
20.95% 2 and then multiply this by the
560
00:28:01,559 --> 00:28:08,000
tax percent time
561
00:28:05,279 --> 00:28:11,399
0.1 and press
562
00:28:08,000 --> 00:28:14,600
enter unfortunately this number doesn't
563
00:28:11,399 --> 00:28:17,360
match what we got up here and that's
564
00:28:14,600 --> 00:28:20,159
because if we look at this calculation
565
00:28:17,360 --> 00:28:23,080
according to the order of operations
566
00:28:20,159 --> 00:28:25,799
multiply is done first so it will
567
00:28:23,080 --> 00:28:29,159
multiply these three numbers first and
568
00:28:25,799 --> 00:28:33,080
then add 20.95%
569
00:28:29,159 --> 00:28:35,240
after however this is not what we want
570
00:28:33,080 --> 00:28:38,320
we actually want to calculate this
571
00:28:35,240 --> 00:28:40,960
number first this is the cost of the
572
00:28:38,320 --> 00:28:43,360
products so how do we get the computer
573
00:28:40,960 --> 00:28:46,120
to calculate this first and then
574
00:28:43,360 --> 00:28:49,960
multiply by the tax percent
575
00:28:46,120 --> 00:28:52,440
0.1 to do this we can use brackets to
576
00:28:49,960 --> 00:28:55,960
control which part of the calculation
577
00:28:52,440 --> 00:28:59,559
gets done first so let's create this
578
00:28:55,960 --> 00:29:02,760
calculation again 20
579
00:28:59,559 --> 00:29:07,240
.95 +
580
00:29:02,760 --> 00:29:10,559
7.99 * 2 but this time we're going to
581
00:29:07,240 --> 00:29:13,360
add brackets around this part of the
582
00:29:10,559 --> 00:29:17,039
calculation to make sure that this gets
583
00:29:13,360 --> 00:29:21,200
calculated first and then at the end
584
00:29:17,039 --> 00:29:23,799
we'll multiply it by the tax percent
585
00:29:21,200 --> 00:29:26,720
0.1 and now if we press
586
00:29:23,799 --> 00:29:29,000
enter we will get the same number that
587
00:29:26,720 --> 00:29:31,799
we had before
588
00:29:29,000 --> 00:29:34,720
so that's how we use math and the Order
589
00:29:31,799 --> 00:29:38,000
of Operations to calculate the numbers
590
00:29:34,720 --> 00:29:40,080
in this section of the final project so
591
00:29:38,000 --> 00:29:42,640
don't worry you don't have to be good at
592
00:29:40,080 --> 00:29:45,760
math to learn JavaScript this is just to
593
00:29:42,640 --> 00:29:48,279
show you how math Works in
594
00:29:45,760 --> 00:29:50,360
JavaScript in the rest of this lesson
595
00:29:48,279 --> 00:29:53,799
we're going to learn some more details
596
00:29:50,360 --> 00:29:56,279
about numbers and math the first detail
597
00:29:53,799 --> 00:29:58,799
we're going to learn is a weird behavior
598
00:29:56,279 --> 00:30:00,799
of math in JavaScript
599
00:29:58,799 --> 00:30:04,039
first we'll need to learn some
600
00:30:00,799 --> 00:30:08,919
terminology in programming whole numbers
601
00:30:04,039 --> 00:30:11,039
like 2 3 and 4 are called integers
602
00:30:08,919 --> 00:30:15,559
decimal numbers like
603
00:30:11,039 --> 00:30:19,600
2.2 and 2.5 are called floating Point
604
00:30:15,559 --> 00:30:22,360
numbers or floats and unfortunately
605
00:30:19,600 --> 00:30:25,840
computers have a problem working with
606
00:30:22,360 --> 00:30:29,960
floats for example if we go back to our
607
00:30:25,840 --> 00:30:29,960
console and type the calculation
608
00:30:30,240 --> 00:30:35,640
0.1 plus
609
00:30:33,279 --> 00:30:38,640
0.2 and press
610
00:30:35,640 --> 00:30:42,200
enter it will give us this weird number
611
00:30:38,640 --> 00:30:43,279
here that's close to 0.3 but a little
612
00:30:42,200 --> 00:30:45,720
bit
613
00:30:43,279 --> 00:30:48,480
inaccurate so this problem is not
614
00:30:45,720 --> 00:30:51,679
specific to JavaScript many programming
615
00:30:48,480 --> 00:30:53,840
languages also have this problem the
616
00:30:51,679 --> 00:30:56,960
reason this happens is because of how
617
00:30:53,840 --> 00:30:59,320
computers store numbers I'll give a
618
00:30:56,960 --> 00:31:02,760
simplified explan
619
00:30:59,320 --> 00:31:06,559
computers can only store zeros and ones
620
00:31:02,760 --> 00:31:08,799
while humans can count from 0 to 9 so
621
00:31:06,559 --> 00:31:12,039
there's sort of a mismatch between our
622
00:31:08,799 --> 00:31:14,840
number systems for integers this is not
623
00:31:12,039 --> 00:31:18,559
a problem the computer can just use a
624
00:31:14,840 --> 00:31:22,240
bunch of zeros and ones to store it
625
00:31:18,559 --> 00:31:24,279
however for decimal numbers or floats
626
00:31:22,240 --> 00:31:27,559
sometimes the computer can't store the
627
00:31:24,279 --> 00:31:29,919
number properly for example here's how
628
00:31:27,559 --> 00:31:34,720
the computer computer tries to store
629
00:31:29,919 --> 00:31:37,279
0.2 using only zeros and ones at the top
630
00:31:34,720 --> 00:31:40,559
is what the computer stores at the
631
00:31:37,279 --> 00:31:42,960
bottom is what this is equal to in human
632
00:31:40,559 --> 00:31:46,720
numbers we can see that the computer
633
00:31:42,960 --> 00:31:49,559
gets closer and closer to 0.2 but never
634
00:31:46,720 --> 00:31:52,279
actually reaches it and this is why we
635
00:31:49,559 --> 00:31:55,320
get these inaccuracies when calculating
636
00:31:52,279 --> 00:31:58,960
with floats because computers can't
637
00:31:55,320 --> 00:32:01,880
store some floats properly note that
638
00:31:58,960 --> 00:32:05,000
this doesn't happen with all floats for
639
00:32:01,880 --> 00:32:08,200
example computers can store
640
00:32:05,000 --> 00:32:10,840
0.25 without any problems so these
641
00:32:08,200 --> 00:32:14,679
inaccuracies only happen with some
642
00:32:10,840 --> 00:32:17,240
floats but not all of them however when
643
00:32:14,679 --> 00:32:20,240
calculating money we definitely want to
644
00:32:17,240 --> 00:32:23,240
avoid any inaccuracies so let's learn
645
00:32:20,240 --> 00:32:26,399
how to do that first we're going to set
646
00:32:23,240 --> 00:32:29,799
up our cart again so make sure in your
647
00:32:26,399 --> 00:32:32,880
cart you have one basketball with free
648
00:32:29,799 --> 00:32:35,679
shipping and this time you have one
649
00:32:32,880 --> 00:32:40,679
t-shirt so we're going to click
650
00:32:35,679 --> 00:32:44,120
update change this to one and click
651
00:32:40,679 --> 00:32:46,919
save and this t-shirt also has free
652
00:32:44,120 --> 00:32:49,039
shipping now let's scroll up and we're
653
00:32:46,919 --> 00:32:51,720
going to calculate this number at the
654
00:32:49,039 --> 00:32:54,039
top again which is the cost of the
655
00:32:51,720 --> 00:32:56,760
products let's go into our
656
00:32:54,039 --> 00:32:59,840
console and we're going to add the cost
657
00:32:56,760 --> 00:32:59,840
of the basketball
658
00:33:00,760 --> 00:33:08,440
$20.95 plus the cost of the
659
00:33:04,320 --> 00:33:08,440
t-shirt which is
660
00:33:08,880 --> 00:33:14,559
$7.99 if we press
661
00:33:11,320 --> 00:33:17,039
enter calculating with these floats
662
00:33:14,559 --> 00:33:20,600
causes the inaccuracies that we saw
663
00:33:17,039 --> 00:33:23,159
earlier so how do we avoid this problem
664
00:33:20,600 --> 00:33:26,080
the best practice when calculating money
665
00:33:23,159 --> 00:33:29,760
is to calculate in cents instead of
666
00:33:26,080 --> 00:33:29,760
dollars so instead of
667
00:33:29,919 --> 00:33:38,639
$20.95 we're going to calculate
668
00:33:34,600 --> 00:33:41,399
2,95 plus
669
00:33:38,639 --> 00:33:44,240
$7.99 notice we're not using floats
670
00:33:41,399 --> 00:33:46,840
anymore so we avoid the
671
00:33:44,240 --> 00:33:49,880
inaccuracies but now this number is in
672
00:33:46,840 --> 00:33:52,960
cents so we need to convert back to
673
00:33:49,880 --> 00:33:56,120
Dollars to do that we'll surround this
674
00:33:52,960 --> 00:33:58,919
calculation with brackets to make sure
675
00:33:56,120 --> 00:34:04,039
we calculate this first and then at the
676
00:33:58,919 --> 00:34:07,600
end we'll divide by 100 to convert back
677
00:34:04,039 --> 00:34:11,159
to dollars because there are 100 cents
678
00:34:07,600 --> 00:34:13,800
in each dollar if we press
679
00:34:11,159 --> 00:34:16,919
enter and scroll
680
00:34:13,800 --> 00:34:20,760
up that's how we get the exact number
681
00:34:16,919 --> 00:34:23,639
that we see on the page so remember in
682
00:34:20,760 --> 00:34:25,919
programming calculations with floats are
683
00:34:23,639 --> 00:34:28,560
sometimes inaccurate and when working
684
00:34:25,919 --> 00:34:31,359
with money the best practice is to do
685
00:34:28,560 --> 00:34:34,159
the calculation in cents and then
686
00:34:31,359 --> 00:34:37,079
convert back to dollars at the
687
00:34:34,159 --> 00:34:40,720
end the next detail we're going to learn
688
00:34:37,079 --> 00:34:43,399
is how to round a number in JavaScript
689
00:34:40,720 --> 00:34:46,520
rounding just means taking a number and
690
00:34:43,399 --> 00:34:49,440
moving it to the nearest integer to
691
00:34:46,520 --> 00:34:52,879
round a number we can use this
692
00:34:49,440 --> 00:34:57,839
code capital m
693
00:34:52,879 --> 00:35:01,000
math. round Open Bracket close bracket
694
00:34:57,839 --> 00:35:03,200
so make sure you use a capital M because
695
00:35:01,000 --> 00:35:06,200
JavaScript is case
696
00:35:03,200 --> 00:35:09,359
sensitive now between the brackets we
697
00:35:06,200 --> 00:35:11,440
can put a number that we want to round
698
00:35:09,359 --> 00:35:15,320
like
699
00:35:11,440 --> 00:35:17,079
2.2 if we press enter it will round this
700
00:35:15,320 --> 00:35:23,560
number down to
701
00:35:17,079 --> 00:35:26,400
two if we do capital M math do round
702
00:35:23,560 --> 00:35:28,760
Open Bracket close bracket and between
703
00:35:26,400 --> 00:35:30,880
the brackets we put
704
00:35:28,760 --> 00:35:36,520
2.8 and press
705
00:35:30,880 --> 00:35:40,000
enter it will round 2.8 up to three now
706
00:35:36,520 --> 00:35:42,280
let's do a practical example with
707
00:35:40,000 --> 00:35:45,160
math.round we're going to calculate the
708
00:35:42,280 --> 00:35:48,520
tax again but this time we're going to
709
00:35:45,160 --> 00:35:52,440
round the result to exactly this number
710
00:35:48,520 --> 00:35:55,079
on the page so first let's calculate the
711
00:35:52,440 --> 00:35:57,640
tax we'll go into our
712
00:35:55,079 --> 00:36:01,800
console and add the cost of the product
713
00:35:57,640 --> 00:36:04,880
products in cents so
714
00:36:01,800 --> 00:36:07,560
2,95 for the
715
00:36:04,880 --> 00:36:10,240
basketball and plus the cost of the
716
00:36:07,560 --> 00:36:12,760
t-shirt which is
717
00:36:10,240 --> 00:36:16,079
$7.99 and we'll surround this in
718
00:36:12,760 --> 00:36:18,960
Brackets to make sure we calculate this
719
00:36:16,079 --> 00:36:23,240
first and then we're going to multiply
720
00:36:18,960 --> 00:36:26,400
this by the tax percent or
721
00:36:23,240 --> 00:36:29,760
0.1 and finally we'll convert this back
722
00:36:26,400 --> 00:36:32,640
to dollars so let's surround this in
723
00:36:29,760 --> 00:36:35,960
Brackets as well to make sure we
724
00:36:32,640 --> 00:36:41,240
calculate this first and at the end
725
00:36:35,960 --> 00:36:44,040
we'll divide by 100 to convert back to
726
00:36:41,240 --> 00:36:47,359
dollars so notice here we can have
727
00:36:44,040 --> 00:36:50,079
brackets inside brackets in this
728
00:36:47,359 --> 00:36:53,440
situation JavaScript will calculate the
729
00:36:50,079 --> 00:36:56,960
inner brackets first and then the outer
730
00:36:53,440 --> 00:36:58,280
brackets and then everything else if we
731
00:36:56,960 --> 00:37:01,960
press enter
732
00:36:58,280 --> 00:37:05,359
here this gives us
733
00:37:01,960 --> 00:37:08,480
2.89 which is close to the number on the
734
00:37:05,359 --> 00:37:12,040
page it's the same amount of money but
735
00:37:08,480 --> 00:37:15,119
our number is more accurate than we need
736
00:37:12,040 --> 00:37:18,920
so now let's learn how to use math.round
737
00:37:15,119 --> 00:37:22,680
to round this number to exactly
738
00:37:18,920 --> 00:37:26,200
2.89 first let's create a copy of this
739
00:37:22,680 --> 00:37:29,160
calculation so we'll select it right
740
00:37:26,200 --> 00:37:34,079
click copy
741
00:37:29,160 --> 00:37:36,920
and down here right click and
742
00:37:34,079 --> 00:37:39,240
paste by the way if you paste in the
743
00:37:36,920 --> 00:37:44,440
console you might see this warning
744
00:37:39,240 --> 00:37:44,440
message to fix this you can type allow
745
00:37:45,240 --> 00:37:51,200
pasting and press enter and now you can
746
00:37:52,440 --> 00:38:01,280
paste so let's continue and we were
747
00:37:55,200 --> 00:38:01,280
trying to round 2.89 4 to exactly
748
00:38:02,480 --> 00:38:08,040
2.89 so one thing we might try to do is
749
00:38:05,760 --> 00:38:12,040
to round this entire
750
00:38:08,040 --> 00:38:16,560
calculation however this will round 2.89
751
00:38:12,040 --> 00:38:20,040
4 to 3 because it rounds to the nearest
752
00:38:16,560 --> 00:38:23,440
integer instead what we want to round is
753
00:38:20,040 --> 00:38:28,599
this number here so remember that this
754
00:38:23,440 --> 00:38:30,560
number is the result in cents which is
755
00:38:28,599 --> 00:38:33,960
289.50
756
00:38:30,560 --> 00:38:36,040
if we round this number it will round
757
00:38:33,960 --> 00:38:40,079
down to
758
00:38:36,040 --> 00:38:40,079
289 which is exactly
759
00:38:40,520 --> 00:38:49,480
$289 so to round this calculation at the
760
00:38:44,280 --> 00:38:49,480
front we'll type capital M
761
00:38:50,560 --> 00:38:56,040
math.round so we already have brackets
762
00:38:53,079 --> 00:39:00,280
around this so we don't need extra
763
00:38:56,040 --> 00:39:03,560
brackets so this this will round to
764
00:39:00,280 --> 00:39:10,000
289 and finally we'll convert this back
765
00:39:03,560 --> 00:39:11,400
to dollars at the End by dividing by 100
766
00:39:10,000 --> 00:39:13,599
if we press
767
00:39:11,400 --> 00:39:16,440
enter that's how we rounded this
768
00:39:13,599 --> 00:39:17,160
calculation to get the exact number on
769
00:39:16,440 --> 00:39:20,720
the
770
00:39:17,160 --> 00:39:24,119
page so to summarize we first calculate
771
00:39:20,720 --> 00:39:27,079
the result in cents and then we round
772
00:39:24,119 --> 00:39:29,760
this to the nearest scent and then at
773
00:39:27,079 --> 00:39:32,720
the end and we convert back to
774
00:39:29,760 --> 00:39:35,440
Dollars again don't worry you don't have
775
00:39:32,720 --> 00:39:38,200
to be good at math to learn JavaScript
776
00:39:35,440 --> 00:39:40,720
these examples are just for learning
777
00:39:38,200 --> 00:39:43,599
almost all the math we do in JavaScript
778
00:39:40,720 --> 00:39:46,040
is more simple than this I'll give you
779
00:39:43,599 --> 00:39:49,119
some exercises at the end of this lesson
780
00:39:46,040 --> 00:39:50,359
to help you get more practice the last
781
00:39:49,119 --> 00:39:53,160
thing we're going to learn in this
782
00:39:50,359 --> 00:39:56,440
lesson is how to use Google when you're
783
00:39:53,160 --> 00:39:59,119
learning to code so far I've been giving
784
00:39:56,440 --> 00:40:01,319
you different pieces pces of code like
785
00:39:59,119 --> 00:40:03,880
alert and
786
00:40:01,319 --> 00:40:07,400
math.round you might be wondering where
787
00:40:03,880 --> 00:40:10,280
do I find this code these pieces of code
788
00:40:07,400 --> 00:40:13,520
are features of JavaScript and I find
789
00:40:10,280 --> 00:40:15,599
this code by searching on Google so
790
00:40:13,520 --> 00:40:18,240
we're going to learn how to use Google
791
00:40:15,599 --> 00:40:21,800
to learn new features of JavaScript on
792
00:40:18,240 --> 00:40:24,760
our own let's go to our browser and
793
00:40:21,800 --> 00:40:30,520
create a new tab at the
794
00:40:24,760 --> 00:40:30,520
top and we'll click here and type
795
00:40:30,920 --> 00:40:37,240
google.com and press
796
00:40:33,400 --> 00:40:39,640
enter and we'll search in Google so the
797
00:40:37,240 --> 00:40:42,800
trick to searching in Google is to
798
00:40:39,640 --> 00:40:46,079
search for what we are trying to do for
799
00:40:42,800 --> 00:40:49,400
example if we want to round a number we
800
00:40:46,079 --> 00:40:54,680
would search for
801
00:40:49,400 --> 00:40:58,680
JavaScript how to round a
802
00:40:54,680 --> 00:41:00,599
number if we press enter
803
00:40:58,680 --> 00:41:03,560
sometimes you might get the code right
804
00:41:00,599 --> 00:41:05,400
away in the first result and sometimes
805
00:41:03,560 --> 00:41:08,760
you might have to go into the other
806
00:41:05,400 --> 00:41:12,240
results to find the code that you need
807
00:41:08,760 --> 00:41:15,160
in my example I see the code math.round
808
00:41:12,240 --> 00:41:18,280
in the first result so I can click into
809
00:41:15,160 --> 00:41:21,400
this result read about what this code
810
00:41:18,280 --> 00:41:24,560
does and also see some examples of how
811
00:41:21,400 --> 00:41:26,520
to use it one thing to keep in mind is
812
00:41:24,560 --> 00:41:28,280
that when you're searching in Google you
813
00:41:26,520 --> 00:41:31,119
might not understand understand all the
814
00:41:28,280 --> 00:41:33,920
code that you get in your results for
815
00:41:31,119 --> 00:41:36,880
example here there's a lot of code that
816
00:41:33,920 --> 00:41:39,560
we haven't learned yet and actually
817
00:41:36,880 --> 00:41:42,800
that's okay we just need to look for the
818
00:41:39,560 --> 00:41:45,680
pieces of code that look familiar to us
819
00:41:42,800 --> 00:41:48,160
like this part of the code we can then
820
00:41:45,680 --> 00:41:50,920
use this part of the code in our own
821
00:41:48,160 --> 00:41:54,160
code we don't have to understand every
822
00:41:50,920 --> 00:41:56,319
bit of code that we get from Google and
823
00:41:54,160 --> 00:41:58,839
don't worry as we move through this
824
00:41:56,319 --> 00:42:01,160
course we we will understand more and
825
00:41:58,839 --> 00:42:02,440
more of this code that we get from
826
00:42:01,160 --> 00:42:05,319
Google
827
00:42:02,440 --> 00:42:08,520
results these days we also have some
828
00:42:05,319 --> 00:42:11,680
artificial intelligence or AI tools that
829
00:42:08,520 --> 00:42:13,480
can help us search for code I'll provide
830
00:42:11,680 --> 00:42:15,520
links to some of these tools in the
831
00:42:13,480 --> 00:42:18,200
video
832
00:42:15,520 --> 00:42:20,480
description by the way to find the links
833
00:42:18,200 --> 00:42:23,280
mentioned in each lesson you can click
834
00:42:20,480 --> 00:42:23,280
here in the
835
00:42:26,119 --> 00:42:32,000
description and this page contains all
836
00:42:28,559 --> 00:42:32,000
the links mentioned in each
837
00:42:33,599 --> 00:42:38,880
lesson and that's the end of this lesson
838
00:42:36,720 --> 00:42:42,040
in this lesson we learned how to work
839
00:42:38,880 --> 00:42:45,760
with numbers and math we learned the
840
00:42:42,040 --> 00:42:47,760
order of operations and brackets we
841
00:42:45,760 --> 00:42:50,160
calculated the numbers in the final
842
00:42:47,760 --> 00:42:52,319
Amazon Project we learned that
843
00:42:50,160 --> 00:42:54,920
calculations using floats can be
844
00:42:52,319 --> 00:42:57,400
inaccurate and how to avoid this problem
845
00:42:54,920 --> 00:42:59,760
when working with money we learned how
846
00:42:57,400 --> 00:43:02,160
to round numbers using
847
00:42:59,760 --> 00:43:05,319
math.round and we learned how to search
848
00:43:02,160 --> 00:43:07,800
for code on our own here are some
849
00:43:05,319 --> 00:43:11,319
exercises to help you practice numbers
850
00:43:07,800 --> 00:43:11,319
and math
851
00:43:31,119 --> 00:43:36,480
in the previous lesson we learned how to
852
00:43:33,280 --> 00:43:38,520
work with numbers and math in this
853
00:43:36,480 --> 00:43:41,280
lesson we're going to learn how to work
854
00:43:38,520 --> 00:43:43,680
with text and we're going to create the
855
00:43:41,280 --> 00:43:46,359
text in this section of the final
856
00:43:43,680 --> 00:43:48,800
project first make sure you have the
857
00:43:46,359 --> 00:43:51,920
final project open and you're on the
858
00:43:48,800 --> 00:43:55,680
checkout page also make sure you have
859
00:43:51,920 --> 00:43:58,040
the console open on this page if not you
860
00:43:55,680 --> 00:44:00,880
can go to a blank area
861
00:43:58,040 --> 00:44:04,599
right click click
862
00:44:00,880 --> 00:44:07,040
inspect and then click the
863
00:44:04,599 --> 00:44:10,440
console now we're going to learn a
864
00:44:07,040 --> 00:44:14,079
feature of JavaScript called strings a
865
00:44:10,440 --> 00:44:17,680
string represents text let's go to our
866
00:44:14,079 --> 00:44:21,800
console and create our first string
867
00:44:17,680 --> 00:44:25,440
we're going to type single quote hello
868
00:44:21,800 --> 00:44:29,000
and single quote and press
869
00:44:25,440 --> 00:44:32,240
enter this is a string and it represents
870
00:44:29,000 --> 00:44:35,640
the text hello and we've actually seen
871
00:44:32,240 --> 00:44:39,280
this code before in the first lesson the
872
00:44:35,640 --> 00:44:44,200
first piece of code that we learned was
873
00:44:39,280 --> 00:44:47,760
alert Open Bracket single quote hello
874
00:44:44,200 --> 00:44:50,839
single quote close bracket and
875
00:44:47,760 --> 00:44:53,200
semicolon this code creates a popup on
876
00:44:50,839 --> 00:44:57,359
the page if we press
877
00:44:53,200 --> 00:45:00,400
enter it creates a popup now in inside
878
00:44:57,359 --> 00:45:03,599
these brackets we actually created a
879
00:45:00,400 --> 00:45:07,160
string this string is the text that
880
00:45:03,599 --> 00:45:09,280
appears in the popup so as you can see a
881
00:45:07,160 --> 00:45:11,359
string represents
882
00:45:09,280 --> 00:45:14,079
text let's press
883
00:45:11,359 --> 00:45:17,880
okay and now let's learn the syntax
884
00:45:14,079 --> 00:45:21,200
rules for strings to create a string we
885
00:45:17,880 --> 00:45:24,280
just write some text like hello and then
886
00:45:21,200 --> 00:45:27,640
surround this text with single quotes
887
00:45:24,280 --> 00:45:30,760
one at the beginning and one at the end
888
00:45:27,640 --> 00:45:35,760
we can also add strings together for
889
00:45:30,760 --> 00:45:39,599
example let's type the string
890
00:45:35,760 --> 00:45:42,200
sum plus the string
891
00:45:39,599 --> 00:45:45,400
text and press
892
00:45:42,200 --> 00:45:47,880
enter when we add two strings it
893
00:45:45,400 --> 00:45:50,880
combines the strings together into a
894
00:45:47,880 --> 00:45:54,160
bigger string and this makes sense we're
895
00:45:50,880 --> 00:45:56,640
adding two pieces of text together we
896
00:45:54,160 --> 00:45:57,640
can also add more than two strings at a
897
00:45:56,640 --> 00:46:02,520
time
898
00:45:57,640 --> 00:46:06,760
for example we can type the string
899
00:46:02,520 --> 00:46:11,240
sum plus the string
900
00:46:06,760 --> 00:46:13,480
more plus the string
901
00:46:11,240 --> 00:46:16,559
text if we press
902
00:46:13,480 --> 00:46:20,599
enter the computer will combine all
903
00:46:16,559 --> 00:46:24,000
three strings into one big string by the
904
00:46:20,599 --> 00:46:27,200
way this is called concatenation when we
905
00:46:24,000 --> 00:46:30,599
combine strings together now in in the
906
00:46:27,200 --> 00:46:33,160
previous lesson we learned about numbers
907
00:46:30,599 --> 00:46:36,000
numbers and strings are two different
908
00:46:33,160 --> 00:46:39,079
types of values in JavaScript they
909
00:46:36,000 --> 00:46:41,400
represent different things and we can
910
00:46:39,079 --> 00:46:47,359
actually check what type of value
911
00:46:41,400 --> 00:46:50,400
something is using this code type of and
912
00:46:47,359 --> 00:46:53,800
then space and then a value like the
913
00:46:50,400 --> 00:46:57,400
number two if we press
914
00:46:53,800 --> 00:47:05,119
enter type of will tell us that two
915
00:46:57,400 --> 00:47:09,000
is a number if we do type of quote hello
916
00:47:05,119 --> 00:47:11,319
quote and press enter it will tell us
917
00:47:09,000 --> 00:47:14,599
that hello is a
918
00:47:11,319 --> 00:47:18,720
string now what if we added a string and
919
00:47:14,599 --> 00:47:21,160
a number together for example let's type
920
00:47:18,720 --> 00:47:25,680
the string
921
00:47:21,160 --> 00:47:27,839
hello plus the number three and press
922
00:47:25,680 --> 00:47:31,119
enter
923
00:47:27,839 --> 00:47:33,520
so when we add a string and a number
924
00:47:31,119 --> 00:47:37,440
JavaScript will automatically convert
925
00:47:33,520 --> 00:47:41,599
this number into a string so this gets
926
00:47:37,440 --> 00:47:42,720
converted into the string hello plus the
927
00:47:41,599 --> 00:47:45,640
string
928
00:47:42,720 --> 00:47:49,800
three and then it combines them together
929
00:47:45,640 --> 00:47:54,160
into the string hello 3 this feature is
930
00:47:49,800 --> 00:47:56,960
called type coersion or automatic type
931
00:47:54,160 --> 00:47:59,200
conversion okay now that we understand
932
00:47:56,960 --> 00:48:02,160
understand the basics of strings let's
933
00:47:59,200 --> 00:48:05,240
do some practical examples we're going
934
00:48:02,160 --> 00:48:08,520
to use strings and numbers to create the
935
00:48:05,240 --> 00:48:11,359
text in this section of the project
936
00:48:08,520 --> 00:48:15,280
first make sure that in your cart you
937
00:48:11,359 --> 00:48:19,280
have one basketball with free shipping
938
00:48:15,280 --> 00:48:22,520
and you have one t-shirt also with free
939
00:48:19,280 --> 00:48:26,559
shipping and you have no other
940
00:48:22,520 --> 00:48:29,880
products let's scroll up and we'll start
941
00:48:26,559 --> 00:48:32,680
by creating this text in the top right
942
00:48:29,880 --> 00:48:34,480
so this is the cost of the products but
943
00:48:32,680 --> 00:48:37,640
this time we're going to have a dollar
944
00:48:34,480 --> 00:48:38,839
sign so instead of just a number this
945
00:48:37,640 --> 00:48:41,599
will be
946
00:48:38,839 --> 00:48:44,720
text so one thing we can do to create
947
00:48:41,599 --> 00:48:49,599
this text is just type out the string
948
00:48:44,720 --> 00:48:51,760
directly like quote doll
949
00:48:49,599 --> 00:48:54,960
28.94 and
950
00:48:51,760 --> 00:48:57,319
quote however let's actually calculate
951
00:48:54,960 --> 00:48:59,640
this number using math
952
00:48:57,319 --> 00:49:01,839
remember the advantage of JavaScript is
953
00:48:59,640 --> 00:49:05,480
that it's able to do
954
00:49:01,839 --> 00:49:08,079
calculations so instead of typing out
955
00:49:05,480 --> 00:49:12,119
28.94 we're just going to create the
956
00:49:08,079 --> 00:49:16,599
string Dollar Sign Plus and we're going
957
00:49:12,119 --> 00:49:18,960
to calculate this number using math so
958
00:49:16,599 --> 00:49:22,400
we're going to add the cost of the
959
00:49:18,960 --> 00:49:22,400
basketball which is
960
00:49:22,960 --> 00:49:30,760
$2.95
961
00:49:25,000 --> 00:49:30,760
plus the cost of of the t-shirt which is
962
00:49:31,040 --> 00:49:36,559
$7.99 if we press
963
00:49:33,680 --> 00:49:39,520
enter unfortunately this doesn't look
964
00:49:36,559 --> 00:49:41,920
right instead of doing math and adding
965
00:49:39,520 --> 00:49:44,839
these two numbers together it just sort
966
00:49:41,920 --> 00:49:48,319
of put the numbers one after another
967
00:49:44,839 --> 00:49:51,680
into the string so why is this happening
968
00:49:48,319 --> 00:49:54,280
JavaScript adds from left to right so
969
00:49:51,680 --> 00:49:57,400
the first step is to add these two
970
00:49:54,280 --> 00:50:00,359
values and as we learned if we add a
971
00:49:57,400 --> 00:50:03,040
string and a number JavaScript will
972
00:50:00,359 --> 00:50:06,760
automatically convert this number into a
973
00:50:03,040 --> 00:50:11,040
string so the result of this calculation
974
00:50:06,760 --> 00:50:13,200
will be the string doll
975
00:50:11,040 --> 00:50:17,319
2.95 and
976
00:50:13,200 --> 00:50:22,079
quote the next step is to add
977
00:50:17,319 --> 00:50:25,839
7.99 so it will add
978
00:50:22,079 --> 00:50:27,280
7.99 and now we're adding again a string
979
00:50:25,839 --> 00:50:29,880
and a number
980
00:50:27,280 --> 00:50:33,040
so JavaScript will automatically convert
981
00:50:29,880 --> 00:50:36,400
this number into a string and combine
982
00:50:33,040 --> 00:50:39,400
them together that's why it puts
983
00:50:36,400 --> 00:50:40,640
7.99 at the end of this string instead
984
00:50:39,400 --> 00:50:44,040
of doing
985
00:50:40,640 --> 00:50:47,559
math so what we actually want to do here
986
00:50:44,040 --> 00:50:50,960
is to add these two numbers first and
987
00:50:47,559 --> 00:50:53,960
then combine the total with the string
988
00:50:50,960 --> 00:50:57,240
so how do we do this the solution is
989
00:50:53,960 --> 00:51:00,119
that strings also follow the order of
990
00:50:57,240 --> 00:51:02,799
operations just like numbers and
991
00:51:00,119 --> 00:51:05,480
remember in the order of operations we
992
00:51:02,799 --> 00:51:09,040
can use brackets to control which part
993
00:51:05,480 --> 00:51:11,559
of a calculation gets done first so
994
00:51:09,040 --> 00:51:18,680
let's type this calculation out again
995
00:51:11,559 --> 00:51:18,680
the string Dollar Sign Plus 20.95%
996
00:51:26,680 --> 00:51:32,079
close bracket around this
997
00:51:29,520 --> 00:51:35,799
calculation this tells the computer to
998
00:51:32,079 --> 00:51:38,000
calculate this number first using math
999
00:51:35,799 --> 00:51:41,400
and then combine this result with the
1000
00:51:38,000 --> 00:51:44,799
string after if we press
1001
00:51:41,400 --> 00:51:47,520
enter now this is doing math and it
1002
00:51:44,799 --> 00:51:49,760
solves our original problem
1003
00:51:47,520 --> 00:51:53,160
unfortunately now we have another
1004
00:51:49,760 --> 00:51:55,799
problem this math is inaccurate so
1005
00:51:53,160 --> 00:51:58,400
remember from the previous lesson doing
1006
00:51:55,799 --> 00:51:59,480
calculations with floats can sometimes
1007
00:51:58,400 --> 00:52:01,839
cause
1008
00:51:59,480 --> 00:52:04,920
inaccuracies and the best practice when
1009
00:52:01,839 --> 00:52:07,960
calculating money is always calculate in
1010
00:52:04,920 --> 00:52:11,599
cents and then convert back to dollars
1011
00:52:07,960 --> 00:52:14,520
at the end so at the bottom here we're
1012
00:52:11,599 --> 00:52:20,520
going to add the string
1013
00:52:14,520 --> 00:52:24,799
Dollar Plus open bracket and instead of
1014
00:52:20,520 --> 00:52:28,359
$20.95 we're going to add
1015
00:52:24,799 --> 00:52:32,400
2,95 Plus
1016
00:52:28,359 --> 00:52:34,920
$7.99 and close bracket and then at the
1017
00:52:32,400 --> 00:52:40,920
end we're going to convert this number
1018
00:52:34,920 --> 00:52:42,280
back to Dollars by dividing by 100 if we
1019
00:52:40,920 --> 00:52:44,880
press
1020
00:52:42,280 --> 00:52:46,680
enter this will give us the text that we
1021
00:52:44,880 --> 00:52:50,200
see in the final
1022
00:52:46,680 --> 00:52:54,160
project again strings follow the same
1023
00:52:50,200 --> 00:52:57,520
order of operations as numbers brackets
1024
00:52:54,160 --> 00:53:00,240
are always calculated first multiply and
1025
00:52:57,520 --> 00:53:03,880
divide are done next and add and
1026
00:53:00,240 --> 00:53:08,040
subtract are done after so adding this
1027
00:53:03,880 --> 00:53:11,359
result to the string is the last
1028
00:53:08,040 --> 00:53:14,720
step now let's do a more complicated
1029
00:53:11,359 --> 00:53:18,359
example let's use strings and numbers to
1030
00:53:14,720 --> 00:53:21,520
create this entire line of text not just
1031
00:53:18,359 --> 00:53:24,839
the dollar text to create this we're
1032
00:53:21,520 --> 00:53:27,280
going to go from left to right let's go
1033
00:53:24,839 --> 00:53:30,559
back in our console and we're going to
1034
00:53:27,280 --> 00:53:34,599
start with the string
1035
00:53:30,559 --> 00:53:37,960
items Open Bracket and here we could
1036
00:53:34,599 --> 00:53:40,599
just type two and close bracket but
1037
00:53:37,960 --> 00:53:44,319
let's actually calculate this number as
1038
00:53:40,599 --> 00:53:46,599
well using math so this number is the
1039
00:53:44,319 --> 00:53:50,640
quantity or the number of products in
1040
00:53:46,599 --> 00:53:53,280
our cart let's go back to our console
1041
00:53:50,640 --> 00:53:55,480
we're going to end the string here and
1042
00:53:53,280 --> 00:53:57,240
we're going to add and we're going to
1043
00:53:55,480 --> 00:54:01,799
calculate the quantity
1044
00:53:57,240 --> 00:54:04,559
so we have one basketball plus one
1045
00:54:01,799 --> 00:54:07,799
t-shirt again we run into the same
1046
00:54:04,559 --> 00:54:11,119
problem as before this gets calculated
1047
00:54:07,799 --> 00:54:13,599
first and results in a string and then
1048
00:54:11,119 --> 00:54:17,280
it will just combine the one at the end
1049
00:54:13,599 --> 00:54:19,480
of the string instead of doing math to
1050
00:54:17,280 --> 00:54:23,480
solve this we're going to use brackets
1051
00:54:19,480 --> 00:54:26,960
again so around the 1 + 1 we're going to
1052
00:54:23,480 --> 00:54:30,119
add Open Bracket and close
1053
00:54:26,960 --> 00:54:33,000
bracket this tells the computer to add
1054
00:54:30,119 --> 00:54:34,119
the numbers first and then combine it
1055
00:54:33,000 --> 00:54:37,240
with a
1056
00:54:34,119 --> 00:54:40,839
string all right let's keep going from
1057
00:54:37,240 --> 00:54:44,760
left to right we're going to add the
1058
00:54:40,839 --> 00:54:47,799
rest of the string quote close bracket
1059
00:54:44,760 --> 00:54:50,760
colon and let's just use a space to
1060
00:54:47,799 --> 00:54:54,680
represent the space between these two so
1061
00:54:50,760 --> 00:54:56,799
we'll type a space dollar sign and then
1062
00:54:54,680 --> 00:55:00,440
we're going to calculate this number
1063
00:54:56,799 --> 00:55:04,359
again and add it to the string so we'll
1064
00:55:00,440 --> 00:55:07,559
end the string and then plus and we
1065
00:55:04,359 --> 00:55:11,000
already did this calculation up here so
1066
00:55:07,559 --> 00:55:12,960
we can select this and then
1067
00:55:11,000 --> 00:55:17,520
rightclick
1068
00:55:12,960 --> 00:55:20,880
copy and here right click and
1069
00:55:17,520 --> 00:55:23,680
paste and press
1070
00:55:20,880 --> 00:55:25,760
enter by the way if you paste in the
1071
00:55:23,680 --> 00:55:26,960
console you might see this warning
1072
00:55:25,760 --> 00:55:31,200
message
1073
00:55:26,960 --> 00:55:31,200
to fix this you can type allow
1074
00:55:32,000 --> 00:55:37,960
pasting and press
1075
00:55:34,160 --> 00:55:37,960
enter and now you can
1076
00:55:39,920 --> 00:55:45,079
paste and that's how we create this
1077
00:55:42,440 --> 00:55:47,799
first line of text using strings and
1078
00:55:45,079 --> 00:55:51,079
numbers we break up the string into
1079
00:55:47,799 --> 00:55:52,760
Parts calculate the numbers and then add
1080
00:55:51,079 --> 00:55:55,440
the parts back
1081
00:55:52,760 --> 00:55:57,440
together all right now let's take these
1082
00:55:55,440 --> 00:56:01,160
strings that we created Creed and do
1083
00:55:57,440 --> 00:56:03,720
something with them let's create a popup
1084
00:56:01,160 --> 00:56:06,760
and display this first line of text
1085
00:56:03,720 --> 00:56:10,200
inside the popup we'll go back to our
1086
00:56:06,760 --> 00:56:11,920
console and type the code for creating a
1087
00:56:10,200 --> 00:56:15,200
popup
1088
00:56:11,920 --> 00:56:18,200
alert Open Bracket close bracket
1089
00:56:15,200 --> 00:56:21,039
semicolon and then inside the popup
1090
00:56:18,200 --> 00:56:24,359
we're going to display this string so
1091
00:56:21,039 --> 00:56:28,359
let's just make a copy of this code
1092
00:56:24,359 --> 00:56:31,520
we'll select it right click
1093
00:56:28,359 --> 00:56:34,119
copy and between the brackets right
1094
00:56:31,520 --> 00:56:36,520
click and
1095
00:56:34,119 --> 00:56:39,880
paste if we press
1096
00:56:36,520 --> 00:56:41,640
enter the computer displays a popup with
1097
00:56:39,880 --> 00:56:43,240
the first line of text of the final
1098
00:56:41,640 --> 00:56:46,200
project
1099
00:56:43,240 --> 00:56:48,880
inside so that's how we use strings to
1100
00:56:46,200 --> 00:56:51,200
create the text in the final project and
1101
00:56:48,880 --> 00:56:55,000
once we create the strings we can use
1102
00:56:51,200 --> 00:56:57,760
them in other JavaScript
1103
00:56:55,000 --> 00:57:00,319
code in in the rest of this lesson we're
1104
00:56:57,760 --> 00:57:03,440
going to learn more details about
1105
00:57:00,319 --> 00:57:06,760
strings in JavaScript there are actually
1106
00:57:03,440 --> 00:57:09,400
three ways to create a string the first
1107
00:57:06,760 --> 00:57:13,240
way is to use single quotes which we
1108
00:57:09,400 --> 00:57:17,880
already learned for example we can type
1109
00:57:13,240 --> 00:57:19,559
single quote hello and single quote and
1110
00:57:17,880 --> 00:57:22,640
press
1111
00:57:19,559 --> 00:57:26,319
enter the second way to create a string
1112
00:57:22,640 --> 00:57:30,839
is to use double quotes for example
1113
00:57:26,319 --> 00:57:32,480
double quote hello and double quote and
1114
00:57:30,839 --> 00:57:35,920
press
1115
00:57:32,480 --> 00:57:38,960
enter this creates the exact same string
1116
00:57:35,920 --> 00:57:42,559
as single quotes so which one should we
1117
00:57:38,960 --> 00:57:45,799
use to create a string single quotes or
1118
00:57:42,559 --> 00:57:48,799
double quotes in JavaScript I recommend
1119
00:57:45,799 --> 00:57:52,079
using single quotes by default they're a
1120
00:57:48,799 --> 00:57:54,440
little easier to read and type there is
1121
00:57:52,079 --> 00:57:57,160
one situation where double quotes might
1122
00:57:54,440 --> 00:58:00,440
be useful and that is is if we have a
1123
00:57:57,160 --> 00:58:03,200
single quote inside the string for
1124
00:58:00,440 --> 00:58:06,480
example if we type the
1125
00:58:03,200 --> 00:58:09,160
string I'm
1126
00:58:06,480 --> 00:58:13,039
learning
1127
00:58:09,160 --> 00:58:15,960
JavaScript and single quote and press
1128
00:58:13,039 --> 00:58:18,720
enter this doesn't work because there's
1129
00:58:15,960 --> 00:58:21,760
a single quote inside the string and
1130
00:58:18,720 --> 00:58:24,640
this single quote will end the string
1131
00:58:21,760 --> 00:58:28,480
early to solve this we can create the
1132
00:58:24,640 --> 00:58:31,640
string using double quotes for example
1133
00:58:28,480 --> 00:58:33,839
double quote I'm
1134
00:58:31,640 --> 00:58:37,839
learning
1135
00:58:33,839 --> 00:58:41,240
JavaScript and double quote and press
1136
00:58:37,839 --> 00:58:44,079
enter so now this works because we
1137
00:58:41,240 --> 00:58:46,559
created the string using double quotes
1138
00:58:44,079 --> 00:58:48,839
the single quote no longer has a special
1139
00:58:46,559 --> 00:58:52,039
meaning and it will no longer end the
1140
00:58:48,839 --> 00:58:54,559
string early so this is a situation
1141
00:58:52,039 --> 00:58:57,440
where double quotes might be useful
1142
00:58:54,559 --> 00:58:59,799
otherwise we use single quotes by
1143
00:58:57,440 --> 00:59:01,960
default now there's actually another
1144
00:58:59,799 --> 00:59:04,960
solution to this problem other than
1145
00:59:01,960 --> 00:59:08,960
using double quotes and that's by using
1146
00:59:04,960 --> 00:59:12,799
an escape character so a character is
1147
00:59:08,960 --> 00:59:17,520
one letter number or symbol in a piece
1148
00:59:12,799 --> 00:59:22,280
of textt for example the text hello has
1149
00:59:17,520 --> 00:59:26,960
five characters h e l l
1150
00:59:22,280 --> 00:59:29,880
o a character can be a letter in number
1151
00:59:26,960 --> 00:59:31,119
or also a symbol these are all
1152
00:59:29,880 --> 00:59:33,520
considered
1153
00:59:31,119 --> 00:59:36,240
characters now in addition to these
1154
00:59:33,520 --> 00:59:39,200
characters we have a special set of
1155
00:59:36,240 --> 00:59:42,480
characters we can also use in a string
1156
00:59:39,200 --> 00:59:46,119
called Escape characters an escape
1157
00:59:42,480 --> 00:59:49,039
character looks like this a backslash
1158
00:59:46,119 --> 00:59:52,200
and then another character like single
1159
00:59:49,039 --> 00:59:55,359
quote this combination actually counts
1160
00:59:52,200 --> 00:59:57,599
as one character in a string this
1161
00:59:55,359 --> 01:00:00,400
character creat creat a single quote
1162
00:59:57,599 --> 01:00:02,960
that is just text it doesn't have a
1163
01:00:00,400 --> 01:00:07,039
special meaning and it doesn't start or
1164
01:00:02,960 --> 01:00:10,240
end strings for example we can create
1165
01:00:07,039 --> 01:00:14,039
this string with single quotes again so
1166
01:00:10,240 --> 01:00:17,039
single quote I and this time we'll use
1167
01:00:14,039 --> 01:00:21,079
the Escape character back slash single
1168
01:00:17,039 --> 01:00:23,599
quote and then M
1169
01:00:21,079 --> 01:00:27,839
learning
1170
01:00:23,599 --> 01:00:31,160
JavaScript and single quote and press
1171
01:00:27,839 --> 01:00:34,319
enter and now this works because the
1172
01:00:31,160 --> 01:00:37,400
Escape character back SL single quote
1173
01:00:34,319 --> 01:00:39,839
creates a single quote that is just text
1174
01:00:37,400 --> 01:00:42,280
it doesn't start or end the
1175
01:00:39,839 --> 01:00:46,119
string another Escape character that's
1176
01:00:42,280 --> 01:00:48,760
useful to know is back SL double quote
1177
01:00:46,119 --> 01:00:52,200
this creates a double quote that is just
1178
01:00:48,760 --> 01:00:54,760
text it doesn't start or end a
1179
01:00:52,200 --> 01:00:58,039
string the last Escape character we'll
1180
01:00:54,760 --> 01:01:01,440
learn in this lesson is back
1181
01:00:58,039 --> 01:01:04,039
sln this is called the new line
1182
01:01:01,440 --> 01:01:07,480
character this Escape character doesn't
1183
01:01:04,039 --> 01:01:11,720
create the letter N anymore it creates a
1184
01:01:07,480 --> 01:01:15,079
new line of text for example let's
1185
01:01:11,720 --> 01:01:18,520
create a popup using
1186
01:01:15,079 --> 01:01:21,319
alert Open Bracket close bracket and
1187
01:01:18,520 --> 01:01:25,640
semicolon and then inside the brackets
1188
01:01:21,319 --> 01:01:26,920
we're going to create a string sum and
1189
01:01:25,640 --> 01:01:32,960
then back
1190
01:01:26,920 --> 01:01:35,520
sln text and single quote if we press
1191
01:01:32,960 --> 01:01:39,200
enter you'll notice that this Escape
1192
01:01:35,520 --> 01:01:41,880
character created a new line of text in
1193
01:01:39,200 --> 01:01:44,920
the popup and that's why we call this
1194
01:01:41,880 --> 01:01:47,799
the new line character so that's how
1195
01:01:44,920 --> 01:01:49,960
Escape characters work they are a set of
1196
01:01:47,799 --> 01:01:52,599
special characters that start with back
1197
01:01:49,960 --> 01:01:56,079
slash and we can use them in a
1198
01:01:52,599 --> 01:01:58,079
string now let's press okay
1199
01:01:56,079 --> 01:02:01,000
and we're going to learn the Third Way
1200
01:01:58,079 --> 01:02:04,799
of creating a string in JavaScript which
1201
01:02:01,000 --> 01:02:08,119
is using back ticks for example let's
1202
01:02:04,799 --> 01:02:13,960
type in our console and we'll type
1203
01:02:08,119 --> 01:02:17,279
backtick hello and backtick and press
1204
01:02:13,960 --> 01:02:20,680
enter this creates the same string as
1205
01:02:17,279 --> 01:02:23,680
single quotes and double quotes strings
1206
01:02:20,680 --> 01:02:26,279
created with backx actually have a name
1207
01:02:23,680 --> 01:02:28,000
we call these template strings and they
1208
01:02:26,279 --> 01:02:30,799
have a name because they have some
1209
01:02:28,000 --> 01:02:34,039
special features the first special
1210
01:02:30,799 --> 01:02:36,839
feature of template strings is called
1211
01:02:34,039 --> 01:02:40,400
interpolation interpolation lets us
1212
01:02:36,839 --> 01:02:43,240
insert a value directly into a string
1213
01:02:40,400 --> 01:02:46,200
for example let's say we want to create
1214
01:02:43,240 --> 01:02:48,599
the first line of text in our project
1215
01:02:46,200 --> 01:02:51,559
earlier in this lesson we created this
1216
01:02:48,599 --> 01:02:54,000
text with concatenation which means we
1217
01:02:51,559 --> 01:02:57,160
broke it up into parts and added them
1218
01:02:54,000 --> 01:03:00,440
back together in interpolation gives us
1219
01:02:57,160 --> 01:03:03,000
a much easier way to do this we'll go to
1220
01:03:00,440 --> 01:03:05,200
our console and we'll create this text
1221
01:03:03,000 --> 01:03:07,680
using a template string because
1222
01:03:05,200 --> 01:03:12,720
interpolation is only a feature of
1223
01:03:07,680 --> 01:03:16,319
template strings so we'll type backtick
1224
01:03:12,720 --> 01:03:19,520
items Open Bracket close bracket and
1225
01:03:16,319 --> 01:03:22,079
back tick and now between these brackets
1226
01:03:19,520 --> 01:03:25,319
we want to insert the quantity or the
1227
01:03:22,079 --> 01:03:27,760
number of products in our cart to insert
1228
01:03:25,319 --> 01:03:31,359
this with interpolation we're going to
1229
01:03:27,760 --> 01:03:34,440
type Dollar open curly bracket close
1230
01:03:31,359 --> 01:03:37,359
curly bracket so this combination of
1231
01:03:34,440 --> 01:03:40,400
characters allows us to insert values
1232
01:03:37,359 --> 01:03:42,880
directly into the string between these
1233
01:03:40,400 --> 01:03:47,119
curly brackets we can calculate the
1234
01:03:42,880 --> 01:03:48,119
quantity which is one basketball plus
1235
01:03:47,119 --> 01:03:52,079
one
1236
01:03:48,119 --> 01:03:55,319
t-shirt this will add 1 + 1 which equals
1237
01:03:52,079 --> 01:03:56,760
2 and then insert it directly into the
1238
01:03:55,319 --> 01:03:59,119
string
1239
01:03:56,760 --> 01:04:02,400
let's keep going and create the rest of
1240
01:03:59,119 --> 01:04:07,279
this line so we're going to type at the
1241
01:04:02,400 --> 01:04:09,760
end a Colin space and dollar and now
1242
01:04:07,279 --> 01:04:12,319
we're going to insert another value into
1243
01:04:09,760 --> 01:04:15,359
the string which is the cost of the
1244
01:04:12,319 --> 01:04:18,520
products to insert another value we're
1245
01:04:15,359 --> 01:04:21,680
going to type Dollar open curly bracket
1246
01:04:18,520 --> 01:04:24,079
close curly bracket again in between the
1247
01:04:21,680 --> 01:04:26,359
curly brackets we're going to calculate
1248
01:04:24,079 --> 01:04:29,520
the cost of the products
1249
01:04:26,359 --> 01:04:29,520
which is
1250
01:04:30,680 --> 01:04:35,680
2,95
1251
01:04:33,240 --> 01:04:38,079
plus
1252
01:04:35,680 --> 01:04:40,640
$7.99 and we'll surround this in
1253
01:04:38,079 --> 01:04:43,319
Brackets to make sure we calculate this
1254
01:04:40,640 --> 01:04:47,920
first and at the end we're going to
1255
01:04:43,319 --> 01:04:50,559
convert back to Dollars by dividing by
1256
01:04:47,920 --> 01:04:53,880
100 if we press
1257
01:04:50,559 --> 01:04:57,039
enter this creates the first line of
1258
01:04:53,880 --> 01:04:59,359
text again in our final project
1259
01:04:57,039 --> 01:05:02,200
if we compare this code which uses
1260
01:04:59,359 --> 01:05:05,079
interpolation to our previous code which
1261
01:05:02,200 --> 01:05:08,000
uses concatenation you can see that
1262
01:05:05,079 --> 01:05:10,920
interpolation is a much cleaner way of
1263
01:05:08,000 --> 01:05:13,720
inserting values into a string so
1264
01:05:10,920 --> 01:05:16,599
interpolation is a recommended
1265
01:05:13,720 --> 01:05:18,799
solution next template strings have
1266
01:05:16,599 --> 01:05:22,319
another special feature called
1267
01:05:18,799 --> 01:05:24,920
multi-line strings let's go to our
1268
01:05:22,319 --> 01:05:26,839
console and we're going to type a
1269
01:05:24,920 --> 01:05:29,520
backtick
1270
01:05:26,839 --> 01:05:35,440
sum and then press
1271
01:05:29,520 --> 01:05:38,400
enter and text and back tick notice that
1272
01:05:35,440 --> 01:05:41,760
this string is on multiple lines so we
1273
01:05:38,400 --> 01:05:44,640
call this a multi-line string and this
1274
01:05:41,760 --> 01:05:47,240
feature is only available for template
1275
01:05:44,640 --> 01:05:50,079
strings if we press
1276
01:05:47,240 --> 01:05:52,799
enter you can see that the new line in
1277
01:05:50,079 --> 01:05:55,880
the string just creates the new line
1278
01:05:52,799 --> 01:05:58,359
Escape character that we learned earlier
1279
01:05:55,880 --> 01:06:00,720
so that's the multi-line string feature
1280
01:05:58,359 --> 01:06:03,279
of template strings we're going to use
1281
01:06:00,720 --> 01:06:06,039
multi-line strings a lot later in this
1282
01:06:03,279 --> 01:06:08,920
course but for now I just wanted to
1283
01:06:06,039 --> 01:06:11,039
introduce you to this feature now you
1284
01:06:08,920 --> 01:06:14,680
might be wondering again what should we
1285
01:06:11,039 --> 01:06:17,160
use to create a string single quotes or
1286
01:06:14,680 --> 01:06:19,480
template strings even though template
1287
01:06:17,160 --> 01:06:22,240
strings have more features I find that
1288
01:06:19,480 --> 01:06:24,839
most JavaScript code still uses single
1289
01:06:22,240 --> 01:06:27,559
quotes by default so my personal
1290
01:06:24,839 --> 01:06:30,440
recommendation is to use single quotes
1291
01:06:27,559 --> 01:06:33,319
by default and if we need to insert a
1292
01:06:30,440 --> 01:06:36,640
value into the string or type the string
1293
01:06:33,319 --> 01:06:38,920
on multiple lines then use template
1294
01:06:36,640 --> 01:06:42,200
strings and that's the end of this
1295
01:06:38,920 --> 01:06:46,200
lesson in this lesson we learned about
1296
01:06:42,200 --> 01:06:48,960
strings a string represents text we
1297
01:06:46,200 --> 01:06:51,960
learned how to use strings and numbers
1298
01:06:48,960 --> 01:06:54,000
to create the text in our final project
1299
01:06:51,960 --> 01:06:56,839
we learned three different ways of
1300
01:06:54,000 --> 01:06:59,359
creating a string single quotes double
1301
01:06:56,839 --> 01:07:02,000
quotes and back ticks or template
1302
01:06:59,359 --> 01:07:04,720
strings we learned about Escape
1303
01:07:02,000 --> 01:07:06,920
characters and we learned two useful
1304
01:07:04,720 --> 01:07:09,720
features of template strings
1305
01:07:06,920 --> 01:07:12,319
interpolation and multi-line
1306
01:07:09,720 --> 01:07:17,039
strings here are some exercises to help
1307
01:07:12,319 --> 01:07:17,039
you practice working with strings
1308
01:07:35,640 --> 01:07:40,480
so far in this course we've learned some
1309
01:07:37,760 --> 01:07:44,119
basic features of JavaScript like
1310
01:07:40,480 --> 01:07:48,200
numbers and strings in this lesson we're
1311
01:07:44,119 --> 01:07:50,680
going to learn how to use HTML CSS and
1312
01:07:48,200 --> 01:07:52,319
JavaScript together because as I
1313
01:07:50,680 --> 01:07:55,240
mentioned at the beginning of this
1314
01:07:52,319 --> 01:07:57,200
course we use all three Technologies to
1315
01:07:55,240 --> 01:08:00,799
build build a full
1316
01:07:57,200 --> 01:08:04,400
website HTML creates the content of a
1317
01:08:00,799 --> 01:08:07,240
website like the buttons and the text
1318
01:08:04,400 --> 01:08:11,520
CSS changes the appearance of the
1319
01:08:07,240 --> 01:08:13,240
website and JavaScript makes the website
1320
01:08:11,520 --> 01:08:17,080
interactive the first thing we're going
1321
01:08:13,240 --> 01:08:19,759
to do is review the basics of HTML and
1322
01:08:17,080 --> 01:08:20,679
CSS that we will need for the rest of
1323
01:08:19,759 --> 01:08:24,239
this
1324
01:08:20,679 --> 01:08:27,159
course now in order to write HTML and
1325
01:08:24,239 --> 01:08:31,120
CSS code we need to install another
1326
01:08:27,159 --> 01:08:34,000
piece of software called a code editor a
1327
01:08:31,120 --> 01:08:37,199
code editor helps us write and organize
1328
01:08:34,000 --> 01:08:41,279
our code the most popular code editor
1329
01:08:37,199 --> 01:08:45,839
for web development is called vs code or
1330
01:08:41,279 --> 01:08:49,679
Visual Studio code to install vs code
1331
01:08:45,839 --> 01:08:53,480
you can go to google.com in your
1332
01:08:49,679 --> 01:08:56,239
browser search for VSS
1333
01:08:53,480 --> 01:08:58,679
code click the result
1334
01:08:56,239 --> 01:09:00,199
and follow the instructions to download
1335
01:08:58,679 --> 01:09:03,440
and
1336
01:09:00,199 --> 01:09:06,799
install once we've installed VSS code
1337
01:09:03,440 --> 01:09:07,880
we're ready to review the basics of HTML
1338
01:09:06,799 --> 01:09:10,679
and
1339
01:09:07,880 --> 01:09:15,159
CSS we'll start with
1340
01:09:10,679 --> 01:09:18,640
HTML HTML stands for hyper text markup
1341
01:09:15,159 --> 01:09:21,600
language and just like JavaScript HTML
1342
01:09:18,640 --> 01:09:24,799
is also giving instructions to a
1343
01:09:21,600 --> 01:09:28,279
computer now unlike JavaScript we can't
1344
01:09:24,799 --> 01:09:32,960
use the console to write and run HTML
1345
01:09:28,279 --> 01:09:37,000
code instead we write HTML code inside a
1346
01:09:32,960 --> 01:09:39,920
file using our code editor let's do that
1347
01:09:37,000 --> 01:09:42,679
right now we'll start by going to our
1348
01:09:39,920 --> 01:09:44,000
desktop so I'm going to close my browser
1349
01:09:42,679 --> 01:09:46,520
to go to my
1350
01:09:44,000 --> 01:09:52,319
desktop and then we're going to create a
1351
01:09:46,520 --> 01:09:55,040
new folder so we can right click new
1352
01:09:52,319 --> 01:09:57,480
folder this folder is going to contain
1353
01:09:55,040 --> 01:10:03,520
all the code that we write in this
1354
01:09:57,480 --> 01:10:06,040
course let's name this folder JavaScript
1355
01:10:03,520 --> 01:10:09,800
dasc next we're going to open this
1356
01:10:06,040 --> 01:10:11,320
folder in our code editor so let's open
1357
01:10:09,800 --> 01:10:14,640
vs
1358
01:10:11,320 --> 01:10:17,320
code and then we'll click
1359
01:10:14,640 --> 01:10:20,199
file open
1360
01:10:17,320 --> 01:10:23,400
folder and find the folder that we just
1361
01:10:20,199 --> 01:10:25,600
created for me it's on the
1362
01:10:23,400 --> 01:10:28,600
desktop and it's this folder right right
1363
01:10:25,600 --> 01:10:32,000
here so we're going to select the folder
1364
01:10:28,600 --> 01:10:32,000
and then click select
1365
01:10:32,360 --> 01:10:38,120
folder now we can close this startup
1366
01:10:35,840 --> 01:10:41,920
message and we're going to create an
1367
01:10:38,120 --> 01:10:44,080
HTML file we're going to click this icon
1368
01:10:41,920 --> 01:10:48,280
to create a new
1369
01:10:44,080 --> 01:10:50,679
file and we're going to name this file
1370
01:10:48,280 --> 01:10:53,400
website do
1371
01:10:50,679 --> 01:10:56,400
HTML and press
1372
01:10:53,400 --> 01:10:59,239
enter ending the file name name with
1373
01:10:56,400 --> 01:11:03,199
HTML tells a computer that this file
1374
01:10:59,239 --> 01:11:07,120
contains HTML code rather than just
1375
01:11:03,199 --> 01:11:10,440
text now let's review some basic HTML
1376
01:11:07,120 --> 01:11:15,159
code we're going to type the code less
1377
01:11:10,440 --> 01:11:17,800
than button greater than and we also
1378
01:11:15,159 --> 01:11:20,320
need to type less than slash button
1379
01:11:17,800 --> 01:11:23,679
greater than but our code editor might
1380
01:11:20,320 --> 01:11:27,600
autocomplete this for us so this code
1381
01:11:23,679 --> 01:11:29,600
tells a computer to create a button and
1382
01:11:27,600 --> 01:11:32,360
inside the button we're going to have
1383
01:11:29,600 --> 01:11:35,280
the text
1384
01:11:32,360 --> 01:11:36,800
hello now let's save this file by
1385
01:11:35,280 --> 01:11:38,320
clicking
1386
01:11:36,800 --> 01:11:42,760
file
1387
01:11:38,320 --> 01:11:45,159
save or by typing contrl s on Windows or
1388
01:11:42,760 --> 01:11:48,840
command s on
1389
01:11:45,159 --> 01:11:52,199
Mac now to run this HTML code we're
1390
01:11:48,840 --> 01:11:55,679
going to open this file in our browser
1391
01:11:52,199 --> 01:11:59,400
let's go back to our desktop
1392
01:11:55,679 --> 01:11:59,400
we're going to open the folder that we
1393
01:11:59,440 --> 01:12:10,360
created find the HTML file select it and
1394
01:12:04,480 --> 01:12:10,360
then right click open with Google
1395
01:12:10,639 --> 01:12:16,400
Chrome as you can see we have a website
1396
01:12:13,880 --> 01:12:21,480
and we created a button with the text
1397
01:12:16,400 --> 01:12:23,880
hello inside and if we look back at our
1398
01:12:21,480 --> 01:12:25,800
code that's exactly what we told the
1399
01:12:23,880 --> 01:12:29,159
computer to do
1400
01:12:25,800 --> 01:12:32,040
so just like JavaScript HTML is also
1401
01:12:29,159 --> 01:12:35,360
giving instructions to a
1402
01:12:32,040 --> 01:12:38,040
computer let's review some more HTML
1403
01:12:35,360 --> 01:12:40,840
code first I'm just going to rearrange
1404
01:12:38,040 --> 01:12:44,520
my windows here so that it's easy to see
1405
01:12:40,840 --> 01:12:44,520
the website side by
1406
01:12:44,679 --> 01:12:50,639
side next we're going to click the end
1407
01:12:48,040 --> 01:12:52,760
of the first line and press enter to
1408
01:12:50,639 --> 01:12:57,639
create a new line and we're going to
1409
01:12:52,760 --> 01:13:00,560
type the code less than P greater than
1410
01:12:57,639 --> 01:13:04,560
and we also need to type less than SLP
1411
01:13:00,560 --> 01:13:07,639
greater than so this code creates a
1412
01:13:04,560 --> 01:13:11,520
paragraph and inside the paragraph we're
1413
01:13:07,639 --> 01:13:15,639
going to put some text for example
1414
01:13:11,520 --> 01:13:18,600
paragraph of text now let's save our
1415
01:13:15,639 --> 01:13:20,480
file by typing contrl s on Windows or
1416
01:13:18,600 --> 01:13:23,280
command s on
1417
01:13:20,480 --> 01:13:25,920
Mac and to update our website to the new
1418
01:13:23,280 --> 01:13:29,800
code we're going to go to our website
1419
01:13:25,920 --> 01:13:33,800
and click refresh or typ controlr on
1420
01:13:29,800 --> 01:13:35,960
Windows or command r on
1421
01:13:33,800 --> 01:13:39,239
Mac and now you can see that the
1422
01:13:35,960 --> 01:13:42,080
computer created a paragraph of text
1423
01:13:39,239 --> 01:13:45,360
just like we told it to do and that's
1424
01:13:42,080 --> 01:13:47,199
the basics of HTML the computer reads
1425
01:13:45,360 --> 01:13:50,920
our code and then follows our
1426
01:13:47,199 --> 01:13:54,360
instructions one by one first it creates
1427
01:13:50,920 --> 01:13:56,840
a button and then it creates a paragraph
1428
01:13:54,360 --> 01:14:00,440
of text
1429
01:13:56,840 --> 01:14:02,600
now let's review the syntax rules for
1430
01:14:00,440 --> 01:14:04,920
HTML each of these things that were
1431
01:14:02,600 --> 01:14:08,719
displaying on a web page these are
1432
01:14:04,920 --> 01:14:11,880
called HTML elements so a button is a
1433
01:14:08,719 --> 01:14:15,760
type of HTML element and a paragraph is
1434
01:14:11,880 --> 01:14:18,199
another type of HTML element to create
1435
01:14:15,760 --> 01:14:21,960
an element we start with a less than
1436
01:14:18,199 --> 01:14:25,679
symbol and then the element name like a
1437
01:14:21,960 --> 01:14:28,960
button and then the greater than symbol
1438
01:14:25,679 --> 01:14:32,159
so this whole thing is called an HTML
1439
01:14:28,960 --> 01:14:33,639
tag this tells a computer to create a
1440
01:14:32,159 --> 01:14:37,800
button
1441
01:14:33,639 --> 01:14:40,600
element every HTML tag needs a matching
1442
01:14:37,800 --> 01:14:43,560
tag the matching tag follows the same
1443
01:14:40,600 --> 01:14:47,120
syntax except it has a slash in front of
1444
01:14:43,560 --> 01:14:49,639
the element name so this is called the
1445
01:14:47,120 --> 01:14:52,199
opening tag and this is called the
1446
01:14:49,639 --> 01:14:54,520
closing tag you can think of the opening
1447
01:14:52,199 --> 01:14:57,840
tag as the start of the button and the
1448
01:14:54,520 --> 01:15:00,199
closing tag tag as the end of the button
1449
01:14:57,840 --> 01:15:03,159
and in between we have the contents
1450
01:15:00,199 --> 01:15:04,360
inside the button in this case it's the
1451
01:15:03,159 --> 01:15:07,400
text
1452
01:15:04,360 --> 01:15:10,679
hello in addition to text we can also
1453
01:15:07,400 --> 01:15:13,320
have elements inside an element for
1454
01:15:10,679 --> 01:15:17,199
example we can go to our paragraph
1455
01:15:13,320 --> 01:15:21,679
element and we can add a button inside
1456
01:15:17,199 --> 01:15:24,120
so less than button greater than and we
1457
01:15:21,679 --> 01:15:26,679
also need less than SL button greater
1458
01:15:24,120 --> 01:15:28,880
than and then inside the button we'll
1459
01:15:26,679 --> 01:15:33,080
also have the text
1460
01:15:28,880 --> 01:15:34,320
hello if we save this file and refresh
1461
01:15:33,080 --> 01:15:37,400
the
1462
01:15:34,320 --> 01:15:39,120
page now our paragraph element has a
1463
01:15:37,400 --> 01:15:42,960
button element
1464
01:15:39,120 --> 01:15:46,159
inside by the way this is called nesting
1465
01:15:42,960 --> 01:15:48,639
when we have an element inside another
1466
01:15:46,159 --> 01:15:52,040
element the last syntax rule we have to
1467
01:15:48,639 --> 01:15:55,239
review is that in HTML if we have
1468
01:15:52,040 --> 01:15:58,080
multiple spaces for example if we go
1469
01:15:55,239 --> 01:16:01,280
here and type multiple
1470
01:15:58,080 --> 01:16:05,000
spaces multiple spaces are combined into
1471
01:16:01,280 --> 01:16:07,639
one space on the web page so if we save
1472
01:16:05,000 --> 01:16:09,880
this code and
1473
01:16:07,639 --> 01:16:12,760
refresh you'll notice that all of the
1474
01:16:09,880 --> 01:16:16,239
spaces that we added only show up as one
1475
01:16:12,760 --> 01:16:20,639
space on the web page in addition in
1476
01:16:16,239 --> 01:16:22,560
HTML new lines also count as spaces so
1477
01:16:20,639 --> 01:16:26,639
if we go back to our
1478
01:16:22,560 --> 01:16:32,239
code and we type here and press enter to
1479
01:16:26,639 --> 01:16:34,920
create a new line and then save and
1480
01:16:32,239 --> 01:16:37,320
refresh notice that the new line doesn't
1481
01:16:34,920 --> 01:16:40,600
appear on the web page and that's
1482
01:16:37,320 --> 01:16:44,080
because this new line here is the same
1483
01:16:40,600 --> 01:16:47,400
as spaces in HTML so all of these get
1484
01:16:44,080 --> 01:16:50,120
combined into one space on the web
1485
01:16:47,400 --> 01:16:52,560
page at first this might seem a little
1486
01:16:50,120 --> 01:16:55,480
weird but this feature gives us a lot of
1487
01:16:52,560 --> 01:16:59,600
flexibility when organizing our h ml
1488
01:16:55,480 --> 01:17:03,000
code for example we can go into our code
1489
01:16:59,600 --> 01:17:04,960
and add a new line here to separate
1490
01:17:03,000 --> 01:17:07,480
these two elements and make our code
1491
01:17:04,960 --> 01:17:10,600
easier to read another thing we usually
1492
01:17:07,480 --> 01:17:13,280
do to make our code easier to read is to
1493
01:17:10,600 --> 01:17:16,719
put the contents of an element on its
1494
01:17:13,280 --> 01:17:21,239
own line for example we're going to type
1495
01:17:16,719 --> 01:17:22,360
here and press enter and here and press
1496
01:17:21,239 --> 01:17:24,920
enter
1497
01:17:22,360 --> 01:17:27,719
again to put the contents of the button
1498
01:17:24,920 --> 01:17:30,600
Buton on its own line now it's a lot
1499
01:17:27,719 --> 01:17:33,400
easier to see where this button starts
1500
01:17:30,600 --> 01:17:35,840
and where it ends we can do the same
1501
01:17:33,400 --> 01:17:39,400
thing with the paragraph We can type
1502
01:17:35,840 --> 01:17:42,920
here and press enter and type here as
1503
01:17:39,400 --> 01:17:44,719
well and press enter and then remove
1504
01:17:42,920 --> 01:17:47,000
some of the Extra
1505
01:17:44,719 --> 01:17:50,480
Spaces to put the content of the
1506
01:17:47,000 --> 01:17:51,560
paragraph on its own line and now if we
1507
01:17:50,480 --> 01:17:55,280
save our
1508
01:17:51,560 --> 01:17:57,040
file and refresh
1509
01:17:55,280 --> 01:18:00,320
you notice that none of the new lines
1510
01:17:57,040 --> 01:18:03,719
that we added appear on the web page by
1511
01:18:00,320 --> 01:18:07,159
the way a web page is a single page like
1512
01:18:03,719 --> 01:18:09,360
the homepage or the cart page together
1513
01:18:07,159 --> 01:18:13,199
we call this a
1514
01:18:09,360 --> 01:18:15,000
website so that's the basics of HTML and
1515
01:18:13,199 --> 01:18:19,560
HTML
1516
01:18:15,000 --> 01:18:23,159
syntax now let's review CSS CSS stands
1517
01:18:19,560 --> 01:18:26,239
for cascading style sheets and CSS
1518
01:18:23,159 --> 01:18:29,360
changes the appearance of our website
1519
01:18:26,239 --> 01:18:33,320
let's review some CSS code we're going
1520
01:18:29,360 --> 01:18:37,000
to write our CSS code inside our HTML
1521
01:18:33,320 --> 01:18:40,280
file first let's type here and create
1522
01:18:37,000 --> 01:18:43,080
some new lines at the top and then at
1523
01:18:40,280 --> 01:18:47,600
the top we're going to create a special
1524
01:18:43,080 --> 01:18:52,080
HTML element called the style element so
1525
01:18:47,600 --> 01:18:55,040
let's type less than style greater
1526
01:18:52,080 --> 01:18:58,840
than and we also need the closing tag
1527
01:18:55,040 --> 01:19:01,239
less than SL style greater than so the
1528
01:18:58,840 --> 01:19:04,560
style element is unique because it
1529
01:19:01,239 --> 01:19:07,520
doesn't appear visibly on the page
1530
01:19:04,560 --> 01:19:10,920
instead the purpose of the style element
1531
01:19:07,520 --> 01:19:14,560
is that it lets us write CSS code
1532
01:19:10,920 --> 01:19:17,000
inside so inside here let's press enter
1533
01:19:14,560 --> 01:19:18,679
to create a new line and we're going to
1534
01:19:17,000 --> 01:19:22,480
type
1535
01:19:18,679 --> 01:19:24,840
button open curly bracket close curly
1536
01:19:22,480 --> 01:19:27,719
bracket and then inside the curly
1537
01:19:24,840 --> 01:19:32,400
brackets we're also going to press enter
1538
01:19:27,719 --> 01:19:34,840
to create a new line so this is CSS code
1539
01:19:32,400 --> 01:19:37,440
and this code tells a computer to change
1540
01:19:34,840 --> 01:19:39,960
the appearance of all buttons on the
1541
01:19:37,440 --> 01:19:42,560
page and then inside these curly
1542
01:19:39,960 --> 01:19:45,800
brackets we can tell the computer how to
1543
01:19:42,560 --> 01:19:47,840
change the appearance for example we can
1544
01:19:45,800 --> 01:19:52,960
type
1545
01:19:47,840 --> 01:19:55,760
background- color colon red and
1546
01:19:52,960 --> 01:19:57,440
semicolon if we save
1547
01:19:55,760 --> 01:20:00,639
and
1548
01:19:57,440 --> 01:20:02,880
refresh you can see that this CSS code
1549
01:20:00,639 --> 01:20:05,159
changes the appearance of all buttons on
1550
01:20:02,880 --> 01:20:07,080
the page and changes their background
1551
01:20:05,159 --> 01:20:10,360
color to
1552
01:20:07,080 --> 01:20:13,480
Red let's do another example we're going
1553
01:20:10,360 --> 01:20:16,080
to go back to our CSS code going to type
1554
01:20:13,480 --> 01:20:21,159
here and press enter to create a new
1555
01:20:16,080 --> 01:20:25,760
line and we're going to add color colon
1556
01:20:21,159 --> 01:20:28,040
white and semicolon let's save
1557
01:20:25,760 --> 01:20:31,320
and
1558
01:20:28,040 --> 01:20:35,080
refresh and this CSS code changes the
1559
01:20:31,320 --> 01:20:38,520
text color of all buttons on the page to
1560
01:20:35,080 --> 01:20:40,199
White let's do one more example we're
1561
01:20:38,520 --> 01:20:45,320
going to type the
1562
01:20:40,199 --> 01:20:49,639
code order Colon none and
1563
01:20:45,320 --> 01:20:52,719
semicolon let's save this and
1564
01:20:49,639 --> 01:20:56,000
refresh and this CSS code removes the
1565
01:20:52,719 --> 01:20:58,639
border for all buttons on the page
1566
01:20:56,000 --> 01:21:00,760
and that's how CSS works we tell the
1567
01:20:58,639 --> 01:21:03,239
computer which elements we want to
1568
01:21:00,760 --> 01:21:05,840
change and then how to change the
1569
01:21:03,239 --> 01:21:08,400
appearance of these
1570
01:21:05,840 --> 01:21:09,719
elements now let's review the syntax
1571
01:21:08,400 --> 01:21:12,960
rules for
1572
01:21:09,719 --> 01:21:16,560
CSS this part of the CSS code is called
1573
01:21:12,960 --> 01:21:19,120
the CSS selector it tells a computer
1574
01:21:16,560 --> 01:21:22,280
which elements we want to change in
1575
01:21:19,120 --> 01:21:25,159
other words it selects which elements to
1576
01:21:22,280 --> 01:21:28,960
change inside the curly brackets we have
1577
01:21:25,159 --> 01:21:30,719
some CSS Styles this tells a computer
1578
01:21:28,960 --> 01:21:34,080
how to change the
1579
01:21:30,719 --> 01:21:37,280
appearance for each style the left side
1580
01:21:34,080 --> 01:21:40,239
is called the CSS property this tells a
1581
01:21:37,280 --> 01:21:43,600
computer what we're changing the right
1582
01:21:40,239 --> 01:21:45,800
side is called the CSS value this tells
1583
01:21:43,600 --> 01:21:49,440
a computer what we're changing the
1584
01:21:45,800 --> 01:21:52,239
property to for example this style
1585
01:21:49,440 --> 01:21:55,360
changes the background color to
1586
01:21:52,239 --> 01:21:58,639
Red we use a colon to separate the
1587
01:21:55,360 --> 01:22:01,280
property and the value and a semicolon
1588
01:21:58,639 --> 01:22:04,760
at the end to tell the computer that
1589
01:22:01,280 --> 01:22:08,360
this is the end of a style so that's the
1590
01:22:04,760 --> 01:22:10,679
basic syntax of CSS we tell the computer
1591
01:22:08,360 --> 01:22:12,840
which elements we want to change and
1592
01:22:10,679 --> 01:22:14,159
then how to change the appearance of
1593
01:22:12,840 --> 01:22:16,080
these
1594
01:22:14,159 --> 01:22:18,600
elements the next thing we're going to
1595
01:22:16,080 --> 01:22:22,560
review is HTML
1596
01:22:18,600 --> 01:22:24,520
attributes right now this CSS selector
1597
01:22:22,560 --> 01:22:27,800
changes the appearance of all but
1598
01:22:24,520 --> 01:22:29,520
buttons on the page however what if we
1599
01:22:27,800 --> 01:22:32,080
only want to change the appearance of
1600
01:22:29,520 --> 01:22:34,440
this one button and we want to style the
1601
01:22:32,080 --> 01:22:36,719
other button differently how do we do
1602
01:22:34,440 --> 01:22:40,480
that we're going to review a feature of
1603
01:22:36,719 --> 01:22:44,280
HTML called attributes attributes change
1604
01:22:40,480 --> 01:22:46,560
the behavior of an element for example
1605
01:22:44,280 --> 01:22:49,639
we're going to go to the opening tag of
1606
01:22:46,560 --> 01:22:53,440
the first button and then here we're
1607
01:22:49,639 --> 01:22:55,360
going to add an HTML attribute by typing
1608
01:22:53,440 --> 01:22:59,920
space
1609
01:22:55,360 --> 01:23:02,840
title equals double quotes and then in
1610
01:22:59,920 --> 01:23:05,280
between the double quotes we're going to
1611
01:23:02,840 --> 01:23:09,480
type tool
1612
01:23:05,280 --> 01:23:12,120
tip so this is an HTML attribute and
1613
01:23:09,480 --> 01:23:14,440
this attribute adds a tool tip to this
1614
01:23:12,120 --> 01:23:17,480
button if you're wondering what a tool
1615
01:23:14,440 --> 01:23:20,199
tip is if we hover over some code in our
1616
01:23:17,480 --> 01:23:21,840
code editor it'll show us this sort of
1617
01:23:20,199 --> 01:23:24,719
popup with more
1618
01:23:21,840 --> 01:23:26,600
information this is called a tool tip
1619
01:23:24,719 --> 01:23:29,880
when we hover over something and this
1620
01:23:26,600 --> 01:23:34,080
shows up so if we save our
1621
01:23:29,880 --> 01:23:37,080
file and refresh the web page and now we
1622
01:23:34,080 --> 01:23:40,400
hover over our button we can see that
1623
01:23:37,080 --> 01:23:43,480
the HTML attribute added a tool tip to
1624
01:23:40,400 --> 01:23:47,400
our button and then inside the double
1625
01:23:43,480 --> 01:23:49,840
quotes is the text inside the tool tip
1626
01:23:47,400 --> 01:23:52,800
for example we can actually change this
1627
01:23:49,840 --> 01:23:57,320
to good
1628
01:23:52,800 --> 01:24:00,480
job and if we save save and
1629
01:23:57,320 --> 01:24:02,440
refresh and hover over our button the
1630
01:24:00,480 --> 01:24:05,679
text between the double quotes is what
1631
01:24:02,440 --> 01:24:08,520
shows up in our tool tip so that's an
1632
01:24:05,679 --> 01:24:11,080
example of an HTML
1633
01:24:08,520 --> 01:24:12,520
attribute now let's review the syntax
1634
01:24:11,080 --> 01:24:15,320
rules for
1635
01:24:12,520 --> 01:24:18,400
attributes we always put attributes on
1636
01:24:15,320 --> 01:24:20,159
the opening tag and we add a space
1637
01:24:18,400 --> 01:24:23,480
between the element name and the
1638
01:24:20,159 --> 01:24:26,280
attribute to separate them on the left
1639
01:24:23,480 --> 01:24:28,560
side is the attribute name this tells
1640
01:24:26,280 --> 01:24:31,520
the computer what we're changing about
1641
01:24:28,560 --> 01:24:34,600
this element on the right side is the
1642
01:24:31,520 --> 01:24:37,840
attribute value this tells a computer
1643
01:24:34,600 --> 01:24:40,679
what we're changing this attribute to
1644
01:24:37,840 --> 01:24:44,800
for example here we're changing the tool
1645
01:24:40,679 --> 01:24:47,280
tip of this element to good job we
1646
01:24:44,800 --> 01:24:49,560
separate the name and value with an
1647
01:24:47,280 --> 01:24:52,080
equal sign and make sure there are no
1648
01:24:49,560 --> 01:24:56,000
spaces around the equal sign and we
1649
01:24:52,080 --> 01:24:58,000
surround the value with double quotes
1650
01:24:56,000 --> 01:25:01,040
now let's go back to the original
1651
01:24:58,000 --> 01:25:03,719
problem how do we style these buttons
1652
01:25:01,040 --> 01:25:06,199
differently we can do this using a very
1653
01:25:03,719 --> 01:25:09,360
important attribute called the class
1654
01:25:06,199 --> 01:25:11,880
attribute let's review that right now
1655
01:25:09,360 --> 01:25:16,159
we're going to go back to our button and
1656
01:25:11,880 --> 01:25:20,040
then here we're going to type space
1657
01:25:16,159 --> 01:25:21,679
class equals double quotes and then
1658
01:25:20,040 --> 01:25:25,280
inside the double quotes we're going to
1659
01:25:21,679 --> 01:25:28,480
type red Das
1660
01:25:25,280 --> 01:25:32,280
button so the class attribute sort of
1661
01:25:28,480 --> 01:25:36,159
adds a label to an element so here we
1662
01:25:32,280 --> 01:25:38,480
labeled this button as a red button and
1663
01:25:36,159 --> 01:25:40,040
now that we labeled this element we can
1664
01:25:38,480 --> 01:25:42,719
select it in
1665
01:25:40,040 --> 01:25:46,040
CSS to do that we're going to go to our
1666
01:25:42,719 --> 01:25:46,880
CSS code we're going to remove the
1667
01:25:46,040 --> 01:25:49,440
button
1668
01:25:46,880 --> 01:25:51,159
selector and replace it
1669
01:25:49,440 --> 01:25:52,840
witht
1670
01:25:51,159 --> 01:25:55,440
red-
1671
01:25:52,840 --> 01:25:58,119
button when we start the selector with a
1672
01:25:55,440 --> 01:26:01,119
DOT this means that now we're looking
1673
01:25:58,119 --> 01:26:04,280
for a class so here we're going to look
1674
01:26:01,119 --> 01:26:09,280
for all elements with the class red dash
1675
01:26:04,280 --> 01:26:12,520
button which is only this element if we
1676
01:26:09,280 --> 01:26:15,320
save and
1677
01:26:12,520 --> 01:26:18,920
refresh now only the elements with the
1678
01:26:15,320 --> 01:26:21,480
class red button gets these Styles we
1679
01:26:18,920 --> 01:26:24,760
can also add the same class to multiple
1680
01:26:21,480 --> 01:26:25,679
elements for example we can go to to our
1681
01:26:24,760 --> 01:26:31,000
other
1682
01:26:25,679 --> 01:26:32,840
button and add the class equals
1683
01:26:31,000 --> 01:26:37,320
red-
1684
01:26:32,840 --> 01:26:40,040
button if we save and
1685
01:26:37,320 --> 01:26:42,280
refresh now these Styles get applied to
1686
01:26:40,040 --> 01:26:45,800
both buttons again because they both
1687
01:26:42,280 --> 01:26:48,159
have the class red-b button if we want
1688
01:26:45,800 --> 01:26:51,480
to style this button differently we just
1689
01:26:48,159 --> 01:26:55,480
give it a different class for example we
1690
01:26:51,480 --> 01:26:59,719
can change this to Yellow yellow dash
1691
01:26:55,480 --> 01:27:03,280
button and then in our CSS we can add
1692
01:26:59,719 --> 01:27:06,280
another selector so we can type dot this
1693
01:27:03,280 --> 01:27:10,159
means we're going to select a class and
1694
01:27:06,280 --> 01:27:13,760
we're going to select the yellow Das
1695
01:27:10,159 --> 01:27:17,199
button class open curly bracket close
1696
01:27:13,760 --> 01:27:19,360
curly bracket and then inside here we
1697
01:27:17,199 --> 01:27:21,119
can add some styles for the yellow
1698
01:27:19,360 --> 01:27:26,600
button for
1699
01:27:21,119 --> 01:27:28,440
example background Das color colon
1700
01:27:26,600 --> 01:27:33,280
yellow and
1701
01:27:28,440 --> 01:27:36,000
semicolon now let's save and
1702
01:27:33,280 --> 01:27:40,360
refresh and that's how we use the class
1703
01:27:36,000 --> 01:27:42,400
attribute in HTML to modify specific
1704
01:27:40,360 --> 01:27:45,719
elements the final thing we need to
1705
01:27:42,400 --> 01:27:48,480
review is something called the HTML
1706
01:27:45,719 --> 01:27:51,080
structure let's go back to our website
1707
01:27:48,480 --> 01:27:51,880
we're going to find a blank area and
1708
01:27:51,080 --> 01:27:56,119
then
1709
01:27:51,880 --> 01:27:56,119
rightclick and then click inspect
1710
01:27:56,560 --> 01:28:03,920
so we already learned about the console
1711
01:28:00,000 --> 01:28:06,280
tab here we can write and run JavaScript
1712
01:28:03,920 --> 01:28:10,920
code now we're going to go to the
1713
01:28:06,280 --> 01:28:13,639
elements tab which is for HTML and CSS
1714
01:28:10,920 --> 01:28:17,639
so in the elements tab we can see all
1715
01:28:13,639 --> 01:28:20,480
the HTML on the page as well as all the
1716
01:28:17,639 --> 01:28:22,360
CSS on the page and we can play around
1717
01:28:20,480 --> 01:28:25,520
with the CSS if we
1718
01:28:22,360 --> 01:28:28,440
want now if we go back to to the
1719
01:28:25,520 --> 01:28:31,239
HTML you'll notice that our web page has
1720
01:28:28,440 --> 01:28:34,600
some elements that we didn't add before
1721
01:28:31,239 --> 01:28:36,400
the HTML element the head element and
1722
01:28:34,600 --> 01:28:38,719
the body
1723
01:28:36,400 --> 01:28:41,800
element so this is the structure that
1724
01:28:38,719 --> 01:28:44,840
we're supposed to follow when writing
1725
01:28:41,800 --> 01:28:47,080
HTML in our code we didn't follow the
1726
01:28:44,840 --> 01:28:48,320
structure so the browser actually adds
1727
01:28:47,080 --> 01:28:50,719
it for us
1728
01:28:48,320 --> 01:28:53,199
automatically however it's still best
1729
01:28:50,719 --> 01:28:55,480
practice to follow this structure in our
1730
01:28:53,199 --> 01:28:57,440
code because it gives us access to some
1731
01:28:55,480 --> 01:29:00,920
more features of
1732
01:28:57,440 --> 01:29:02,440
HTML let's review the HTML structure and
1733
01:29:00,920 --> 01:29:05,760
add it to our
1734
01:29:02,440 --> 01:29:07,719
code we're going to type up here and
1735
01:29:05,760 --> 01:29:11,560
we're going to create some new
1736
01:29:07,719 --> 01:29:14,960
lines and now every HTML file is going
1737
01:29:11,560 --> 01:29:18,320
to start with less than
1738
01:29:14,960 --> 01:29:20,400
exclamation dock type in capitals and
1739
01:29:18,320 --> 01:29:22,840
then space
1740
01:29:20,400 --> 01:29:27,000
HTML and greater
1741
01:29:22,840 --> 01:29:28,639
than this is not an HTML element it's a
1742
01:29:27,000 --> 01:29:31,480
special line of code that tells a
1743
01:29:28,639 --> 01:29:34,400
browser to use a modern version of
1744
01:29:31,480 --> 01:29:36,320
HTML if we don't have this the browser
1745
01:29:34,400 --> 01:29:39,159
might fall back to an older version of
1746
01:29:36,320 --> 01:29:42,400
HTML that has less
1747
01:29:39,159 --> 01:29:46,600
features next we're going to create an
1748
01:29:42,400 --> 01:29:49,320
HTML element so less than
1749
01:29:46,600 --> 01:29:52,960
HTML and greater
1750
01:29:49,320 --> 01:29:54,639
than the HTML element represents the
1751
01:29:52,960 --> 01:29:57,400
entire web page
1752
01:29:54,639 --> 01:29:58,880
so everything on the web page should go
1753
01:29:57,400 --> 01:30:02,080
inside this
1754
01:29:58,880 --> 01:30:05,280
element and then inside the HTML element
1755
01:30:02,080 --> 01:30:08,360
we're also going to split it up into two
1756
01:30:05,280 --> 01:30:13,480
sections the head
1757
01:30:08,360 --> 01:30:16,320
element and the body
1758
01:30:13,480 --> 01:30:18,679
element so the body element is supposed
1759
01:30:16,320 --> 01:30:22,199
to contain everything that is visible on
1760
01:30:18,679 --> 01:30:25,560
the page in our example that would be
1761
01:30:22,199 --> 01:30:27,360
the buttons and the parag graph so let's
1762
01:30:25,560 --> 01:30:29,560
actually select this
1763
01:30:27,360 --> 01:30:32,159
code and we're going to
1764
01:30:29,560 --> 01:30:35,560
rightclick and
1765
01:30:32,159 --> 01:30:41,080
cut and then inside the
1766
01:30:35,560 --> 01:30:41,080
body we're going to right click and
1767
01:30:41,880 --> 01:30:48,400
paste the head element contains
1768
01:30:45,119 --> 01:30:50,159
information about the page in general
1769
01:30:48,400 --> 01:30:52,440
everything that is not visible on the
1770
01:30:50,159 --> 01:30:55,480
page goes inside the
1771
01:30:52,440 --> 01:30:58,320
head in our examp example that would be
1772
01:30:55,480 --> 01:30:59,320
the style element so let's select this
1773
01:30:58,320 --> 01:31:04,000
as
1774
01:30:59,320 --> 01:31:07,840
well we're going to rightclick and
1775
01:31:04,000 --> 01:31:12,159
cut and then inside the
1776
01:31:07,840 --> 01:31:15,280
head we're going to right click and
1777
01:31:12,159 --> 01:31:18,159
paste and at the bottom let's just clean
1778
01:31:15,280 --> 01:31:21,360
up by removing all of the extra new
1779
01:31:18,159 --> 01:31:24,639
lines so this is a structure that we're
1780
01:31:21,360 --> 01:31:27,679
supposed to follow in all of our HTML
1781
01:31:24,639 --> 01:31:30,840
files as you can see this structure uses
1782
01:31:27,679 --> 01:31:33,800
a lot of nesting or elements inside
1783
01:31:30,840 --> 01:31:36,800
elements to organize our
1784
01:31:33,800 --> 01:31:40,040
code okay so what are the benefits of
1785
01:31:36,800 --> 01:31:41,679
following this structure one benefit is
1786
01:31:40,040 --> 01:31:45,440
that there are other elements that we
1787
01:31:41,679 --> 01:31:48,600
can use inside the head for example
1788
01:31:45,440 --> 01:31:53,280
let's type here press enter and we're
1789
01:31:48,600 --> 01:31:56,119
going to add the title element so the
1790
01:31:53,280 --> 01:32:03,800
title element sets the text in the
1791
01:31:56,119 --> 01:32:07,800
tabs inside we can type HTML CSS review
1792
01:32:03,800 --> 01:32:09,480
if we save and refresh the title will
1793
01:32:07,800 --> 01:32:12,480
show up in the
1794
01:32:09,480 --> 01:32:14,760
tab so this is an example of an element
1795
01:32:12,480 --> 01:32:17,239
that we can now add in the
1796
01:32:14,760 --> 01:32:19,760
head another benefit that we get from
1797
01:32:17,239 --> 01:32:22,480
this structure is the ability to
1798
01:32:19,760 --> 01:32:24,840
automatically refresh our web page when
1799
01:32:22,480 --> 01:32:28,080
we change our code
1800
01:32:24,840 --> 01:32:31,400
so far every time we change our code we
1801
01:32:28,080 --> 01:32:34,560
have to save and then manually refresh
1802
01:32:31,400 --> 01:32:37,400
the web page we can actually automate
1803
01:32:34,560 --> 01:32:40,400
this by following the structure and then
1804
01:32:37,400 --> 01:32:43,880
installing a VSS code
1805
01:32:40,400 --> 01:32:46,920
extension so let's click the extension
1806
01:32:43,880 --> 01:32:49,760
area and we're going to search for the
1807
01:32:46,920 --> 01:32:54,199
extension live
1808
01:32:49,760 --> 01:32:55,960
server and click install
1809
01:32:54,199 --> 01:32:57,600
once we have that installed we're going
1810
01:32:55,960 --> 01:33:00,119
to change a
1811
01:32:57,600 --> 01:33:03,000
setting let's open the settings by
1812
01:33:00,119 --> 01:33:05,960
clicking this icon in the bottom left
1813
01:33:03,000 --> 01:33:05,960
and then click
1814
01:33:06,040 --> 01:33:12,960
settings at the top we're going to
1815
01:33:08,520 --> 01:33:14,880
search for live
1816
01:33:12,960 --> 01:33:18,960
server and we're going to look for a
1817
01:33:14,880 --> 01:33:21,119
setting called live server custom
1818
01:33:18,960 --> 01:33:22,560
browser and we're going to change this
1819
01:33:21,119 --> 01:33:25,199
to
1820
01:33:22,560 --> 01:33:27,520
Chrome now now if Google Chrome is
1821
01:33:25,199 --> 01:33:29,719
already your default web browser you
1822
01:33:27,520 --> 01:33:30,400
don't need to do this step but it's nice
1823
01:33:29,719 --> 01:33:33,400
to
1824
01:33:30,400 --> 01:33:37,239
know now let's close the
1825
01:33:33,400 --> 01:33:37,239
settings and go back to our
1826
01:33:37,600 --> 01:33:43,880
code next instead of opening this file
1827
01:33:40,960 --> 01:33:46,159
directly in the browser like before
1828
01:33:43,880 --> 01:33:49,360
we're going to use live server to open
1829
01:33:46,159 --> 01:33:52,639
this file to do that we're going to
1830
01:33:49,360 --> 01:33:56,239
rightclick this file in our code editor
1831
01:33:52,639 --> 01:33:58,800
and then click open open with live
1832
01:33:56,239 --> 01:34:01,760
server if we open a file with live
1833
01:33:58,800 --> 01:34:04,199
server this web page will automatically
1834
01:34:01,760 --> 01:34:08,159
refresh when we change our
1835
01:34:04,199 --> 01:34:12,199
code for example we can go here and
1836
01:34:08,159 --> 01:34:15,760
change the background color to Green if
1837
01:34:12,199 --> 01:34:18,040
we save live server will automatically
1838
01:34:15,760 --> 01:34:20,080
refresh the web page so we don't have to
1839
01:34:18,040 --> 01:34:23,000
do that back and forth
1840
01:34:20,080 --> 01:34:25,280
anymore let's just change it back to Red
1841
01:34:23,000 --> 01:34:26,440
so that the class last name makes sense
1842
01:34:25,280 --> 01:34:31,280
and
1843
01:34:26,440 --> 01:34:31,280
save and we can also close the previous
1844
01:34:31,320 --> 01:34:38,719
tab so this is the HTML structure it
1845
01:34:35,520 --> 01:34:41,360
gives us access to more features of
1846
01:34:38,719 --> 01:34:45,000
HTML and this is all we need to review
1847
01:34:41,360 --> 01:34:47,760
about HTML and CSS for now if you want
1848
01:34:45,000 --> 01:34:52,080
to learn more you can check out my HTML
1849
01:34:47,760 --> 01:34:54,800
and CSS full course in the video
1850
01:34:52,080 --> 01:34:57,080
description by the way to find the links
1851
01:34:54,800 --> 01:34:59,840
mentioned in each lesson you can click
1852
01:34:57,080 --> 01:34:59,840
here in the
1853
01:35:02,719 --> 01:35:08,560
description and this page contains all
1854
01:35:05,119 --> 01:35:08,560
the links mentioned in each
1855
01:35:10,159 --> 01:35:15,320
lesson before we add JavaScript to our
1856
01:35:12,760 --> 01:35:16,440
website we're going to review some VSS
1857
01:35:15,320 --> 01:35:18,719
code
1858
01:35:16,440 --> 01:35:22,159
setup so you'll notice that many of
1859
01:35:18,719 --> 01:35:24,760
these lines have spaces at the front
1860
01:35:22,159 --> 01:35:27,679
these spaces are called in indents and
1861
01:35:24,760 --> 01:35:30,560
indents make our code easier to read for
1862
01:35:27,679 --> 01:35:33,600
example we can easily tell that this
1863
01:35:30,560 --> 01:35:36,119
code is inside the brackets because it
1864
01:35:33,600 --> 01:35:39,040
has an extra indent in the
1865
01:35:36,119 --> 01:35:41,280
front if we didn't have indents here's
1866
01:35:39,040 --> 01:35:42,840
what the code would look like it's a lot
1867
01:35:41,280 --> 01:35:46,199
harder to
1868
01:35:42,840 --> 01:35:49,159
read to add an indent we can type at the
1869
01:35:46,199 --> 01:35:52,360
beginning of the line and press
1870
01:35:49,159 --> 01:35:55,679
tab to remove an indent we can press
1871
01:35:52,360 --> 01:35:59,600
shift tab or just use
1872
01:35:55,679 --> 01:36:03,719
backspace now by default VSS code uses
1873
01:35:59,600 --> 01:36:06,920
four spaces per indet however in HTML
1874
01:36:03,719 --> 01:36:09,119
CSS and JavaScript we usually use two
1875
01:36:06,920 --> 01:36:11,960
spaces per indet so we're going to
1876
01:36:09,119 --> 01:36:14,400
update this setting let's go to our
1877
01:36:11,960 --> 01:36:15,440
settings by clicking this icon in the
1878
01:36:14,400 --> 01:36:18,800
bottom
1879
01:36:15,440 --> 01:36:21,280
left and then click
1880
01:36:18,800 --> 01:36:24,760
settings and at the top we're going to
1881
01:36:21,280 --> 01:36:27,440
search for tab
1882
01:36:24,760 --> 01:36:30,159
and we're going to change the tab size
1883
01:36:27,440 --> 01:36:32,960
from 4 to
1884
01:36:30,159 --> 01:36:34,960
2 now let's close the
1885
01:36:32,960 --> 01:36:37,560
settings and we're also going to change
1886
01:36:34,960 --> 01:36:41,080
the indents for this file we're going to
1887
01:36:37,560 --> 01:36:43,679
go down here and click select
1888
01:36:41,080 --> 01:36:44,920
indent and we're going to choose indent
1889
01:36:43,679 --> 01:36:48,080
using
1890
01:36:44,920 --> 01:36:50,960
spaces and then click
1891
01:36:48,080 --> 01:36:54,800
two and now if we type at the start of a
1892
01:36:50,960 --> 01:36:56,239
line and press tab it will only add two
1893
01:36:54,800 --> 01:36:59,679
spaces per
1894
01:36:56,239 --> 01:37:03,000
indent so let's reformat our code to use
1895
01:36:59,679 --> 01:37:04,800
two spaces per indent instead of four
1896
01:37:03,000 --> 01:37:07,880
first we're going to remove all the
1897
01:37:04,800 --> 01:37:10,520
indents in our code a shortcut for this
1898
01:37:07,880 --> 01:37:14,560
is to select all of these
1899
01:37:10,520 --> 01:37:17,040
lines and press shift tab to remove one
1900
01:37:14,560 --> 01:37:20,520
indent for each line so we're going to
1901
01:37:17,040 --> 01:37:22,239
keep pressing shift tab until we remove
1902
01:37:20,520 --> 01:37:24,840
all the
1903
01:37:22,239 --> 01:37:28,560
indents next next we're going to add the
1904
01:37:24,840 --> 01:37:30,920
indents back using a similar shortcut
1905
01:37:28,560 --> 01:37:34,239
we're going to select the head
1906
01:37:30,920 --> 01:37:37,360
element and press tab to add one indent
1907
01:37:34,239 --> 01:37:40,599
for each line and then select everything
1908
01:37:37,360 --> 01:37:43,119
inside the head and press tab to add
1909
01:37:40,599 --> 01:37:47,040
another indent and then select
1910
01:37:43,119 --> 01:37:49,400
everything inside style and press Tab
1911
01:37:47,040 --> 01:37:51,679
and then inside each of these brackets
1912
01:37:49,400 --> 01:37:55,920
we're going to select the lines press
1913
01:37:51,679 --> 01:37:58,679
Tab and then here press tab we'll do the
1914
01:37:55,920 --> 01:38:02,320
same thing for the body element we'll
1915
01:37:58,679 --> 01:38:05,320
select all these lines and press tab
1916
01:38:02,320 --> 01:38:08,040
we'll select everything inside the body
1917
01:38:05,320 --> 01:38:11,360
press Tab and then inside each of these
1918
01:38:08,040 --> 01:38:12,599
elements we're going to press Tab and
1919
01:38:11,360 --> 01:38:16,520
press
1920
01:38:12,599 --> 01:38:19,520
tab now if we save our website will look
1921
01:38:16,520 --> 01:38:20,599
the same because all we did was adjust
1922
01:38:19,520 --> 01:38:23,000
the
1923
01:38:20,599 --> 01:38:25,599
indents so there's one other setting in
1924
01:38:23,000 --> 01:38:28,679
vs code that we're going to set up which
1925
01:38:25,599 --> 01:38:30,639
is line wrapping if you look at this
1926
01:38:28,679 --> 01:38:33,239
line of code you can see that it's
1927
01:38:30,639 --> 01:38:36,480
really long and we need to scroll
1928
01:38:33,239 --> 01:38:38,440
horizontally to see the rest of the line
1929
01:38:36,480 --> 01:38:41,719
instead we're going to make this line
1930
01:38:38,440 --> 01:38:44,800
wrap around if it gets too long let's go
1931
01:38:41,719 --> 01:38:46,800
back into our settings by clicking here
1932
01:38:44,800 --> 01:38:49,280
and then click the
1933
01:38:46,800 --> 01:38:51,599
settings and then up here we're going to
1934
01:38:49,280 --> 01:38:54,159
search for
1935
01:38:51,599 --> 01:38:58,239
wrap and we're going to look for editor
1936
01:38:54,159 --> 01:39:01,040
word wrap and we're going to turn this
1937
01:38:58,239 --> 01:39:02,239
on now if we close our settings and go
1938
01:39:01,040 --> 01:39:05,360
back to our
1939
01:39:02,239 --> 01:39:08,119
code this line which is really long will
1940
01:39:05,360 --> 01:39:10,560
wrap around to the next line instead of
1941
01:39:08,119 --> 01:39:13,480
us having to horizontally
1942
01:39:10,560 --> 01:39:18,080
scroll so that's the vs code setup that
1943
01:39:13,480 --> 01:39:20,639
we need two spaces per indent and line
1944
01:39:18,080 --> 01:39:23,719
wrapping finally we're going to add
1945
01:39:20,639 --> 01:39:26,119
JavaScript to this website so we learned
1946
01:39:23,719 --> 01:39:28,760
that we can use the console to write and
1947
01:39:26,119 --> 01:39:31,400
run JavaScript well there's actually
1948
01:39:28,760 --> 01:39:34,760
another way to run JavaScript which is
1949
01:39:31,400 --> 01:39:38,080
inside an HTML file let's learn how to
1950
01:39:34,760 --> 01:39:40,960
do that so we learned that HTML has a
1951
01:39:38,080 --> 01:39:44,719
special element that runs CSS code
1952
01:39:40,960 --> 01:39:46,960
called the style element while HTML has
1953
01:39:44,719 --> 01:39:49,719
another special element that runs
1954
01:39:46,960 --> 01:39:51,639
JavaScript code and this element is
1955
01:39:49,719 --> 01:39:54,040
called the script
1956
01:39:51,639 --> 01:39:57,440
element so inside
1957
01:39:54,040 --> 01:40:01,679
body at the bottom of the body we're
1958
01:39:57,440 --> 01:40:05,239
going to add less than script greater
1959
01:40:01,679 --> 01:40:08,159
than and the closing tag less than SL
1960
01:40:05,239 --> 01:40:09,920
script greater than and inside the
1961
01:40:08,159 --> 01:40:12,840
script element we can put some
1962
01:40:09,920 --> 01:40:18,960
JavaScript code we're going to add the
1963
01:40:12,840 --> 01:40:22,960
code alert Open Bracket quote hello
1964
01:40:18,960 --> 01:40:24,400
quote close bracket and semicolon if we
1965
01:40:22,960 --> 01:40:26,920
save
1966
01:40:24,400 --> 01:40:28,800
live server will refresh the page and
1967
01:40:26,920 --> 01:40:31,440
now you notice that the computer now
1968
01:40:28,800 --> 01:40:34,080
runs our JavaScript code just like it
1969
01:40:31,440 --> 01:40:37,320
did in the console it creates a popup
1970
01:40:34,080 --> 01:40:37,320
with the text hello
1971
01:40:37,560 --> 01:40:42,360
inside and we usually put the script
1972
01:40:39,880 --> 01:40:43,920
element at the bottom of the body
1973
01:40:42,360 --> 01:40:46,840
because we want the web page to be
1974
01:40:43,920 --> 01:40:48,679
created first and then we use JavaScript
1975
01:40:46,840 --> 01:40:51,119
to make it
1976
01:40:48,679 --> 01:40:53,000
interactive for the rest of this course
1977
01:40:51,119 --> 01:40:56,480
we're going to run our JavaScript code
1978
01:40:53,000 --> 01:40:58,920
using using an HTML file the console
1979
01:40:56,480 --> 01:41:02,239
that we used in the previous lessons is
1980
01:40:58,920 --> 01:41:05,520
more of a way to try out JavaScript code
1981
01:41:02,239 --> 01:41:07,719
we wouldn't use a console for a real
1982
01:41:05,520 --> 01:41:10,480
website in addition to the script
1983
01:41:07,719 --> 01:41:13,960
element we have another way to run
1984
01:41:10,480 --> 01:41:17,400
JavaScript code inside HTML and that's
1985
01:41:13,960 --> 01:41:20,360
by using an attribute let's go back to
1986
01:41:17,400 --> 01:41:23,960
our first button and here we're going to
1987
01:41:20,360 --> 01:41:26,719
add another attribute so let's type
1988
01:41:23,960 --> 01:41:28,480
space and this time we're going to add
1989
01:41:26,719 --> 01:41:32,719
the
1990
01:41:28,480 --> 01:41:36,040
onclick attribute equals double
1991
01:41:32,719 --> 01:41:38,920
quotes So this attribute will run
1992
01:41:36,040 --> 01:41:42,760
JavaScript code whenever we click this
1993
01:41:38,920 --> 01:41:45,520
button that's what onclick means between
1994
01:41:42,760 --> 01:41:49,080
the double quotes we can write some
1995
01:41:45,520 --> 01:41:52,480
JavaScript for example let's press enter
1996
01:41:49,080 --> 01:41:53,960
enter and then here we're going to type
1997
01:41:52,480 --> 01:41:55,800
alert
1998
01:41:53,960 --> 01:42:02,119
Open Bracket
1999
01:41:55,800 --> 01:42:04,639
quote good job quote close bracket and
2000
01:42:02,119 --> 01:42:07,840
semicolon now if we
2001
01:42:04,639 --> 01:42:10,840
save live server will refresh the page
2002
01:42:07,840 --> 01:42:14,080
and run this line of JavaScript code
2003
01:42:10,840 --> 01:42:15,000
let's press okay and now if we click
2004
01:42:14,080 --> 01:42:17,920
this
2005
01:42:15,000 --> 01:42:20,400
button it will run this line of
2006
01:42:17,920 --> 01:42:25,119
JavaScript code and create a popup with
2007
01:42:20,400 --> 01:42:25,119
a text good job inside
2008
01:42:25,560 --> 01:42:31,560
so those are two places where we can run
2009
01:42:27,960 --> 01:42:34,960
JavaScript code the script element and
2010
01:42:31,560 --> 01:42:37,960
the onclick attribute the code in the
2011
01:42:34,960 --> 01:42:41,119
script element runs first when the page
2012
01:42:37,960 --> 01:42:44,119
is loaded the code in the onclick
2013
01:42:41,119 --> 01:42:46,520
attribute runs after when we click the
2014
01:42:44,119 --> 01:42:51,119
button on the
2015
01:42:46,520 --> 01:42:54,000
page and that's how we use HTML CSS and
2016
01:42:51,119 --> 01:42:56,800
JavaScript together on a website
2017
01:42:54,000 --> 01:43:01,520
notice that everything starts from
2018
01:42:56,800 --> 01:43:05,960
HTML HTML first creates the website and
2019
01:43:01,520 --> 01:43:09,159
then inside the HTML we can run CSS code
2020
01:43:05,960 --> 01:43:13,480
to change the appearance and we can run
2021
01:43:09,159 --> 01:43:15,679
JavaScript code to make the website
2022
01:43:13,480 --> 01:43:17,480
interactive now let's learn some new
2023
01:43:15,679 --> 01:43:20,560
features of JavaScript that we haven't
2024
01:43:17,480 --> 01:43:23,400
seen yet in this course the next feature
2025
01:43:20,560 --> 01:43:25,080
we're going to learn is called comments
2026
01:43:23,400 --> 01:43:27,920
comments are pieces of code that the
2027
01:43:25,080 --> 01:43:30,400
computer ignores so let's create our
2028
01:43:27,920 --> 01:43:32,080
first comment we're going to go down to
2029
01:43:30,400 --> 01:43:36,480
the script element
2030
01:43:32,080 --> 01:43:40,440
here and type forward slash forward
2031
01:43:36,480 --> 01:43:42,920
slash so this is a comment anything
2032
01:43:40,440 --> 01:43:45,400
after the double slash will be ignored
2033
01:43:42,920 --> 01:43:50,679
by the computer so we can type anything
2034
01:43:45,400 --> 01:43:55,040
we want like this is a
2035
01:43:50,679 --> 01:43:57,840
comment if we save it ignores this line
2036
01:43:55,040 --> 01:44:00,800
and creates the popup in the next
2037
01:43:57,840 --> 01:44:02,920
line now let's close this popup and
2038
01:44:00,800 --> 01:44:05,239
learn why we use
2039
01:44:02,920 --> 01:44:07,679
comments comments are useful for
2040
01:44:05,239 --> 01:44:11,400
providing more information for people
2041
01:44:07,679 --> 01:44:16,000
reading our code for example we can
2042
01:44:11,400 --> 01:44:20,400
create a comment above this code like
2043
01:44:16,000 --> 01:44:23,760
this code creates a
2044
01:44:20,400 --> 01:44:27,320
popup this comment helps others and
2045
01:44:23,760 --> 01:44:29,679
ourselves understand what this code does
2046
01:44:27,320 --> 01:44:32,960
so that's one way we use
2047
01:44:29,679 --> 01:44:34,840
comments another way we use comments is
2048
01:44:32,960 --> 01:44:37,560
if we don't want to run some code
2049
01:44:34,840 --> 01:44:42,080
anymore but we also don't want to delete
2050
01:44:37,560 --> 01:44:45,280
it for example this code creates a popup
2051
01:44:42,080 --> 01:44:46,320
every time we refresh the page and this
2052
01:44:45,280 --> 01:44:49,080
can be
2053
01:44:46,320 --> 01:44:52,159
annoying so I want to stop running this
2054
01:44:49,080 --> 01:44:53,840
code but I also don't want to delete it
2055
01:44:52,159 --> 01:44:55,080
because you might want to review this
2056
01:44:53,840 --> 01:44:58,960
code
2057
01:44:55,080 --> 01:45:01,639
later so what we can do here is to add a
2058
01:44:58,960 --> 01:45:04,199
double slash in front of this line to
2059
01:45:01,639 --> 01:45:08,080
turn this code into a
2060
01:45:04,199 --> 01:45:10,920
comment now if we save the computer will
2061
01:45:08,080 --> 01:45:12,000
ignore this line of code and not create
2062
01:45:10,920 --> 01:45:15,360
the
2063
01:45:12,000 --> 01:45:18,199
popup this is called commenting out the
2064
01:45:15,360 --> 01:45:20,679
code it's useful if we don't want to run
2065
01:45:18,199 --> 01:45:24,800
some code anymore but we also don't want
2066
01:45:20,679 --> 01:45:27,119
to delete it for informational purposes
2067
01:45:24,800 --> 01:45:31,040
so JavaScript has another Syntax for
2068
01:45:27,119 --> 01:45:34,440
writing comments and that syntax is
2069
01:45:31,040 --> 01:45:38,280
slash star and star
2070
01:45:34,440 --> 01:45:42,119
slash here anything between the stars is
2071
01:45:38,280 --> 01:45:44,800
a comment this is called a multi-line
2072
01:45:42,119 --> 01:45:48,080
comment because between the Stars we can
2073
01:45:44,800 --> 01:45:53,040
write a comment on multiple lines for
2074
01:45:48,080 --> 01:45:56,800
example we can type multi enter line
2075
01:45:53,040 --> 01:45:59,880
Line enter
2076
01:45:56,800 --> 01:46:02,719
comment on the other hand double slash
2077
01:45:59,880 --> 01:46:06,520
is known as a single line
2078
01:46:02,719 --> 01:46:10,239
comment now just like JavaScript HTML
2079
01:46:06,520 --> 01:46:11,719
and CSS also have comments but they use
2080
01:46:10,239 --> 01:46:15,280
a different
2081
01:46:11,719 --> 01:46:19,599
syntax if we scroll up to our
2082
01:46:15,280 --> 01:46:21,119
HTML here we can type less than
2083
01:46:19,599 --> 01:46:25,520
exclamation
2084
01:46:21,119 --> 01:46:28,360
d-h and we also need dh- greater than so
2085
01:46:25,520 --> 01:46:34,280
anything between these double dashes is
2086
01:46:28,360 --> 01:46:38,760
a comment for example this is a
2087
01:46:34,280 --> 01:46:44,080
comment in CSS to create a comment we
2088
01:46:38,760 --> 01:46:47,119
can type slash star star slash so it's
2089
01:46:44,080 --> 01:46:50,239
the same multi-line comment as
2090
01:46:47,119 --> 01:46:53,400
JavaScript between the Stars we can add
2091
01:46:50,239 --> 01:46:55,599
a comment so this
2092
01:46:53,400 --> 01:46:57,960
is a
2093
01:46:55,599 --> 01:47:01,000
comment if we save our
2094
01:46:57,960 --> 01:47:03,800
file nothing changes on our web page
2095
01:47:01,000 --> 01:47:06,159
because comments are ignored by the
2096
01:47:03,800 --> 01:47:08,800
computer the last feature of JavaScript
2097
01:47:06,159 --> 01:47:11,320
we're going to learn is called
2098
01:47:08,800 --> 01:47:15,360
console.log let's go back to our
2099
01:47:11,320 --> 01:47:20,320
code and at the bottom in the script
2100
01:47:15,360 --> 01:47:23,040
element we're going to type the code 2 +
2101
01:47:20,320 --> 01:47:26,960
2 so we learned that this code in Java
2102
01:47:23,040 --> 01:47:28,480
script does some math however if we save
2103
01:47:26,960 --> 01:47:32,239
this
2104
01:47:28,480 --> 01:47:34,440
file where is the result of this math so
2105
01:47:32,239 --> 01:47:37,520
we might think that the result will show
2106
01:47:34,440 --> 01:47:40,119
up in the console but if we
2107
01:47:37,520 --> 01:47:42,840
rightclick click
2108
01:47:40,119 --> 01:47:45,280
inspect and then click the
2109
01:47:42,840 --> 01:47:48,400
console you'll notice that the result
2110
01:47:45,280 --> 01:47:52,960
doesn't show up here either and that's
2111
01:47:48,400 --> 01:47:56,000
because before we were running 2 + 2
2112
01:47:52,960 --> 01:47:59,199
inside the console so the result shows
2113
01:47:56,000 --> 01:48:01,920
up in the console but now we're not
2114
01:47:59,199 --> 01:48:04,920
running this code in the console anymore
2115
01:48:01,920 --> 01:48:07,000
we're running this code on the web page
2116
01:48:04,920 --> 01:48:09,760
so how do we see this
2117
01:48:07,000 --> 01:48:13,639
result the solution is we're going to
2118
01:48:09,760 --> 01:48:16,119
redirect this result back to the console
2119
01:48:13,639 --> 01:48:17,199
to do that we're going to use this piece
2120
01:48:16,119 --> 01:48:20,199
of
2121
01:48:17,199 --> 01:48:20,199
code
2122
01:48:20,639 --> 01:48:25,320
console.log Open Bracket close bracket
2123
01:48:23,840 --> 01:48:28,360
and
2124
01:48:25,320 --> 01:48:31,159
semicolon console.log will display
2125
01:48:28,360 --> 01:48:34,480
whatever's between the brackets back in
2126
01:48:31,159 --> 01:48:38,080
the console so if we move this code
2127
01:48:34,480 --> 01:48:41,560
between the brackets so we select this
2128
01:48:38,080 --> 01:48:45,960
and then right click cut and then
2129
01:48:41,560 --> 01:48:47,199
between the brackets right click paste
2130
01:48:45,960 --> 01:48:49,960
and
2131
01:48:47,199 --> 01:48:53,119
save the result of this code is
2132
01:48:49,960 --> 01:48:56,080
displayed back in the console
2133
01:48:53,119 --> 01:49:00,639
and console.log works for any code that
2134
01:48:56,080 --> 01:49:04,159
we learned so far for example we can use
2135
01:49:00,639 --> 01:49:07,159
strings so let's create a new line and
2136
01:49:04,159 --> 01:49:07,159
type
2137
01:49:07,639 --> 01:49:13,040
console.log Open Bracket close bracket
2138
01:49:10,560 --> 01:49:14,400
semicolon and then between the brackets
2139
01:49:13,040 --> 01:49:22,119
let's type some
2140
01:49:14,400 --> 01:49:23,639
strings quote Su quote plus quote text
2141
01:49:22,119 --> 01:49:25,360
quote
2142
01:49:23,639 --> 01:49:28,960
and save this
2143
01:49:25,360 --> 01:49:31,520
file again it will display the result of
2144
01:49:28,960 --> 01:49:32,480
whatever's between the brackets back in
2145
01:49:31,520 --> 01:49:35,159
the
2146
01:49:32,480 --> 01:49:37,719
console so that's how we see the result
2147
01:49:35,159 --> 01:49:40,760
of JavaScript code that is running in a
2148
01:49:37,719 --> 01:49:43,159
file we use
2149
01:49:40,760 --> 01:49:46,239
console.log and that's the end of this
2150
01:49:43,159 --> 01:49:50,920
lesson in this lesson we reviewed the
2151
01:49:46,239 --> 01:49:54,719
basics of HTML and CSS we set up our
2152
01:49:50,920 --> 01:49:58,599
code editor vs code we learned how to
2153
01:49:54,719 --> 01:50:01,880
load JavaScript inside an HTML file
2154
01:49:58,599 --> 01:50:04,520
using the script element and the onclick
2155
01:50:01,880 --> 01:50:09,280
attribute we learned how to create
2156
01:50:04,520 --> 01:50:09,280
comments and we learned how to use
2157
01:50:10,639 --> 01:50:14,920
console.log thanks for watching this
2158
01:50:12,520 --> 01:50:16,679
course so far if you want to support
2159
01:50:14,920 --> 01:50:18,920
this channel you can check out the
2160
01:50:16,679 --> 01:50:21,080
premium version of my courses just like
2161
01:50:18,920 --> 01:50:24,599
this one where you can get a certificate
2162
01:50:21,080 --> 01:50:26,520
of completion and a learning platform if
2163
01:50:24,599 --> 01:50:29,760
you're interested in extra videos from
2164
01:50:26,520 --> 01:50:32,040
me more in-depth videos and behind thes
2165
01:50:29,760 --> 01:50:34,920
scenes content you can check out these
2166
01:50:32,040 --> 01:50:37,800
links here you can also support the
2167
01:50:34,920 --> 01:50:40,320
channel by liking the video subscribing
2168
01:50:37,800 --> 01:50:44,280
and sharing this video with others
2169
01:50:40,320 --> 01:50:44,280
thanks again and let's continue with the
2170
01:50:44,320 --> 01:50:49,119
course here are some exercises you can
2171
01:50:46,880 --> 01:50:53,320
try on your own to practice what we
2172
01:50:49,119 --> 01:50:53,320
learned in this lesson
2173
01:51:10,679 --> 01:51:14,920
in this lesson we're going to learn the
2174
01:51:12,760 --> 01:51:17,000
next feature of JavaScript called
2175
01:51:14,920 --> 01:51:19,520
variables and we're going to use
2176
01:51:17,000 --> 01:51:21,639
variables to build a simple version of
2177
01:51:19,520 --> 01:51:23,280
the cart quantity feature of the final
2178
01:51:21,639 --> 01:51:27,320
project
2179
01:51:23,280 --> 01:51:30,119
first let's create a new HTML file just
2180
01:51:27,320 --> 01:51:33,440
for learning variables we're going to go
2181
01:51:30,119 --> 01:51:36,360
to our code editor and click this icon
2182
01:51:33,440 --> 01:51:39,280
to show our files and then click this
2183
01:51:36,360 --> 01:51:44,119
icon to create a new
2184
01:51:39,280 --> 01:51:46,560
file and we're going to name this file
2185
01:51:44,119 --> 01:51:48,239
05-
2186
01:51:46,560 --> 01:51:50,400
variables.
2187
01:51:48,239 --> 01:51:53,639
HTML and press
2188
01:51:50,400 --> 01:51:55,560
enter so the 05 just means that this
2189
01:51:53,639 --> 01:51:58,800
file is for lesson
2190
01:51:55,560 --> 01:52:00,440
five let's also add the lesson number to
2191
01:51:58,800 --> 01:52:04,440
website.
2192
01:52:00,440 --> 01:52:06,719
HTML we'll select this file and then
2193
01:52:04,440 --> 01:52:10,880
rightclick
2194
01:52:06,719 --> 01:52:13,560
rename and then at the front We'll add
2195
01:52:10,880 --> 01:52:16,560
04- and press
2196
01:52:13,560 --> 01:52:21,199
enter next we're going to copy all the
2197
01:52:16,560 --> 01:52:24,400
code in website. HTML to variables.
2198
01:52:21,199 --> 01:52:26,719
HTML so let's click in this file and
2199
01:52:24,400 --> 01:52:30,079
we're going to select all of this code
2200
01:52:26,719 --> 01:52:32,400
by typing control a on Windows or
2201
01:52:30,079 --> 01:52:35,079
command a on
2202
01:52:32,400 --> 01:52:36,840
Mac and then we're going to
2203
01:52:35,079 --> 01:52:40,599
rightclick
2204
01:52:36,840 --> 01:52:44,840
copy and then inside variables.
2205
01:52:40,599 --> 01:52:47,920
HTML rightclick and
2206
01:52:44,840 --> 01:52:50,679
paste let's click this icon to hide our
2207
01:52:47,920 --> 01:52:53,400
files for now and we'll prepare this
2208
01:52:50,679 --> 01:52:56,159
file for this lesson so let's scroll up
2209
01:52:53,400 --> 01:53:00,440
to the top and first we're going to
2210
01:52:56,159 --> 01:53:03,000
change the title to
2211
01:53:00,440 --> 01:53:05,639
variables next we're going to delete all
2212
01:53:03,000 --> 01:53:08,719
the CSS because we're going to start
2213
01:53:05,639 --> 01:53:13,000
over and we're going to delete all the
2214
01:53:08,719 --> 01:53:13,000
HTML except for the script
2215
01:53:13,079 --> 01:53:18,400
element and let's delete all the
2216
01:53:15,239 --> 01:53:22,760
JavaScript from the previous
2217
01:53:18,400 --> 01:53:25,159
lesson and finally let's save
2218
01:53:22,760 --> 01:53:28,280
and we'll open this file in our browser
2219
01:53:25,159 --> 01:53:30,000
by right clicking and then open with
2220
01:53:28,280 --> 01:53:32,920
live
2221
01:53:30,000 --> 01:53:36,880
server and now we can close the previous
2222
01:53:32,920 --> 01:53:39,920
tab and the previous code for
2223
01:53:36,880 --> 01:53:43,040
now now we're ready to learn
2224
01:53:39,920 --> 01:53:46,840
variables first of all what is a
2225
01:53:43,040 --> 01:53:49,599
variable a variable is like a container
2226
01:53:46,840 --> 01:53:52,639
we can save a value like a number or a
2227
01:53:49,599 --> 01:53:56,079
string inside a variable and then then
2228
01:53:52,639 --> 01:53:57,880
use it later Let's do an example and
2229
01:53:56,079 --> 01:54:00,960
create our first
2230
01:53:57,880 --> 01:54:05,599
variable inside the script element we're
2231
01:54:00,960 --> 01:54:09,280
going to type the code let and space the
2232
01:54:05,599 --> 01:54:11,840
word let creates a new variable and now
2233
01:54:09,280 --> 01:54:16,000
we're going to choose a name for our new
2234
01:54:11,840 --> 01:54:19,239
variable let's name this variable
2235
01:54:16,000 --> 01:54:22,760
one so this creates a variable or a
2236
01:54:19,239 --> 01:54:27,280
container named variable one and now we
2237
01:54:22,760 --> 01:54:31,440
can save a value inside this variable to
2238
01:54:27,280 --> 01:54:34,560
do that we're going to type space equals
2239
01:54:31,440 --> 01:54:38,560
space and then a value like a number or
2240
01:54:34,560 --> 01:54:41,599
a string so let's save the number three
2241
01:54:38,560 --> 01:54:45,639
inside and we'll type a semicolon at the
2242
01:54:41,599 --> 01:54:49,079
end so here we use the let to create a
2243
01:54:45,639 --> 01:54:51,880
new variable we named this variable
2244
01:54:49,079 --> 01:54:54,280
variable one and we saved the value
2245
01:54:51,880 --> 01:54:57,239
three inside this
2246
01:54:54,280 --> 01:55:01,239
variable now that we saved this value we
2247
01:54:57,239 --> 01:55:05,199
can use it later for example let's type
2248
01:55:01,239 --> 01:55:09,280
a new line and type the code
2249
01:55:05,199 --> 01:55:10,560
console. log Open Bracket close bracket
2250
01:55:09,280 --> 01:55:12,679
and
2251
01:55:10,560 --> 01:55:14,920
semicolon remember from the previous
2252
01:55:12,679 --> 01:55:17,599
lesson that this code displays
2253
01:55:14,920 --> 01:55:21,480
whatever's inside the brackets in the
2254
01:55:17,599 --> 01:55:22,920
console so far we put a value inside
2255
01:55:21,480 --> 01:55:26,560
like the number
2256
01:55:22,920 --> 01:55:29,679
two if we save and then go to our
2257
01:55:26,560 --> 01:55:31,679
website and open the console so right
2258
01:55:29,679 --> 01:55:34,440
click
2259
01:55:31,679 --> 01:55:37,360
inspect and then click the
2260
01:55:34,440 --> 01:55:39,079
console we can see that the number two
2261
01:55:37,360 --> 01:55:41,719
was displayed in the
2262
01:55:39,079 --> 01:55:44,599
console so now let's try replacing this
2263
01:55:41,719 --> 01:55:48,560
value with the variable that we created
2264
01:55:44,599 --> 01:55:52,719
above so instead of two we're going to
2265
01:55:48,560 --> 01:55:53,960
console.log variable one
2266
01:55:52,719 --> 01:55:58,000
if we
2267
01:55:53,960 --> 01:56:00,280
save notice that it now displays three
2268
01:55:58,000 --> 01:56:04,040
so it's displaying whatever value is
2269
01:56:00,280 --> 01:56:07,320
saved inside the variable as you can see
2270
01:56:04,040 --> 01:56:10,119
we can save a value inside a variable
2271
01:56:07,320 --> 01:56:13,599
and then use that variable later
2272
01:56:10,119 --> 01:56:16,079
on let's do another example we're going
2273
01:56:13,599 --> 01:56:18,760
to create another variable so we're
2274
01:56:16,079 --> 01:56:20,079
going to create some new lines and we'll
2275
01:56:18,760 --> 01:56:23,199
type
2276
01:56:20,079 --> 01:56:25,800
let and this time let's name this
2277
01:56:23,199 --> 01:56:27,840
variable
2278
01:56:25,800 --> 01:56:31,639
calculation and we're going to type
2279
01:56:27,840 --> 01:56:34,719
space equals space to save a value
2280
01:56:31,639 --> 01:56:36,719
inside this new variable and this time
2281
01:56:34,719 --> 01:56:37,960
instead of just a number we're going to
2282
01:56:36,719 --> 01:56:43,920
save a
2283
01:56:37,960 --> 01:56:46,920
calculation 2 + 2 and semicolon so this
2284
01:56:43,920 --> 01:56:50,480
will calculate 2 + 2 and then save the
2285
01:56:46,920 --> 01:56:53,520
result which is four into the
2286
01:56:50,480 --> 01:56:56,760
variable if we call
2287
01:56:53,520 --> 01:56:59,400
console. log Open
2288
01:56:56,760 --> 01:57:03,320
Bracket
2289
01:56:59,400 --> 01:57:06,639
calculation and semicolon and
2290
01:57:03,320 --> 01:57:08,920
save it will show us that the value for
2291
01:57:06,639 --> 01:57:11,840
is saved inside
2292
01:57:08,920 --> 01:57:16,040
calculation now let's try this code
2293
01:57:11,840 --> 01:57:19,760
we're going to type a new line and then
2294
01:57:16,040 --> 01:57:22,840
console. log Open Bracket and
2295
01:57:19,760 --> 01:57:26,520
calculation again
2296
01:57:22,840 --> 01:57:29,760
and plus 2 and
2297
01:57:26,520 --> 01:57:31,159
semicolon so here we're using a variable
2298
01:57:29,760 --> 01:57:33,599
inside a
2299
01:57:31,159 --> 01:57:36,000
calculation what this does is that it
2300
01:57:33,599 --> 01:57:39,320
takes whatever value is saved inside the
2301
01:57:36,000 --> 01:57:41,280
variable right now it is four and then
2302
01:57:39,320 --> 01:57:45,760
substitutes that value into the
2303
01:57:41,280 --> 01:57:46,960
calculation so this will be 4 + 2 which
2304
01:57:45,760 --> 01:57:48,960
equals
2305
01:57:46,960 --> 01:57:51,800
six if we
2306
01:57:48,960 --> 01:57:53,880
save we can see that in the console it
2307
01:57:51,800 --> 01:57:57,119
display blade
2308
01:57:53,880 --> 01:57:59,920
six so we can use a variable wherever we
2309
01:57:57,119 --> 01:58:02,159
use a value and JavaScript will
2310
01:57:59,920 --> 01:58:04,119
substitute whatever is inside the
2311
01:58:02,159 --> 01:58:07,599
variable into the
2312
01:58:04,119 --> 01:58:09,960
code let's do another example we're
2313
01:58:07,599 --> 01:58:13,119
going to type some new lines and create
2314
01:58:09,960 --> 01:58:15,560
a new variable again using
2315
01:58:13,119 --> 01:58:17,679
let and we're going to name this
2316
01:58:15,560 --> 01:58:20,719
variable
2317
01:58:17,679 --> 01:58:23,800
result and we're going to make it equal
2318
01:58:20,719 --> 01:58:28,040
to calcul
2319
01:58:23,800 --> 01:58:31,040
ation plus 2 and
2320
01:58:28,040 --> 01:58:33,840
semicolon so this does the same thing as
2321
01:58:31,040 --> 01:58:36,159
a code before it will take whatever
2322
01:58:33,840 --> 01:58:39,560
value is inside calculation which is
2323
01:58:36,159 --> 01:58:42,800
four and substitute it into this code so
2324
01:58:39,560 --> 01:58:46,280
we get 4 + 2 =
2325
01:58:42,800 --> 01:58:48,239
6 but this time we have an extra step
2326
01:58:46,280 --> 01:58:50,800
we're going to save this result which is
2327
01:58:48,239 --> 01:58:54,960
six into another
2328
01:58:50,800 --> 01:58:54,960
variable so so if we
2329
01:58:55,360 --> 01:59:00,239
console.log
2330
01:58:58,280 --> 01:59:04,560
result and
2331
01:59:00,239 --> 01:59:06,480
save we can see that six was saved into
2332
01:59:04,560 --> 01:59:09,679
the result
2333
01:59:06,480 --> 01:59:13,119
variable again we can use a variable
2334
01:59:09,679 --> 01:59:15,800
wherever we use a value now in addition
2335
01:59:13,119 --> 01:59:18,320
to numbers we can save any type of value
2336
01:59:15,800 --> 01:59:21,480
in a variable including
2337
01:59:18,320 --> 01:59:23,560
strings for example let's create a new
2338
01:59:21,480 --> 01:59:27,000
variable using
2339
01:59:23,560 --> 01:59:29,880
let and let's name this
2340
01:59:27,000 --> 01:59:33,280
message and we're going to save inside
2341
01:59:29,880 --> 01:59:37,520
this variable a string this time so
2342
01:59:33,280 --> 01:59:39,520
quote hello quote and
2343
01:59:37,520 --> 01:59:44,239
semicolon again we're going to
2344
01:59:39,520 --> 01:59:44,239
console.log this variable so
2345
01:59:44,440 --> 01:59:50,520
console.log and
2346
01:59:47,040 --> 01:59:52,280
message and a semicolon at the end if we
2347
01:59:50,520 --> 01:59:54,960
save
2348
01:59:52,280 --> 01:59:57,360
it will show us that the string hello is
2349
01:59:54,960 --> 02:00:00,119
saved inside this
2350
01:59:57,360 --> 02:00:02,560
variable okay now that we learned how
2351
02:00:00,119 --> 02:00:04,079
variables work let's learn the syntax
2352
02:00:02,560 --> 02:00:07,639
rules for
2353
02:00:04,079 --> 02:00:10,280
variables the word let creates a new
2354
02:00:07,639 --> 02:00:13,199
variable and then we give the variable a
2355
02:00:10,280 --> 02:00:15,880
name so we can name variables almost
2356
02:00:13,199 --> 02:00:18,840
anything we want except for a few
2357
02:00:15,880 --> 02:00:21,440
restrictions number one we can't use
2358
02:00:18,840 --> 02:00:22,599
special words like let as a variable
2359
02:00:21,440 --> 02:00:25,280
name
2360
02:00:22,599 --> 02:00:27,719
that's because let already has a special
2361
02:00:25,280 --> 02:00:31,320
meaning in JavaScript it creates a
2362
02:00:27,719 --> 02:00:34,920
variable so let is a reserved word
2363
02:00:31,320 --> 02:00:37,920
however we can use let one or let two as
2364
02:00:34,920 --> 02:00:41,480
variable names we just can't use
2365
02:00:37,920 --> 02:00:44,159
let number two we can't start a variable
2366
02:00:41,480 --> 02:00:46,599
name with a number if we start with a
2367
02:00:44,159 --> 02:00:49,639
number JavaScript will think this is a
2368
02:00:46,599 --> 02:00:52,320
number instead of a variable name
2369
02:00:49,639 --> 02:00:53,199
however we can use numbers in the middle
2370
02:00:52,320 --> 02:00:56,800
or the
2371
02:00:53,199 --> 02:01:00,000
end lastly we can't use most special
2372
02:00:56,800 --> 02:01:03,000
characters like these or a space in a
2373
02:01:00,000 --> 02:01:06,679
variable name however there are two
2374
02:01:03,000 --> 02:01:09,040
special characters we can use dollar and
2375
02:01:06,679 --> 02:01:10,639
underscore so those are the rules for
2376
02:01:09,040 --> 02:01:13,119
naming
2377
02:01:10,639 --> 02:01:15,760
variables and then to save something
2378
02:01:13,119 --> 02:01:19,239
inside a variable we just use the equal
2379
02:01:15,760 --> 02:01:22,079
sign and then the value we want to save
2380
02:01:19,239 --> 02:01:24,760
and that's it after we create a variable
2381
02:01:22,079 --> 02:01:27,159
we can start using it in the rest of our
2382
02:01:24,760 --> 02:01:29,639
code now there's one last part of the
2383
02:01:27,159 --> 02:01:32,719
syntax that we haven't learned which is
2384
02:01:29,639 --> 02:01:36,040
the semicolon we've seen semicolons in
2385
02:01:32,719 --> 02:01:39,239
many places already in JavaScript a
2386
02:01:36,040 --> 02:01:42,280
semicolon means this is the end of an
2387
02:01:39,239 --> 02:01:45,440
instruction it's similar to a period in
2388
02:01:42,280 --> 02:01:47,880
English in English a period means this
2389
02:01:45,440 --> 02:01:51,599
is the end of a
2390
02:01:47,880 --> 02:01:54,679
sentence so here this semicolon tells
2391
02:01:51,599 --> 02:01:57,639
Java script that this is the end of an
2392
02:01:54,679 --> 02:02:01,360
instruction and now after this we can
2393
02:01:57,639 --> 02:02:05,079
add another instruction like
2394
02:02:01,360 --> 02:02:09,320
console. log Open Bracket and then the
2395
02:02:05,079 --> 02:02:11,199
string semicolon and a semicolon at the
2396
02:02:09,320 --> 02:02:14,079
end if we
2397
02:02:11,199 --> 02:02:17,440
save it will run these two instructions
2398
02:02:14,079 --> 02:02:19,560
one after another without any
2399
02:02:17,440 --> 02:02:23,560
problems so if we didn't have the
2400
02:02:19,560 --> 02:02:26,159
semicolon here and and we save it
2401
02:02:23,560 --> 02:02:29,719
wouldn't work because JavaScript thinks
2402
02:02:26,159 --> 02:02:32,520
that this entire line is one
2403
02:02:29,719 --> 02:02:35,079
instruction so we need semicolons to
2404
02:02:32,520 --> 02:02:37,079
separate different instructions in
2405
02:02:35,079 --> 02:02:39,880
JavaScript if we
2406
02:02:37,079 --> 02:02:43,280
save everything goes back to
2407
02:02:39,880 --> 02:02:45,000
normal so JavaScript is a little special
2408
02:02:43,280 --> 02:02:46,239
because it has a feature called
2409
02:02:45,000 --> 02:02:48,440
semicolon
2410
02:02:46,239 --> 02:02:51,199
insertion that means it will try to
2411
02:02:48,440 --> 02:02:54,239
insert the last semicolon in a line of
2412
02:02:51,199 --> 02:02:56,440
code automat automatically for example
2413
02:02:54,239 --> 02:02:59,040
if we removed the last
2414
02:02:56,440 --> 02:03:01,800
semicolon and
2415
02:02:59,040 --> 02:03:04,239
save this code will work without that
2416
02:03:01,800 --> 02:03:07,360
semicolon and that's because JavaScript
2417
02:03:04,239 --> 02:03:10,119
inserts the last semicolon
2418
02:03:07,360 --> 02:03:12,599
automatically however a lot of companies
2419
02:03:10,119 --> 02:03:14,880
still prefer to use semicolons in their
2420
02:03:12,599 --> 02:03:16,679
JavaScript code because semicolon
2421
02:03:14,880 --> 02:03:19,719
insertion can sometimes put the
2422
02:03:16,679 --> 02:03:21,840
semicolon in the wrong place for this
2423
02:03:19,719 --> 02:03:24,119
reason we're also going to use sem
2424
02:03:21,840 --> 02:03:27,719
colons in this course to help you get
2425
02:03:24,119 --> 02:03:29,960
used to JavaScript code with
2426
02:03:27,719 --> 02:03:32,719
semicolons next we're going to learn how
2427
02:03:29,960 --> 02:03:36,440
to change the value that is saved inside
2428
02:03:32,719 --> 02:03:39,920
a variable for example here we save the
2429
02:03:36,440 --> 02:03:41,840
number three inside variable one now
2430
02:03:39,920 --> 02:03:44,920
we're going to change the value saved
2431
02:03:41,840 --> 02:03:47,199
inside variable one to do that we're
2432
02:03:44,920 --> 02:03:48,239
going to go to the bottom and create
2433
02:03:47,199 --> 02:03:50,239
some new
2434
02:03:48,239 --> 02:03:53,079
lines and we're going to type the
2435
02:03:50,239 --> 02:03:56,840
variable name again so
2436
02:03:53,079 --> 02:03:59,760
variable one and now to change the value
2437
02:03:56,840 --> 02:04:02,440
saved inside we're just going to type
2438
02:03:59,760 --> 02:04:06,159
the equal sign and then a different
2439
02:04:02,440 --> 02:04:09,599
value like five and
2440
02:04:06,159 --> 02:04:12,599
semicolon and now if we console.log this
2441
02:04:09,599 --> 02:04:12,599
variable
2442
02:04:13,320 --> 02:04:21,719
console.log variable 1 and semicolon and
2443
02:04:18,639 --> 02:04:23,920
save it will show us that five is now
2444
02:04:21,719 --> 02:04:27,119
now saved inside variable
2445
02:04:23,920 --> 02:04:30,599
one notice also that if we scroll up to
2446
02:04:27,119 --> 02:04:33,280
the top the first console.log still
2447
02:04:30,599 --> 02:04:35,639
displays the value three and that's
2448
02:04:33,280 --> 02:04:38,239
because at this point in the code
2449
02:04:35,639 --> 02:04:41,119
variable one still contained three we
2450
02:04:38,239 --> 02:04:43,480
didn't update the variable yet so when
2451
02:04:41,119 --> 02:04:46,199
we first saved a value inside this
2452
02:04:43,480 --> 02:04:48,159
variable this is called assigning a
2453
02:04:46,199 --> 02:04:50,960
value to a
2454
02:04:48,159 --> 02:04:53,480
variable then when we change the value
2455
02:04:50,960 --> 02:04:56,520
inside this varable iable this is called
2456
02:04:53,480 --> 02:04:58,800
reassigning a value to a
2457
02:04:56,520 --> 02:05:02,119
variable now let's learn the syntax
2458
02:04:58,800 --> 02:05:04,199
rules for reassigning a value notice
2459
02:05:02,119 --> 02:05:07,520
that we don't use the word let when
2460
02:05:04,199 --> 02:05:08,559
reassigning that's because let creates a
2461
02:05:07,520 --> 02:05:12,239
new
2462
02:05:08,559 --> 02:05:14,559
variable so if we try to use let again
2463
02:05:12,239 --> 02:05:18,719
it would try to create a new variable
2464
02:05:14,559 --> 02:05:21,400
named variable one however variable one
2465
02:05:18,719 --> 02:05:24,239
already exists and we can't create two
2466
02:05:21,400 --> 02:05:28,079
VAR variables with the same name so this
2467
02:05:24,239 --> 02:05:31,280
would cause an error instead to reassign
2468
02:05:28,079 --> 02:05:35,679
a variable we just type out the variable
2469
02:05:31,280 --> 02:05:39,119
name and make it equal to something else
2470
02:05:35,679 --> 02:05:41,440
so that's the Syntax for reassigning a
2471
02:05:39,119 --> 02:05:44,800
variable now we're going to do one last
2472
02:05:41,440 --> 02:05:47,360
example before working on the project
2473
02:05:44,800 --> 02:05:49,040
let's go to the end of our code we're
2474
02:05:47,360 --> 02:05:51,639
going to type some new
2475
02:05:49,040 --> 02:05:54,599
lines and this time we're going to re
2476
02:05:51,639 --> 02:05:57,199
reassign variable one again so we can
2477
02:05:54,599 --> 02:06:03,639
reassign a variable as many times as we
2478
02:05:57,199 --> 02:06:07,760
want so let's type variable 1 and then
2479
02:06:03,639 --> 02:06:11,880
equals and we're going to type variable
2480
02:06:07,760 --> 02:06:14,440
1 + 1 and
2481
02:06:11,880 --> 02:06:17,800
semicolon so we learned earlier that we
2482
02:06:14,440 --> 02:06:20,199
can use a variable inside a calculation
2483
02:06:17,800 --> 02:06:22,559
and it will substitute whatever value is
2484
02:06:20,199 --> 02:06:24,960
inside the variable
2485
02:06:22,559 --> 02:06:27,480
here we're also using a variable inside
2486
02:06:24,960 --> 02:06:28,880
the calculation but we're using this
2487
02:06:27,480 --> 02:06:31,400
variable
2488
02:06:28,880 --> 02:06:34,320
itself so it's essentially taking this
2489
02:06:31,400 --> 02:06:36,480
variable increasing it by one and then
2490
02:06:34,320 --> 02:06:39,239
saving it
2491
02:06:36,480 --> 02:06:43,639
back if we
2492
02:06:39,239 --> 02:06:46,199
console.log this variable variable
2493
02:06:43,639 --> 02:06:50,480
one and
2494
02:06:46,199 --> 02:06:53,480
save variable one now contains six so it
2495
02:06:50,480 --> 02:06:56,840
took the previous value in variable one
2496
02:06:53,480 --> 02:06:57,760
which was five added one and then saved
2497
02:06:56,840 --> 02:07:00,639
it
2498
02:06:57,760 --> 02:07:04,119
back so this is how we increase the
2499
02:07:00,639 --> 02:07:06,840
value of a variable by a certain
2500
02:07:04,119 --> 02:07:09,239
number okay now that we know how to
2501
02:07:06,840 --> 02:07:12,360
create and reassign variables we're
2502
02:07:09,239 --> 02:07:14,280
ready to work on a project so I actually
2503
02:07:12,360 --> 02:07:17,239
prepared a project that we can do for
2504
02:07:14,280 --> 02:07:20,320
this lesson and we can see this project
2505
02:07:17,239 --> 02:07:23,559
by going to our browser clicking at the
2506
02:07:20,320 --> 02:07:26,360
top and and typing
2507
02:07:23,559 --> 02:07:31,280
super simple
2508
02:07:26,360 --> 02:07:34,119
dodev SL projects SLV
2509
02:07:31,280 --> 02:07:37,000
variables and press
2510
02:07:34,119 --> 02:07:39,880
enter so we're going to work on the cart
2511
02:07:37,000 --> 02:07:42,040
quantity feature of the final project so
2512
02:07:39,880 --> 02:07:44,639
in the final project we have a number in
2513
02:07:42,040 --> 02:07:47,360
the top right corner that shows how many
2514
02:07:44,639 --> 02:07:49,920
products are in our cart when we click
2515
02:07:47,360 --> 02:07:52,119
the add to cart button this quantity
2516
02:07:49,920 --> 02:07:54,520
will increase
2517
02:07:52,119 --> 02:07:57,079
so what you see here is a simple version
2518
02:07:54,520 --> 02:08:00,360
of the cart quantity feature that we can
2519
02:07:57,079 --> 02:08:02,960
create right now let's go over how it
2520
02:08:00,360 --> 02:08:06,320
works first make sure you have the
2521
02:08:02,960 --> 02:08:09,440
console open on this page now when we
2522
02:08:06,320 --> 02:08:11,639
click the show quantity button it will
2523
02:08:09,440 --> 02:08:15,040
show us that there are zero products in
2524
02:08:11,639 --> 02:08:17,599
our cart if we click the add to cart
2525
02:08:15,040 --> 02:08:22,119
button it will increase the quantity by
2526
02:08:17,599 --> 02:08:24,960
one and display it in the console
2527
02:08:22,119 --> 02:08:28,440
if we click add to cart again it will
2528
02:08:24,960 --> 02:08:30,800
increase the quantity by one again now
2529
02:08:28,440 --> 02:08:33,320
in the final project we can also add
2530
02:08:30,800 --> 02:08:35,320
more than one product at a time using
2531
02:08:33,320 --> 02:08:37,960
this
2532
02:08:35,320 --> 02:08:40,239
drop-down for now we're going to build a
2533
02:08:37,960 --> 02:08:42,960
simpler version of that we're going to
2534
02:08:40,239 --> 02:08:45,599
use the plus two and plus three buttons
2535
02:08:42,960 --> 02:08:48,000
to add multiple products so when we
2536
02:08:45,599 --> 02:08:50,480
click the plus two button it will
2537
02:08:48,000 --> 02:08:52,480
increase the quantity by two and display
2538
02:08:50,480 --> 02:08:54,880
it in the console
2539
02:08:52,480 --> 02:08:57,960
and when we click the plus three button
2540
02:08:54,880 --> 02:09:00,599
it will increase the quantity by
2541
02:08:57,960 --> 02:09:03,280
three and finally when we click the
2542
02:09:00,599 --> 02:09:06,320
reset cart button it will reset the
2543
02:09:03,280 --> 02:09:08,440
quantity back to zero and display this
2544
02:09:06,320 --> 02:09:11,040
message in the
2545
02:09:08,440 --> 02:09:13,920
console so now that we understand how
2546
02:09:11,040 --> 02:09:18,440
this project Works let's build this step
2547
02:09:13,920 --> 02:09:21,599
by step first let's create a new HTML
2548
02:09:18,440 --> 02:09:24,639
file just for this project we're going
2549
02:09:21,599 --> 02:09:27,880
to go to our code editor and click this
2550
02:09:24,639 --> 02:09:31,159
icon to show our files and then click
2551
02:09:27,880 --> 02:09:35,920
this icon to create a new
2552
02:09:31,159 --> 02:09:38,599
file let's name this file 05
2553
02:09:35,920 --> 02:09:40,320
dcart D
2554
02:09:38,599 --> 02:09:42,639
quantity.
2555
02:09:40,320 --> 02:09:47,800
HTML and press
2556
02:09:42,639 --> 02:09:49,639
enter next let's open variables. HTML
2557
02:09:47,800 --> 02:09:52,079
and we're going to copy all the code
2558
02:09:49,639 --> 02:09:56,119
here into our new
2559
02:09:52,079 --> 02:10:00,040
file let's type control a on Windows or
2560
02:09:56,119 --> 02:10:01,400
command a on Mac to select all this code
2561
02:10:00,040 --> 02:10:03,440
and then
2562
02:10:01,400 --> 02:10:05,840
rightclick
2563
02:10:03,440 --> 02:10:10,679
copy and then in our new
2564
02:10:05,840 --> 02:10:10,679
file right click and
2565
02:10:10,920 --> 02:10:16,559
paste let's close this for
2566
02:10:13,639 --> 02:10:22,400
now and in the new file we're going to
2567
02:10:16,559 --> 02:10:24,239
change the title to cart quantity
2568
02:10:22,400 --> 02:10:26,960
and let's remove all of our JavaScript
2569
02:10:24,239 --> 02:10:30,280
code but keep the script element because
2570
02:10:26,960 --> 02:10:33,719
we're going to write new JavaScript
2571
02:10:30,280 --> 02:10:35,800
code now we're ready to begin let's
2572
02:10:33,719 --> 02:10:39,159
start by creating these
2573
02:10:35,800 --> 02:10:40,920
buttons let's go to the body element
2574
02:10:39,159 --> 02:10:44,320
going to create a new
2575
02:10:40,920 --> 02:10:47,000
line and here as we learned in the
2576
02:10:44,320 --> 02:10:52,159
previous lesson we can create a button
2577
02:10:47,000 --> 02:10:54,440
using this HTML code less than button
2578
02:10:52,159 --> 02:10:57,079
greater than and the closing tag less
2579
02:10:54,440 --> 02:10:59,679
than SLB button greater
2580
02:10:57,079 --> 02:11:03,280
than inside this button we're going to
2581
02:10:59,679 --> 02:11:05,920
have the text show
2582
02:11:03,280 --> 02:11:08,639
quantity and let's
2583
02:11:05,920 --> 02:11:11,920
save now let's open this file in live
2584
02:11:08,639 --> 02:11:14,280
server by right clicking and then open
2585
02:11:11,920 --> 02:11:16,639
with live
2586
02:11:14,280 --> 02:11:19,920
server and we can see that we created
2587
02:11:16,639 --> 02:11:22,159
the first button now let's create the
2588
02:11:19,920 --> 02:11:25,040
other buttons here feel free to pause
2589
02:11:22,159 --> 02:11:27,800
the video if you want to try it
2590
02:11:25,040 --> 02:11:31,679
yourself we're going to go back to our
2591
02:11:27,800 --> 02:11:33,920
HTML and create another
2592
02:11:31,679 --> 02:11:38,000
button inside this one we're going to
2593
02:11:33,920 --> 02:11:41,599
have the text add to
2594
02:11:38,000 --> 02:11:43,559
cart let's create another
2595
02:11:41,599 --> 02:11:45,440
button this one is going to have the
2596
02:11:43,559 --> 02:11:49,280
text plus
2597
02:11:45,440 --> 02:11:53,559
two and we'll create another
2598
02:11:49,280 --> 02:11:57,280
button this one is going to be + 3 and
2599
02:11:53,559 --> 02:12:00,520
finally we'll create the last
2600
02:11:57,280 --> 02:12:02,360
button and this one is
2601
02:12:00,520 --> 02:12:04,599
reset
2602
02:12:02,360 --> 02:12:07,719
cart and now let's
2603
02:12:04,599 --> 02:12:10,880
save and if we go back to our
2604
02:12:07,719 --> 02:12:13,239
tab we've created all the
2605
02:12:10,880 --> 02:12:15,159
buttons now let's make this web page
2606
02:12:13,239 --> 02:12:17,440
interactive with
2607
02:12:15,159 --> 02:12:20,599
JavaScript first of all we need
2608
02:12:17,440 --> 02:12:22,880
somewhere to save the cart quantity so
2609
02:12:20,599 --> 02:12:25,199
as we learned in this lesson variables
2610
02:12:22,880 --> 02:12:28,719
are the perfect solution for this
2611
02:12:25,199 --> 02:12:31,119
variables let us save a value so let's
2612
02:12:28,719 --> 02:12:34,719
go into the script element and we're
2613
02:12:31,119 --> 02:12:37,679
going to create a variable by typing
2614
02:12:34,719 --> 02:12:41,320
let and this variable is going to save
2615
02:12:37,679 --> 02:12:45,040
the cart quantity so let's just name it
2616
02:12:41,320 --> 02:12:47,719
cart capital Q
2617
02:12:45,040 --> 02:12:52,000
quantity so the card quantity will start
2618
02:12:47,719 --> 02:12:54,079
out at zero so we're going to type equal
2619
02:12:52,000 --> 02:12:57,280
Z and
2620
02:12:54,079 --> 02:12:59,840
semicolon next when we click the show
2621
02:12:57,280 --> 02:13:03,119
quantity button we want to display the
2622
02:12:59,840 --> 02:13:05,760
quantity in the console to do this we
2623
02:13:03,119 --> 02:13:08,559
learned a special HTML attribute in the
2624
02:13:05,760 --> 02:13:11,079
previous lesson called the onclick
2625
02:13:08,559 --> 02:13:15,320
attribute so we're going to type in this
2626
02:13:11,079 --> 02:13:19,520
opening tag here space
2627
02:13:15,320 --> 02:13:22,599
onclick equals and double quotes So the
2628
02:13:19,520 --> 02:13:24,840
onclick attribute run some JavaScript
2629
02:13:22,599 --> 02:13:27,360
when we click this
2630
02:13:24,840 --> 02:13:30,559
button and between the double quotes we
2631
02:13:27,360 --> 02:13:31,679
can write JavaScript code so let's press
2632
02:13:30,559 --> 02:13:34,719
enter
2633
02:13:31,679 --> 02:13:37,760
enter And now when we click this button
2634
02:13:34,719 --> 02:13:42,760
we want to display the card quantity in
2635
02:13:37,760 --> 02:13:42,760
the console so let's type
2636
02:13:43,040 --> 02:13:49,199
console.log Open Bracket close bracket
2637
02:13:46,320 --> 02:13:52,159
semicolon and then between the brackets
2638
02:13:49,199 --> 02:13:55,320
we're going to display a message
2639
02:13:52,159 --> 02:13:57,760
now if we go back to Super
2640
02:13:55,320 --> 02:14:00,559
simple. and we click show
2641
02:13:57,760 --> 02:14:01,599
quantity we want to display this message
2642
02:14:00,559 --> 02:14:04,599
in the
2643
02:14:01,599 --> 02:14:07,880
console so in our code between the
2644
02:14:04,599 --> 02:14:10,679
brackets we're going to type the string
2645
02:14:07,880 --> 02:14:13,719
quote cart
2646
02:14:10,679 --> 02:14:18,119
quantity colon
2647
02:14:13,719 --> 02:14:19,400
0 now let's save and go back to our tab
2648
02:14:18,119 --> 02:14:21,920
to try it
2649
02:14:19,400 --> 02:14:25,639
out so we're going to open the console
2650
02:14:21,920 --> 02:14:28,159
first by right clicking and then click
2651
02:14:25,639 --> 02:14:30,599
inspect and then click the
2652
02:14:28,159 --> 02:14:33,559
console and now when we press the show
2653
02:14:30,599 --> 02:14:36,239
quantity button it should display that
2654
02:14:33,559 --> 02:14:39,599
message in the
2655
02:14:36,239 --> 02:14:42,079
console okay so we just made our project
2656
02:14:39,599 --> 02:14:44,760
interactive however we obviously don't
2657
02:14:42,079 --> 02:14:47,639
want to display zero every time we want
2658
02:14:44,760 --> 02:14:50,800
to display the value inside cart
2659
02:14:47,639 --> 02:14:52,480
quantity so we need to insert this value
2660
02:14:50,800 --> 02:14:55,360
in inside this
2661
02:14:52,480 --> 02:14:57,520
string remember from the strings lesson
2662
02:14:55,360 --> 02:14:59,880
when we want to insert a value into a
2663
02:14:57,520 --> 02:15:03,159
string we're going to use a template
2664
02:14:59,880 --> 02:15:05,040
string so let's switch the single quotes
2665
02:15:03,159 --> 02:15:08,360
to back
2666
02:15:05,040 --> 02:15:11,880
ticks to create a template
2667
02:15:08,360 --> 02:15:15,320
string and now instead of zero we're
2668
02:15:11,880 --> 02:15:18,280
going to insert a value using Dollar
2669
02:15:15,320 --> 02:15:21,040
open curly bracket and close curly
2670
02:15:18,280 --> 02:15:23,800
bracket and in between these brackets
2671
02:15:21,040 --> 02:15:25,320
we're going to insert this
2672
02:15:23,800 --> 02:15:29,239
variable
2673
02:15:25,320 --> 02:15:31,880
cart capital Q
2674
02:15:29,239 --> 02:15:34,440
quantity remember that JavaScript is
2675
02:15:31,880 --> 02:15:37,119
case sensitive so make sure you type the
2676
02:15:34,440 --> 02:15:40,119
variable name exactly the
2677
02:15:37,119 --> 02:15:43,520
same now let's
2678
02:15:40,119 --> 02:15:46,199
save and click show quantity
2679
02:15:43,520 --> 02:15:49,639
again and now it displays the value
2680
02:15:46,199 --> 02:15:52,000
inside card quantity in the console so
2681
02:15:49,639 --> 02:15:53,119
notice that variables also work with
2682
02:15:52,000 --> 02:15:55,639
string
2683
02:15:53,119 --> 02:15:58,960
interpolation again we can use a
2684
02:15:55,639 --> 02:16:01,159
variable wherever we use a value and it
2685
02:15:58,960 --> 02:16:04,760
will just substitute whatever value is
2686
02:16:01,159 --> 02:16:07,000
saved inside this variable into the
2687
02:16:04,760 --> 02:16:08,199
code now let's make the rest of the
2688
02:16:07,000 --> 02:16:10,800
buttons
2689
02:16:08,199 --> 02:16:13,480
interactive so when we click the add to
2690
02:16:10,800 --> 02:16:16,079
cart button we're going to add one to
2691
02:16:13,480 --> 02:16:19,079
this cart quantity and display it in the
2692
02:16:16,079 --> 02:16:21,639
console so again we're going to type
2693
02:16:19,079 --> 02:16:26,280
here and type space
2694
02:16:21,639 --> 02:16:28,480
on click equals double quotes and
2695
02:16:26,280 --> 02:16:29,639
between the double quotes we're going to
2696
02:16:28,480 --> 02:16:32,120
add
2697
02:16:29,639 --> 02:16:35,760
JavaScript let's also add some new lines
2698
02:16:32,120 --> 02:16:39,760
here to make our code easier to
2699
02:16:35,760 --> 02:16:42,000
read okay so in the onclick attribute
2700
02:16:39,760 --> 02:16:45,559
we're going to do two things the first
2701
02:16:42,000 --> 02:16:48,479
one is increase the card quantity by
2702
02:16:45,559 --> 02:16:51,000
one we can do that by reassigning the
2703
02:16:48,479 --> 02:16:52,840
card quantity variable
2704
02:16:51,000 --> 02:16:55,639
so we're going to type just the variable
2705
02:16:52,840 --> 02:16:57,639
name cart
2706
02:16:55,639 --> 02:17:01,359
quantity and we're going to make it
2707
02:16:57,639 --> 02:17:01,359
equal to
2708
02:17:01,840 --> 02:17:08,880
itself plus one and
2709
02:17:06,359 --> 02:17:11,880
semicolon next we're going to display
2710
02:17:08,880 --> 02:17:13,080
the updated quantity in the console so
2711
02:17:11,880 --> 02:17:15,559
let's press
2712
02:17:13,080 --> 02:17:18,120
enter and we're going to display this
2713
02:17:15,559 --> 02:17:20,719
message again so we can actually just
2714
02:17:18,120 --> 02:17:23,679
copy this code so we'll select it and
2715
02:17:20,719 --> 02:17:25,599
then right click and
2716
02:17:23,679 --> 02:17:29,679
copy and then
2717
02:17:25,599 --> 02:17:32,200
here right click and
2718
02:17:29,679 --> 02:17:36,040
paste now if we
2719
02:17:32,200 --> 02:17:38,399
save and click the add to card
2720
02:17:36,040 --> 02:17:40,639
button we'll see that it increased the
2721
02:17:38,399 --> 02:17:43,319
quantity by one and displayed the
2722
02:17:40,639 --> 02:17:45,200
updated quantity in the console let's
2723
02:17:43,319 --> 02:17:48,359
press it again to make sure it
2724
02:17:45,200 --> 02:17:51,200
works so it increases it by one again
2725
02:17:48,359 --> 02:17:52,840
and then displays it in the console
2726
02:17:51,200 --> 02:17:55,000
so that's basically how the cart
2727
02:17:52,840 --> 02:17:57,960
quantity feature works in the final
2728
02:17:55,000 --> 02:18:00,160
project first we need a variable to save
2729
02:17:57,960 --> 02:18:03,439
the quantity and then when we click a
2730
02:18:00,160 --> 02:18:06,559
button we're going to update the
2731
02:18:03,439 --> 02:18:09,319
quantity so now let's make the rest of
2732
02:18:06,559 --> 02:18:12,040
these buttons interactive feel free to
2733
02:18:09,319 --> 02:18:14,960
pause the video if you want to try it
2734
02:18:12,040 --> 02:18:18,719
yourself for the plus two button we're
2735
02:18:14,960 --> 02:18:22,240
going to add the onclick attribute again
2736
02:18:18,719 --> 02:18:24,800
onclick equals double quote
2737
02:18:22,240 --> 02:18:30,519
and inside we're going to increase the
2738
02:18:24,800 --> 02:18:34,840
cart quantity by two so cart quantity
2739
02:18:30,519 --> 02:18:39,040
and then we'll just make it equal to
2740
02:18:34,840 --> 02:18:41,080
itself plus two and
2741
02:18:39,040 --> 02:18:43,000
semicolon and again we're going to
2742
02:18:41,080 --> 02:18:45,920
display the updated quantity in the
2743
02:18:43,000 --> 02:18:49,719
console so we can create a new line and
2744
02:18:45,920 --> 02:18:51,399
just copy this code so select it right
2745
02:18:49,719 --> 02:18:56,719
click
2746
02:18:51,399 --> 02:19:00,920
copy and here right click and
2747
02:18:56,719 --> 02:19:03,800
paste let's save and click plus two a
2748
02:19:00,920 --> 02:19:06,359
few times and we can see that it adds
2749
02:19:03,800 --> 02:19:07,639
two to the card quantity and displays it
2750
02:19:06,359 --> 02:19:10,200
in the
2751
02:19:07,639 --> 02:19:11,160
console for the plus three button we'll
2752
02:19:10,200 --> 02:19:14,359
do the
2753
02:19:11,160 --> 02:19:17,160
same let's type an onclick
2754
02:19:14,359 --> 02:19:19,479
attribute click equals double
2755
02:19:17,160 --> 02:19:23,439
quotes and here we're going to increase
2756
02:19:19,479 --> 02:19:26,679
the card quantity by three three so cart
2757
02:19:23,439 --> 02:19:30,760
quantity equals
2758
02:19:26,679 --> 02:19:32,960
itself plus 3 and
2759
02:19:30,760 --> 02:19:34,880
semicolon and we're going to display
2760
02:19:32,960 --> 02:19:39,920
this in the console again so we'll
2761
02:19:34,880 --> 02:19:44,160
select this right click copy and here
2762
02:19:39,920 --> 02:19:47,120
rightclick and paste let's save again
2763
02:19:44,160 --> 02:19:49,319
and try it out to make sure it works so+
2764
02:19:47,120 --> 02:19:52,520
three +
2765
02:19:49,319 --> 02:19:53,520
three and finally let's do the reset
2766
02:19:52,520 --> 02:19:56,319
card
2767
02:19:53,520 --> 02:20:00,760
button so we'll add the onclick
2768
02:19:56,319 --> 02:20:03,439
attribute again on click equals double
2769
02:20:00,760 --> 02:20:04,800
quotes and inside the double quotes
2770
02:20:03,439 --> 02:20:07,120
we're going to do something a little
2771
02:20:04,800 --> 02:20:09,280
different this time instead of
2772
02:20:07,120 --> 02:20:10,920
increasing the cart quantity we'll set
2773
02:20:09,280 --> 02:20:14,280
it back to
2774
02:20:10,920 --> 02:20:18,520
zero to do this we can just reassign the
2775
02:20:14,280 --> 02:20:23,680
cart quantity variable so cart
2776
02:20:18,520 --> 02:20:25,800
quantity and just make it equal to Z and
2777
02:20:23,680 --> 02:20:27,200
semicolon now if we go back to
2778
02:20:25,800 --> 02:20:30,240
superimple
2779
02:20:27,200 --> 02:20:32,520
dodev and try out this reset cart
2780
02:20:30,240 --> 02:20:35,399
button you'll notice that it displays
2781
02:20:32,520 --> 02:20:37,920
two messages the first message is cart
2782
02:20:35,399 --> 02:20:39,840
was reset so we're going to display that
2783
02:20:37,920 --> 02:20:42,840
message in our code
2784
02:20:39,840 --> 02:20:42,840
first
2785
02:20:43,960 --> 02:20:51,439
console.log and the string cart was
2786
02:20:48,439 --> 02:20:51,439
reset
2787
02:20:52,280 --> 02:20:57,120
and the second message is the same
2788
02:20:54,640 --> 02:20:58,800
message as the other buttons so we can
2789
02:20:57,120 --> 02:21:02,880
just select
2790
02:20:58,800 --> 02:21:09,040
this and then right click
2791
02:21:02,880 --> 02:21:12,960
copy and then here right click and
2792
02:21:09,040 --> 02:21:15,120
paste and now let's save and go back to
2793
02:21:12,960 --> 02:21:18,920
our Tab and give this a
2794
02:21:15,120 --> 02:21:20,880
try so the cart quantity starts at zero
2795
02:21:18,920 --> 02:21:24,479
when we press add to cart increase in es
2796
02:21:20,880 --> 02:21:27,120
by one this increases by two this
2797
02:21:24,479 --> 02:21:31,399
increases by three and when we click
2798
02:21:27,120 --> 02:21:34,040
reset cart it'll display cart was reset
2799
02:21:31,399 --> 02:21:37,040
and reset the cart quantity back to
2800
02:21:34,040 --> 02:21:38,920
zero and that's it we just created a
2801
02:21:37,040 --> 02:21:41,399
simple version of the cart quantity
2802
02:21:38,920 --> 02:21:42,720
feature of our final project using
2803
02:21:41,399 --> 02:21:44,439
everything that we learned in this
2804
02:21:42,720 --> 02:21:46,399
course so
2805
02:21:44,439 --> 02:21:48,960
far now we're going to learn some
2806
02:21:46,399 --> 02:21:52,560
shortcuts for reassigning
2807
02:21:48,960 --> 02:21:56,319
variables so if we look at this line of
2808
02:21:52,560 --> 02:21:59,640
code here we're increasing the value of
2809
02:21:56,319 --> 02:22:02,120
this variable by two and then saving it
2810
02:21:59,640 --> 02:22:07,520
back well there's actually a shortcut
2811
02:22:02,120 --> 02:22:11,359
for this and that shortcut is cart
2812
02:22:07,520 --> 02:22:14,399
quantity plus equal 2 and
2813
02:22:11,359 --> 02:22:17,800
semicolon so this does the same thing as
2814
02:22:14,399 --> 02:22:19,920
the line above but it's just shorter the
2815
02:22:17,800 --> 02:22:22,000
plus means we're going to add two to
2816
02:22:19,920 --> 02:22:23,760
cart quantity
2817
02:22:22,000 --> 02:22:27,000
and equals means we're going to save
2818
02:22:23,760 --> 02:22:29,319
that result back to card quantity so we
2819
02:22:27,000 --> 02:22:32,720
can actually delete this
2820
02:22:29,319 --> 02:22:34,000
line and the code will work the same way
2821
02:22:32,720 --> 02:22:36,399
if we
2822
02:22:34,000 --> 02:22:39,920
save and try it
2823
02:22:36,399 --> 02:22:42,200
out it will still add a two and then
2824
02:22:39,920 --> 02:22:46,040
save it back in card
2825
02:22:42,200 --> 02:22:48,840
quantity let's scroll up and practice by
2826
02:22:46,040 --> 02:22:52,720
using this shortcut for card quantity +
2827
02:22:48,840 --> 02:22:54,600
one so instead of this line we can type
2828
02:22:52,720 --> 02:22:59,000
cart
2829
02:22:54,600 --> 02:23:01,120
quantity plus equal 1 and
2830
02:22:59,000 --> 02:23:04,120
semicolon so it turns out that in
2831
02:23:01,120 --> 02:23:06,479
programming plus equals 1 is so common
2832
02:23:04,120 --> 02:23:11,319
that we have an even shorter shortcut
2833
02:23:06,479 --> 02:23:12,880
for plus equals 1 and that shortcut is
2834
02:23:11,319 --> 02:23:16,040
cart
2835
02:23:12,880 --> 02:23:19,240
quantity plus plus and
2836
02:23:16,040 --> 02:23:21,319
semicolon so this is the same thing as
2837
02:23:19,240 --> 02:23:23,840
plus equal 1
2838
02:23:21,319 --> 02:23:27,960
and all three lines do the same
2839
02:23:23,840 --> 02:23:30,560
thing so we can remove these
2840
02:23:27,960 --> 02:23:32,000
lines and the code will work the same
2841
02:23:30,560 --> 02:23:33,920
because it's just a
2842
02:23:32,000 --> 02:23:37,640
shortcut if we
2843
02:23:33,920 --> 02:23:40,680
save so if we click add to
2844
02:23:37,640 --> 02:23:43,319
cart it will add one every
2845
02:23:40,680 --> 02:23:44,560
time so those are some shortcuts for
2846
02:23:43,319 --> 02:23:46,840
reassigning
2847
02:23:44,560 --> 02:23:49,439
variables we also have these shortcuts
2848
02:23:46,840 --> 02:23:53,600
for the other operators like minus
2849
02:23:49,439 --> 02:23:56,520
equals multiply equals divide equals and
2850
02:23:53,600 --> 02:23:58,520
minus minus I'll leave some exercises
2851
02:23:56,520 --> 02:24:00,000
for these other shortcuts at the end of
2852
02:23:58,520 --> 02:24:02,279
this
2853
02:24:00,000 --> 02:24:05,560
lesson next we're going to learn some
2854
02:24:02,279 --> 02:24:08,160
best practices for naming variables so
2855
02:24:05,560 --> 02:24:08,160
if we scroll
2856
02:24:08,600 --> 02:24:15,279
down notice that our variable cart
2857
02:24:11,319 --> 02:24:17,560
quantity has two words in it cart and
2858
02:24:15,279 --> 02:24:20,399
quantity we learned earlier that we
2859
02:24:17,560 --> 02:24:22,399
can't have spaces in a variable name so
2860
02:24:20,399 --> 02:24:25,560
if we want to have multiple words we
2861
02:24:22,399 --> 02:24:27,200
have to combine them together like this
2862
02:24:25,560 --> 02:24:30,200
now you might be wondering why we wrote
2863
02:24:27,200 --> 02:24:31,399
it this way with a lowercase c and a
2864
02:24:30,200 --> 02:24:34,560
capital
2865
02:24:31,399 --> 02:24:38,319
Q This is actually a naming convention
2866
02:24:34,560 --> 02:24:41,080
called cam case in cam case we combine
2867
02:24:38,319 --> 02:24:43,240
the words together and capitalize every
2868
02:24:41,080 --> 02:24:46,960
word except the first
2869
02:24:43,240 --> 02:24:49,880
word so for cart quantity we capitalize
2870
02:24:46,960 --> 02:24:51,439
quantity but we keep cart lowercase
2871
02:24:49,880 --> 02:24:54,399
because it's the first
2872
02:24:51,439 --> 02:24:57,200
word cam case is actually the standard
2873
02:24:54,399 --> 02:25:00,200
naming convention for JavaScript all of
2874
02:24:57,200 --> 02:25:02,760
our variable names should use cam
2875
02:25:00,200 --> 02:25:05,600
case now in programming there are other
2876
02:25:02,760 --> 02:25:09,160
naming conventions that exist another
2877
02:25:05,600 --> 02:25:11,600
one is called Pascal case Pascal case is
2878
02:25:09,160 --> 02:25:14,479
the same as camel case except we
2879
02:25:11,600 --> 02:25:17,439
capitalize the first word so for cart
2880
02:25:14,479 --> 02:25:21,560
quantity Pascal case would be Capital
2881
02:25:17,439 --> 02:25:24,080
cart and capital quantity in JavaScript
2882
02:25:21,560 --> 02:25:26,160
there is one feature where we use Pascal
2883
02:25:24,080 --> 02:25:29,560
case which we'll learn later in this
2884
02:25:26,160 --> 02:25:32,920
course for everything else we use camel
2885
02:25:29,560 --> 02:25:36,080
case another naming convention is Kebab
2886
02:25:32,920 --> 02:25:39,160
case here we keep the words lowercase
2887
02:25:36,080 --> 02:25:40,040
and combine them with a dash like cart
2888
02:25:39,160 --> 02:25:42,720
Dash
2889
02:25:40,040 --> 02:25:45,479
quantity Kebab case doesn't work in
2890
02:25:42,720 --> 02:25:49,080
JavaScript because the dash is already a
2891
02:25:45,479 --> 02:25:52,840
minus symbol however we use Kebab case
2892
02:25:49,080 --> 02:25:55,520
in HTML and CSS and also in our file
2893
02:25:52,840 --> 02:25:59,080
names as you can see
2894
02:25:55,520 --> 02:26:01,279
here and finally we have snake case
2895
02:25:59,080 --> 02:26:04,359
where we keep the words lowercase and
2896
02:26:01,279 --> 02:26:06,560
combine them with underscores snake case
2897
02:26:04,359 --> 02:26:08,439
is used in other languages but it's not
2898
02:26:06,560 --> 02:26:10,479
really used in
2899
02:26:08,439 --> 02:26:14,000
JavaScript so those are the common
2900
02:26:10,479 --> 02:26:16,160
naming conventions that we use in
2901
02:26:14,000 --> 02:26:19,040
programming now one more thing I want to
2902
02:26:16,160 --> 02:26:21,399
note is that when we name our variables
2903
02:26:19,040 --> 02:26:24,880
try to pick a name that is not too short
2904
02:26:21,399 --> 02:26:26,880
or too long for example instead of cart
2905
02:26:24,880 --> 02:26:28,680
quantity we could have named this
2906
02:26:26,880 --> 02:26:31,760
variable
2907
02:26:28,680 --> 02:26:35,240
C but this name is too short it's hard
2908
02:26:31,760 --> 02:26:40,000
to understand what c means we could also
2909
02:26:35,240 --> 02:26:44,600
use a name like this quantity of
2910
02:26:40,000 --> 02:26:47,000
products in the cart but this name is
2911
02:26:44,600 --> 02:26:49,760
too long it's hard to read this in the
2912
02:26:47,000 --> 02:26:52,160
code so try to have a balance between a
2913
02:26:49,760 --> 02:26:54,960
name that is understandable but not too
2914
02:26:52,160 --> 02:26:56,760
long like cart
2915
02:26:54,960 --> 02:26:58,960
quantity the last thing we're going to
2916
02:26:56,760 --> 02:27:02,319
learn in this lesson is there are three
2917
02:26:58,960 --> 02:27:05,920
ways to create variables in JavaScript
2918
02:27:02,319 --> 02:27:07,960
let's go back to our variables. HTML
2919
02:27:05,920 --> 02:27:09,000
file and we're going to learn those
2920
02:27:07,960 --> 02:27:12,359
three
2921
02:27:09,000 --> 02:27:14,800
ways so the first way is to use let
2922
02:27:12,359 --> 02:27:17,560
which we already learned the second way
2923
02:27:14,800 --> 02:27:22,319
to create a variable is to use the word
2924
02:27:17,560 --> 02:27:25,760
const so at the bottom we can type const
2925
02:27:22,319 --> 02:27:30,800
space and then a variable name like
2926
02:27:25,760 --> 02:27:33,920
variable 2 and make it equal to
2927
02:27:30,800 --> 02:27:36,760
three so const creates a variable just
2928
02:27:33,920 --> 02:27:40,359
like let except we can't change its
2929
02:27:36,760 --> 02:27:43,200
value later this value stays constant
2930
02:27:40,359 --> 02:27:49,840
that's why it's called const if we try
2931
02:27:43,200 --> 02:27:52,439
to change its value like variable 2 = 5
2932
02:27:49,840 --> 02:27:55,000
and then and we save this and we open
2933
02:27:52,439 --> 02:27:59,399
this file in the browser by right
2934
02:27:55,000 --> 02:28:03,080
clicking and then open with live
2935
02:27:59,399 --> 02:28:05,800
server and then open the console so
2936
02:28:03,080 --> 02:28:09,560
rightclick
2937
02:28:05,800 --> 02:28:09,560
inspect and then click the
2938
02:28:10,000 --> 02:28:15,680
console it will give us an error when we
2939
02:28:12,560 --> 02:28:19,720
try to change this variable so this
2940
02:28:15,680 --> 02:28:21,439
doesn't work let's remove this line and
2941
02:28:19,720 --> 02:28:23,560
Save
2942
02:28:21,439 --> 02:28:26,880
so why would we ever use const instead
2943
02:28:23,560 --> 02:28:29,439
of let well const makes our code safer
2944
02:28:26,880 --> 02:28:32,600
and easier to understand when we create
2945
02:28:29,439 --> 02:28:35,080
a variable with const we know for sure
2946
02:28:32,600 --> 02:28:38,640
that this variable will always contain
2947
02:28:35,080 --> 02:28:41,560
three for let however if we create a
2948
02:28:38,640 --> 02:28:44,319
variable it's hard to know what value is
2949
02:28:41,560 --> 02:28:47,000
inside this variable because later on we
2950
02:28:44,319 --> 02:28:50,439
can change this value in our
2951
02:28:47,000 --> 02:28:52,439
code so in order to keep our code safer
2952
02:28:50,439 --> 02:28:55,520
it's actually a best practice to use
2953
02:28:52,439 --> 02:28:57,520
const by default and only use let when
2954
02:28:55,520 --> 02:29:00,319
we know that we need to change the
2955
02:28:57,520 --> 02:29:03,640
variable so here it's actually best
2956
02:29:00,319 --> 02:29:05,680
practice to use const to create this
2957
02:29:03,640 --> 02:29:08,800
calculation variable because we're not
2958
02:29:05,680 --> 02:29:10,040
changing it later same thing for the
2959
02:29:08,800 --> 02:29:13,880
result
2960
02:29:10,040 --> 02:29:16,960
variable and the message
2961
02:29:13,880 --> 02:29:19,279
variable now for variable one we have to
2962
02:29:16,960 --> 02:29:21,040
use let because we're changing it later
2963
02:29:19,279 --> 02:29:23,560
in this code
2964
02:29:21,040 --> 02:29:25,800
so that's const it creates a variable
2965
02:29:23,560 --> 02:29:28,600
that can't be changed
2966
02:29:25,800 --> 02:29:32,760
later finally the Third Way of creating
2967
02:29:28,600 --> 02:29:37,279
a variable is to use another word VAR so
2968
02:29:32,760 --> 02:29:42,240
at the bottom we can type VAR space and
2969
02:29:37,279 --> 02:29:44,479
then a variable name like variable 3 and
2970
02:29:42,240 --> 02:29:47,399
make it equal to
2971
02:29:44,479 --> 02:29:49,479
three so VAR creates a variable just
2972
02:29:47,399 --> 02:29:50,560
like let and this variable can be
2973
02:29:49,479 --> 02:29:53,640
changed
2974
02:29:50,560 --> 02:29:57,399
later VAR is actually the original way
2975
02:29:53,640 --> 02:29:58,840
to create variables in JavaScript VAR
2976
02:29:57,399 --> 02:30:01,760
means
2977
02:29:58,840 --> 02:30:04,240
variable however VAR has some issues
2978
02:30:01,760 --> 02:30:06,600
that we'll learn later in this course
2979
02:30:04,240 --> 02:30:09,920
and because of these issues we don't use
2980
02:30:06,600 --> 02:30:12,439
VAR in new JavaScript code you might see
2981
02:30:09,920 --> 02:30:15,439
VAR in older JavaScript code so it's
2982
02:30:12,439 --> 02:30:18,680
still useful to know so those are three
2983
02:30:15,439 --> 02:30:23,279
ways to create variables in JavaScript
2984
02:30:18,680 --> 02:30:25,600
let constant and VAR we use const by
2985
02:30:23,279 --> 02:30:28,600
default and if we have to change a
2986
02:30:25,600 --> 02:30:30,680
variable then use
2987
02:30:28,600 --> 02:30:34,319
let so one more thing we're going to
2988
02:30:30,680 --> 02:30:37,560
learn is that we can use type of with
2989
02:30:34,319 --> 02:30:42,439
variables so remember that type of tells
2990
02:30:37,560 --> 02:30:43,359
us what type a value is for example if
2991
02:30:42,439 --> 02:30:45,680
we
2992
02:30:43,359 --> 02:30:47,240
wrote
2993
02:30:45,680 --> 02:30:51,120
console.
2994
02:30:47,240 --> 02:30:53,680
log type of
2995
02:30:51,120 --> 02:30:57,399
three and
2996
02:30:53,680 --> 02:30:58,279
save type of will tell us that three is
2997
02:30:57,399 --> 02:31:01,560
a
2998
02:30:58,279 --> 02:31:02,960
number well we can actually use type of
2999
02:31:01,560 --> 02:31:06,720
with a
3000
02:31:02,960 --> 02:31:10,720
variable so if we change this to
3001
02:31:06,720 --> 02:31:13,720
variable 2 and
3002
02:31:10,720 --> 02:31:17,160
save type of will tell us the type of
3003
02:31:13,720 --> 02:31:19,520
value inside the variable which is a
3004
02:31:17,160 --> 02:31:21,880
number and that's what we see in the
3005
02:31:19,520 --> 02:31:24,399
console
3006
02:31:21,880 --> 02:31:28,439
now let's check the type of this
3007
02:31:24,399 --> 02:31:33,359
variable message so message contains a
3008
02:31:28,439 --> 02:31:33,359
string and if we do
3009
02:31:33,960 --> 02:31:41,200
console.log type of
3010
02:31:38,600 --> 02:31:44,040
message and
3011
02:31:41,200 --> 02:31:48,120
save this will tell us that the value
3012
02:31:44,040 --> 02:31:50,960
inside the message variable is a string
3013
02:31:48,120 --> 02:31:54,840
so we can use type of to check the type
3014
02:31:50,960 --> 02:31:57,000
of value that is saved inside a variable
3015
02:31:54,840 --> 02:31:59,960
and that's the end of this lesson in
3016
02:31:57,000 --> 02:32:02,640
this lesson we learned about variables
3017
02:31:59,960 --> 02:32:05,840
which are a way to save values and use
3018
02:32:02,640 --> 02:32:08,600
them later we learned how to reassign a
3019
02:32:05,840 --> 02:32:11,279
variable we created the cart quantity
3020
02:32:08,600 --> 02:32:13,439
feature of the final project we learned
3021
02:32:11,279 --> 02:32:15,520
some shortcuts for reassigning a
3022
02:32:13,439 --> 02:32:17,720
variable we learned some naming
3023
02:32:15,520 --> 02:32:20,279
conventions and best practices for
3024
02:32:17,720 --> 02:32:24,040
variable names and we learned learned
3025
02:32:20,279 --> 02:32:25,920
three ways to create a variable let
3026
02:32:24,040 --> 02:32:28,800
const and
3027
02:32:25,920 --> 02:32:32,960
VAR here are some exercises to help you
3028
02:32:28,800 --> 02:32:32,960
practice using variables
3029
02:32:58,680 --> 02:33:03,520
in this lesson we're going to learn two
3030
02:33:00,920 --> 02:33:06,200
more features of JavaScript called
3031
02:33:03,520 --> 02:33:08,520
booleans and if statements and we're
3032
02:33:06,200 --> 02:33:11,600
going to use these features to build
3033
02:33:08,520 --> 02:33:14,479
this rock paper scissors
3034
02:33:11,600 --> 02:33:17,840
project let's start by creating a new
3035
02:33:14,479 --> 02:33:20,279
HTML file for this lesson we're going to
3036
02:33:17,840 --> 02:33:23,160
go to our code editor and click this
3037
02:33:20,279 --> 02:33:26,640
icon to show our files and then click
3038
02:33:23,160 --> 02:33:30,200
this icon to create a new file we're
3039
02:33:26,640 --> 02:33:32,640
going to name this file
3040
02:33:30,200 --> 02:33:34,279
06-
3041
02:33:32,640 --> 02:33:36,920
booleans
3042
02:33:34,279 --> 02:33:40,640
HTML and press
3043
02:33:36,920 --> 02:33:43,000
enter let's open variables.
3044
02:33:40,640 --> 02:33:46,200
HTML and we're going to copy all this
3045
02:33:43,000 --> 02:33:49,000
code into our new file let's select the
3046
02:33:46,200 --> 02:33:52,560
code using control a on Windows or
3047
02:33:49,000 --> 02:33:54,720
command a on Mac and then
3048
02:33:52,560 --> 02:33:56,880
rightclick
3049
02:33:54,720 --> 02:34:00,880
copy and in
3050
02:33:56,880 --> 02:34:04,359
here rightclick and
3051
02:34:00,880 --> 02:34:06,960
paste let's close this for now and
3052
02:34:04,359 --> 02:34:09,840
prepare this file for this lesson so
3053
02:34:06,960 --> 02:34:11,880
we'll scroll to the top and change this
3054
02:34:09,840 --> 02:34:14,080
to
3055
02:34:11,880 --> 02:34:16,720
booleans and then remove all the
3056
02:34:14,080 --> 02:34:19,720
JavaScript code but keep the script
3057
02:34:16,720 --> 02:34:19,720
element
3058
02:34:20,840 --> 02:34:25,120
now let's
3059
02:34:22,000 --> 02:34:27,880
save and open this file in live server
3060
02:34:25,120 --> 02:34:29,880
by right clicking and then open with
3061
02:34:27,880 --> 02:34:34,319
live
3062
02:34:29,880 --> 02:34:34,319
server and we can close the previous
3063
02:34:34,680 --> 02:34:42,120
tabs as well as the previous code for
3064
02:34:39,120 --> 02:34:44,760
now we'll start by learning what are
3065
02:34:42,120 --> 02:34:47,439
booleans so far in this course we learn
3066
02:34:44,760 --> 02:34:50,880
two types of values in JavaScript
3067
02:34:47,439 --> 02:34:53,800
numbers and strings booleans are another
3068
02:34:50,880 --> 02:34:56,040
type of value in JavaScript but booleans
3069
02:34:53,800 --> 02:34:59,279
are special because there are only two
3070
02:34:56,040 --> 02:35:02,680
Boolean values true and
3071
02:34:59,279 --> 02:35:08,720
false let's click in the script element
3072
02:35:02,680 --> 02:35:11,760
and type true press enter and type
3073
02:35:08,720 --> 02:35:15,880
false so these are the only two Boolean
3074
02:35:11,760 --> 02:35:18,880
values that exist true and false so
3075
02:35:15,880 --> 02:35:20,800
what's the purpose of Boolean values a
3076
02:35:18,880 --> 02:35:23,279
Boolean value represents whether
3077
02:35:20,800 --> 02:35:26,439
something is true or
3078
02:35:23,279 --> 02:35:29,319
false for example in JavaScript we can
3079
02:35:26,439 --> 02:35:35,319
compare two numbers let's create some
3080
02:35:29,319 --> 02:35:38,240
new lines and type the code 3 less than
3081
02:35:35,319 --> 02:35:41,399
5 so this code checks whether the number
3082
02:35:38,240 --> 02:35:45,240
three is less than five and of course
3083
02:35:41,399 --> 02:35:49,240
this is true so if we console.log this
3084
02:35:45,240 --> 02:35:49,240
code console.log
3085
02:35:50,800 --> 02:35:55,240
and
3086
02:35:51,960 --> 02:35:58,479
save and then go to our website and open
3087
02:35:55,240 --> 02:36:00,520
the console rightclick
3088
02:35:58,479 --> 02:36:02,840
inspect and
3089
02:36:00,520 --> 02:36:06,160
console it will show us that the result
3090
02:36:02,840 --> 02:36:08,479
of this code is the Boolean value
3091
02:36:06,160 --> 02:36:11,800
true let's try another
3092
02:36:08,479 --> 02:36:14,279
example let's delete this less than
3093
02:36:11,800 --> 02:36:17,120
symbol and replace it with a greater
3094
02:36:14,279 --> 02:36:20,080
than symbol so now this code checks
3095
02:36:17,120 --> 02:36:21,960
whether three is greater than five
3096
02:36:20,080 --> 02:36:24,040
and we know that three is not greater
3097
02:36:21,960 --> 02:36:26,640
than five so if we
3098
02:36:24,040 --> 02:36:29,080
save the computer will tell us that the
3099
02:36:26,640 --> 02:36:32,960
result of this comparison is the Boolean
3100
02:36:29,080 --> 02:36:35,040
value false so as you can see a Boolean
3101
02:36:32,960 --> 02:36:37,160
value represents whether something is
3102
02:36:35,040 --> 02:36:39,840
true or
3103
02:36:37,160 --> 02:36:43,040
false now let's learn the syntax rules
3104
02:36:39,840 --> 02:36:46,399
for booleans to create a Boolean we just
3105
02:36:43,040 --> 02:36:49,680
type true or false note that we don't
3106
02:36:46,399 --> 02:36:51,840
surround these with quotes like this if
3107
02:36:49,680 --> 02:36:53,680
we surround them with quotes this is now
3108
02:36:51,840 --> 02:36:57,680
a string not a
3109
02:36:53,680 --> 02:37:02,479
Boolean we can use type of to check this
3110
02:36:57,680 --> 02:37:02,479
so at the front we can type
3111
02:37:02,960 --> 02:37:09,160
console.log type of
3112
02:37:06,920 --> 02:37:12,720
true if we
3113
02:37:09,160 --> 02:37:16,760
save this will tell us that this is a
3114
02:37:12,720 --> 02:37:20,279
string now if we remove the
3115
02:37:16,760 --> 02:37:24,080
quotes and Save
3116
02:37:20,279 --> 02:37:27,479
this will tell us that this is now a
3117
02:37:24,080 --> 02:37:30,439
Boolean so when creating a Boolean don't
3118
02:37:27,479 --> 02:37:32,800
put quotes around true or
3119
02:37:30,439 --> 02:37:36,000
false let's
3120
02:37:32,800 --> 02:37:39,760
save now one way to create a Boolean is
3121
02:37:36,000 --> 02:37:43,000
to compare two numbers for example 3
3122
02:37:39,760 --> 02:37:46,680
greater than 5 so this greater than
3123
02:37:43,000 --> 02:37:48,399
symbol is called a comparison operator
3124
02:37:46,680 --> 02:37:50,399
and there are many other comparison
3125
02:37:48,399 --> 02:37:53,319
operators we can use
3126
02:37:50,399 --> 02:37:56,399
we saw less than earlier and we also
3127
02:37:53,319 --> 02:37:59,520
have greater than or equal to less than
3128
02:37:56,399 --> 02:38:02,080
or equal to Triple equals which checks
3129
02:37:59,520 --> 02:38:04,920
if two values are equal to each other
3130
02:38:02,080 --> 02:38:07,359
and exclamation double equals which
3131
02:38:04,920 --> 02:38:10,040
checks if two values are not equal to
3132
02:38:07,359 --> 02:38:12,960
each other now JavaScript is a little
3133
02:38:10,040 --> 02:38:16,399
special because it has two ways to check
3134
02:38:12,960 --> 02:38:19,080
if two values are equal triple equals
3135
02:38:16,399 --> 02:38:21,560
and double equals the difference is that
3136
02:38:19,080 --> 02:38:25,560
double equals tries to convert both
3137
02:38:21,560 --> 02:38:30,680
values into the same type for example in
3138
02:38:25,560 --> 02:38:32,319
our code let's create some new lines and
3139
02:38:30,680 --> 02:38:36,200
console.
3140
02:38:32,319 --> 02:38:40,920
log and let's check if the number five
3141
02:38:36,200 --> 02:38:40,920
is equal to the string
3142
02:38:41,479 --> 02:38:45,840
5. if we
3143
02:38:43,399 --> 02:38:48,880
save it will tell us that these two
3144
02:38:45,840 --> 02:38:50,760
values are equal to each other even
3145
02:38:48,880 --> 02:38:53,600
though one of of them is a number and
3146
02:38:50,760 --> 02:38:56,319
the other is a string and that's because
3147
02:38:53,600 --> 02:38:59,560
the double equals converts both values
3148
02:38:56,319 --> 02:39:02,439
into the same type so converts both of
3149
02:38:59,560 --> 02:39:05,040
these into the number five and then
3150
02:39:02,439 --> 02:39:08,319
Compares them so that's why they are
3151
02:39:05,040 --> 02:39:10,840
equal however this is not a good idea
3152
02:39:08,319 --> 02:39:14,439
because this value is a number and this
3153
02:39:10,840 --> 02:39:16,200
value is a string it's a piece of text
3154
02:39:14,439 --> 02:39:19,479
so they shouldn't really be equal to
3155
02:39:16,200 --> 02:39:22,120
each other that's why in JavaScript we
3156
02:39:19,479 --> 02:39:24,800
always use the triple equals to check if
3157
02:39:22,120 --> 02:39:28,479
two values are the same so that we avoid
3158
02:39:24,800 --> 02:39:29,760
the conversion behavior of double equals
3159
02:39:28,479 --> 02:39:32,399
so if we
3160
02:39:29,760 --> 02:39:35,120
save now it will tell us that these two
3161
02:39:32,399 --> 02:39:37,520
values are not equal to each other
3162
02:39:35,120 --> 02:39:39,120
because one value is a number and the
3163
02:39:37,520 --> 02:39:42,399
other value is a
3164
02:39:39,120 --> 02:39:45,560
string so this rule also applies to not
3165
02:39:42,399 --> 02:39:48,319
equal to in JavaScript we always use
3166
02:39:45,560 --> 02:39:51,040
exclamation double equals instead of
3167
02:39:48,319 --> 02:39:52,760
exclamation equals to avoid the
3168
02:39:51,040 --> 02:39:55,200
conversion
3169
02:39:52,760 --> 02:39:58,399
Behavior All right so those are
3170
02:39:55,200 --> 02:40:01,080
comparison operators in the order of
3171
02:39:58,399 --> 02:40:04,240
operations comparison operators have a
3172
02:40:01,080 --> 02:40:08,720
lower priority than math so if we did
3173
02:40:04,240 --> 02:40:12,560
something like 5 and then minus
3174
02:40:08,720 --> 02:40:16,000
5 this would calculate 5 - 5 first which
3175
02:40:12,560 --> 02:40:19,040
is zero and then compare the two numbers
3176
02:40:16,000 --> 02:40:19,880
so three is now greater than zero so if
3177
02:40:19,040 --> 02:40:23,359
we
3178
02:40:19,880 --> 02:40:26,399
save the first comparison will now be
3179
02:40:23,359 --> 02:40:29,319
true so comparison operators have a
3180
02:40:26,399 --> 02:40:31,760
lower priority than math
3181
02:40:29,319 --> 02:40:34,080
operators now that we know what Boolean
3182
02:40:31,760 --> 02:40:36,560
values are we're going to combine them
3183
02:40:34,080 --> 02:40:39,760
with a really useful feature called if
3184
02:40:36,560 --> 02:40:42,760
statements an if statement lets us write
3185
02:40:39,760 --> 02:40:45,840
multiple groups of code and then decide
3186
02:40:42,760 --> 02:40:48,760
which code to run Let's do an example
3187
02:40:45,840 --> 02:40:50,000
and create our first if statement we're
3188
02:40:48,760 --> 02:40:53,640
going to go to the the
3189
02:40:50,000 --> 02:40:58,680
bottom and create some new
3190
02:40:53,640 --> 02:41:01,840
lines and type if and Open Bracket Clos
3191
02:40:58,680 --> 02:41:03,000
bracket and open curly bracket closed
3192
02:41:01,840 --> 02:41:06,000
curly
3193
02:41:03,000 --> 02:41:09,399
bracket between these round brackets
3194
02:41:06,000 --> 02:41:12,640
we're going to put a Boolean value like
3195
02:41:09,399 --> 02:41:15,760
true and in between the curly brackets
3196
02:41:12,640 --> 02:41:19,760
we're going to put some code to run for
3197
02:41:15,760 --> 02:41:19,760
example console.log
3198
02:41:21,399 --> 02:41:27,080
hello so the way that an if statement
3199
02:41:23,800 --> 02:41:29,720
works is that if this Boolean value is
3200
02:41:27,080 --> 02:41:32,640
true then we're going to run the code in
3201
02:41:29,720 --> 02:41:35,479
the curly brackets if this Boolean value
3202
02:41:32,640 --> 02:41:37,840
is false then we're not going to run the
3203
02:41:35,479 --> 02:41:40,680
code if we
3204
02:41:37,840 --> 02:41:43,319
save the value between the brackets is
3205
02:41:40,680 --> 02:41:44,479
true so we're going to run this code and
3206
02:41:43,319 --> 02:41:51,000
display
3207
02:41:44,479 --> 02:41:54,000
hello now if we change this to false and
3208
02:41:51,000 --> 02:41:57,399
save it will not run this
3209
02:41:54,000 --> 02:42:00,200
code so an if statement lets us decide
3210
02:41:57,399 --> 02:42:01,880
whether or not to run some code based on
3211
02:42:00,200 --> 02:42:04,240
this Boolean
3212
02:42:01,880 --> 02:42:06,399
value now if statements have another
3213
02:42:04,240 --> 02:42:09,000
useful feature called
3214
02:42:06,399 --> 02:42:10,760
else let's go to the end of this if
3215
02:42:09,000 --> 02:42:12,520
statement and
3216
02:42:10,760 --> 02:42:15,880
type
3217
02:42:12,520 --> 02:42:18,240
else open curly bracket close curly
3218
02:42:15,880 --> 02:42:20,120
bracket and then inside these curly
3219
02:42:18,240 --> 02:42:24,319
brackets we're going to put some
3220
02:42:20,120 --> 02:42:24,319
different code like
3221
02:42:24,760 --> 02:42:31,240
console.log
3222
02:42:27,439 --> 02:42:33,800
else the way else works is if this
3223
02:42:31,240 --> 02:42:37,080
Boolean value is true the computer will
3224
02:42:33,800 --> 02:42:38,720
run this code otherwise we will run the
3225
02:42:37,080 --> 02:42:42,000
code inside
3226
02:42:38,720 --> 02:42:45,800
else let's give it a try we'll change
3227
02:42:42,000 --> 02:42:48,760
this Boolean value to true and
3228
02:42:45,800 --> 02:42:49,800
save and because it is true it will run
3229
02:42:48,760 --> 02:42:51,240
this code
3230
02:42:49,800 --> 02:42:56,319
and display
3231
02:42:51,240 --> 02:42:57,279
hello now if this Boolean value is false
3232
02:42:56,319 --> 02:43:00,359
and
3233
02:42:57,279 --> 02:43:02,359
save because it is false it will not run
3234
02:43:00,359 --> 02:43:05,600
this code and it will run the code
3235
02:43:02,359 --> 02:43:09,200
inside else and display
3236
02:43:05,600 --> 02:43:11,880
else so using IF and else we can write
3237
02:43:09,200 --> 02:43:13,200
two groups of code and then decide which
3238
02:43:11,880 --> 02:43:16,760
code to
3239
02:43:13,200 --> 02:43:18,439
run now let's do a practical example
3240
02:43:16,760 --> 02:43:20,560
we're going to write some code to check
3241
02:43:18,439 --> 02:43:23,439
if someone is old enough to
3242
02:43:20,560 --> 02:43:24,600
drive let's go to the bottom and create
3243
02:43:23,439 --> 02:43:28,240
some new
3244
02:43:24,600 --> 02:43:30,640
lines and we're going to type if
3245
02:43:28,240 --> 02:43:33,800
brackets and curly
3246
02:43:30,640 --> 02:43:36,880
brackets and inside here we're going to
3247
02:43:33,800 --> 02:43:40,240
compare two numbers the first number is
3248
02:43:36,880 --> 02:43:42,720
a person's age let's pretend we have a
3249
02:43:40,240 --> 02:43:44,399
person who is 30 years old so we're
3250
02:43:42,720 --> 02:43:48,080
going to type
3251
02:43:44,399 --> 02:43:51,279
30 then we're going to check if this age
3252
02:43:48,080 --> 02:43:54,200
is greater than or equal to the legal
3253
02:43:51,279 --> 02:43:57,000
driving age Let's Pretend the legal
3254
02:43:54,200 --> 02:43:59,920
driving age is
3255
02:43:57,000 --> 02:44:03,160
16 notice that between the brackets we
3256
02:43:59,920 --> 02:44:05,479
don't have to just put a Boolean value
3257
02:44:03,160 --> 02:44:06,680
we can put any code that results in a
3258
02:44:05,479 --> 02:44:09,720
Boolean
3259
02:44:06,680 --> 02:44:12,399
value so this comparison results in the
3260
02:44:09,720 --> 02:44:14,520
Boolean value true that means the
3261
02:44:12,399 --> 02:44:18,520
computer will run the code between the
3262
02:44:14,520 --> 02:44:19,760
curly brackets so in here let's type
3263
02:44:18,520 --> 02:44:22,359
console
3264
02:44:19,760 --> 02:44:27,160
.
3265
02:44:22,359 --> 02:44:30,560
log you can
3266
02:44:27,160 --> 02:44:33,600
drive now if this is not true let's run
3267
02:44:30,560 --> 02:44:34,960
some different code at the bottom we'll
3268
02:44:33,600 --> 02:44:38,720
type
3269
02:44:34,960 --> 02:44:42,800
else and curly brackets and then inside
3270
02:44:38,720 --> 02:44:42,800
these brackets we'll type
3271
02:44:43,640 --> 02:44:50,640
console.log you canot drive
3272
02:44:49,359 --> 02:44:53,040
now let's
3273
02:44:50,640 --> 02:44:56,479
save and it will tell me that this
3274
02:44:53,040 --> 02:44:59,880
person who is 30 years old can
3275
02:44:56,479 --> 02:45:04,240
drive if we go back and change this to a
3276
02:44:59,880 --> 02:45:06,920
person that is 15 years old and
3277
02:45:04,240 --> 02:45:10,600
save this comparison will result in
3278
02:45:06,920 --> 02:45:13,840
false so it will display you cannot
3279
02:45:10,600 --> 02:45:16,279
drive so that's how we use if statements
3280
02:45:13,840 --> 02:45:18,600
we can write multiple groups of code for
3281
02:45:16,279 --> 02:45:21,200
different situations and then decide
3282
02:45:18,600 --> 02:45:24,200
which Cod code to
3283
02:45:21,200 --> 02:45:27,240
run now let's learn the syntax rules for
3284
02:45:24,200 --> 02:45:30,399
if statements to create an if statement
3285
02:45:27,240 --> 02:45:33,720
we type if and then round brackets with
3286
02:45:30,399 --> 02:45:37,439
a Boolean value inside this is called
3287
02:45:33,720 --> 02:45:40,640
the condition if this condition is true
3288
02:45:37,439 --> 02:45:43,240
we will run the code inside the curly
3289
02:45:40,640 --> 02:45:45,680
brackets we can also add an else
3290
02:45:43,240 --> 02:45:49,160
statement this code will run if the
3291
02:45:45,680 --> 02:45:51,720
condition is false the else statement is
3292
02:45:49,160 --> 02:45:54,560
optional we don't have to have
3293
02:45:51,720 --> 02:45:57,600
one so these curly brackets and the code
3294
02:45:54,560 --> 02:45:59,680
inside these are called branches because
3295
02:45:57,600 --> 02:46:02,399
it's like a tree branch the code is
3296
02:45:59,680 --> 02:46:06,160
splitting off into two directions and we
3297
02:46:02,399 --> 02:46:09,279
either run this code or we run this
3298
02:46:06,160 --> 02:46:12,640
code one more thing to know is in a
3299
02:46:09,279 --> 02:46:15,680
branch if we only have one line of code
3300
02:46:12,640 --> 02:46:17,760
the curly brackets are actually optional
3301
02:46:15,680 --> 02:46:19,520
so we can delete these and the code will
3302
02:46:17,760 --> 02:46:21,800
still work
3303
02:46:19,520 --> 02:46:24,720
however if we have more than one line of
3304
02:46:21,800 --> 02:46:28,399
code in this Branch for example if we
3305
02:46:24,720 --> 02:46:28,399
add another line
3306
02:46:28,800 --> 02:46:34,279
console.log
3307
02:46:31,640 --> 02:46:36,920
congrats now this branch has two lines
3308
02:46:34,279 --> 02:46:41,240
of code so the curly brackets are
3309
02:46:36,920 --> 02:46:41,240
mandatory so we have to add them
3310
02:46:42,520 --> 02:46:46,920
back now we're going to learn another
3311
02:46:44,640 --> 02:46:50,640
feature of if statements which is we can
3312
02:46:46,920 --> 02:46:52,840
have more than one condition for example
3313
02:46:50,640 --> 02:46:58,000
we're going to go to the end of this if
3314
02:46:52,840 --> 02:47:00,399
branch and type else if and then
3315
02:46:58,000 --> 02:47:03,520
brackets and curly
3316
02:47:00,399 --> 02:47:05,160
brackets else if lets us add another
3317
02:47:03,520 --> 02:47:08,000
Branch to our if
3318
02:47:05,160 --> 02:47:11,760
statement between these round brackets
3319
02:47:08,000 --> 02:47:13,920
we can add another condition for example
3320
02:47:11,760 --> 02:47:17,399
if a person is almost old enough to
3321
02:47:13,920 --> 02:47:19,479
drive let's display a different message
3322
02:47:17,399 --> 02:47:21,600
so inside this condition
3323
02:47:19,479 --> 02:47:27,279
let's check if this person's age which
3324
02:47:21,600 --> 02:47:29,240
is 15 is greater than or equal to 14 so
3325
02:47:27,279 --> 02:47:32,279
we're checking if they are almost old
3326
02:47:29,240 --> 02:47:34,319
enough to drive and now inside the curly
3327
02:47:32,279 --> 02:47:35,720
brackets we're going to display a
3328
02:47:34,319 --> 02:47:38,720
different
3329
02:47:35,720 --> 02:47:38,720
message
3330
02:47:40,279 --> 02:47:44,439
console.log almost
3331
02:47:44,520 --> 02:47:50,120
there so the way this works is that the
3332
02:47:47,120 --> 02:47:53,439
if statement checks the condition one by
3333
02:47:50,120 --> 02:47:56,240
one first it checks if this is true if
3334
02:47:53,439 --> 02:47:58,760
it is it will run this Branch then it
3335
02:47:56,240 --> 02:48:01,640
checks if this is true if it is it will
3336
02:47:58,760 --> 02:48:04,479
run this branch and if none of the
3337
02:48:01,640 --> 02:48:08,479
conditions are true it will run the else
3338
02:48:04,479 --> 02:48:10,600
Branch so here this condition is false
3339
02:48:08,479 --> 02:48:13,200
so we're not going to run this code but
3340
02:48:10,600 --> 02:48:16,319
now the second condition is true so
3341
02:48:13,200 --> 02:48:19,319
we're going to run this code if we
3342
02:48:16,319 --> 02:48:20,800
save we display almost there
3343
02:48:19,319 --> 02:48:24,359
in the
3344
02:48:20,800 --> 02:48:26,760
console so using else if branches we can
3345
02:48:24,359 --> 02:48:27,960
add as many conditions as we want to an
3346
02:48:26,760 --> 02:48:29,760
if
3347
02:48:27,960 --> 02:48:31,680
statement the next thing we're going to
3348
02:48:29,760 --> 02:48:33,760
learn is that we can combine if
3349
02:48:31,680 --> 02:48:34,920
statements with variables from the
3350
02:48:33,760 --> 02:48:38,080
previous
3351
02:48:34,920 --> 02:48:40,800
lesson for example here we wrote the
3352
02:48:38,080 --> 02:48:43,399
person's age two times so we can
3353
02:48:40,800 --> 02:48:45,080
actually save this age in a variable and
3354
02:48:43,399 --> 02:48:49,279
then reuse that
3355
02:48:45,080 --> 02:48:54,279
value so above the if statement
3356
02:48:49,279 --> 02:48:57,560
let's create a variable using const and
3357
02:48:54,279 --> 02:49:00,080
let's name this variable H and we'll
3358
02:48:57,560 --> 02:49:02,520
make it equal to
3359
02:49:00,080 --> 02:49:05,240
15 remember the best practice for
3360
02:49:02,520 --> 02:49:08,040
creating a variable is to use const by
3361
02:49:05,240 --> 02:49:10,240
default and only use let if we're going
3362
02:49:08,040 --> 02:49:13,000
to change this value
3363
02:49:10,240 --> 02:49:15,720
later and now that we saved this number
3364
02:49:13,000 --> 02:49:19,120
in a variable we can use the variable
3365
02:49:15,720 --> 02:49:25,359
inside the if statement so we'll replace
3366
02:49:19,120 --> 02:49:28,479
15 with age and here as well with
3367
02:49:25,359 --> 02:49:31,000
age so this will take whatever value is
3368
02:49:28,479 --> 02:49:32,120
inside the variable and substitute it
3369
02:49:31,000 --> 02:49:34,399
into the
3370
02:49:32,120 --> 02:49:37,319
code if we
3371
02:49:34,399 --> 02:49:40,120
save the if statement works the same way
3372
02:49:37,319 --> 02:49:43,000
as before and we run this
3373
02:49:40,120 --> 02:49:45,399
line okay now we're ready to use
3374
02:49:43,000 --> 02:49:47,840
booleans and if statements to do a
3375
02:49:45,399 --> 02:49:51,120
project we're going to build a rock
3376
02:49:47,840 --> 02:49:53,359
paper scissors gate G first let's take a
3377
02:49:51,120 --> 02:49:57,560
look at the project we're going to go to
3378
02:49:53,359 --> 02:50:02,520
our browser and at the top create a new
3379
02:49:57,560 --> 02:50:06,399
tab and we're going to type here
3380
02:50:02,520 --> 02:50:08,800
superimple dodev SL
3381
02:50:06,399 --> 02:50:11,279
projects SL
3382
02:50:08,800 --> 02:50:14,120
booleans and press
3383
02:50:11,279 --> 02:50:16,680
enter here we can see a simple version
3384
02:50:14,120 --> 02:50:19,560
of a rock paper scissors game and if we
3385
02:50:16,680 --> 02:50:22,680
click this link it will take us to the
3386
02:50:19,560 --> 02:50:24,720
final version of this game so in this
3387
02:50:22,680 --> 02:50:27,319
game we can pick a
3388
02:50:24,720 --> 02:50:30,319
move and then the computer will pick a
3389
02:50:27,319 --> 02:50:33,600
random move and it will show us the
3390
02:50:30,319 --> 02:50:37,359
result and we also have a score of how
3391
02:50:33,600 --> 02:50:39,319
many times we won lost and tied so we're
3392
02:50:37,359 --> 02:50:42,399
going to build this as we go through the
3393
02:50:39,319 --> 02:50:44,479
course but for now let's go
3394
02:50:42,399 --> 02:50:47,560
back and we're going to start by
3395
02:50:44,479 --> 02:50:49,840
building this simple version of the game
3396
02:50:47,560 --> 02:50:51,640
so how this simple version works is we
3397
02:50:49,840 --> 02:50:53,920
click one of these buttons to pick a
3398
02:50:51,640 --> 02:50:56,399
move so let's pick
3399
02:50:53,920 --> 02:50:59,279
Rock then the computer will randomly
3400
02:50:56,399 --> 02:51:01,640
pick a move in this case it's paper but
3401
02:50:59,279 --> 02:51:03,960
for you it might be different and it
3402
02:51:01,640 --> 02:51:05,680
will compare the two moves and display
3403
02:51:03,960 --> 02:51:07,960
the results in this
3404
02:51:05,680 --> 02:51:11,720
popup so the rules of rock paper
3405
02:51:07,960 --> 02:51:15,239
scissors are rock beats scissors paper
3406
02:51:11,720 --> 02:51:18,120
beats Rock and scissors beats
3407
02:51:15,239 --> 02:51:19,560
paper let's press okay and we'll get
3408
02:51:18,120 --> 02:51:22,720
started on this
3409
02:51:19,560 --> 02:51:25,359
project first we'll create a new HTML
3410
02:51:22,720 --> 02:51:28,000
file just for this project let's go to
3411
02:51:25,359 --> 02:51:30,920
our code editor and click here and
3412
02:51:28,000 --> 02:51:33,640
create a new file and we're going to
3413
02:51:30,920 --> 02:51:36,640
name this file
3414
02:51:33,640 --> 02:51:36,640
06-
3415
02:51:39,640 --> 02:51:46,840
rock-paper-scissors HTML and press
3416
02:51:43,560 --> 02:51:50,680
enter next let's copy all the code from
3417
02:51:46,840 --> 02:51:53,880
booleans HTML into this new file so
3418
02:51:50,680 --> 02:51:56,560
we'll open this again and then control a
3419
02:51:53,880 --> 02:51:58,880
or command a to select all the code and
3420
02:51:56,560 --> 02:52:03,680
then right click
3421
02:51:58,880 --> 02:52:07,560
copy and in here right click and
3422
02:52:03,680 --> 02:52:12,640
paste let's close this and prepare this
3423
02:52:07,560 --> 02:52:14,920
file so we'll change this to rock
3424
02:52:12,640 --> 02:52:17,120
paper
3425
02:52:14,920 --> 02:52:20,520
scissors and remove all of the
3426
02:52:17,120 --> 02:52:20,520
JavaScript code that we had
3427
02:52:22,239 --> 02:52:29,120
before finally let's save and open this
3428
02:52:26,040 --> 02:52:32,319
file in the browser by right clicking
3429
02:52:29,120 --> 02:52:35,920
and then open with live
3430
02:52:32,319 --> 02:52:38,120
server let's take a look at the project
3431
02:52:35,920 --> 02:52:40,760
again so we're going to start by
3432
02:52:38,120 --> 02:52:44,160
creating the text first because this
3433
02:52:40,760 --> 02:52:46,640
text is in the final version of the
3434
02:52:44,160 --> 02:52:49,399
project so in our
3435
02:52:46,640 --> 02:52:53,439
HTML we're going to create a paragraph
3436
02:52:49,399 --> 02:52:56,040
element for this text so less than P
3437
02:52:53,439 --> 02:52:59,040
greater than and the closing tag less
3438
02:52:56,040 --> 02:53:02,080
than /p greater than inside our
3439
02:52:59,040 --> 02:53:05,880
paragraph we're going to have the text
3440
02:53:02,080 --> 02:53:10,160
rock paper
3441
02:53:05,880 --> 02:53:12,600
scissors next let's create the
3442
02:53:10,160 --> 02:53:16,160
buttons so we'll go to our
3443
02:53:12,600 --> 02:53:18,760
HTML and create a
3444
02:53:16,160 --> 02:53:21,080
button and inside this first button
3445
02:53:18,760 --> 02:53:25,200
we'll have the text
3446
02:53:21,080 --> 02:53:28,520
Rock Let's create another
3447
02:53:25,200 --> 02:53:31,640
button this one will be
3448
02:53:28,520 --> 02:53:35,359
paper and we'll create the last
3449
02:53:31,640 --> 02:53:39,000
button this one will be
3450
02:53:35,359 --> 02:53:40,399
scissors now let's save and check our
3451
02:53:39,000 --> 02:53:43,279
new
3452
02:53:40,399 --> 02:53:44,359
tab and now we created all the elements
3453
02:53:43,279 --> 02:53:47,080
that we
3454
02:53:44,359 --> 02:53:49,920
need next let's make these elements
3455
02:53:47,080 --> 02:53:52,399
interactive with Javas JavaScript so
3456
02:53:49,920 --> 02:53:54,800
when writing JavaScript a good strategy
3457
02:53:52,399 --> 02:53:57,720
is to think about what steps we need to
3458
02:53:54,800 --> 02:54:01,359
do and then convert those steps into
3459
02:53:57,720 --> 02:54:03,520
code so here when we click a button the
3460
02:54:01,359 --> 02:54:05,840
first step is the computer will randomly
3461
02:54:03,520 --> 02:54:08,600
select a move and then we're going to
3462
02:54:05,840 --> 02:54:11,760
compare the moves to get the result and
3463
02:54:08,600 --> 02:54:14,960
finally we'll display the result in a
3464
02:54:11,760 --> 02:54:17,840
popup by the way this is called an
3465
02:54:14,960 --> 02:54:20,800
algorithm an algorithm is a set of steps
3466
02:54:17,840 --> 02:54:23,200
to complete delete a task or to solve a
3467
02:54:20,800 --> 02:54:25,239
problem now that we know what steps we
3468
02:54:23,200 --> 02:54:28,680
need to do we're going to convert these
3469
02:54:25,239 --> 02:54:30,960
steps or this algorithm into
3470
02:54:28,680 --> 02:54:33,200
code first we're going to run some
3471
02:54:30,960 --> 02:54:36,760
JavaScript when we click these buttons
3472
02:54:33,200 --> 02:54:38,800
so let's use the onclick attribute again
3473
02:54:36,760 --> 02:54:41,680
we'll go to the opening tag of the
3474
02:54:38,800 --> 02:54:44,200
button and type
3475
02:54:41,680 --> 02:54:46,359
onclick equals double
3476
02:54:44,200 --> 02:54:50,319
quotes and then inside these double
3477
02:54:46,359 --> 02:54:50,319
quotes we can add our JavaScript
3478
02:54:51,000 --> 02:54:56,080
so now we have to figure out how to
3479
02:54:52,800 --> 02:54:58,160
randomly select a move for the computer
3480
02:54:56,080 --> 02:54:59,760
to do this we need to learn a new piece
3481
02:54:58,160 --> 02:55:03,359
of JavaScript
3482
02:54:59,760 --> 02:55:05,319
code so here we're going to type capital
3483
02:55:03,359 --> 02:55:09,840
m
3484
02:55:05,319 --> 02:55:12,560
math.random Open Bracket close bracket
3485
02:55:09,840 --> 02:55:16,600
math.random generates a random number
3486
02:55:12,560 --> 02:55:20,319
between 0o and 1 so if we console.log
3487
02:55:16,600 --> 02:55:20,319
this console
3488
02:55:21,640 --> 02:55:27,439
log and
3489
02:55:24,560 --> 02:55:30,960
save and click this
3490
02:55:27,439 --> 02:55:33,120
button and then check in our console by
3491
02:55:30,960 --> 02:55:35,680
right-clicking
3492
02:55:33,120 --> 02:55:38,560
inspect and the
3493
02:55:35,680 --> 02:55:42,560
console it will display a random number
3494
02:55:38,560 --> 02:55:44,960
between Z and 1 if we click this button
3495
02:55:42,560 --> 02:55:48,640
again it will generate a different
3496
02:55:44,960 --> 02:55:51,200
random number so every time we run MTH
3497
02:55:48,640 --> 02:55:54,840
random it generates a different random
3498
02:55:51,200 --> 02:55:57,279
number between 0 and one now to be more
3499
02:55:54,840 --> 02:56:00,720
precise it actually generates a number
3500
02:55:57,279 --> 02:56:03,479
greater than equal to zero and less than
3501
02:56:00,720 --> 02:56:06,560
one now let's save this random number in
3502
02:56:03,479 --> 02:56:08,359
a variable so we can use it later so
3503
02:56:06,560 --> 02:56:10,479
we'll replace the
3504
02:56:08,359 --> 02:56:13,399
console.log with
3505
02:56:10,479 --> 02:56:19,080
const and then a variable name let's
3506
02:56:13,399 --> 02:56:21,080
just name it random capital N number
3507
02:56:19,080 --> 02:56:23,960
and then
3508
02:56:21,080 --> 02:56:25,080
equals so we saved this random number
3509
02:56:23,960 --> 02:56:28,239
inside this
3510
02:56:25,080 --> 02:56:31,760
variable next we need a way to convert
3511
02:56:28,239 --> 02:56:34,880
this random number into a move like rock
3512
02:56:31,760 --> 02:56:38,279
paper or scissors to do this let's
3513
02:56:34,880 --> 02:56:40,800
imagine the space between 0 and 1 and
3514
02:56:38,279 --> 02:56:44,600
then divide the space into three equal
3515
02:56:40,800 --> 02:56:46,600
parts each part represents a move if we
3516
02:56:44,600 --> 02:56:50,640
generate a random number and it's
3517
02:56:46,600 --> 02:56:53,880
between 0 and 1/3 the move will be Rock
3518
02:56:50,640 --> 02:56:56,760
if it's between 1/3 and 2/3 the move
3519
02:56:53,880 --> 02:57:00,319
will be paper and if it's between 2/3
3520
02:56:56,760 --> 02:57:02,680
and one the move will be scissors this
3521
02:57:00,319 --> 02:57:04,920
is how we can convert the random number
3522
02:57:02,680 --> 02:57:08,040
into a move and this will give the
3523
02:57:04,920 --> 02:57:09,359
computer an equal chance of picking rock
3524
02:57:08,040 --> 02:57:11,880
paper or
3525
02:57:09,359 --> 02:57:14,960
scissors now let's convert these steps
3526
02:57:11,880 --> 02:57:17,239
into code and an if statement is the
3527
02:57:14,960 --> 02:57:20,160
perfect solution for this this already
3528
02:57:17,239 --> 02:57:23,479
looks like an if statement so in our
3529
02:57:20,160 --> 02:57:28,399
onclick attribute let's add some new
3530
02:57:23,479 --> 02:57:31,720
lines and type if brackets and curly
3531
02:57:28,399 --> 02:57:33,640
brackets for this first condition we're
3532
02:57:31,720 --> 02:57:38,279
going to check if the random number is
3533
02:57:33,640 --> 02:57:42,439
between 0 and 1/3 so let's check if
3534
02:57:38,279 --> 02:57:43,640
random number is greater than or equal
3535
02:57:42,439 --> 02:57:46,680
to
3536
02:57:43,640 --> 02:57:53,319
zero but in this case we also need to
3537
02:57:46,680 --> 02:57:55,760
check that random number is less than
3538
02:57:53,319 --> 02:57:59,760
1/3 because we're checking if the number
3539
02:57:55,760 --> 02:58:01,960
is between 0 and 1/3 but how do we do
3540
02:57:59,760 --> 02:58:05,520
this how do we check that two
3541
02:58:01,960 --> 02:58:07,239
comparisons are both true to do this
3542
02:58:05,520 --> 02:58:10,560
we're going to learn another type of
3543
02:58:07,239 --> 02:58:13,439
operator in JavaScript called logical
3544
02:58:10,560 --> 02:58:15,960
operators logical operators let us
3545
02:58:13,439 --> 02:58:18,920
combine Boolean values which is what we
3546
02:58:15,960 --> 02:58:20,279
need to do here let's go back into
3547
02:58:18,920 --> 02:58:23,239
booleans
3548
02:58:20,279 --> 02:58:26,399
HTML and we're going to learn logical
3549
02:58:23,239 --> 02:58:27,560
operators so first let's open the tab
3550
02:58:26,399 --> 02:58:30,239
for this
3551
02:58:27,560 --> 02:58:32,760
file and we're going to comment out all
3552
02:58:30,239 --> 02:58:34,920
the previous code so our console doesn't
3553
02:58:32,760 --> 02:58:37,479
get too messy
3554
02:58:34,920 --> 02:58:39,640
slashstar and then at the
3555
02:58:37,479 --> 02:58:42,600
bottom star
3556
02:58:39,640 --> 02:58:45,319
slash now let's create some new
3557
02:58:42,600 --> 02:58:47,680
lines and the first logical operator
3558
02:58:45,319 --> 02:58:49,279
we're going to learn is called the and
3559
02:58:47,680 --> 02:58:51,200
operator
3560
02:58:49,279 --> 02:58:55,279
let's type
3561
02:58:51,200 --> 02:59:00,080
console. log a Boolean value
3562
02:58:55,279 --> 02:59:03,840
true and another Boolean value
3563
02:59:00,080 --> 02:59:06,800
true so this is the and operator and it
3564
02:59:03,840 --> 02:59:09,399
checks if two Boolean values are both
3565
02:59:06,800 --> 02:59:12,760
true so it checks if the left side is
3566
02:59:09,399 --> 02:59:16,200
true and the right side is true that's
3567
02:59:12,760 --> 02:59:18,520
why it's called the and operator so here
3568
02:59:16,200 --> 02:59:21,239
the left side is true and the right side
3569
02:59:18,520 --> 02:59:24,080
is also true so the and operator will
3570
02:59:21,239 --> 02:59:28,680
result in true if we
3571
02:59:24,080 --> 02:59:31,960
save this displays true now if one of
3572
02:59:28,680 --> 02:59:34,040
these sides is false for example if we
3573
02:59:31,960 --> 02:59:37,600
change this to
3574
02:59:34,040 --> 02:59:40,239
false now let's check is the left side
3575
02:59:37,600 --> 02:59:44,239
and the right side both true in this
3576
02:59:40,239 --> 02:59:49,439
case no so and will now result in false
3577
02:59:44,239 --> 02:59:52,200
if we save it now displays false
3578
02:59:49,439 --> 02:59:55,080
so that's the logical and operator it
3579
02:59:52,200 --> 02:59:58,520
checks if the left side is true and the
3580
02:59:55,080 --> 03:00:01,600
right side is also true so this is
3581
02:59:58,520 --> 03:00:07,880
exactly what we need for our project for
3582
03:00:01,600 --> 03:00:07,880
example let's create a new line and type
3583
03:00:08,279 --> 03:00:13,160
console.log and let's say that we
3584
03:00:10,160 --> 03:00:16,120
generated a random number like
3585
03:00:13,160 --> 03:00:19,880
0.2 and we want to check if it's between
3586
03:00:16,120 --> 03:00:25,239
0 and 1/3 so we can do
3587
03:00:19,880 --> 03:00:27,200
0.2 is greater than or equal to 0 and
3588
03:00:25,239 --> 03:00:30,960
we're also going to check if
3589
03:00:27,200 --> 03:00:33,840
0.2 is less than
3590
03:00:30,960 --> 03:00:36,040
1/3 so we're using the logical and
3591
03:00:33,840 --> 03:00:40,080
operator to check if the left side is
3592
03:00:36,040 --> 03:00:43,479
true and the right side is also true so
3593
03:00:40,080 --> 03:00:48,160
in this example both sides are true 0.2
3594
03:00:43,479 --> 03:00:51,560
is between 0 and 1/3 so if we save
3595
03:00:48,160 --> 03:00:54,479
this whole thing will display true now
3596
03:00:51,560 --> 03:00:57,479
in the order of operations logical
3597
03:00:54,479 --> 03:01:00,319
operators like and have a lower priority
3598
03:00:57,479 --> 03:01:03,760
than math and comparisons so in this
3599
03:01:00,319 --> 03:01:05,239
example it will calculate the math first
3600
03:01:03,760 --> 03:01:07,439
and then it will calculate the
3601
03:01:05,239 --> 03:01:09,960
comparison on the left and then the
3602
03:01:07,439 --> 03:01:12,680
comparison on the right and then at the
3603
03:01:09,960 --> 03:01:14,720
end the and operator checks if both
3604
03:01:12,680 --> 03:01:17,680
sides result in
3605
03:01:14,720 --> 03:01:20,560
true now let's use the and operator in
3606
03:01:17,680 --> 03:01:21,720
our project let's go back to the file
3607
03:01:20,560 --> 03:01:24,080
for our
3608
03:01:21,720 --> 03:01:26,120
project and then inside this first
3609
03:01:24,080 --> 03:01:28,319
condition we're going to check if the
3610
03:01:26,120 --> 03:01:32,359
random number is greater than or equal
3611
03:01:28,319 --> 03:01:35,960
to zero and at the same time is the
3612
03:01:32,359 --> 03:01:38,600
random number less than 1/3 so this is
3613
03:01:35,960 --> 03:01:39,560
how we check if a number is between 0
3614
03:01:38,600 --> 03:01:42,319
and
3615
03:01:39,560 --> 03:01:46,080
1/3 in this case the computer will pick
3616
03:01:42,319 --> 03:01:48,359
Rock so between the curly brackets let's
3617
03:01:46,080 --> 03:01:52,239
just type con
3618
03:01:48,359 --> 03:01:55,080
cons. log
3619
03:01:52,239 --> 03:01:57,880
Rock let's get some practice and create
3620
03:01:55,080 --> 03:02:00,200
the other two branches for picking paper
3621
03:01:57,880 --> 03:02:02,880
and scissors feel free to pause this
3622
03:02:00,200 --> 03:02:07,359
video if you want to try it yourself
3623
03:02:02,880 --> 03:02:10,000
first so here we're going to type else
3624
03:02:07,359 --> 03:02:13,439
if to add another branch and then
3625
03:02:10,000 --> 03:02:18,080
brackets and curly brackets and in this
3626
03:02:13,439 --> 03:02:23,200
condition we're going to check if random
3627
03:02:18,080 --> 03:02:24,960
number is greater than or equal to
3628
03:02:23,200 --> 03:02:26,640
1/3
3629
03:02:24,960 --> 03:02:32,800
and
3630
03:02:26,640 --> 03:02:32,800
random number is less than
3631
03:02:33,279 --> 03:02:40,479
2/3 so if this random number is between
3632
03:02:36,399 --> 03:02:44,880
1/3 and 2/3 inside here we're going to
3633
03:02:40,479 --> 03:02:47,840
console do log
3634
03:02:44,880 --> 03:02:51,319
paper and finally let's create another
3635
03:02:47,840 --> 03:02:54,120
Branch using else
3636
03:02:51,319 --> 03:02:57,960
if random
3637
03:02:54,120 --> 03:03:04,600
number greater than or equal to
3638
03:02:57,960 --> 03:03:08,080
2/3 and random number less than
3639
03:03:04,600 --> 03:03:08,080
1 and
3640
03:03:08,720 --> 03:03:11,720
console.log
3641
03:03:11,920 --> 03:03:16,560
scissors if we
3642
03:03:13,800 --> 03:03:18,359
save and then go back to our rock paper
3643
03:03:16,560 --> 03:03:21,600
scissors tab
3644
03:03:18,359 --> 03:03:24,359
and then click the rock button a few
3645
03:03:21,600 --> 03:03:25,120
times it will pick some random moves for
3646
03:03:24,359 --> 03:03:27,520
the
3647
03:03:25,120 --> 03:03:30,040
computer so that's how we generate the
3648
03:03:27,520 --> 03:03:32,520
computer's move one thing I want to
3649
03:03:30,040 --> 03:03:35,399
point out is that I use the less than
3650
03:03:32,520 --> 03:03:37,720
comparison instead of less than or equal
3651
03:03:35,399 --> 03:03:40,279
to I just did this so that the
3652
03:03:37,720 --> 03:03:42,439
comparisons don't
3653
03:03:40,279 --> 03:03:44,680
overlap before we continue in the
3654
03:03:42,439 --> 03:03:47,960
project we're going to learn two other
3655
03:03:44,680 --> 03:03:50,080
logical operators we can use let's go
3656
03:03:47,960 --> 03:03:52,960
back to booleans
3657
03:03:50,080 --> 03:03:55,000
HTML and let's also open the tab for
3658
03:03:52,960 --> 03:03:58,200
this
3659
03:03:55,000 --> 03:04:02,160
file the next logical operator is called
3660
03:03:58,200 --> 03:04:06,800
the or operator for example let's type
3661
03:04:02,160 --> 03:04:06,800
some new lines and type
3662
03:04:07,120 --> 03:04:15,920
console.log true or
3663
03:04:11,880 --> 03:04:19,399
false so this is the logical or operator
3664
03:04:15,920 --> 03:04:22,319
it checks if at least one side is true
3665
03:04:19,399 --> 03:04:24,319
so it checks if the left side is true or
3666
03:04:22,319 --> 03:04:26,319
the right side is true that's why it's
3667
03:04:24,319 --> 03:04:29,479
called the or
3668
03:04:26,319 --> 03:04:32,399
operator so here one of these sides is
3669
03:04:29,479 --> 03:04:34,359
true so the or operator will result in
3670
03:04:32,399 --> 03:04:37,359
true if we
3671
03:04:34,359 --> 03:04:40,840
save this displays
3672
03:04:37,359 --> 03:04:43,520
true if both sides are true it will also
3673
03:04:40,840 --> 03:04:44,560
result in true because at least one side
3674
03:04:43,520 --> 03:04:47,080
is
3675
03:04:44,560 --> 03:04:49,560
true the last logical operator we're
3676
03:04:47,080 --> 03:04:52,680
going to learn is called the not
3677
03:04:49,560 --> 03:04:55,200
operator for example let's create a new
3678
03:04:52,680 --> 03:04:59,960
line and type
3679
03:04:55,200 --> 03:05:03,080
console. log exclamation
3680
03:04:59,960 --> 03:05:06,680
true so the exclamation is called the
3681
03:05:03,080 --> 03:05:09,760
not operator the not operator only uses
3682
03:05:06,680 --> 03:05:13,000
one Boolean value and it flips it into
3683
03:05:09,760 --> 03:05:16,200
the opposite value so if this value is
3684
03:05:13,000 --> 03:05:18,680
true the not operator will flip it into
3685
03:05:16,200 --> 03:05:22,960
false so if we
3686
03:05:18,680 --> 03:05:25,080
save this will result in false now if
3687
03:05:22,960 --> 03:05:28,160
you think about it if we say that
3688
03:05:25,080 --> 03:05:30,720
something is not true that's the same
3689
03:05:28,160 --> 03:05:33,520
thing as saying that it is false so
3690
03:05:30,720 --> 03:05:38,279
that's why this is called the not
3691
03:05:33,520 --> 03:05:41,479
operator now if we change the value to
3692
03:05:38,279 --> 03:05:44,520
false again the not operator will flip
3693
03:05:41,479 --> 03:05:48,720
this into true so if we
3694
03:05:44,520 --> 03:05:51,960
save this will now result in true
3695
03:05:48,720 --> 03:05:54,160
so those are the logical or and not
3696
03:05:51,960 --> 03:05:56,239
operators we don't need to use these in
3697
03:05:54,160 --> 03:05:58,279
our project right now but I'll leave
3698
03:05:56,239 --> 03:06:01,239
some exercises for these at the end of
3699
03:05:58,279 --> 03:06:05,200
this lesson now let's go back and
3700
03:06:01,239 --> 03:06:07,920
continue the project let's open the code
3701
03:06:05,200 --> 03:06:11,200
and open the
3702
03:06:07,920 --> 03:06:14,080
tab the next step is to compare the
3703
03:06:11,200 --> 03:06:16,960
computer's move to our move which is
3704
03:06:14,080 --> 03:06:19,439
Rock so first let's save the computer's
3705
03:06:16,960 --> 03:06:22,040
move in a variable so we can compare it
3706
03:06:19,439 --> 03:06:23,880
later so instead of
3707
03:06:22,040 --> 03:06:25,760
console.log we're going to create a
3708
03:06:23,880 --> 03:06:27,279
variable with
3709
03:06:25,760 --> 03:06:31,399
const
3710
03:06:27,279 --> 03:06:33,920
computer capital M move and make it
3711
03:06:31,399 --> 03:06:36,760
equal to the string
3712
03:06:33,920 --> 03:06:43,040
Rock and we'll do the same thing
3713
03:06:36,760 --> 03:06:45,319
here const computer move equals
3714
03:06:43,040 --> 03:06:52,000
paper and
3715
03:06:45,319 --> 03:06:52,000
here const comp futter move equals
3716
03:06:52,640 --> 03:07:00,319
scissors and now at the bottom let's
3717
03:06:57,160 --> 03:07:02,239
console.log the computer move variable
3718
03:07:00,319 --> 03:07:05,840
to make sure that it
3719
03:07:02,239 --> 03:07:07,080
worked if we save and then click our
3720
03:07:05,840 --> 03:07:09,680
Rock
3721
03:07:07,080 --> 03:07:12,239
button unfortunately it gives us an
3722
03:07:09,680 --> 03:07:15,279
error telling us that computer move is
3723
03:07:12,239 --> 03:07:19,040
not defined even though we created it
3724
03:07:15,279 --> 03:07:21,560
right here so what is happening here if
3725
03:07:19,040 --> 03:07:25,600
statements have a special feature they
3726
03:07:21,560 --> 03:07:29,720
create something called a scope a scope
3727
03:07:25,600 --> 03:07:31,800
limits where a variable exists basically
3728
03:07:29,720 --> 03:07:35,160
whenever we have these curly brackets
3729
03:07:31,800 --> 03:07:37,800
like this any variable we create inside
3730
03:07:35,160 --> 03:07:40,680
the curly brackets will only exist
3731
03:07:37,800 --> 03:07:42,920
inside the curly brackets and we can't
3732
03:07:40,680 --> 03:07:46,479
use these variables outside the curly
3733
03:07:42,920 --> 03:07:48,880
brackets so this is called a scope
3734
03:07:46,479 --> 03:07:51,680
Scopes are a feature of many programming
3735
03:07:48,880 --> 03:07:55,120
languages and they help us avoid naming
3736
03:07:51,680 --> 03:08:00,279
conflicts for example if I create a
3737
03:07:55,120 --> 03:08:01,720
variable here called random number
3738
03:08:00,279 --> 03:08:05,479
equals
3739
03:08:01,720 --> 03:08:07,359
0.5 and this didn't create a scope so if
3740
03:08:05,479 --> 03:08:10,000
I delete these curly
3741
03:08:07,359 --> 03:08:12,960
brackets this variable name will now
3742
03:08:10,000 --> 03:08:14,920
conflict with the variable name up here
3743
03:08:12,960 --> 03:08:17,800
because we can't have two variables with
3744
03:08:14,920 --> 03:08:20,160
the same name so you can imagine that if
3745
03:08:17,800 --> 03:08:22,359
we didn't have scope and we had hundreds
3746
03:08:20,160 --> 03:08:23,920
or even thousands of lines of code we
3747
03:08:22,359 --> 03:08:26,840
would quickly start to run out of
3748
03:08:23,920 --> 03:08:30,239
variable names so by creating a new
3749
03:08:26,840 --> 03:08:33,080
scope here all the variable names inside
3750
03:08:30,239 --> 03:08:35,479
the scope only exist between the curly
3751
03:08:33,080 --> 03:08:39,399
brackets and it won't affect anything
3752
03:08:35,479 --> 03:08:41,640
outside in the code so Scopes help us
3753
03:08:39,399 --> 03:08:44,239
avoid naming
3754
03:08:41,640 --> 03:08:46,920
conflicts okay so I'll delete this
3755
03:08:44,239 --> 03:08:48,080
example and we'll learn how to access
3756
03:08:46,920 --> 03:08:51,840
this variable
3757
03:08:48,080 --> 03:08:54,560
outside of this scope so to access this
3758
03:08:51,840 --> 03:08:57,160
variable outside of the if statement we
3759
03:08:54,560 --> 03:09:00,560
have to create this variable outside of
3760
03:08:57,160 --> 03:09:03,479
the if statement so above
3761
03:09:00,560 --> 03:09:05,680
here we can create this
3762
03:09:03,479 --> 03:09:07,479
variable
3763
03:09:05,680 --> 03:09:10,600
const
3764
03:09:07,479 --> 03:09:13,239
computer move and let's just make it
3765
03:09:10,600 --> 03:09:16,680
equal to the empty string for
3766
03:09:13,239 --> 03:09:19,479
now so this variable was not created
3767
03:09:16,680 --> 03:09:22,279
inside any curly brackets so it's
3768
03:09:19,479 --> 03:09:25,640
accessible from all of this code inside
3769
03:09:22,279 --> 03:09:27,000
the onclick attribute including inside
3770
03:09:25,640 --> 03:09:29,160
the if
3771
03:09:27,000 --> 03:09:31,640
statement and then inside the if
3772
03:09:29,160 --> 03:09:33,800
statement instead of creating a new
3773
03:09:31,640 --> 03:09:36,800
variable we're just going to save the
3774
03:09:33,800 --> 03:09:38,960
move inside this variable up here
3775
03:09:36,800 --> 03:09:40,560
because we can access this variable
3776
03:09:38,960 --> 03:09:43,640
anywhere else in the
3777
03:09:40,560 --> 03:09:46,800
code so instead of using const we're
3778
03:09:43,640 --> 03:09:49,800
just going to reassign computer move and
3779
03:09:46,800 --> 03:09:51,040
we're going to move it here as well and
3780
03:09:49,800 --> 03:09:54,000
here as
3781
03:09:51,040 --> 03:09:59,040
well and remember when we reassign a
3782
03:09:54,000 --> 03:10:01,520
variable we have to switch from const to
3783
03:09:59,040 --> 03:10:04,560
let and now if we
3784
03:10:01,520 --> 03:10:07,640
save and then click the rock
3785
03:10:04,560 --> 03:10:10,760
button we're able to console.log
3786
03:10:07,640 --> 03:10:14,399
computer move because computer move is
3787
03:10:10,760 --> 03:10:17,960
no longer inside this scope it's up here
3788
03:10:14,399 --> 03:10:20,800
so we can access it in this line of code
3789
03:10:17,960 --> 03:10:23,560
so that's how scope Works any variable
3790
03:10:20,800 --> 03:10:26,960
that we create inside the curly brackets
3791
03:10:23,560 --> 03:10:29,239
will only exist inside the curly
3792
03:10:26,960 --> 03:10:31,120
brackets so remember in the previous
3793
03:10:29,239 --> 03:10:34,239
lesson we learned a third way of
3794
03:10:31,120 --> 03:10:35,960
creating variables called VAR the issue
3795
03:10:34,239 --> 03:10:39,600
with VAR is that it doesn't really
3796
03:10:35,960 --> 03:10:43,040
follow the rules of scope for example
3797
03:10:39,600 --> 03:10:45,720
here if we create a variable with VAR
3798
03:10:43,040 --> 03:10:48,000
like VAR and
3799
03:10:45,720 --> 03:10:50,239
random number
3800
03:10:48,000 --> 03:10:53,800
equals
3801
03:10:50,239 --> 03:10:56,760
0.5 this variable will conflict with the
3802
03:10:53,800 --> 03:10:59,760
variable up here with the same name even
3803
03:10:56,760 --> 03:11:02,200
though it's inside a scope so that's why
3804
03:10:59,760 --> 03:11:04,960
we don't use VAR anymore and we just use
3805
03:11:02,200 --> 03:11:08,080
const and let because of VAR doesn't
3806
03:11:04,960 --> 03:11:10,760
really follow the rules of scope so we
3807
03:11:08,080 --> 03:11:13,120
can remove this for now and move on to
3808
03:11:10,760 --> 03:11:13,120
the next
3809
03:11:13,520 --> 03:11:18,200
step so we generated a random move for
3810
03:11:16,760 --> 03:11:20,319
the computer
3811
03:11:18,200 --> 03:11:23,000
now we have to compare our move which is
3812
03:11:20,319 --> 03:11:26,439
Rock to the computer's move to get the
3813
03:11:23,000 --> 03:11:29,359
result and see who wins to do that we'll
3814
03:11:26,439 --> 03:11:33,279
use another if statement so at the
3815
03:11:29,359 --> 03:11:35,279
bottom here let's type if and then
3816
03:11:33,279 --> 03:11:38,760
brackets and curly
3817
03:11:35,279 --> 03:11:41,600
brackets and then inside this condition
3818
03:11:38,760 --> 03:11:48,120
let's check if the
3819
03:11:41,600 --> 03:11:50,560
computer move is equal to rock
3820
03:11:48,120 --> 03:11:53,000
so remember in JavaScript we always use
3821
03:11:50,560 --> 03:11:54,920
triple equals instead of double equals
3822
03:11:53,000 --> 03:11:57,439
to avoid the conversion
3823
03:11:54,920 --> 03:12:01,040
behavior and now if the computer's move
3824
03:11:57,439 --> 03:12:03,840
is rock and our move is Rock then inside
3825
03:12:01,040 --> 03:12:06,200
the curly brackets the result is going
3826
03:12:03,840 --> 03:12:08,680
to be a
3827
03:12:06,200 --> 03:12:12,160
tie and let's save the string in a
3828
03:12:08,680 --> 03:12:14,760
variable so we can use it later again we
3829
03:12:12,160 --> 03:12:16,800
have the same situation as before we
3830
03:12:14,760 --> 03:12:20,000
don't want to create the variable inside
3831
03:12:16,800 --> 03:12:23,200
here because then it only exists in this
3832
03:12:20,000 --> 03:12:25,680
scope between the curly brackets instead
3833
03:12:23,200 --> 03:12:28,560
we're going to create the variable above
3834
03:12:25,680 --> 03:12:31,120
outside the if statement so we'll use
3835
03:12:28,560 --> 03:12:33,200
let to create this variable because
3836
03:12:31,120 --> 03:12:36,479
we're going to reassign it in the if
3837
03:12:33,200 --> 03:12:39,279
statement let's name this variable
3838
03:12:36,479 --> 03:12:42,840
result and just make it equal to the
3839
03:12:39,279 --> 03:12:46,560
empty string at the top and then in the
3840
03:12:42,840 --> 03:12:48,200
if statement we'll save the result into
3841
03:12:46,560 --> 03:12:49,279
this variable
3842
03:12:48,200 --> 03:12:53,200
so
3843
03:12:49,279 --> 03:12:56,120
result equals
3844
03:12:53,200 --> 03:13:00,479
tie now let's create the other branches
3845
03:12:56,120 --> 03:13:04,479
of this if statement so here we'll add
3846
03:13:00,479 --> 03:13:07,840
else if brackets and curly
3847
03:13:04,479 --> 03:13:12,600
brackets and we'll check if the
3848
03:13:07,840 --> 03:13:16,120
computer move is equal to paper this
3849
03:13:12,600 --> 03:13:17,920
time if the computer move is paper and
3850
03:13:16,120 --> 03:13:22,279
we picked Rock
3851
03:13:17,920 --> 03:13:25,080
then we lose so the result is equal to
3852
03:13:22,279 --> 03:13:29,359
you
3853
03:13:25,080 --> 03:13:33,239
lose and finally we'll add another else
3854
03:13:29,359 --> 03:13:35,120
if brackets and curly brackets and we'll
3855
03:13:33,239 --> 03:13:40,760
check if the
3856
03:13:35,120 --> 03:13:43,080
computer move is equal to
3857
03:13:40,760 --> 03:13:47,200
scissors and if the computer picked
3858
03:13:43,080 --> 03:13:51,359
scissors and we pick Rock the result is
3859
03:13:47,200 --> 03:13:54,600
is that you
3860
03:13:51,359 --> 03:13:57,800
win so that's how we compare our move to
3861
03:13:54,600 --> 03:14:00,319
the computer's random move using an if
3862
03:13:57,800 --> 03:14:03,200
statement the last step is to display
3863
03:14:00,319 --> 03:14:06,680
this result in the
3864
03:14:03,200 --> 03:14:11,680
popup so at the bottom let's create a
3865
03:14:06,680 --> 03:14:14,040
popup using alert Open Bracket close
3866
03:14:11,680 --> 03:14:16,399
bracket and let's go back to super
3867
03:14:14,040 --> 03:14:20,000
simple Dev to see the message in the
3868
03:14:16,399 --> 03:14:22,800
popup so we'll click this and in the
3869
03:14:20,000 --> 03:14:25,640
popup it shows our move the computer's
3870
03:14:22,800 --> 03:14:27,840
move and then the result so we can
3871
03:14:25,640 --> 03:14:31,040
actually just copy
3872
03:14:27,840 --> 03:14:36,120
this rightclick
3873
03:14:31,040 --> 03:14:39,000
copy and then in here right click and
3874
03:14:36,120 --> 03:14:41,359
paste so obviously the computer is not
3875
03:14:39,000 --> 03:14:43,040
going to pick this move every time and
3876
03:14:41,359 --> 03:14:46,319
this is not going to be the same result
3877
03:14:43,040 --> 03:14:49,120
every time instead we want to insert
3878
03:14:46,319 --> 03:14:52,399
computer move into here and we want to
3879
03:14:49,120 --> 03:14:54,800
insert result into here so because we
3880
03:14:52,399 --> 03:14:57,319
want to insert values we're going to
3881
03:14:54,800 --> 03:14:59,600
turn this into a template string using
3882
03:14:57,319 --> 03:14:59,600
back
3883
03:14:59,840 --> 03:15:05,520
ticks and now instead of paper we're
3884
03:15:03,040 --> 03:15:08,439
going to insert a value using dollar and
3885
03:15:05,520 --> 03:15:10,359
curly brackets and we're going to insert
3886
03:15:08,439 --> 03:15:12,319
the variable
3887
03:15:10,359 --> 03:15:16,560
computer
3888
03:15:12,319 --> 03:15:17,960
move and instead of this text every time
3889
03:15:16,560 --> 03:15:21,880
we're going to
3890
03:15:17,960 --> 03:15:24,800
insert the variable
3891
03:15:21,880 --> 03:15:28,399
result and now if we
3892
03:15:24,800 --> 03:15:31,399
save and we can click okay to close this
3893
03:15:28,399 --> 03:15:32,359
and go back to our Tab and click the
3894
03:15:31,399 --> 03:15:34,960
rock
3895
03:15:32,359 --> 03:15:37,160
button we're going to pick Rock the
3896
03:15:34,960 --> 03:15:39,479
computer will pick a random move and it
3897
03:15:37,160 --> 03:15:41,840
will show us the result in a
3898
03:15:39,479 --> 03:15:45,279
popup so that's how we create this
3899
03:15:41,840 --> 03:15:48,840
simple version of rock paper scissors in
3900
03:15:45,279 --> 03:15:51,800
our code we did things step by step
3901
03:15:48,840 --> 03:15:54,279
first we generated a random number we
3902
03:15:51,800 --> 03:15:57,319
converted it into a move for the
3903
03:15:54,279 --> 03:15:59,760
computer and then we compared our move
3904
03:15:57,319 --> 03:16:01,600
to the computer move and we displayed
3905
03:15:59,760 --> 03:16:04,120
the result in a
3906
03:16:01,600 --> 03:16:06,640
popup so as you can see when we're
3907
03:16:04,120 --> 03:16:09,399
writing JavaScript we first figure out
3908
03:16:06,640 --> 03:16:12,199
what steps we need to do this is called
3909
03:16:09,399 --> 03:16:15,560
an algorithm and then we convert these
3910
03:16:12,199 --> 03:16:18,279
steps or this algorithm into
3911
03:16:15,560 --> 03:16:20,080
code so now now we can actually remove
3912
03:16:18,279 --> 03:16:22,279
this console.log because we don't need
3913
03:16:20,080 --> 03:16:22,279
it
3914
03:16:22,439 --> 03:16:28,160
anymore and the last step is to make the
3915
03:16:25,319 --> 03:16:29,800
other buttons here interactive so feel
3916
03:16:28,160 --> 03:16:31,439
free to pause this video if you want to
3917
03:16:29,800 --> 03:16:35,120
try it yourself
3918
03:16:31,439 --> 03:16:36,960
first for the paper button let's add
3919
03:16:35,120 --> 03:16:41,120
some new lines to make it a little
3920
03:16:36,960 --> 03:16:43,520
easier to read and again we'll add the
3921
03:16:41,120 --> 03:16:46,520
onclick
3922
03:16:43,520 --> 03:16:48,439
attribute and then inside here we can
3923
03:16:46,520 --> 03:16:51,560
actually make a copy of all the
3924
03:16:48,439 --> 03:16:53,199
JavaScript we wrote so we can select all
3925
03:16:51,560 --> 03:16:57,600
of
3926
03:16:53,199 --> 03:17:03,920
this and then write click
3927
03:16:57,600 --> 03:17:03,920
copy and then in here right click and
3928
03:17:04,760 --> 03:17:10,920
paste if the formatting doesn't look
3929
03:17:07,080 --> 03:17:15,479
right we can select all of these
3930
03:17:10,920 --> 03:17:18,840
lines and press tab to add indents until
3931
03:17:15,479 --> 03:17:18,840
the formatting looks good
3932
03:17:19,600 --> 03:17:24,439
the one thing we have to change here is
3933
03:17:21,479 --> 03:17:26,880
that now we picked paper so the result
3934
03:17:24,439 --> 03:17:30,760
is going to be different if the computer
3935
03:17:26,880 --> 03:17:32,520
picks Rock and we pick paper that means
3936
03:17:30,760 --> 03:17:36,800
you
3937
03:17:32,520 --> 03:17:40,720
win if the computer picks paper now it
3938
03:17:36,800 --> 03:17:45,040
means that we tie and if the computer
3939
03:17:40,720 --> 03:17:48,000
picks scissors that means you
3940
03:17:45,040 --> 03:17:51,160
lose and here what will also change up
3941
03:17:48,000 --> 03:17:54,560
pick Rock to
3942
03:17:51,160 --> 03:17:54,560
paper and that's
3943
03:17:55,680 --> 03:18:02,359
it the last step is to make the scissors
3944
03:17:58,399 --> 03:18:05,439
button interactive so again
3945
03:18:02,359 --> 03:18:07,840
onclick equals double
3946
03:18:05,439 --> 03:18:10,960
quotes and then we'll make a copy of the
3947
03:18:07,840 --> 03:18:13,520
code so I already have it so just write
3948
03:18:10,960 --> 03:18:16,560
click and
3949
03:18:13,520 --> 03:18:19,160
paste and then again select the code
3950
03:18:16,560 --> 03:18:21,239
that we need to fix the formatting for
3951
03:18:19,160 --> 03:18:25,000
and press
3952
03:18:21,239 --> 03:18:28,520
Tab and here we pick scissors so if the
3953
03:18:25,000 --> 03:18:32,880
computer picks Rock then the result is
3954
03:18:28,520 --> 03:18:36,880
you lose if the computer picks paper the
3955
03:18:32,880 --> 03:18:41,319
result is you win and if the computer
3956
03:18:36,880 --> 03:18:45,479
also picks scissors the result is a
3957
03:18:41,319 --> 03:18:47,640
tie and we'll change you pick Rock to
3958
03:18:45,479 --> 03:18:51,640
scissors
3959
03:18:47,640 --> 03:18:54,800
now if we save and try out our game if
3960
03:18:51,640 --> 03:18:56,920
we click Rock we're going to pick Rock
3961
03:18:54,800 --> 03:19:00,279
computer picks a random move and it will
3962
03:18:56,920 --> 03:19:01,960
show us the result here let's press okay
3963
03:19:00,279 --> 03:19:05,239
and try
3964
03:19:01,960 --> 03:19:06,120
paper this also works correctly let's
3965
03:19:05,239 --> 03:19:08,520
press
3966
03:19:06,120 --> 03:19:11,920
okay and click
3967
03:19:08,520 --> 03:19:14,560
scissors and this also works
3968
03:19:11,920 --> 03:19:16,720
correctly and that's it we just finished
3969
03:19:14,560 --> 03:19:18,560
creating a simple version of this rock
3970
03:19:16,720 --> 03:19:21,239
rock paper scissors
3971
03:19:18,560 --> 03:19:22,920
game in the rest of this lesson we're
3972
03:19:21,239 --> 03:19:24,800
going to learn more details about
3973
03:19:22,920 --> 03:19:28,359
booleans and if
3974
03:19:24,800 --> 03:19:31,600
statements let's go back to booleans
3975
03:19:28,359 --> 03:19:34,319
HTML and open the tab for this
3976
03:19:31,600 --> 03:19:37,319
file and let's comment out the previous
3977
03:19:34,319 --> 03:19:41,399
code using
3978
03:19:37,319 --> 03:19:43,080
slashstar and star slash and create some
3979
03:19:41,399 --> 03:19:44,880
new
3980
03:19:43,080 --> 03:19:48,160
lines the next thing we're going to
3981
03:19:44,880 --> 03:19:51,199
learn is called truthy and and falsy
3982
03:19:48,160 --> 03:19:55,319
values so if statements don't just work
3983
03:19:51,199 --> 03:19:57,319
with Boolean values like true and false
3984
03:19:55,319 --> 03:20:01,160
they actually work with any type of
3985
03:19:57,319 --> 03:20:06,640
value including numbers and strings for
3986
03:20:01,160 --> 03:20:09,880
example let's type if brackets and curly
3987
03:20:06,640 --> 03:20:12,359
brackets and inside this condition
3988
03:20:09,880 --> 03:20:16,319
instead of putting a Boolean value we're
3989
03:20:12,359 --> 03:20:21,199
going to put a number like five and then
3990
03:20:16,319 --> 03:20:24,880
in inside the curly brackets let's
3991
03:20:21,199 --> 03:20:27,000
console.log the string
3992
03:20:24,880 --> 03:20:30,120
truthy if we
3993
03:20:27,000 --> 03:20:33,199
save the number five behaves just like
3994
03:20:30,120 --> 03:20:37,040
true it causes the if statement to run
3995
03:20:33,199 --> 03:20:40,840
this code so we call this value a truthy
3996
03:20:37,040 --> 03:20:43,239
value because it behaves just like true
3997
03:20:40,840 --> 03:20:48,319
now let's change this value to a
3998
03:20:43,239 --> 03:20:51,199
different number zero if we say
3999
03:20:48,319 --> 03:20:53,640
the number zero behaves just like false
4000
03:20:51,199 --> 03:20:57,120
it causes the if statement to not run
4001
03:20:53,640 --> 03:21:00,760
this code we call this value zero a
4002
03:20:57,120 --> 03:21:03,720
falsy value because it behaves just like
4003
03:21:00,760 --> 03:21:07,840
false so how do we know if a value is
4004
03:21:03,720 --> 03:21:11,399
truthy or falsy in JavaScript the list
4005
03:21:07,840 --> 03:21:16,199
of falsy values are false the number
4006
03:21:11,399 --> 03:21:17,760
zero the empty string Nan undefined and
4007
03:21:16,199 --> 03:21:20,359
null
4008
03:21:17,760 --> 03:21:21,960
any value that is not on this list is a
4009
03:21:20,359 --> 03:21:25,880
truthy
4010
03:21:21,960 --> 03:21:28,680
value so why do we use truthy and falsy
4011
03:21:25,880 --> 03:21:32,680
values one way we use them is like a
4012
03:21:28,680 --> 03:21:36,279
shortcut in our code for example let's
4013
03:21:32,680 --> 03:21:40,279
create a variable at the bottom using
4014
03:21:36,279 --> 03:21:44,199
const and let's call it cart
4015
03:21:40,279 --> 03:21:48,520
quantity and make it equal to
4016
03:21:44,199 --> 03:21:52,359
five next let's create an if statement
4017
03:21:48,520 --> 03:21:57,439
if brackets and curly brackets and
4018
03:21:52,359 --> 03:22:03,239
inside the curly brackets let's type
4019
03:21:57,439 --> 03:22:03,239
console.log the string cart has
4020
03:22:03,560 --> 03:22:09,199
products now let's say that we only want
4021
03:22:06,000 --> 03:22:12,600
to display this message if our cart has
4022
03:22:09,199 --> 03:22:17,080
products usually inside this condition
4023
03:22:12,600 --> 03:22:20,800
we would check if cart quantity
4024
03:22:17,080 --> 03:22:23,040
is greater than zero but now instead of
4025
03:22:20,800 --> 03:22:26,239
doing this comparison we can actually
4026
03:22:23,040 --> 03:22:29,560
just type cart quantity and it will
4027
03:22:26,239 --> 03:22:32,760
behave the same way if the card quantity
4028
03:22:29,560 --> 03:22:36,160
is not zero they will both behave like
4029
03:22:32,760 --> 03:22:39,920
true if the card quantity is zero they
4030
03:22:36,160 --> 03:22:42,920
will both behave like false so here the
4031
03:22:39,920 --> 03:22:45,000
card quantity is five which is a truthy
4032
03:22:42,920 --> 03:22:48,279
value if we
4033
03:22:45,000 --> 03:22:51,199
save this caus the if statement to run
4034
03:22:48,279 --> 03:22:54,080
this code as you can see instead of
4035
03:22:51,199 --> 03:22:56,640
doing comparisons we can use truthy and
4036
03:22:54,080 --> 03:22:59,560
falsey values as
4037
03:22:56,640 --> 03:23:03,720
shortcuts truthy and falsy values also
4038
03:22:59,560 --> 03:23:07,199
work with logical operators for example
4039
03:23:03,720 --> 03:23:07,199
if we
4040
03:23:07,600 --> 03:23:11,680
console.log the not operator and the
4041
03:23:10,479 --> 03:23:15,520
number
4042
03:23:11,680 --> 03:23:18,560
zero zero is a falsy value it behaves
4043
03:23:15,520 --> 03:23:21,560
just like false so the not operator will
4044
03:23:18,560 --> 03:23:24,439
flip it into true if we
4045
03:23:21,560 --> 03:23:27,439
save this will display
4046
03:23:24,439 --> 03:23:30,359
true now that we understand truthy and
4047
03:23:27,439 --> 03:23:32,359
falsy values let's go over the list of
4048
03:23:30,359 --> 03:23:34,840
falsy values because there are some that
4049
03:23:32,359 --> 03:23:39,120
we haven't learned yet we already
4050
03:23:34,840 --> 03:23:42,439
learned false zero and the empty string
4051
03:23:39,120 --> 03:23:43,680
the next falsy value is Nan which means
4052
03:23:42,439 --> 03:23:47,160
not a
4053
03:23:43,680 --> 03:23:51,520
number we get Nan if we do some invalid
4054
03:23:47,160 --> 03:23:54,439
math for example at the bottom let's
4055
03:23:51,520 --> 03:23:57,160
type
4056
03:23:54,439 --> 03:24:00,560
console.log the string
4057
03:23:57,160 --> 03:24:04,880
text divided by the number
4058
03:24:00,560 --> 03:24:08,199
five so obviously this is not valid math
4059
03:24:04,880 --> 03:24:11,120
if we save JavaScript will tell us that
4060
03:24:08,199 --> 03:24:12,760
the result of this calculation is not a
4061
03:24:11,120 --> 03:24:16,920
number or
4062
03:24:12,760 --> 03:24:18,960
Nan the next falsy value is undefined
4063
03:24:16,920 --> 03:24:22,760
undefined represents that something
4064
03:24:18,960 --> 03:24:26,199
doesn't have a value for example at the
4065
03:24:22,760 --> 03:24:30,279
bottom if we create a variable with
4066
03:24:26,199 --> 03:24:33,199
let variable one and we don't give it a
4067
03:24:30,279 --> 03:24:36,800
value and then we
4068
03:24:33,199 --> 03:24:36,800
console. log this
4069
03:24:37,160 --> 03:24:42,680
variable and we
4070
03:24:39,479 --> 03:24:45,720
save it will show us that variable one
4071
03:24:42,680 --> 03:24:48,520
contains the value undefined so
4072
03:24:45,720 --> 03:24:50,359
undefined represents that this variable
4073
03:24:48,520 --> 03:24:53,239
doesn't have a
4074
03:24:50,359 --> 03:24:55,640
value one thing to note with undefined
4075
03:24:53,239 --> 03:24:58,920
is that we can only use this syntax with
4076
03:24:55,640 --> 03:25:01,479
let we can't use it with
4077
03:24:58,920 --> 03:25:05,920
const if we really want to use this with
4078
03:25:01,479 --> 03:25:08,000
const we have to type out equals
4079
03:25:05,920 --> 03:25:11,560
undefined
4080
03:25:08,000 --> 03:25:13,479
directly the last faly value is null
4081
03:25:11,560 --> 03:25:15,279
we'll need some extra knowledge to
4082
03:25:13,479 --> 03:25:17,840
understand null so we'll learn about
4083
03:25:15,279 --> 03:25:19,680
null later in in this
4084
03:25:17,840 --> 03:25:22,160
course the last thing we're going to
4085
03:25:19,680 --> 03:25:24,960
learn in this lesson are some shortcuts
4086
03:25:22,160 --> 03:25:27,680
for if statements called the Turner
4087
03:25:24,960 --> 03:25:29,120
operator the guard operator and the
4088
03:25:27,680 --> 03:25:31,840
default
4089
03:25:29,120 --> 03:25:33,960
operator first let's comment out this
4090
03:25:31,840 --> 03:25:38,319
code so our console doesn't get too
4091
03:25:33,960 --> 03:25:40,000
messy SL star and then at the bottom
4092
03:25:38,319 --> 03:25:43,199
star
4093
03:25:40,000 --> 03:25:46,680
slash and let's scroll down and we'll
4094
03:25:43,199 --> 03:25:49,840
start by learning the Turner operator
4095
03:25:46,680 --> 03:25:53,960
we're going to type a Boolean value like
4096
03:25:49,840 --> 03:25:56,439
true and question mark another value for
4097
03:25:53,960 --> 03:26:00,560
example the string
4098
03:25:56,439 --> 03:26:02,840
truthy and then colon and another value
4099
03:26:00,560 --> 03:26:06,760
like the string
4100
03:26:02,840 --> 03:26:10,080
falsy so this is the Turner operator
4101
03:26:06,760 --> 03:26:13,160
this is similar to an if else statement
4102
03:26:10,080 --> 03:26:15,920
the first value is like the condition if
4103
03:26:13,160 --> 03:26:18,760
it's truthy the result of this code is a
4104
03:26:15,920 --> 03:26:21,640
value after the question mark if the
4105
03:26:18,760 --> 03:26:25,239
first value is falsy the result of this
4106
03:26:21,640 --> 03:26:27,760
code is the value after the colon so you
4107
03:26:25,239 --> 03:26:31,880
can think of the question mark as the if
4108
03:26:27,760 --> 03:26:34,199
branch and the colon as the else Branch
4109
03:26:31,880 --> 03:26:36,640
this is sort of like a shortcut for an
4110
03:26:34,199 --> 03:26:39,399
if statement like
4111
03:26:36,640 --> 03:26:41,960
this now an advantage of the Turner
4112
03:26:39,399 --> 03:26:45,520
operator over an if statement is that we
4113
03:26:41,960 --> 03:26:46,960
can save a tary operator in a variable
4114
03:26:45,520 --> 03:26:48,800
so at the front
4115
03:26:46,960 --> 03:26:52,439
we can do
4116
03:26:48,800 --> 03:26:56,399
const result
4117
03:26:52,439 --> 03:26:58,840
equals and now if we
4118
03:26:56,399 --> 03:27:01,439
console.log the
4119
03:26:58,840 --> 03:27:04,800
result and
4120
03:27:01,439 --> 03:27:07,279
save the first value is true so the
4121
03:27:04,800 --> 03:27:08,760
value after the question mark gets saved
4122
03:27:07,279 --> 03:27:11,800
in the
4123
03:27:08,760 --> 03:27:14,920
variable as always we can use truthy and
4124
03:27:11,800 --> 03:27:18,160
falsy values instead of just true and
4125
03:27:14,920 --> 03:27:22,399
false so here if we change the first
4126
03:27:18,160 --> 03:27:25,680
value to a falsy value like zero this
4127
03:27:22,399 --> 03:27:29,239
will cause the value after the colon to
4128
03:27:25,680 --> 03:27:33,359
get saved inside the variable if we
4129
03:27:29,239 --> 03:27:35,880
save that's exactly what happens so this
4130
03:27:33,359 --> 03:27:40,680
is the turnery operator it's sort of a
4131
03:27:35,880 --> 03:27:43,720
shortcut for an if else statement like
4132
03:27:40,680 --> 03:27:47,120
this the next shortcut is called the
4133
03:27:43,720 --> 03:27:50,319
guard operator earlier in this lesson we
4134
03:27:47,120 --> 03:27:52,239
learned the and operator which checks if
4135
03:27:50,319 --> 03:27:55,199
two sides are both
4136
03:27:52,239 --> 03:27:57,600
truthy the and operator has a special
4137
03:27:55,199 --> 03:28:00,479
feature let's say we have an and
4138
03:27:57,600 --> 03:28:04,000
operator and the left side is
4139
03:28:00,479 --> 03:28:06,479
false in this situation we already know
4140
03:28:04,000 --> 03:28:09,239
it's impossible for both sides to be
4141
03:28:06,479 --> 03:28:12,560
truthy so we don't even need to check
4142
03:28:09,239 --> 03:28:15,120
the right side so the and operator
4143
03:28:12,560 --> 03:28:18,239
actually stops early and doesn't even
4144
03:28:15,120 --> 03:28:19,920
run the code on the right this is called
4145
03:28:18,239 --> 03:28:23,319
a shortcircuit
4146
03:28:19,920 --> 03:28:26,439
evaluation for example let's go into our
4147
03:28:23,319 --> 03:28:28,120
code and create some new lines and we'll
4148
03:28:26,439 --> 03:28:29,720
type
4149
03:28:28,120 --> 03:28:31,359
false
4150
03:28:29,720 --> 03:28:33,160
and
4151
03:28:31,359 --> 03:28:36,080
console.
4152
03:28:33,160 --> 03:28:38,239
log
4153
03:28:36,080 --> 03:28:42,239
hello if we
4154
03:28:38,239 --> 03:28:45,439
save the left side is falsy so the and
4155
03:28:42,239 --> 03:28:47,880
operator stops early or short circuits
4156
03:28:45,439 --> 03:28:51,080
and it doesn't even run the code on the
4157
03:28:47,880 --> 03:28:54,479
right so as you can see we can use the
4158
03:28:51,080 --> 03:28:57,439
value on the left to block or guard the
4159
03:28:54,479 --> 03:29:01,279
code on the right so when we use the and
4160
03:28:57,439 --> 03:29:04,160
operator like this we call it the guard
4161
03:29:01,279 --> 03:29:07,160
operator this is sort of like a shortcut
4162
03:29:04,160 --> 03:29:10,359
for an if statement like
4163
03:29:07,160 --> 03:29:12,920
this and just like the Turner operator
4164
03:29:10,359 --> 03:29:16,399
we can save the guard operator in a
4165
03:29:12,920 --> 03:29:19,279
variable for example let's create a
4166
03:29:16,399 --> 03:29:23,640
variable const
4167
03:29:19,279 --> 03:29:27,960
message and make it equal to
4168
03:29:23,640 --> 03:29:31,319
false and the string
4169
03:29:27,960 --> 03:29:34,040
hello if the first value is falsy the
4170
03:29:31,319 --> 03:29:38,640
guard operator will stop early and the
4171
03:29:34,040 --> 03:29:42,000
result will be the first value if we
4172
03:29:38,640 --> 03:29:44,319
console. log this
4173
03:29:42,000 --> 03:29:47,359
message and
4174
03:29:44,319 --> 03:29:48,680
save the value f false will be saved
4175
03:29:47,359 --> 03:29:51,239
inside this
4176
03:29:48,680 --> 03:29:55,680
variable now let's change this value to
4177
03:29:51,239 --> 03:29:58,000
a truthy value like the number five now
4178
03:29:55,680 --> 03:30:01,760
it will not stop early and it will give
4179
03:29:58,000 --> 03:30:05,040
us the second value as the result if we
4180
03:30:01,760 --> 03:30:06,600
save the string hello is now saved
4181
03:30:05,040 --> 03:30:09,479
inside this
4182
03:30:06,600 --> 03:30:12,760
variable this is sort of like a shortcut
4183
03:30:09,479 --> 03:30:15,199
for an if statement like this so don't
4184
03:30:12,760 --> 03:30:17,279
worry if it's a bit confusing all of
4185
03:30:15,199 --> 03:30:19,600
these are just shortcuts for an if
4186
03:30:17,279 --> 03:30:23,279
statement they're sort of like an if
4187
03:30:19,600 --> 03:30:26,279
statement that we can write on a single
4188
03:30:23,279 --> 03:30:28,920
line the last shortcut is called the
4189
03:30:26,279 --> 03:30:31,359
default operator which is similar to the
4190
03:30:28,920 --> 03:30:34,479
guard operator but uses
4191
03:30:31,359 --> 03:30:37,760
or earlier in this lesson we learned the
4192
03:30:34,479 --> 03:30:41,319
or operator which checks if at least one
4193
03:30:37,760 --> 03:30:44,600
side is truthy let's imagine we have an
4194
03:30:41,319 --> 03:30:47,880
or operator and the left side is
4195
03:30:44,600 --> 03:30:50,439
true in this situation we already know
4196
03:30:47,880 --> 03:30:53,279
the result of the or operator because
4197
03:30:50,439 --> 03:30:56,520
the left side is already truthy we don't
4198
03:30:53,279 --> 03:30:59,680
even need to check the right side so the
4199
03:30:56,520 --> 03:31:03,600
or operator also stops early or short
4200
03:30:59,680 --> 03:31:07,000
circuits if the first value is truthy
4201
03:31:03,600 --> 03:31:09,199
for example let's create some new lines
4202
03:31:07,000 --> 03:31:11,960
and let's say that in our final Amazon
4203
03:31:09,199 --> 03:31:15,319
Project we can choose a currency to pay
4204
03:31:11,960 --> 03:31:16,600
for our order let's create a variable
4205
03:31:15,319 --> 03:31:20,640
with
4206
03:31:16,600 --> 03:31:23,880
const currency and make it equal to the
4207
03:31:20,640 --> 03:31:26,399
string e or
4208
03:31:23,880 --> 03:31:29,160
Euros now let's say that choosing a
4209
03:31:26,399 --> 03:31:32,199
currency is optional if we don't choose
4210
03:31:29,160 --> 03:31:36,279
a currency we'll use a default value of
4211
03:31:32,199 --> 03:31:39,359
USD or United States dollars to create a
4212
03:31:36,279 --> 03:31:44,359
default value we can go to the end and
4213
03:31:39,359 --> 03:31:46,560
type or the string
4214
03:31:44,359 --> 03:31:49,439
USD so here
4215
03:31:46,560 --> 03:31:52,160
the left side is truthy so the or
4216
03:31:49,439 --> 03:31:54,960
operator will stop early and it will
4217
03:31:52,160 --> 03:31:58,000
result in the value on the
4218
03:31:54,960 --> 03:32:01,640
left if we
4219
03:31:58,000 --> 03:32:03,479
console. log the
4220
03:32:01,640 --> 03:32:06,319
currency and
4221
03:32:03,479 --> 03:32:08,720
save it will display
4222
03:32:06,319 --> 03:32:11,720
Euros now let's say that we didn't
4223
03:32:08,720 --> 03:32:13,840
choose a currency because it's optional
4224
03:32:11,720 --> 03:32:17,840
so let's go here and we're going to
4225
03:32:13,840 --> 03:32:17,840
change this currency to
4226
03:32:17,880 --> 03:32:24,199
undefined now the left side is falsy so
4227
03:32:21,479 --> 03:32:26,520
the or operator does not short circuit
4228
03:32:24,199 --> 03:32:30,000
it will continue and the result will be
4229
03:32:26,520 --> 03:32:34,720
the value on the right if we
4230
03:32:30,000 --> 03:32:37,479
save now the string USD is saved inside
4231
03:32:34,720 --> 03:32:41,199
currency as you can see we can use the
4232
03:32:37,479 --> 03:32:43,840
or operator to set a default value so
4233
03:32:41,199 --> 03:32:47,120
when we use the or operator like this we
4234
03:32:43,840 --> 03:32:49,199
call it the default operator
4235
03:32:47,120 --> 03:32:52,600
the default operator is sort of a
4236
03:32:49,199 --> 03:32:55,439
shortcut for an if statement like
4237
03:32:52,600 --> 03:32:57,120
this so don't worry remember that
4238
03:32:55,439 --> 03:33:00,160
everything that we learned in this last
4239
03:32:57,120 --> 03:33:02,920
section are basically some shortcuts for
4240
03:33:00,160 --> 03:33:05,080
if statements we don't have to use them
4241
03:33:02,920 --> 03:33:08,120
but they can save us some
4242
03:33:05,080 --> 03:33:10,439
typing and that's the end of this lesson
4243
03:33:08,120 --> 03:33:13,199
in this lesson we learned about booleans
4244
03:33:10,439 --> 03:33:16,120
and if statements Boolean values
4245
03:33:13,199 --> 03:33:18,399
represent whether something is true or
4246
03:33:16,120 --> 03:33:21,160
false we learned how to use if
4247
03:33:18,399 --> 03:33:23,439
statements to make decisions in our code
4248
03:33:21,160 --> 03:33:26,199
we learn how to use comparison and
4249
03:33:23,439 --> 03:33:28,920
logical operators we learned about
4250
03:33:26,199 --> 03:33:32,080
algorithms and created a simple version
4251
03:33:28,920 --> 03:33:35,640
of rock paper scissors we learned about
4252
03:33:32,080 --> 03:33:38,359
truthy and falsey values and we learned
4253
03:33:35,640 --> 03:33:41,279
some shortcuts for if statements the
4254
03:33:38,359 --> 03:33:44,040
turnery operator the guard operator and
4255
03:33:41,279 --> 03:33:46,560
the default operator here are some
4256
03:33:44,040 --> 03:33:49,160
exercises to help you practice booleans
4257
03:33:46,560 --> 03:33:49,160
and if
4258
03:34:14,479 --> 03:34:18,880
statements in this lesson we're going to
4259
03:34:16,880 --> 03:34:21,560
learn the next feature of JavaScript
4260
03:34:18,880 --> 03:34:24,080
called functions and we're going to use
4261
03:34:21,560 --> 03:34:27,600
functions to improve our rock paper
4262
03:34:24,080 --> 03:34:30,560
scissors project first let's create a
4263
03:34:27,600 --> 03:34:31,439
new file for this lesson we'll go to our
4264
03:34:30,560 --> 03:34:34,520
code
4265
03:34:31,439 --> 03:34:38,760
editor and create a new
4266
03:34:34,520 --> 03:34:41,359
file and let's name this file
4267
03:34:38,760 --> 03:34:43,120
07-
4268
03:34:41,359 --> 03:34:46,800
functions.
4269
03:34:43,120 --> 03:34:50,439
HTML and press enter
4270
03:34:46,800 --> 03:34:55,160
next let's copy booleans HTML to
4271
03:34:50,439 --> 03:34:57,279
functions. HTML so we'll click this file
4272
03:34:55,160 --> 03:34:59,479
and then select all this code using
4273
03:34:57,279 --> 03:35:03,760
control a or command
4274
03:34:59,479 --> 03:35:05,760
a and then right click
4275
03:35:03,760 --> 03:35:10,319
copy and in
4276
03:35:05,760 --> 03:35:13,760
here rightclick and
4277
03:35:10,319 --> 03:35:16,600
paste and we'll hide our files and
4278
03:35:13,760 --> 03:35:21,800
prepare this file for this lesson
4279
03:35:16,600 --> 03:35:24,399
so at the top we'll change the title to
4280
03:35:21,800 --> 03:35:27,199
functions and we'll remove all the code
4281
03:35:24,399 --> 03:35:27,199
in the script
4282
03:35:28,279 --> 03:35:33,040
element and let's
4283
03:35:30,359 --> 03:35:34,880
save and we'll open this file in live
4284
03:35:33,040 --> 03:35:38,120
server by
4285
03:35:34,880 --> 03:35:40,359
right-clicking open with live
4286
03:35:38,120 --> 03:35:42,960
server and we're going to open the
4287
03:35:40,359 --> 03:35:45,960
console as well so right
4288
03:35:42,960 --> 03:35:47,960
click inspect
4289
03:35:45,960 --> 03:35:50,760
and then click the
4290
03:35:47,960 --> 03:35:53,160
console and finally we can close the
4291
03:35:50,760 --> 03:35:57,439
previous
4292
03:35:53,160 --> 03:35:57,439
tabs as well as the previous
4293
03:35:58,800 --> 03:36:05,640
code okay now we're ready to learn
4294
03:36:02,560 --> 03:36:10,160
functions first of all what is a
4295
03:36:05,640 --> 03:36:13,239
function a function lets us reuse code
4296
03:36:10,160 --> 03:36:16,120
let's create our first function we're
4297
03:36:13,239 --> 03:36:18,720
going to go to the script element
4298
03:36:16,120 --> 03:36:20,680
and type the word
4299
03:36:18,720 --> 03:36:25,080
function and
4300
03:36:20,680 --> 03:36:27,120
space so this creates a new function and
4301
03:36:25,080 --> 03:36:29,560
then we're going to give a name to our
4302
03:36:27,120 --> 03:36:33,520
function we can name it almost anything
4303
03:36:29,560 --> 03:36:36,399
we want but for now let's just name it
4304
03:36:33,520 --> 03:36:40,239
function one and then we're going to
4305
03:36:36,399 --> 03:36:43,040
type round brackets and curly
4306
03:36:40,239 --> 03:36:45,080
brackets then inside these curly
4307
03:36:43,040 --> 03:36:46,120
brackets we're going to create a new
4308
03:36:45,080 --> 03:36:51,319
line
4309
03:36:46,120 --> 03:36:51,319
and we're going to type some code so
4310
03:36:52,239 --> 03:36:59,960
console.log the string
4311
03:36:55,199 --> 03:36:59,960
hello and we'll also type
4312
03:37:00,239 --> 03:37:06,239
console.log 2 +
4313
03:37:03,720 --> 03:37:09,880
2 and
4314
03:37:06,239 --> 03:37:12,760
save so this creates a function now
4315
03:37:09,880 --> 03:37:16,040
let's learn how to use this function
4316
03:37:12,760 --> 03:37:18,880
we're going to type at the bottom
4317
03:37:16,040 --> 03:37:22,560
the function name so
4318
03:37:18,880 --> 03:37:24,239
function one and then Open Bracket close
4319
03:37:22,560 --> 03:37:27,160
bracket and
4320
03:37:24,239 --> 03:37:30,439
semicolon when we type the function name
4321
03:37:27,160 --> 03:37:33,840
with brackets this will run the code
4322
03:37:30,439 --> 03:37:36,760
inside the function if we
4323
03:37:33,840 --> 03:37:39,359
save notice that it runs the code inside
4324
03:37:36,760 --> 03:37:40,439
the function and displays the two lines
4325
03:37:39,359 --> 03:37:43,960
in the
4326
03:37:40,439 --> 03:37:47,239
console so why do we use functions a
4327
03:37:43,960 --> 03:37:49,319
function lets us reuse code so if we
4328
03:37:47,239 --> 03:37:52,000
wanted to run both these lines of code
4329
03:37:49,319 --> 03:37:55,760
again all we have to do is type the
4330
03:37:52,000 --> 03:38:01,080
function name again with brackets so
4331
03:37:55,760 --> 03:38:03,840
function one and brackets again if we
4332
03:38:01,080 --> 03:38:07,199
save this will run the code inside the
4333
03:38:03,840 --> 03:38:10,199
function two times and we can reuse this
4334
03:38:07,199 --> 03:38:13,520
code as many times as we want by typing
4335
03:38:10,199 --> 03:38:16,120
the function name with brackets so
4336
03:38:13,520 --> 03:38:19,439
that's what a function is it lets us
4337
03:38:16,120 --> 03:38:22,680
reuse code now let's learn the syntax
4338
03:38:19,439 --> 03:38:24,399
rules for functions the word function
4339
03:38:22,680 --> 03:38:27,120
creates a new
4340
03:38:24,399 --> 03:38:29,520
function and then we choose a name for
4341
03:38:27,120 --> 03:38:32,720
our function the rules for function
4342
03:38:29,520 --> 03:38:36,239
names are the same as variable names we
4343
03:38:32,720 --> 03:38:39,120
can't use special words like function we
4344
03:38:36,239 --> 03:38:41,640
can't start with a number and we can't
4345
03:38:39,120 --> 03:38:44,840
use special characters although dollar
4346
03:38:41,640 --> 03:38:47,080
sign and underscore are allowed and just
4347
03:38:44,840 --> 03:38:50,239
like variable names the best practice is
4348
03:38:47,080 --> 03:38:53,920
to use camo case for function
4349
03:38:50,239 --> 03:38:56,319
names and inside these curly brackets we
4350
03:38:53,920 --> 03:38:58,920
put the code that we want to run when we
4351
03:38:56,319 --> 03:39:02,199
use the function this is called the
4352
03:38:58,920 --> 03:39:05,760
function body now one very important
4353
03:39:02,199 --> 03:39:08,439
thing to remember is that this code only
4354
03:39:05,760 --> 03:39:12,000
creates a function it doesn't run the
4355
03:39:08,439 --> 03:39:14,479
code in the function or do anything else
4356
03:39:12,000 --> 03:39:18,040
in order to actually run the code we
4357
03:39:14,479 --> 03:39:20,960
have to use the function like below by
4358
03:39:18,040 --> 03:39:23,720
typing the function name with
4359
03:39:20,960 --> 03:39:26,319
brackets this is known as calling the
4360
03:39:23,720 --> 03:39:28,960
function it's also known as running the
4361
03:39:26,319 --> 03:39:31,359
function or executing the
4362
03:39:28,960 --> 03:39:34,520
function now that we learned the syntax
4363
03:39:31,359 --> 03:39:37,160
rules for functions let's do a practical
4364
03:39:34,520 --> 03:39:39,120
example we're going to use functions to
4365
03:39:37,160 --> 03:39:42,840
improve the code of our rock paper
4366
03:39:39,120 --> 03:39:45,720
scissors project first let's click here
4367
03:39:42,840 --> 03:39:48,239
to show our files and we're actually
4368
03:39:45,720 --> 03:39:50,720
going to make a copy of the project just
4369
03:39:48,239 --> 03:39:52,479
for this lesson so we're going to
4370
03:39:50,720 --> 03:39:54,239
rightclick this
4371
03:39:52,479 --> 03:39:58,120
file
4372
03:39:54,239 --> 03:39:59,720
copy and then at the bottom right click
4373
03:39:58,120 --> 03:40:02,040
and
4374
03:39:59,720 --> 03:40:05,800
paste and we're going to rename this
4375
03:40:02,040 --> 03:40:09,680
file so rightclick
4376
03:40:05,800 --> 03:40:13,080
rename remove copy at the end and then
4377
03:40:09,680 --> 03:40:16,920
at the beginning we'll change this to
4378
03:40:13,080 --> 03:40:19,319
07 and press enter
4379
03:40:16,920 --> 03:40:23,040
next we're going to open this file in
4380
03:40:19,319 --> 03:40:25,600
live server by right clicking and then
4381
03:40:23,040 --> 03:40:28,479
open with live
4382
03:40:25,600 --> 03:40:32,600
server and let's also open the console
4383
03:40:28,479 --> 03:40:36,080
on this page we'll right click
4384
03:40:32,600 --> 03:40:39,279
inspect and then click the
4385
03:40:36,080 --> 03:40:43,160
console all right now if we look at the
4386
03:40:39,279 --> 03:40:45,560
code for generating a computer move
4387
03:40:43,160 --> 03:40:47,160
you'll notice that this code is the same
4388
03:40:45,560 --> 03:40:50,239
for all three
4389
03:40:47,160 --> 03:40:53,359
buttons so this is a perfect situation
4390
03:40:50,239 --> 03:40:57,560
to use a function because a function
4391
03:40:53,359 --> 03:41:00,199
lets us reuse code so let's scroll down
4392
03:40:57,560 --> 03:41:04,920
to the script element and we're going to
4393
03:41:00,199 --> 03:41:08,239
make a function here so let's type
4394
03:41:04,920 --> 03:41:10,359
function and then a function name let's
4395
03:41:08,239 --> 03:41:12,080
name this function
4396
03:41:10,359 --> 03:41:15,880
pick
4397
03:41:12,080 --> 03:41:19,160
computer move and then brackets and
4398
03:41:15,880 --> 03:41:22,120
curly brackets so one recommendation for
4399
03:41:19,160 --> 03:41:25,199
function names is to use a verb or an
4400
03:41:22,120 --> 03:41:28,239
action in the name such as
4401
03:41:25,199 --> 03:41:31,640
pick so next we're going to move all the
4402
03:41:28,239 --> 03:41:34,840
code for picking a computer move into
4403
03:41:31,640 --> 03:41:38,199
our new function so let's create a new
4404
03:41:34,840 --> 03:41:40,279
line here and we'll scroll up to the
4405
03:41:38,199 --> 03:41:43,239
scissors button because it's the closest
4406
03:41:40,279 --> 03:41:46,520
one and we'll select all of this code
4407
03:41:43,239 --> 03:41:48,880
for picking a computer move and then
4408
03:41:46,520 --> 03:41:51,760
rightclick
4409
03:41:48,880 --> 03:41:56,560
cut and inside the
4410
03:41:51,760 --> 03:41:59,479
function right click and
4411
03:41:56,560 --> 03:42:02,520
paste if we need to fix the formatting
4412
03:41:59,479 --> 03:42:04,159
we can select these lines and press tab
4413
03:42:02,520 --> 03:42:06,720
to add
4414
03:42:04,159 --> 03:42:08,800
indents so the reason we created this
4415
03:42:06,720 --> 03:42:10,880
function in the script element is
4416
03:42:08,800 --> 03:42:13,800
because remember that the script element
4417
03:42:10,880 --> 03:42:16,040
runs when the page is loaded so we want
4418
03:42:13,800 --> 03:42:19,600
to make sure that we create the function
4419
03:42:16,040 --> 03:42:22,680
first and then we use it in the buttons
4420
03:42:19,600 --> 03:42:25,159
after now remember this code just
4421
03:42:22,680 --> 03:42:27,920
creates a function it doesn't actually
4422
03:42:25,159 --> 03:42:31,279
run the code inside to run the code
4423
03:42:27,920 --> 03:42:33,520
inside we're going to call this function
4424
03:42:31,279 --> 03:42:36,199
so let's scroll up to the scissors
4425
03:42:33,520 --> 03:42:39,800
button and we're going to call this
4426
03:42:36,199 --> 03:42:44,880
function by typing the function name
4427
03:42:39,800 --> 03:42:46,800
pick computer move Open Bracket close
4428
03:42:44,880 --> 03:42:49,000
bracket ET and
4429
03:42:46,800 --> 03:42:52,199
semicolon if we
4430
03:42:49,000 --> 03:42:55,239
save and then click the scissors
4431
03:42:52,199 --> 03:42:58,199
button unfortunately it now gives us an
4432
03:42:55,239 --> 03:43:00,720
error saying computer move is not
4433
03:42:58,199 --> 03:43:03,760
defined now this might seem weird
4434
03:43:00,720 --> 03:43:06,920
because down here we actually create the
4435
03:43:03,760 --> 03:43:09,159
computer move so what's going on the
4436
03:43:06,920 --> 03:43:12,560
reason this happens is because functions
4437
03:43:09,159 --> 03:43:15,159
create a scope in the previous lesson we
4438
03:43:12,560 --> 03:43:18,199
learned about Scopes which limit weight
4439
03:43:15,159 --> 03:43:20,319
where a variable exists we learned about
4440
03:43:18,199 --> 03:43:22,840
if statements and that if statements
4441
03:43:20,319 --> 03:43:25,319
create a scope between the curly
4442
03:43:22,840 --> 03:43:28,199
brackets this means that any variable
4443
03:43:25,319 --> 03:43:30,920
created between the curly brackets only
4444
03:43:28,199 --> 03:43:34,840
exist between the curly
4445
03:43:30,920 --> 03:43:37,560
brackets functions also create a scope
4446
03:43:34,840 --> 03:43:41,080
any variable that is created between
4447
03:43:37,560 --> 03:43:43,720
these curly brackets only exists inside
4448
03:43:41,080 --> 03:43:46,600
the curly brackets and we can't use it
4449
03:43:43,720 --> 03:43:49,800
outside the curly Brack ETS like we do
4450
03:43:46,600 --> 03:43:53,319
here so that's why we're getting this
4451
03:43:49,800 --> 03:43:55,399
error so how do we solve this problem
4452
03:43:53,319 --> 03:43:57,640
remember that with if statements we
4453
03:43:55,399 --> 03:44:01,399
solve this by creating the variable
4454
03:43:57,640 --> 03:44:03,600
outside of the if statement like this we
4455
03:44:01,399 --> 03:44:06,640
can use a similar solution with
4456
03:44:03,600 --> 03:44:08,720
functions to make this variable exist
4457
03:44:06,640 --> 03:44:11,840
outside the function we just have to
4458
03:44:08,720 --> 03:44:14,479
create it outside the function so let's
4459
03:44:11,840 --> 03:44:16,199
select this code we're going to
4460
03:44:14,479 --> 03:44:17,800
rightclick
4461
03:44:16,199 --> 03:44:21,279
and
4462
03:44:17,800 --> 03:44:24,840
cut and remove these lines and then
4463
03:44:21,279 --> 03:44:27,720
outside the function we're going to
4464
03:44:24,840 --> 03:44:31,520
rightclick and
4465
03:44:27,720 --> 03:44:34,520
paste so now this variable is no longer
4466
03:44:31,520 --> 03:44:37,640
inside the function's scope and it can
4467
03:44:34,520 --> 03:44:39,840
be used anywhere else in the code so
4468
03:44:37,640 --> 03:44:42,439
variables like this that can be accessed
4469
03:44:39,840 --> 03:44:45,560
anywhere are called Global
4470
03:44:42,439 --> 03:44:47,920
variables if we save
4471
03:44:45,560 --> 03:44:51,000
and now click the scissors
4472
03:44:47,920 --> 03:44:53,880
button everything is working again
4473
03:44:51,000 --> 03:44:55,279
because this code above can now access
4474
03:44:53,880 --> 03:44:57,600
this
4475
03:44:55,279 --> 03:45:00,800
variable now let's press
4476
03:44:57,600 --> 03:45:04,560
okay and let's use this function to
4477
03:45:00,800 --> 03:45:06,479
reuse this code so we'll scroll up to
4478
03:45:04,560 --> 03:45:09,760
the paper
4479
03:45:06,479 --> 03:45:12,720
button and now instead of all this code
4480
03:45:09,760 --> 03:45:16,399
again we're just going to remove it and
4481
03:45:12,720 --> 03:45:20,760
call the function pick
4482
03:45:16,399 --> 03:45:24,560
computer move Open Bracket close bracket
4483
03:45:20,760 --> 03:45:26,120
semicolon and also with the rock button
4484
03:45:24,560 --> 03:45:29,359
we'll select all this
4485
03:45:26,120 --> 03:45:31,159
code and remove it and just call the
4486
03:45:29,359 --> 03:45:32,800
function
4487
03:45:31,159 --> 03:45:36,920
pick
4488
03:45:32,800 --> 03:45:39,239
computer move brackets and
4489
03:45:36,920 --> 03:45:42,080
semicolon now if we
4490
03:45:39,239 --> 03:45:45,439
save and click the rock
4491
03:45:42,080 --> 03:45:48,560
button it works just like before
4492
03:45:45,439 --> 03:45:52,800
we'll press okay and click the paper
4493
03:45:48,560 --> 03:45:55,760
button it also works just like before so
4494
03:45:52,800 --> 03:45:57,840
as you can see functions let us reuse
4495
03:45:55,760 --> 03:46:00,800
code and they make our code a lot
4496
03:45:57,840 --> 03:46:03,960
cleaner by removing all the duplication
4497
03:46:00,800 --> 03:46:06,760
that we had another benefit of removing
4498
03:46:03,960 --> 03:46:09,080
duplication is that before if we ever
4499
03:46:06,760 --> 03:46:11,680
wanted to update the code for picking a
4500
03:46:09,080 --> 03:46:15,279
computer move we had to update it in
4501
03:46:11,680 --> 03:46:17,279
three places in each of the buttons but
4502
03:46:15,279 --> 03:46:20,319
now if we scroll
4503
03:46:17,279 --> 03:46:23,840
down we only have to update it in one
4504
03:46:20,319 --> 03:46:26,319
place inside this function so functions
4505
03:46:23,840 --> 03:46:27,319
also make our code easier to update in
4506
03:46:26,319 --> 03:46:29,760
the
4507
03:46:27,319 --> 03:46:32,319
future next we're going to learn a
4508
03:46:29,760 --> 03:46:35,439
feature of functions called a return
4509
03:46:32,319 --> 03:46:39,279
statement a return statement lets us get
4510
03:46:35,439 --> 03:46:43,159
a value out of a function so at the end
4511
03:46:39,279 --> 03:46:46,760
of this function let's type some new
4512
03:46:43,159 --> 03:46:50,080
lines and we're going to type type
4513
03:46:46,760 --> 03:46:52,399
return and then a value like the number
4514
03:46:50,080 --> 03:46:55,359
five and
4515
03:46:52,399 --> 03:46:58,800
semicolon now whenever we call this
4516
03:46:55,359 --> 03:47:02,399
function it will result in a value the
4517
03:46:58,800 --> 03:47:05,520
number five so up
4518
03:47:02,399 --> 03:47:08,640
here when we call this function this
4519
03:47:05,520 --> 03:47:14,239
will result in the number five so we can
4520
03:47:08,640 --> 03:47:14,239
actually console.log this console.log
4521
03:47:16,920 --> 03:47:21,159
and then
4522
03:47:18,120 --> 03:47:24,279
save and click the scissors
4523
03:47:21,159 --> 03:47:26,720
button and it will show us that calling
4524
03:47:24,279 --> 03:47:29,960
the function now results in the number
4525
03:47:26,720 --> 03:47:32,600
five and we display it in the
4526
03:47:29,960 --> 03:47:36,319
console so that's how a return statement
4527
03:47:32,600 --> 03:47:40,159
works it lets us get a value out of this
4528
03:47:36,319 --> 03:47:42,359
function let's press okay and do another
4529
03:47:40,159 --> 03:47:45,239
example we'll scroll
4530
03:47:42,359 --> 03:47:48,159
down and this time let's change CH this
4531
03:47:45,239 --> 03:47:51,600
value to the string
4532
03:47:48,159 --> 03:47:55,920
Rock now whenever we call this function
4533
03:47:51,600 --> 03:47:59,080
it will result in the string Rock if we
4534
03:47:55,920 --> 03:48:01,800
save and then click
4535
03:47:59,080 --> 03:48:04,720
scissors and scroll up
4536
03:48:01,800 --> 03:48:07,840
here calling this function now results
4537
03:48:04,720 --> 03:48:09,199
in the string Rock and then we display
4538
03:48:07,840 --> 03:48:12,439
it in the
4539
03:48:09,199 --> 03:48:14,520
console so now let's press okay and
4540
03:48:12,439 --> 03:48:16,760
we'll learn the syntax rules for a
4541
03:48:14,520 --> 03:48:16,760
return
4542
03:48:16,840 --> 03:48:22,680
statement so we just have to type the
4543
03:48:19,040 --> 03:48:26,040
word return and then a value and it will
4544
03:48:22,680 --> 03:48:28,319
get this value out of the function now
4545
03:48:26,040 --> 03:48:31,800
instead of just a value we can also
4546
03:48:28,319 --> 03:48:34,239
return a calculation or a variable or
4547
03:48:31,800 --> 03:48:37,920
anything that results in a
4548
03:48:34,239 --> 03:48:41,359
value so this is known as returning a
4549
03:48:37,920 --> 03:48:44,960
value from a function and this value is
4550
03:48:41,359 --> 03:48:47,000
known as the return value we also Al
4551
03:48:44,960 --> 03:48:49,800
don't have to return anything from a
4552
03:48:47,000 --> 03:48:52,960
function if a function doesn't have a
4553
03:48:49,800 --> 03:48:56,680
return statement or we return without a
4554
03:48:52,960 --> 03:48:57,880
value like this this will return the
4555
03:48:56,680 --> 03:49:00,239
value
4556
03:48:57,880 --> 03:49:03,359
undefined so if we
4557
03:49:00,239 --> 03:49:07,359
save and then click scissors
4558
03:49:03,359 --> 03:49:10,159
again the function will return
4559
03:49:07,359 --> 03:49:12,960
undefined and lastly when we use a
4560
03:49:10,159 --> 03:49:15,760
return statement it ends the function
4561
03:49:12,960 --> 03:49:20,359
immediately so after the the return
4562
03:49:15,760 --> 03:49:20,359
statement if we type
4563
03:49:20,960 --> 03:49:29,120
console.log the string
4564
03:49:24,279 --> 03:49:32,399
after and press okay here and save this
4565
03:49:29,120 --> 03:49:35,159
file and then click the scissors
4566
03:49:32,399 --> 03:49:38,680
button notice that it doesn't run this
4567
03:49:35,159 --> 03:49:41,120
code and that's because once we return
4568
03:49:38,680 --> 03:49:43,439
the code returns back to where we called
4569
03:49:41,120 --> 03:49:45,600
the function that's why it's called a
4570
03:49:43,439 --> 03:49:49,000
return statement so it's not going to
4571
03:49:45,600 --> 03:49:51,600
run anything after the return so we can
4572
03:49:49,000 --> 03:49:51,600
remove this
4573
03:49:51,720 --> 03:49:56,960
code and press
4574
03:49:54,239 --> 03:49:59,199
okay so now that we understand return
4575
03:49:56,960 --> 03:50:02,399
statements we're going to learn a better
4576
03:49:59,199 --> 03:50:05,479
way of getting the computer move out of
4577
03:50:02,399 --> 03:50:07,560
this function so first let's actually
4578
03:50:05,479 --> 03:50:11,000
move this variable back into the
4579
03:50:07,560 --> 03:50:13,439
function so we right click and
4580
03:50:11,000 --> 03:50:18,279
cut and then in
4581
03:50:13,439 --> 03:50:22,120
here right right click and
4582
03:50:18,279 --> 03:50:22,120
paste and delete these
4583
03:50:22,920 --> 03:50:28,520
lines so now we're back to the original
4584
03:50:25,600 --> 03:50:31,319
problem how do we access computer move
4585
03:50:28,520 --> 03:50:34,760
outside of the function so another
4586
03:50:31,319 --> 03:50:37,319
solution is to return this variable
4587
03:50:34,760 --> 03:50:40,720
because remember a return statement lets
4588
03:50:37,319 --> 03:50:41,800
us get a value out of the function so
4589
03:50:40,720 --> 03:50:45,439
down
4590
03:50:41,800 --> 03:50:47,479
here we're going to return the
4591
03:50:45,439 --> 03:50:50,600
computer
4592
03:50:47,479 --> 03:50:53,439
move so this will take whatever value is
4593
03:50:50,600 --> 03:50:56,760
saved inside computer move which is one
4594
03:50:53,439 --> 03:50:58,800
of these values and return it out of the
4595
03:50:56,760 --> 03:51:02,399
function if we
4596
03:50:58,800 --> 03:51:04,920
save and then click these scissors
4597
03:51:02,399 --> 03:51:08,359
button we were able to get the move
4598
03:51:04,920 --> 03:51:10,479
scissors outside of this function so
4599
03:51:08,359 --> 03:51:13,000
what happened here is that we return
4600
03:51:10,479 --> 03:51:15,960
this move and then up
4601
03:51:13,000 --> 03:51:18,399
here we took the move and displayed it
4602
03:51:15,960 --> 03:51:20,720
in the console to get
4603
03:51:18,399 --> 03:51:22,880
scissors so that's another way of
4604
03:51:20,720 --> 03:51:26,000
getting the computer move out of a
4605
03:51:22,880 --> 03:51:29,000
function using the return
4606
03:51:26,000 --> 03:51:32,199
statement however now we're back to this
4607
03:51:29,000 --> 03:51:34,920
problem with computer move not being
4608
03:51:32,199 --> 03:51:38,920
defined because we moved it back into
4609
03:51:34,920 --> 03:51:42,600
the function's scope so let's scroll up
4610
03:51:38,920 --> 03:51:45,359
and remember that this return value is
4611
03:51:42,600 --> 03:51:48,159
just a value we can use it like any
4612
03:51:45,359 --> 03:51:51,560
other value for example we can
4613
03:51:48,159 --> 03:51:55,159
console.log it or we can also save this
4614
03:51:51,560 --> 03:51:57,880
in a variable so let's do that right now
4615
03:51:55,159 --> 03:52:01,840
we're going to remove
4616
03:51:57,880 --> 03:52:05,760
this and create a new variable with
4617
03:52:01,840 --> 03:52:09,800
const and let's just name this variable
4618
03:52:05,760 --> 03:52:13,279
computer move to match what we use down
4619
03:52:09,800 --> 03:52:15,640
here and we use equals to save the
4620
03:52:13,279 --> 03:52:18,760
return value inside inside this
4621
03:52:15,640 --> 03:52:22,279
variable so note that even though we use
4622
03:52:18,760 --> 03:52:25,080
computer move here as well as here
4623
03:52:22,279 --> 03:52:27,640
there're different variables this one is
4624
03:52:25,080 --> 03:52:29,279
inside the function's scope so it
4625
03:52:27,640 --> 03:52:32,880
prevents it from conflicting with
4626
03:52:29,279 --> 03:52:35,880
variables outside the function's scope
4627
03:52:32,880 --> 03:52:38,640
that's one of the main benefits of
4628
03:52:35,880 --> 03:52:41,640
Scopes so now that we saved the return
4629
03:52:38,640 --> 03:52:44,040
value into this variable and we're using
4630
03:52:41,640 --> 03:52:46,560
this variable down here the code should
4631
03:52:44,040 --> 03:52:49,399
now work work if we
4632
03:52:46,560 --> 03:52:52,159
save and click
4633
03:52:49,399 --> 03:52:55,399
scissors everything is back to
4634
03:52:52,159 --> 03:52:57,279
normal and let's press okay so don't
4635
03:52:55,399 --> 03:52:59,520
worry functions can be a little
4636
03:52:57,279 --> 03:53:02,760
confusing at first because the code is
4637
03:52:59,520 --> 03:53:05,319
no longer simply going from top to
4638
03:53:02,760 --> 03:53:08,239
bottom it sort of jumps around a little
4639
03:53:05,319 --> 03:53:11,319
bit so let's go through this step by
4640
03:53:08,239 --> 03:53:14,159
step when we click this button we're
4641
03:53:11,319 --> 03:53:16,800
going to run this function so the code
4642
03:53:14,159 --> 03:53:18,880
is going going to jump down here and
4643
03:53:16,800 --> 03:53:20,720
then it's going to run all of this code
4644
03:53:18,880 --> 03:53:24,040
from top to
4645
03:53:20,720 --> 03:53:27,279
bottom at the end we're going to return
4646
03:53:24,040 --> 03:53:30,040
whatever is inside computer move back to
4647
03:53:27,279 --> 03:53:33,600
where we called this function so we're
4648
03:53:30,040 --> 03:53:35,720
going to return all the way back here
4649
03:53:33,600 --> 03:53:39,760
and then we're going to save that return
4650
03:53:35,720 --> 03:53:42,279
value into a new variable computer move
4651
03:53:39,760 --> 03:53:45,279
and then use computer move down
4652
03:53:42,279 --> 03:53:48,239
here so following the code line by line
4653
03:53:45,279 --> 03:53:50,399
like this is called tracing the code
4654
03:53:48,239 --> 03:53:52,479
it's a useful technique to understand
4655
03:53:50,399 --> 03:53:54,800
exactly what the code is
4656
03:53:52,479 --> 03:53:58,720
doing now let's compare the two
4657
03:53:54,800 --> 03:54:01,159
solutions that we used a global variable
4658
03:53:58,720 --> 03:54:04,120
and returning a
4659
03:54:01,159 --> 03:54:07,560
variable so returning a variable like
4660
03:54:04,120 --> 03:54:10,279
this is actually preferred over using a
4661
03:54:07,560 --> 03:54:12,640
global variable and that's because a
4662
03:54:10,279 --> 03:54:15,479
scope can help us prevent naming
4663
03:54:12,640 --> 03:54:18,080
conflicts so all the variables inside
4664
03:54:15,479 --> 03:54:21,359
here will not conflict with anything
4665
03:54:18,080 --> 03:54:23,880
outside the scope so generally it's a
4666
03:54:21,359 --> 03:54:26,000
best practice to keep things inside a
4667
03:54:23,880 --> 03:54:28,800
scope if we
4668
03:54:26,000 --> 03:54:31,960
can now let's move on and use this
4669
03:54:28,800 --> 03:54:34,000
function in the other buttons feel free
4670
03:54:31,960 --> 03:54:35,800
to pause the video if you want to try it
4671
03:54:34,000 --> 03:54:39,840
yourself
4672
03:54:35,800 --> 03:54:43,439
first so we'll scroll up to the paper
4673
03:54:39,840 --> 03:54:46,319
button and then here we're going to save
4674
03:54:43,439 --> 03:54:48,319
The Returned computer move into a
4675
03:54:46,319 --> 03:54:50,000
variable so
4676
03:54:48,319 --> 03:54:53,319
const
4677
03:54:50,000 --> 03:54:57,040
computer move so that it matches the
4678
03:54:53,319 --> 03:55:00,399
code down here make it equal to whatever
4679
03:54:57,040 --> 03:55:02,640
is returned and then same thing for the
4680
03:55:00,399 --> 03:55:06,960
rock button we're going to save the
4681
03:55:02,640 --> 03:55:09,960
return value in a variable const
4682
03:55:06,960 --> 03:55:12,000
computer move
4683
03:55:09,960 --> 03:55:16,159
equals if we
4684
03:55:12,000 --> 03:55:17,080
save and click the rock button
4685
03:55:16,159 --> 03:55:20,239
it
4686
03:55:17,080 --> 03:55:24,279
works let's press okay and click the
4687
03:55:20,239 --> 03:55:27,560
paper button and this also works and
4688
03:55:24,279 --> 03:55:29,800
let's press okay so that's how we use a
4689
03:55:27,560 --> 03:55:31,720
return statement to take advantage of
4690
03:55:29,800 --> 03:55:35,199
the benefits of
4691
03:55:31,720 --> 03:55:38,040
scope next if we look at the rest of
4692
03:55:35,199 --> 03:55:40,399
this code where we compare our move and
4693
03:55:38,040 --> 03:55:43,040
display the result you'll notice that
4694
03:55:40,399 --> 03:55:44,920
this code is very similar for each of
4695
03:55:43,040 --> 03:55:48,319
the buttons you the only thing that's
4696
03:55:44,920 --> 03:55:51,120
different is the result and the message
4697
03:55:48,319 --> 03:55:54,520
that we display so we can actually use
4698
03:55:51,120 --> 03:55:57,800
functions here as well to reuse code
4699
03:55:54,520 --> 03:55:59,520
that has small differences to do this
4700
03:55:57,800 --> 03:56:01,399
we're going to need another feature of
4701
03:55:59,520 --> 03:56:03,840
functions called
4702
03:56:01,399 --> 03:56:05,640
parameters so let's go back into
4703
03:56:03,840 --> 03:56:10,359
functions.
4704
03:56:05,640 --> 03:56:12,960
HTML and let's open the tab for this
4705
03:56:10,359 --> 03:56:14,800
file and let's also comment out the
4706
03:56:12,960 --> 03:56:20,279
previous code by typing
4707
03:56:14,800 --> 03:56:23,080
slash star and at the bottom star
4708
03:56:20,279 --> 03:56:25,960
slash and create some new
4709
03:56:23,080 --> 03:56:28,640
lines and now we're ready to learn
4710
03:56:25,960 --> 03:56:31,640
parameters so parameters are sort of the
4711
03:56:28,640 --> 03:56:35,080
opposite of a return statement a return
4712
03:56:31,640 --> 03:56:39,080
statement gets a value out of a function
4713
03:56:35,080 --> 03:56:41,880
a parameter puts a value into a function
4714
03:56:39,080 --> 03:56:43,840
so let's do an example let's say that
4715
03:56:41,880 --> 03:56:44,880
we're working on the final Amazon
4716
03:56:43,840 --> 03:56:47,640
Project
4717
03:56:44,880 --> 03:56:50,439
and we need to calculate the tax for our
4718
03:56:47,640 --> 03:56:53,840
order let's create a function to
4719
03:56:50,439 --> 03:56:57,159
calculate the tax so
4720
03:56:53,840 --> 03:57:01,199
function let's name it
4721
03:56:57,159 --> 03:57:03,520
calculate tax brackets and curly
4722
03:57:01,199 --> 03:57:06,080
brackets and then inside the curly
4723
03:57:03,520 --> 03:57:08,479
brackets let's say that the cost of our
4724
03:57:06,080 --> 03:57:12,720
products is
4725
03:57:08,479 --> 03:57:16,560
1,000 or $10 and the tax is
4726
03:57:12,720 --> 03:57:19,319
10% to calc calculate the tax we can do
4727
03:57:16,560 --> 03:57:21,399
1,000 *
4728
03:57:19,319 --> 03:57:24,159
0.1 which is
4729
03:57:21,399 --> 03:57:29,800
10% let's also display this number in
4730
03:57:24,159 --> 03:57:29,800
the console so at the front we'll type
4731
03:57:30,239 --> 03:57:33,640
console.log and
4732
03:57:34,319 --> 03:57:40,880
brackets now let's save and remember
4733
03:57:38,279 --> 03:57:43,840
this code only creates a function it
4734
03:57:40,880 --> 03:57:46,640
doesn't run the code inside to run this
4735
03:57:43,840 --> 03:57:48,800
code we're going to call this function
4736
03:57:46,640 --> 03:57:54,359
so down here we're going to type the
4737
03:57:48,800 --> 03:57:56,319
function name calculate tax and then
4738
03:57:54,359 --> 03:57:59,920
brackets if we
4739
03:57:56,319 --> 03:58:04,239
save it runs this code and then it
4740
03:57:59,920 --> 03:58:07,680
displays the tax which is 100 cents or
4741
03:58:04,239 --> 03:58:10,560
$1 however right now this function only
4742
03:58:07,680 --> 03:58:12,880
calculates the tax for
4743
03:58:10,560 --> 03:58:15,920
1,000 what if we want to calculate the
4744
03:58:12,880 --> 03:58:18,640
tax for a different amount how would we
4745
03:58:15,920 --> 03:58:21,399
modify this function to work with any
4746
03:58:18,640 --> 03:58:24,600
number to do this we're going to learn a
4747
03:58:21,399 --> 03:58:27,439
feature of functions called parameters a
4748
03:58:24,600 --> 03:58:30,080
parameter lets us put a value into a
4749
03:58:27,439 --> 03:58:33,680
function so let's finally create our
4750
03:58:30,080 --> 03:58:36,399
first parameter so inside these round
4751
03:58:33,680 --> 03:58:38,960
brackets we're going to choose a name
4752
03:58:36,399 --> 03:58:40,520
for our parameter so let's just name
4753
03:58:38,960 --> 03:58:42,239
this
4754
03:58:40,520 --> 03:58:45,560
parameter
4755
03:58:42,239 --> 03:58:49,000
1 a parameter one works the same way as
4756
03:58:45,560 --> 03:58:51,600
a variable we can save a value inside
4757
03:58:49,000 --> 03:58:52,359
this parameter and then use it just like
4758
03:58:51,600 --> 03:58:55,439
a
4759
03:58:52,359 --> 03:58:58,600
variable so first let's save a value
4760
03:58:55,439 --> 03:59:00,279
inside the parameter to do that we're
4761
03:58:58,600 --> 03:59:03,560
going to go to where we call the
4762
03:59:00,279 --> 03:59:08,399
function and then inside these brackets
4763
03:59:03,560 --> 03:59:12,199
we're going to put a value for example
4764
03:59:08,399 --> 03:59:14,159
2,000 this will save this value into
4765
03:59:12,199 --> 03:59:16,439
this parameter
4766
03:59:14,159 --> 03:59:18,800
and now we can use it just like a
4767
03:59:16,439 --> 03:59:21,800
variable so instead of
4768
03:59:18,800 --> 03:59:25,600
1,000 we're going to type
4769
03:59:21,800 --> 03:59:29,399
parameter 1 and it will take whatever
4770
03:59:25,600 --> 03:59:33,600
value is inside parameter 1 in this case
4771
03:59:29,399 --> 03:59:34,520
2,000 and substitute it into the code if
4772
03:59:33,600 --> 03:59:38,800
we
4773
03:59:34,520 --> 03:59:44,319
save it now calculates 2,000 *
4774
03:59:38,800 --> 03:59:46,640
0.1 to give us 200 cents as the tax
4775
03:59:44,319 --> 03:59:49,279
now every time we call the function we
4776
03:59:46,640 --> 03:59:52,960
can save a different value into the
4777
03:59:49,279 --> 03:59:56,760
parameter for example let's create a new
4778
03:59:52,960 --> 03:59:59,399
line and call the function
4779
03:59:56,760 --> 04:00:02,000
calculate
4780
03:59:59,399 --> 04:00:03,720
tax and this time we're going to save
4781
04:00:02,000 --> 04:00:08,640
the value
4782
04:00:03,720 --> 04:00:11,120
5,000 into parameter 1 if we
4783
04:00:08,640 --> 04:00:14,279
save this line of code will calculate
4784
04:00:11,120 --> 04:00:17,800
the tax for 5,000
4785
04:00:14,279 --> 04:00:21,680
and result in 500 cents so as you can
4786
04:00:17,800 --> 04:00:24,120
see a parameter lets us put values into
4787
04:00:21,680 --> 04:00:26,600
a function and this allows our function
4788
04:00:24,120 --> 04:00:29,479
to work with any
4789
04:00:26,600 --> 04:00:33,000
value now let's learn the syntax rules
4790
04:00:29,479 --> 04:00:36,120
for parameters to create a parameter we
4791
04:00:33,000 --> 04:00:38,920
just type the parameter name between the
4792
04:00:36,120 --> 04:00:42,120
brackets parameter names follow the same
4793
04:00:38,920 --> 04:00:44,560
rules as variable names we can't use
4794
04:00:42,120 --> 04:00:46,800
special words we can't start with a
4795
04:00:44,560 --> 04:00:50,000
number and we can't use special
4796
04:00:46,800 --> 04:00:52,439
characters other than dollar sign and
4797
04:00:50,000 --> 04:00:53,920
underscore and the best practice is to
4798
04:00:52,439 --> 04:00:56,239
use cam
4799
04:00:53,920 --> 04:00:59,680
case let's actually change this
4800
04:00:56,239 --> 04:01:00,560
parameter name to cost so the code makes
4801
04:00:59,680 --> 04:01:03,159
more
4802
04:01:00,560 --> 04:01:06,080
sense and
4803
04:01:03,159 --> 04:01:09,279
save next when a function has a
4804
04:01:06,080 --> 04:01:12,239
parameter we usually say this function
4805
04:01:09,279 --> 04:01:15,359
takes a parameter if this parameter
4806
04:01:12,239 --> 04:01:16,720
should be a number we say this function
4807
04:01:15,359 --> 04:01:19,520
takes a
4808
04:01:16,720 --> 04:01:22,680
number when we put a value into the
4809
04:01:19,520 --> 04:01:25,960
function like this we call this passing
4810
04:01:22,680 --> 04:01:28,800
a value into the function another name
4811
04:01:25,960 --> 04:01:31,520
for this value is called the
4812
04:01:28,800 --> 04:01:33,920
argument and believe it or not we've
4813
04:01:31,520 --> 04:01:36,319
actually used functions and parameters
4814
04:01:33,920 --> 04:01:40,199
this whole time the first code that we
4815
04:01:36,319 --> 04:01:43,000
learned in this course was alert alert
4816
04:01:40,199 --> 04:01:46,120
is actually a function you can tell it's
4817
04:01:43,000 --> 04:01:49,159
a function because of the round brackets
4818
04:01:46,120 --> 04:01:51,800
and between the brackets we put a string
4819
04:01:49,159 --> 04:01:55,040
so this is an example of a
4820
04:01:51,800 --> 04:01:58,359
parameter and lastly a parameter only
4821
04:01:55,040 --> 04:02:01,279
exists inside the function's scope so we
4822
04:01:58,359 --> 04:02:04,399
can only use this parameter between the
4823
04:02:01,279 --> 04:02:05,439
curly brackets we can't use it outside
4824
04:02:04,399 --> 04:02:08,399
the
4825
04:02:05,439 --> 04:02:12,159
function next a function can actually
4826
04:02:08,399 --> 04:02:14,920
have more than one parameter for example
4827
04:02:12,159 --> 04:02:18,319
right now our calculate TX function can
4828
04:02:14,920 --> 04:02:20,359
only calculate a 10% tax but what if
4829
04:02:18,319 --> 04:02:23,600
we're in a different country and we want
4830
04:02:20,359 --> 04:02:27,199
to calculate a different tax percent to
4831
04:02:23,600 --> 04:02:30,359
solve this we can add a second parameter
4832
04:02:27,199 --> 04:02:34,120
by typing after the first parameter a
4833
04:02:30,359 --> 04:02:38,680
comma and then another parameter name
4834
04:02:34,120 --> 04:02:42,080
let's name this tax
4835
04:02:38,680 --> 04:02:44,439
percent and now to save a value into the
4836
04:02:42,080 --> 04:02:48,680
second parameter we'll go go to where we
4837
04:02:44,439 --> 04:02:51,920
call this function and also type a comma
4838
04:02:48,680 --> 04:02:57,319
and a second value like
4839
04:02:51,920 --> 04:02:59,600
0.2 or a 20% tax so the first value gets
4840
04:02:57,319 --> 04:03:02,640
saved in the first parameter and the
4841
04:02:59,600 --> 04:03:05,199
second value gets saved in the second
4842
04:03:02,640 --> 04:03:08,279
parameter and now we can use our second
4843
04:03:05,199 --> 04:03:11,840
parameter just like a variable so
4844
04:03:08,279 --> 04:03:15,560
instead of 0.1 every time we're going to
4845
04:03:11,840 --> 04:03:18,279
calculate it with tax
4846
04:03:15,560 --> 04:03:21,600
percent and it will substitute whatever
4847
04:03:18,279 --> 04:03:23,920
value is inside tax percent into the
4848
04:03:21,600 --> 04:03:27,920
code if we
4849
04:03:23,920 --> 04:03:28,720
save this first line will multiply 2,000
4850
04:03:27,920 --> 04:03:32,920
by
4851
04:03:28,720 --> 04:03:35,920
0.2 and give us 400 cents as the
4852
04:03:32,920 --> 04:03:38,359
result so we can have as many parameters
4853
04:03:35,920 --> 04:03:40,319
as we want in a function we just have to
4854
04:03:38,359 --> 04:03:42,960
separate them with a
4855
04:03:40,319 --> 04:03:45,319
comma Now notice that the second time we
4856
04:03:42,960 --> 04:03:48,120
call this function we didn't give a
4857
04:03:45,319 --> 04:03:50,960
value for the second parameter if we
4858
04:03:48,120 --> 04:03:53,359
don't save a value into the parameter
4859
04:03:50,960 --> 04:03:57,720
the parameter will get the value
4860
04:03:53,359 --> 04:04:03,560
undefined so here if we
4861
04:03:57,720 --> 04:04:05,760
console. log the second parameter tax
4862
04:04:03,560 --> 04:04:08,520
percent and
4863
04:04:05,760 --> 04:04:11,800
save it will show us that the second
4864
04:04:08,520 --> 04:04:15,159
time tax percent is
4865
04:04:11,800 --> 04:04:18,720
undefined and then multiplying the cost
4866
04:04:15,159 --> 04:04:23,040
time undefined is not valid math so we
4867
04:04:18,720 --> 04:04:25,000
get the result Nan or not a number so
4868
04:04:23,040 --> 04:04:28,080
now let's remove the
4869
04:04:25,000 --> 04:04:31,720
console.log and we'll learn how to fix
4870
04:04:28,080 --> 04:04:34,239
this so to fix this we can either pass a
4871
04:04:31,720 --> 04:04:38,199
second value into the function like this
4872
04:04:34,239 --> 04:04:41,960
line or we can also set a default value
4873
04:04:38,199 --> 04:04:45,120
for the parameter to set a default value
4874
04:04:41,960 --> 04:04:48,960
we can just type after the parameter
4875
04:04:45,120 --> 04:04:52,080
and then add equal sign and a default
4876
04:04:48,960 --> 04:04:54,279
value like
4877
04:04:52,080 --> 04:04:57,159
0.1 if we
4878
04:04:54,279 --> 04:05:01,159
save the second function call Will
4879
04:04:57,159 --> 04:05:03,920
multiply 5,000 by the default value
4880
04:05:01,159 --> 04:05:07,319
0.1 and give us
4881
04:05:03,920 --> 04:05:08,840
500 so that's how we add a default value
4882
04:05:07,319 --> 04:05:11,600
for a
4883
04:05:08,840 --> 04:05:13,920
parameter all right now that we learned
4884
04:05:11,600 --> 04:05:16,479
parameters we're going to go back to the
4885
04:05:13,920 --> 04:05:19,560
rock paper scissors project and reuse
4886
04:05:16,479 --> 04:05:23,120
even more code so let's go back to the
4887
04:05:19,560 --> 04:05:24,560
file for the project and also the tab
4888
04:05:23,120 --> 04:05:27,680
for this
4889
04:05:24,560 --> 04:05:30,399
project and now if we look at the code
4890
04:05:27,680 --> 04:05:33,080
inside each of the buttons you'll notice
4891
04:05:30,399 --> 04:05:35,640
that the code is basically the same for
4892
04:05:33,080 --> 04:05:39,159
all three buttons the only small
4893
04:05:35,640 --> 04:05:42,399
difference is the move that we picked so
4894
04:05:39,159 --> 04:05:44,760
this is a perfect situation to use a
4895
04:05:42,399 --> 04:05:48,399
parameter so so inside the script
4896
04:05:44,760 --> 04:05:53,560
element let's create a new function to
4897
04:05:48,399 --> 04:05:56,840
reuse all of this code we'll type
4898
04:05:53,560 --> 04:06:01,479
function and let's name this function
4899
04:05:56,840 --> 04:06:04,560
play game brackets and curly
4900
04:06:01,479 --> 04:06:07,279
brackets next let's move all of this
4901
04:06:04,560 --> 04:06:10,319
code inside the function so we can reuse
4902
04:06:07,279 --> 04:06:12,560
it we'll select this
4903
04:06:10,319 --> 04:06:14,399
code and then
4904
04:06:12,560 --> 04:06:17,600
rightclick
4905
04:06:14,399 --> 04:06:22,319
cut and inside the
4906
04:06:17,600 --> 04:06:25,960
function right click and
4907
04:06:22,319 --> 04:06:30,000
paste and if we need to reformat we can
4908
04:06:25,960 --> 04:06:32,640
select these lines and press
4909
04:06:30,000 --> 04:06:36,159
tab so the value that is different for
4910
04:06:32,640 --> 04:06:39,399
each button is the move that we picked
4911
04:06:36,159 --> 04:06:42,080
so we're going to turn this move into a
4912
04:06:39,399 --> 04:06:45,159
parameter so at the top between the
4913
04:06:42,080 --> 04:06:50,279
brackets we're going to create a new
4914
04:06:45,159 --> 04:06:53,760
parameter let's name it Player
4915
04:06:50,279 --> 04:06:57,000
move and now let's save a value into
4916
04:06:53,760 --> 04:06:59,920
this parameter so inside our scissors
4917
04:06:57,000 --> 04:07:04,640
button we're going to call this function
4918
04:06:59,920 --> 04:07:08,359
and run all this code so let's type play
4919
04:07:04,640 --> 04:07:11,000
game and call this function and for the
4920
04:07:08,359 --> 04:07:14,680
scissors button let's save the string
4921
04:07:11,000 --> 04:07:18,040
scissors into Player move to do that
4922
04:07:14,680 --> 04:07:21,520
we'll type between the brackets here and
4923
04:07:18,040 --> 04:07:24,680
type the string
4924
04:07:21,520 --> 04:07:28,000
scissors so as we learned this will save
4925
04:07:24,680 --> 04:07:30,880
scissors into Player move and now we can
4926
04:07:28,000 --> 04:07:32,159
use Player move just like a variable in
4927
04:07:30,880 --> 04:07:35,040
the
4928
04:07:32,159 --> 04:07:38,319
function now let's modify the code based
4929
04:07:35,040 --> 04:07:41,720
on the parameter so here this code
4930
04:07:38,319 --> 04:07:45,040
calculates the result however this only
4931
04:07:41,720 --> 04:07:47,520
works if the player move is scissors so
4932
04:07:45,040 --> 04:07:51,239
we're going to put this in an if
4933
04:07:47,520 --> 04:07:52,760
statement so we'll type
4934
04:07:51,239 --> 04:07:57,800
if
4935
04:07:52,760 --> 04:08:01,359
Player move equals
4936
04:07:57,800 --> 04:08:03,960
scissors and curly brackets inside this
4937
04:08:01,359 --> 04:08:07,479
if statement we're going to put this if
4938
04:08:03,960 --> 04:08:09,399
statement so let's select this and then
4939
04:08:07,479 --> 04:08:12,040
right click
4940
04:08:09,399 --> 04:08:16,000
cut and then inside
4941
04:08:12,040 --> 04:08:20,600
here right click click and
4942
04:08:16,000 --> 04:08:23,479
paste and select these lines and press
4943
04:08:20,600 --> 04:08:26,920
tab so notice that we can put an if
4944
04:08:23,479 --> 04:08:29,640
statement inside another if statement
4945
04:08:26,920 --> 04:08:32,920
and we did this because this code only
4946
04:08:29,640 --> 04:08:35,840
makes sense if the player move is
4947
04:08:32,920 --> 04:08:39,319
scissors and finally let's modify the
4948
04:08:35,840 --> 04:08:41,119
code that displays the message so here
4949
04:08:39,319 --> 04:08:43,920
instead of displaying scissors every
4950
04:08:41,119 --> 04:08:45,880
time we're going to display whatever is
4951
04:08:43,920 --> 04:08:49,800
saved inside Player
4952
04:08:45,880 --> 04:08:52,640
move so we'll replace it with Dollar
4953
04:08:49,800 --> 04:08:57,319
open curly bracket close curly bracket
4954
04:08:52,640 --> 04:09:00,159
and in between we'll insert Player
4955
04:08:57,319 --> 04:09:03,080
move and that's it we modify this
4956
04:09:00,159 --> 04:09:04,399
function to use a parameter instead of
4957
04:09:03,080 --> 04:09:08,080
always using
4958
04:09:04,399 --> 04:09:09,840
scissors now let's save and click the
4959
04:09:08,080 --> 04:09:12,760
scissors
4960
04:09:09,840 --> 04:09:15,600
button and you'll notice that it works
4961
04:09:12,760 --> 04:09:18,359
we displayed the move scissors and we
4962
04:09:15,600 --> 04:09:21,279
calculated the result
4963
04:09:18,359 --> 04:09:23,920
correctly let's press okay and we're
4964
04:09:21,279 --> 04:09:26,600
going to use this function to reuse the
4965
04:09:23,920 --> 04:09:30,600
code for the other buttons so we'll
4966
04:09:26,600 --> 04:09:33,000
scroll up and for the paper button we're
4967
04:09:30,600 --> 04:09:36,040
going to use a different if statement to
4968
04:09:33,000 --> 04:09:39,000
calculate the result so let's actually
4969
04:09:36,040 --> 04:09:40,199
copy this into the function we're going
4970
04:09:39,000 --> 04:09:43,520
to
4971
04:09:40,199 --> 04:09:45,800
rightclick click copy
4972
04:09:43,520 --> 04:09:48,080
and then inside the
4973
04:09:45,800 --> 04:09:52,119
function we're going to create another
4974
04:09:48,080 --> 04:09:57,560
Branch if the player move is paper so
4975
04:09:52,119 --> 04:09:58,520
here let's type else if brackets and
4976
04:09:57,560 --> 04:10:01,439
curly
4977
04:09:58,520 --> 04:10:03,680
brackets inside this condition we're
4978
04:10:01,439 --> 04:10:10,199
going to check if the
4979
04:10:03,680 --> 04:10:12,960
player move is equal to paper this time
4980
04:10:10,199 --> 04:10:14,359
and then inside these curly brackets
4981
04:10:12,960 --> 04:10:17,520
we're going going to paste the if
4982
04:10:14,359 --> 04:10:20,479
statement we copied earlier so right
4983
04:10:17,520 --> 04:10:23,880
click and
4984
04:10:20,479 --> 04:10:26,439
paste and we can select these lines and
4985
04:10:23,880 --> 04:10:28,920
press tab to
4986
04:10:26,439 --> 04:10:32,159
reformat so now we have the code that
4987
04:10:28,920 --> 04:10:35,040
determines the result for paper down
4988
04:10:32,159 --> 04:10:37,040
here we don't need to modify this code
4989
04:10:35,040 --> 04:10:38,920
because we're always displaying whatever
4990
04:10:37,040 --> 04:10:42,199
is inside Player
4991
04:10:38,920 --> 04:10:43,920
move finally we can scroll up to the
4992
04:10:42,199 --> 04:10:47,600
paper button
4993
04:10:43,920 --> 04:10:51,720
and remove all this duplicated code and
4994
04:10:47,600 --> 04:10:56,319
just use our function play
4995
04:10:51,720 --> 04:10:59,640
game and we're going to pass paper
4996
04:10:56,319 --> 04:11:03,000
inside so now paper will get saved
4997
04:10:59,640 --> 04:11:04,840
inside Player move and it's going to run
4998
04:11:03,000 --> 04:11:07,000
this if statement
4999
04:11:04,840 --> 04:11:10,720
instead if we
5000
04:11:07,000 --> 04:11:14,239
save and click the paper
5001
04:11:10,720 --> 04:11:16,800
button in this example I pick paper
5002
04:11:14,239 --> 04:11:18,479
computer pick Rock and it calculated the
5003
04:11:16,800 --> 04:11:22,239
result
5004
04:11:18,479 --> 04:11:25,359
correctly let's press okay and use this
5005
04:11:22,239 --> 04:11:27,439
function for the rock button feel free
5006
04:11:25,359 --> 04:11:28,600
to pause the video if you want to try it
5007
04:11:27,439 --> 04:11:31,520
yourself
5008
04:11:28,600 --> 04:11:34,840
first so let's scroll up to the Rock
5009
04:11:31,520 --> 04:11:38,279
button and first we need to copy this if
5010
04:11:34,840 --> 04:11:40,359
statement into the function so let's
5011
04:11:38,279 --> 04:11:44,399
rightclick
5012
04:11:40,359 --> 04:11:50,319
copy and then inside the function
5013
04:11:44,399 --> 04:11:55,119
let's create a branch for rock else if
5014
04:11:50,319 --> 04:11:58,760
Player move is equal to
5015
04:11:55,119 --> 04:12:02,399
rock and then curly brackets and inside
5016
04:11:58,760 --> 04:12:04,479
here we're going to rightclick and paste
5017
04:12:02,399 --> 04:12:07,800
the if statement we copied
5018
04:12:04,479 --> 04:12:10,800
earlier and now let's select these lines
5019
04:12:07,800 --> 04:12:13,199
and press tab a few times to
5020
04:12:10,800 --> 04:12:14,319
reformat and again this doesn't need
5021
04:12:13,199 --> 04:12:17,800
need to
5022
04:12:14,319 --> 04:12:20,600
change the last step is to scroll up to
5023
04:12:17,800 --> 04:12:23,479
our Rock button and instead of
5024
04:12:20,600 --> 04:12:27,640
duplicating all of this code we're going
5025
04:12:23,479 --> 04:12:32,960
to remove it and just call our function
5026
04:12:27,640 --> 04:12:36,000
instead play game brackets and then
5027
04:12:32,960 --> 04:12:38,279
inside we'll have the string
5028
04:12:36,000 --> 04:12:41,840
Rock now let's
5029
04:12:38,279 --> 04:12:45,040
save and click the rock
5030
04:12:41,840 --> 04:12:47,239
button so I picked Rock the computer
5031
04:12:45,040 --> 04:12:48,880
picked paper and we calculated the
5032
04:12:47,239 --> 04:12:53,119
result
5033
04:12:48,880 --> 04:12:55,680
correctly let's press okay so by using a
5034
04:12:53,119 --> 04:12:59,319
function with a parameter we were able
5035
04:12:55,680 --> 04:13:01,319
to reuse all of the code in our buttons
5036
04:12:59,319 --> 04:13:05,520
and you can see that it made our code a
5037
04:13:01,319 --> 04:13:09,359
lot cleaner so lastly notice that inside
5038
04:13:05,520 --> 04:13:11,760
a function we can call other functions
5039
04:13:09,359 --> 04:13:14,960
let's go through the code step by step
5040
04:13:11,760 --> 04:13:18,000
so that we understand how how it works
5041
04:13:14,960 --> 04:13:21,239
so here when we call the play game
5042
04:13:18,000 --> 04:13:24,399
function we go inside here and then we
5043
04:13:21,239 --> 04:13:27,119
call the pick computer move function so
5044
04:13:24,399 --> 04:13:30,920
now we're going to go inside this
5045
04:13:27,119 --> 04:13:33,319
function and run all the code and then
5046
04:13:30,920 --> 04:13:37,279
when this function returns we're going
5047
04:13:33,319 --> 04:13:40,199
to return back to where we called it and
5048
04:13:37,279 --> 04:13:42,520
then keep going and run the rest of the
5049
04:13:40,199 --> 04:13:45,000
code and then when the play game
5050
04:13:42,520 --> 04:13:47,600
function finishes it's going to return
5051
04:13:45,000 --> 04:13:51,359
back to
5052
04:13:47,600 --> 04:13:52,600
here so inside a function we can call
5053
04:13:51,359 --> 04:13:54,640
other
5054
04:13:52,600 --> 04:13:58,040
functions now one last thing we're going
5055
04:13:54,640 --> 04:14:00,560
to do for this code is we'll scroll
5056
04:13:58,040 --> 04:14:03,439
down and we're just going to add some
5057
04:14:00,560 --> 04:14:05,920
new lines to this if statement to
5058
04:14:03,439 --> 04:14:08,880
separate the branches and make the code
5059
04:14:05,920 --> 04:14:08,880
a little easier to
5060
04:14:09,080 --> 04:14:14,000
read and
5061
04:14:11,520 --> 04:14:16,800
save and let's scroll
5062
04:14:14,000 --> 04:14:19,840
up and that's the end of this
5063
04:14:16,800 --> 04:14:23,479
lesson in this lesson we learned about
5064
04:14:19,840 --> 04:14:25,600
functions which let us reuse code we
5065
04:14:23,479 --> 04:14:28,720
learned how to get a value out of a
5066
04:14:25,600 --> 04:14:31,560
function using return we learn how to
5067
04:14:28,720 --> 04:14:34,319
put values into a function using
5068
04:14:31,560 --> 04:14:37,080
parameters and we improve the code for
5069
04:14:34,319 --> 04:14:39,199
our rock paper scissors project by
5070
04:14:37,080 --> 04:14:42,199
reusing the code and removing
5071
04:14:39,199 --> 04:14:42,199
duplication
5072
04:14:43,159 --> 04:14:47,319
thanks for watching this course so far
5073
04:14:45,560 --> 04:14:49,359
if you want to support this channel you
5074
04:14:47,319 --> 04:14:51,640
can check out the premium version of my
5075
04:14:49,359 --> 04:14:54,040
courses just like this one where you can
5076
04:14:51,640 --> 04:14:56,319
get a certificate of completion and a
5077
04:14:54,040 --> 04:14:59,119
Better Learning platform if you're
5078
04:14:56,319 --> 04:15:01,680
interested in extra videos from me more
5079
04:14:59,119 --> 04:15:04,399
in-depth videos and behind the scenes
5080
04:15:01,680 --> 04:15:07,119
content you can check out these links
5081
04:15:04,399 --> 04:15:09,920
here you can also support the channel by
5082
04:15:07,119 --> 04:15:12,640
liking the video subscribing and sharing
5083
04:15:09,920 --> 04:15:15,319
this video with others thanks again and
5084
04:15:12,640 --> 04:15:17,840
let's go continue with the
5085
04:15:15,319 --> 04:15:20,359
course here are some exercises you can
5086
04:15:17,840 --> 04:15:23,359
do on your own to practice using
5087
04:15:20,359 --> 04:15:23,359
functions
5088
04:15:48,080 --> 04:15:52,880
in this lesson we're going to learn
5089
04:15:49,880 --> 04:15:55,399
another type of value in JavaScript
5090
04:15:52,880 --> 04:15:58,439
called objects and we're going to use
5091
04:15:55,399 --> 04:16:01,560
objects to create a score in our rock
5092
04:15:58,439 --> 04:16:04,600
paper scissors project first let's
5093
04:16:01,560 --> 04:16:08,239
create a new file for this lesson we'll
5094
04:16:04,600 --> 04:16:11,640
go to our code editor and click this
5095
04:16:08,239 --> 04:16:16,399
icon and then click this icon to create
5096
04:16:11,640 --> 04:16:18,239
a new file and we'll name this file
5097
04:16:16,399 --> 04:16:19,840
08-
5098
04:16:18,239 --> 04:16:22,359
objects.
5099
04:16:19,840 --> 04:16:25,880
HTML and press
5100
04:16:22,359 --> 04:16:30,520
enter next we'll copy all the code in
5101
04:16:25,880 --> 04:16:33,439
functions. HTML to objects. HTML so
5102
04:16:30,520 --> 04:16:36,600
we'll type here and press contrl a or
5103
04:16:33,439 --> 04:16:38,760
command a to select the code and then
5104
04:16:36,600 --> 04:16:41,159
right click
5105
04:16:38,760 --> 04:16:43,399
copy and in
5106
04:16:41,159 --> 04:16:44,760
here right click
5107
04:16:43,399 --> 04:16:48,279
and
5108
04:16:44,760 --> 04:16:50,399
paste now let's hide the files for now
5109
04:16:48,279 --> 04:16:55,239
and we'll prepare this file for this
5110
04:16:50,399 --> 04:16:59,680
lesson so we can change this to objects
5111
04:16:55,239 --> 04:16:59,680
and remove all the code in the script
5112
04:16:59,800 --> 04:17:07,720
element finally let's save and open this
5113
04:17:04,119 --> 04:17:09,800
in live server by right clicking open
5114
04:17:07,720 --> 04:17:12,640
with live
5115
04:17:09,800 --> 04:17:16,279
server and let's also open the console
5116
04:17:12,640 --> 04:17:17,720
on on this page so we'll right click
5117
04:17:16,279 --> 04:17:21,119
click
5118
04:17:17,720 --> 04:17:24,640
inspect and click the
5119
04:17:21,119 --> 04:17:29,040
console let's close our previous
5120
04:17:24,640 --> 04:17:29,040
tabs and also the previous
5121
04:17:29,199 --> 04:17:36,199
code and now we're ready to learn
5122
04:17:31,960 --> 04:17:39,560
objects so what is an object an object
5123
04:17:36,199 --> 04:17:43,199
groups multiple values together let's do
5124
04:17:39,560 --> 04:17:45,920
an example and create our first object
5125
04:17:43,199 --> 04:17:50,319
we'll go to the script element and we'll
5126
04:17:45,920 --> 04:17:53,960
create a variable using const and we'll
5127
04:17:50,319 --> 04:17:57,359
name this variable product and make it
5128
04:17:53,960 --> 04:18:02,199
equal to open curly bracket close curly
5129
04:17:57,359 --> 04:18:05,439
bracket and semic it so this is an
5130
04:18:02,199 --> 04:18:10,279
object inside this object we can add
5131
04:18:05,439 --> 04:18:14,359
some values so we'll type enter and then
5132
04:18:10,279 --> 04:18:16,159
Name colon and then a value like the
5133
04:18:14,359 --> 04:18:20,279
string
5134
04:18:16,159 --> 04:18:25,319
socks and at the end we'll type a
5135
04:18:20,279 --> 04:18:29,279
comma and then price colon and another
5136
04:18:25,319 --> 04:18:32,600
value like the number
5137
04:18:29,279 --> 04:18:36,199
1,90 so inside our object we just added
5138
04:18:32,600 --> 04:18:39,560
two values so at the bottom here let's
5139
04:18:36,199 --> 04:18:42,560
try console. logging this object
5140
04:18:39,560 --> 04:18:42,560
console.log
5141
04:18:44,520 --> 04:18:50,040
product and
5142
04:18:46,760 --> 04:18:51,640
save and it will display both values
5143
04:18:50,040 --> 04:18:55,040
into the
5144
04:18:51,640 --> 04:18:58,880
console so as you can see an object lets
5145
04:18:55,040 --> 04:19:01,159
us group multiple values together so for
5146
04:18:58,880 --> 04:19:04,040
each of these values we have some code
5147
04:19:01,159 --> 04:19:06,920
on the left this code is called the
5148
04:19:04,040 --> 04:19:10,600
property and using the property we can
5149
04:19:06,920 --> 04:19:16,560
access specific values in the object for
5150
04:19:10,600 --> 04:19:16,560
example let's type and enter and
5151
04:19:16,920 --> 04:19:23,680
console.log we're going to type the
5152
04:19:19,080 --> 04:19:26,840
object product and then a DOT and then a
5153
04:19:23,680 --> 04:19:30,840
property like
5154
04:19:26,840 --> 04:19:33,279
name so dot name Will access the value
5155
04:19:30,840 --> 04:19:36,840
that is associated with the name
5156
04:19:33,279 --> 04:19:37,760
property which is the string socks so if
5157
04:19:36,840 --> 04:19:41,000
we
5158
04:19:37,760 --> 04:19:42,840
save it will display the string socks in
5159
04:19:41,000 --> 04:19:44,800
the console
5160
04:19:42,840 --> 04:19:47,359
let's do another example and we'll
5161
04:19:44,800 --> 04:19:52,840
access this second value using the
5162
04:19:47,359 --> 04:19:58,319
property price so we'll type enter
5163
04:19:52,840 --> 04:20:02,560
console. log the object product and then
5164
04:19:58,319 --> 04:20:05,880
a DOT and then a property
5165
04:20:02,560 --> 04:20:09,399
price so this will access the value
5166
04:20:05,880 --> 04:20:12,920
associated with price which is
5167
04:20:09,399 --> 04:20:15,239
1,090 if we save
5168
04:20:12,920 --> 04:20:18,520
that's what gets displayed in the
5169
04:20:15,239 --> 04:20:22,399
console now we can also use the property
5170
04:20:18,520 --> 04:20:25,119
to change a value inside an object to do
5171
04:20:22,399 --> 04:20:30,159
that we're going to type the object's
5172
04:20:25,119 --> 04:20:34,040
name product and then Dot and a property
5173
04:20:30,159 --> 04:20:40,359
like name and just make it equal to
5174
04:20:34,040 --> 04:20:42,880
something else like the string cotton
5175
04:20:40,359 --> 04:20:45,439
socks so this code will change change
5176
04:20:42,880 --> 04:20:49,159
the value associated with the name
5177
04:20:45,439 --> 04:20:53,239
property to cotton socks so at the
5178
04:20:49,159 --> 04:20:53,239
bottom if we type
5179
04:20:53,479 --> 04:20:58,199
console.log the product
5180
04:20:56,080 --> 04:21:01,159
again and
5181
04:20:58,199 --> 04:21:03,920
save you'll notice the value associated
5182
04:21:01,159 --> 04:21:04,880
with the name property was changed to
5183
04:21:03,920 --> 04:21:08,319
cotton
5184
04:21:04,880 --> 04:21:10,960
socks so that's how an object works we
5185
04:21:08,319 --> 04:21:13,479
group multiple values together and then
5186
04:21:10,960 --> 04:21:16,840
we can access or change these values
5187
04:21:13,479 --> 04:21:20,080
using the properties on the left now
5188
04:21:16,840 --> 04:21:22,640
let's learn the syntax rules for objects
5189
04:21:20,080 --> 04:21:25,640
to create an object we start with an
5190
04:21:22,640 --> 04:21:28,960
open curly bracket and end with a closed
5191
04:21:25,640 --> 04:21:30,640
curly bracket inside the object we can
5192
04:21:28,960 --> 04:21:33,640
put multiple
5193
04:21:30,640 --> 04:21:36,760
values for each value the code on the
5194
04:21:33,640 --> 04:21:40,439
left is called the property this is how
5195
04:21:36,760 --> 04:21:43,199
we access the value inside the object we
5196
04:21:40,439 --> 04:21:46,159
separate the property and value with a
5197
04:21:43,199 --> 04:21:49,560
colon and this is called a property
5198
04:21:46,159 --> 04:21:52,520
value pair we can have many property
5199
04:21:49,560 --> 04:21:54,159
value pairs in an object and we separate
5200
04:21:52,520 --> 04:21:57,040
them with a
5201
04:21:54,159 --> 04:22:00,239
comma to access a value inside the
5202
04:21:57,040 --> 04:22:03,239
object we type the object's name and
5203
04:22:00,239 --> 04:22:06,960
then Dot and then the property we want
5204
04:22:03,239 --> 04:22:10,080
to access like name this will give us
5205
04:22:06,960 --> 04:22:13,560
the value associated with the name
5206
04:22:10,080 --> 04:22:16,279
property this syntax is called do
5207
04:22:13,560 --> 04:22:19,159
notation if we access a property that
5208
04:22:16,279 --> 04:22:22,680
doesn't exist the value will be
5209
04:22:19,159 --> 04:22:26,040
undefined to change a value in an object
5210
04:22:22,680 --> 04:22:29,560
we can use the dot notation again so
5211
04:22:26,040 --> 04:22:32,880
product. name and just make it equal to
5212
04:22:29,560 --> 04:22:36,279
something else now using the syntax we
5213
04:22:32,880 --> 04:22:39,760
can also add a value to an object we can
5214
04:22:36,279 --> 04:22:43,520
type a property that doesn't exist for
5215
04:22:39,760 --> 04:22:47,199
example here we can type
5216
04:22:43,520 --> 04:22:49,760
product do new
5217
04:22:47,199 --> 04:22:53,239
property and make this equal to
5218
04:22:49,760 --> 04:22:56,520
something like the Boolean value
5219
04:22:53,239 --> 04:22:59,720
true if we
5220
04:22:56,520 --> 04:23:02,159
console.log the product
5221
04:22:59,720 --> 04:23:04,880
again and
5222
04:23:02,159 --> 04:23:07,880
save it will add this value to the
5223
04:23:04,880 --> 04:23:10,960
object along with the new
5224
04:23:07,880 --> 04:23:14,000
property we can also remove a value from
5225
04:23:10,960 --> 04:23:17,560
an object by typing
5226
04:23:14,000 --> 04:23:20,640
delete and then the object
5227
04:23:17,560 --> 04:23:25,239
product Dot and then the property we
5228
04:23:20,640 --> 04:23:29,000
want to delete like new
5229
04:23:25,239 --> 04:23:29,000
property if we
5230
04:23:29,479 --> 04:23:35,080
console.log the product
5231
04:23:32,600 --> 04:23:38,840
again and
5232
04:23:35,080 --> 04:23:39,920
save this code will delete new property
5233
04:23:38,840 --> 04:23:42,760
from the
5234
04:23:39,920 --> 04:23:45,920
object and lastly notice that then an
5235
04:23:42,760 --> 04:23:49,359
object is just another type of value we
5236
04:23:45,920 --> 04:23:53,040
can save an object inside a variable and
5237
04:23:49,359 --> 04:23:58,279
we can also console.log objects if we
5238
04:23:53,040 --> 04:24:00,520
check the type of this value so type of
5239
04:23:58,279 --> 04:24:02,960
product and
5240
04:24:00,520 --> 04:24:06,199
save and scroll up in the
5241
04:24:02,960 --> 04:24:09,920
console it will tell us that product is
5242
04:24:06,199 --> 04:24:13,319
an object so let's remove
5243
04:24:09,920 --> 04:24:16,800
this and Save
5244
04:24:13,319 --> 04:24:19,359
and now we'll learn why we use objects
5245
04:24:16,800 --> 04:24:21,960
so objects make our code more
5246
04:24:19,359 --> 04:24:24,800
organized instead of creating a bunch of
5247
04:24:21,960 --> 04:24:28,399
variables for the products values like
5248
04:24:24,800 --> 04:24:30,279
the name and the price and other details
5249
04:24:28,399 --> 04:24:34,560
we can just group all these related
5250
04:24:30,279 --> 04:24:37,399
values together into one object objects
5251
04:24:34,560 --> 04:24:40,239
also allow us to use multiple values
5252
04:24:37,399 --> 04:24:42,840
together instead of console. logging
5253
04:24:40,239 --> 04:24:45,720
each of these values individually we can
5254
04:24:42,840 --> 04:24:48,080
just console log the whole object and
5255
04:24:45,720 --> 04:24:51,359
display all the values at
5256
04:24:48,080 --> 04:24:54,359
once so objects let us group multiple
5257
04:24:51,359 --> 04:24:56,080
values together and let us use multiple
5258
04:24:54,359 --> 04:24:59,080
values
5259
04:24:56,080 --> 04:25:01,960
together next let's do a practical
5260
04:24:59,080 --> 04:25:05,319
example with objects we're going to add
5261
04:25:01,960 --> 04:25:07,199
a score to our rock paper scissors game
5262
04:25:05,319 --> 04:25:09,880
so I've actually prepared a project we
5263
04:25:07,199 --> 04:25:12,479
can use for this lesson to see this
5264
04:25:09,880 --> 04:25:14,640
project we're going to go to our website
5265
04:25:12,479 --> 04:25:19,000
and then create a new
5266
04:25:14,640 --> 04:25:26,319
tab and then up here we're going to type
5267
04:25:19,000 --> 04:25:29,279
super simple dodev SL projects
5268
04:25:26,319 --> 04:25:32,279
slobs and press
5269
04:25:29,279 --> 04:25:34,920
enter so this is our simplified rock
5270
04:25:32,279 --> 04:25:36,920
paper scissors game again except in this
5271
04:25:34,920 --> 04:25:39,640
project when we play the
5272
04:25:36,920 --> 04:25:43,960
game it's also going to keep track of a
5273
04:25:39,640 --> 04:25:47,279
score so how many times we win lose and
5274
04:25:43,960 --> 04:25:51,359
tie and also if we click
5275
04:25:47,279 --> 04:25:54,000
okay we have a reset score button so if
5276
04:25:51,359 --> 04:25:57,080
we play the game a few
5277
04:25:54,000 --> 04:26:00,119
times and add to our
5278
04:25:57,080 --> 04:26:03,000
score and then click the reset score
5279
04:26:00,119 --> 04:26:06,520
button this will reset the score back to
5280
04:26:03,000 --> 04:26:08,760
zero so if we play the game again the
5281
04:26:06,520 --> 04:26:11,199
score starts from zero
5282
04:26:08,760 --> 04:26:14,279
again so we're going to learn how to use
5283
04:26:11,199 --> 04:26:15,840
objects to create create this feature
5284
04:26:14,279 --> 04:26:19,439
let's press
5285
04:26:15,840 --> 04:26:22,439
okay and first let's create a copy of
5286
04:26:19,439 --> 04:26:25,159
our project just for this lesson we'll
5287
04:26:22,439 --> 04:26:28,000
go to our code editor and click this
5288
04:26:25,159 --> 04:26:30,680
icon to show our files and we'll make a
5289
04:26:28,000 --> 04:26:33,680
copy of the rock paper scissors project
5290
04:26:30,680 --> 04:26:35,840
from the previous lesson so we'll
5291
04:26:33,680 --> 04:26:40,880
rightclick and
5292
04:26:35,840 --> 04:26:45,080
copy and down here right click and
5293
04:26:40,880 --> 04:26:45,920
paste and we we right click and rename
5294
04:26:45,080 --> 04:26:49,920
this
5295
04:26:45,920 --> 04:26:54,199
file we'll remove the copy at the end
5296
04:26:49,920 --> 04:26:55,720
and at the front we'll change this to 08
5297
04:26:54,199 --> 04:26:59,640
and press
5298
04:26:55,720 --> 04:27:03,520
enter now let's hide these files and we
5299
04:26:59,640 --> 04:27:06,600
can close the 07 file for now and let's
5300
04:27:03,520 --> 04:27:10,359
open this in live server by right
5301
04:27:06,600 --> 04:27:13,359
clicking and open with live
5302
04:27:10,359 --> 04:27:15,239
server let's also open the console on
5303
04:27:13,359 --> 04:27:16,880
this page so
5304
04:27:15,239 --> 04:27:19,680
rightclick
5305
04:27:16,880 --> 04:27:22,520
inspect and the
5306
04:27:19,680 --> 04:27:26,239
console all right now let's go into our
5307
04:27:22,520 --> 04:27:28,920
code and add a score to our game so
5308
04:27:26,239 --> 04:27:31,640
remember when writing JavaScript a good
5309
04:27:28,920 --> 04:27:35,279
strategy is to think about what steps we
5310
04:27:31,640 --> 04:27:38,680
need to do this is called an algorithm
5311
04:27:35,279 --> 04:27:41,080
and then convert those steps into code
5312
04:27:38,680 --> 04:27:43,080
so we already had an algorithm for the
5313
04:27:41,080 --> 04:27:45,520
rock paper scissors game
5314
04:27:43,080 --> 04:27:49,119
let's update this algorithm to include
5315
04:27:45,520 --> 04:27:52,000
the score so first the computer randomly
5316
04:27:49,119 --> 04:27:54,800
selects a move this step will stay the
5317
04:27:52,000 --> 04:27:57,560
same number two we're going to compare
5318
04:27:54,800 --> 04:28:00,399
the moves to get the result this step
5319
04:27:57,560 --> 04:28:03,239
will also be the same but now we're
5320
04:28:00,399 --> 04:28:06,840
going to add an extra step after getting
5321
04:28:03,239 --> 04:28:09,720
the result we're going to update a score
5322
04:28:06,840 --> 04:28:13,119
and finally we'll display the result and
5323
04:28:09,720 --> 04:28:15,600
the score in a popup now let's convert
5324
04:28:13,119 --> 04:28:17,880
these updated steps or this algorithm
5325
04:28:15,600 --> 04:28:21,000
into code the first thing we need to
5326
04:28:17,880 --> 04:28:24,279
change is we added a third step we're
5327
04:28:21,000 --> 04:28:26,920
going to save and update a score so
5328
04:28:24,279 --> 04:28:29,800
first we need somewhere to save our
5329
04:28:26,920 --> 04:28:34,080
score so one place we can save it is
5330
04:28:29,800 --> 04:28:37,479
inside a variable let's go to our script
5331
04:28:34,080 --> 04:28:41,000
element and at the top we're going to
5332
04:28:37,479 --> 04:28:42,920
create a variable for our score using
5333
04:28:41,000 --> 04:28:46,920
const
5334
04:28:42,920 --> 04:28:50,199
score and make it equal to an
5335
04:28:46,920 --> 04:28:53,000
object and inside this object we're
5336
04:28:50,199 --> 04:28:55,840
going to have the property
5337
04:28:53,000 --> 04:28:59,479
wins so this will keep track of how many
5338
04:28:55,840 --> 04:29:02,680
wins that we have we'll type colon and
5339
04:28:59,479 --> 04:29:06,399
the number zero because the score starts
5340
04:29:02,680 --> 04:29:08,840
at zero and then a comma and then
5341
04:29:06,399 --> 04:29:11,640
another property
5342
04:29:08,840 --> 04:29:15,399
losses this will be how many losses we
5343
04:29:11,640 --> 04:29:21,840
have and then colon and zero and then
5344
04:29:15,399 --> 04:29:23,920
another comma and ties colon and zero so
5345
04:29:21,840 --> 04:29:26,760
we use an object here because these
5346
04:29:23,920 --> 04:29:28,720
values are related to each other you
5347
04:29:26,760 --> 04:29:30,840
could use separate variables but we're
5348
04:29:28,720 --> 04:29:33,080
using an object for
5349
04:29:30,840 --> 04:29:35,479
convenience another thing you'll notice
5350
04:29:33,080 --> 04:29:39,040
is that we're creating this variable
5351
04:29:35,479 --> 04:29:42,159
outside of a function and outside of a
5352
04:29:39,040 --> 04:29:45,000
scope and that's because every time we
5353
04:29:42,159 --> 04:29:48,239
make a move we need to update the score
5354
04:29:45,000 --> 04:29:51,359
from last time so in order to save the
5355
04:29:48,239 --> 04:29:53,920
score from last time we need to keep it
5356
04:29:51,359 --> 04:29:56,199
outside the function if the score was
5357
04:29:53,920 --> 04:29:59,000
inside the function the function would
5358
04:29:56,199 --> 04:30:02,159
create a new score every time which is
5359
04:29:59,000 --> 04:30:04,960
not what we want so in this situation in
5360
04:30:02,159 --> 04:30:07,439
order to save a score from last time
5361
04:30:04,960 --> 04:30:11,279
we're going to keep this variable
5362
04:30:07,439 --> 04:30:13,119
outside now every time we play the game
5363
04:30:11,279 --> 04:30:15,800
after we calc calate the result we're
5364
04:30:13,119 --> 04:30:18,319
going to update the score so let's
5365
04:30:15,800 --> 04:30:22,520
scroll down to where we calculate the
5366
04:30:18,319 --> 04:30:24,239
result which is here and then below it
5367
04:30:22,520 --> 04:30:27,359
we're going to type some new
5368
04:30:24,239 --> 04:30:29,960
lines and type the code for updating the
5369
04:30:27,359 --> 04:30:34,439
score so we can do that with an if
5370
04:30:29,960 --> 04:30:37,680
statement so we'll type if brackets and
5371
04:30:34,439 --> 04:30:39,880
curly brackets and inside the condition
5372
04:30:37,680 --> 04:30:42,439
we're going to check if the result is a
5373
04:30:39,880 --> 04:30:44,720
win if it is a win
5374
04:30:42,439 --> 04:30:48,800
we're going to update the winds property
5375
04:30:44,720 --> 04:30:51,479
and increase it by one so down
5376
04:30:48,800 --> 04:30:57,520
here if the
5377
04:30:51,479 --> 04:31:00,239
result is equal to the string you
5378
04:30:57,520 --> 04:31:03,319
win and make sure that this string
5379
04:31:00,239 --> 04:31:07,560
matches the string up here inside the
5380
04:31:03,319 --> 04:31:13,720
curly brackets we're going to update
5381
04:31:07,560 --> 04:31:16,000
score. wins and we'll make it equal to
5382
04:31:13,720 --> 04:31:19,560
itself plus
5383
04:31:16,000 --> 04:31:23,560
one so this is how we increase the winds
5384
04:31:19,560 --> 04:31:25,840
property in the score object by one now
5385
04:31:23,560 --> 04:31:27,960
remember from the variables lesson that
5386
04:31:25,840 --> 04:31:31,720
we have a shortcut for increasing
5387
04:31:27,960 --> 04:31:35,760
something by one and that shortcut
5388
04:31:31,720 --> 04:31:39,159
is plus =
5389
04:31:35,760 --> 04:31:42,560
1 next let's add another Branch to this
5390
04:31:39,159 --> 04:31:48,040
if statement for the other two results
5391
04:31:42,560 --> 04:31:50,119
so else if brackets and curly brackets
5392
04:31:48,040 --> 04:31:55,159
and in the second condition we're going
5393
04:31:50,119 --> 04:31:57,880
to check if result is equal to the
5394
04:31:55,159 --> 04:32:00,720
string you
5395
04:31:57,880 --> 04:32:04,279
lose and make sure this string matches
5396
04:32:00,720 --> 04:32:09,080
the string up here so if the result is
5397
04:32:04,279 --> 04:32:13,359
you lose we're going to update score do
5398
04:32:09,080 --> 04:32:15,640
losses property and increase it by 1 so
5399
04:32:13,359 --> 04:32:19,279
plus equal
5400
04:32:15,640 --> 04:32:25,640
1 and finally we'll check if the result
5401
04:32:19,279 --> 04:32:27,159
is a tie else if brackets and curly
5402
04:32:25,640 --> 04:32:32,040
brackets
5403
04:32:27,159 --> 04:32:35,439
result equals to the string
5404
04:32:32,040 --> 04:32:40,159
tie and here we'll update
5405
04:32:35,439 --> 04:32:42,880
score. ties plus equal
5406
04:32:40,159 --> 04:32:46,199
1 so we converted this step in the
5407
04:32:42,880 --> 04:32:49,600
algorithm to code the score starts at
5408
04:32:46,199 --> 04:32:51,600
zero and every time we play the game
5409
04:32:49,600 --> 04:32:55,119
after we calculate the result we're
5410
04:32:51,600 --> 04:32:58,119
going to update the score using this
5411
04:32:55,119 --> 04:33:00,640
code now let's convert the last step
5412
04:32:58,119 --> 04:33:03,520
into code we're going to display the
5413
04:33:00,640 --> 04:33:06,320
result and the score in the popup at the
5414
04:33:03,520 --> 04:33:08,359
end so let's actually go back to the
5415
04:33:06,320 --> 04:33:10,680
super simple dodev
5416
04:33:08,359 --> 04:33:13,639
project and we'll see what the popup
5417
04:33:10,680 --> 04:33:16,680
looks like we'll click one of these
5418
04:33:13,639 --> 04:33:20,840
buttons and in this popup on the second
5419
04:33:16,680 --> 04:33:23,840
line we display the score so in our
5420
04:33:20,840 --> 04:33:27,119
code this is the code that displays that
5421
04:33:23,840 --> 04:33:30,160
popup so how do we add a second line to
5422
04:33:27,119 --> 04:33:32,320
the popup remember that template strings
5423
04:33:30,160 --> 04:33:35,879
have another special feature called
5424
04:33:32,320 --> 04:33:38,760
multi-line strings so we can type at the
5425
04:33:35,879 --> 04:33:42,760
end of this template string and press
5426
04:33:38,760 --> 04:33:47,760
enter to add another line to this Str
5427
04:33:42,760 --> 04:33:50,320
so here we can type winds colon and
5428
04:33:47,760 --> 04:33:53,240
we're going to insert a value using
5429
04:33:50,320 --> 04:33:56,400
Dollar open curly bracket Clos curly
5430
04:33:53,240 --> 04:33:59,279
bracket and here we're going to insert
5431
04:33:56,400 --> 04:34:05,520
the number of wins that we have which is
5432
04:33:59,279 --> 04:34:08,119
score. wins so we'll type score
5433
04:34:05,520 --> 04:34:11,520
dowins next we're going to show the
5434
04:34:08,119 --> 04:34:12,279
number of losses that we have so after
5435
04:34:11,520 --> 04:34:17,561
this
5436
04:34:12,279 --> 04:34:19,119
let's type a comma and losses colon and
5437
04:34:17,561 --> 04:34:22,561
insert another
5438
04:34:19,119 --> 04:34:24,080
value here we'll insert
5439
04:34:22,561 --> 04:34:28,199
score.
5440
04:34:24,080 --> 04:34:32,039
losses and finally we'll type a comma
5441
04:34:28,199 --> 04:34:37,561
and we'll display ties colon and
5442
04:34:32,039 --> 04:34:40,639
inserted value score dot
5443
04:34:37,561 --> 04:34:43,359
ties and this will display our score in
5444
04:34:40,639 --> 04:34:47,520
the popup so let's save this and give it
5445
04:34:43,359 --> 04:34:51,000
a try we'll click okay and then go back
5446
04:34:47,520 --> 04:34:54,119
to our Tab and play the
5447
04:34:51,000 --> 04:34:57,600
game so now on the second line we will
5448
04:34:54,119 --> 04:34:59,799
display the score one small issue here
5449
04:34:57,600 --> 04:35:02,840
is that we have a lot of spaces on the
5450
04:34:59,799 --> 04:35:05,680
second line so these spaces correspond
5451
04:35:02,840 --> 04:35:08,439
to the spaces here when we use
5452
04:35:05,680 --> 04:35:11,320
multi-line strings these Extra Spaces
5453
04:35:08,439 --> 04:35:13,799
will show up in the popup so to remove
5454
04:35:11,320 --> 04:35:17,439
these SP cases we can just remove them
5455
04:35:13,799 --> 04:35:19,600
in the code like this now if we
5456
04:35:17,439 --> 04:35:23,359
save press
5457
04:35:19,600 --> 04:35:25,799
okay and play the game it will show our
5458
04:35:23,359 --> 04:35:29,680
score on the second line without those
5459
04:35:25,799 --> 04:35:32,320
Extra Spaces at the front let's press
5460
04:35:29,680 --> 04:35:35,039
okay we're going to add one more feature
5461
04:35:32,320 --> 04:35:39,639
to this project if we go back to Super
5462
04:35:35,039 --> 04:35:41,879
simple. Dev we have a reset score button
5463
04:35:39,639 --> 04:35:44,480
which will reset the score back to zero
5464
04:35:41,879 --> 04:35:47,199
when we click it let's add this button
5465
04:35:44,480 --> 04:35:50,240
in our project so we'll scroll
5466
04:35:47,199 --> 04:35:54,240
up and inside the
5467
04:35:50,240 --> 04:35:58,119
HTML We'll add a button with the code
5468
04:35:54,240 --> 04:36:02,600
less than button greater than and inside
5469
04:35:58,119 --> 04:36:06,080
the button we'll have the text reset
5470
04:36:02,600 --> 04:36:09,959
score and now when we click this button
5471
04:36:06,080 --> 04:36:13,719
we'll run some code using the onclick
5472
04:36:09,959 --> 04:36:16,400
attribute equals double quotes and then
5473
04:36:13,719 --> 04:36:19,000
in here we're going to write some code
5474
04:36:16,400 --> 04:36:22,400
to reset this score back to
5475
04:36:19,000 --> 04:36:25,080
zero so one way we can do it is because
5476
04:36:22,400 --> 04:36:27,920
this score is an object we can use dot
5477
04:36:25,080 --> 04:36:31,160
notation to change everything back to
5478
04:36:27,920 --> 04:36:36,680
zero so we can type
5479
04:36:31,160 --> 04:36:38,520
score. wins and make it equal to zero
5480
04:36:36,680 --> 04:36:43,799
we'll also type
5481
04:36:38,520 --> 04:36:45,279
score. losses and make it equal to Z and
5482
04:36:43,799 --> 04:36:49,760
finally
5483
04:36:45,279 --> 04:36:51,959
score. ties and make it equal to
5484
04:36:49,760 --> 04:36:54,600
zero now let's
5485
04:36:51,959 --> 04:36:58,920
save and go back to our
5486
04:36:54,600 --> 04:37:01,160
Tab and play the game a few times to get
5487
04:36:58,920 --> 04:37:01,160
a
5488
04:37:01,959 --> 04:37:10,160
score let's press okay and press reset
5489
04:37:06,400 --> 04:37:12,000
score and then play the game again and
5490
04:37:10,160 --> 04:37:15,199
you'll notice that the score started
5491
04:37:12,000 --> 04:37:18,320
from zero again so that's how we create
5492
04:37:15,199 --> 04:37:20,760
the reset score button we just set all
5493
04:37:18,320 --> 04:37:23,799
of these properties back to
5494
04:37:20,760 --> 04:37:26,279
zero and that's it that's how we add a
5495
04:37:23,799 --> 04:37:30,320
score feature to our rock paper scissors
5496
04:37:26,279 --> 04:37:32,561
project using an object to save the
5497
04:37:30,320 --> 04:37:34,760
score let's press
5498
04:37:32,561 --> 04:37:38,600
okay and we're going to learn more
5499
04:37:34,760 --> 04:37:40,080
details about objects let's go back to
5500
04:37:38,600 --> 04:37:43,680
objects.
5501
04:37:40,080 --> 04:37:46,400
HTML and what open the tab for this
5502
04:37:43,680 --> 04:37:49,080
file and let's also comment out the
5503
04:37:46,400 --> 04:37:51,240
previous code using
5504
04:37:49,080 --> 04:37:53,639
slashstar and at the
5505
04:37:51,240 --> 04:37:55,600
bottom star
5506
04:37:53,639 --> 04:37:58,840
slash and
5507
04:37:55,600 --> 04:38:00,199
save now let's scroll to the bottom and
5508
04:37:58,840 --> 04:38:03,520
we'll do some
5509
04:38:00,199 --> 04:38:08,639
setup so first let's create a variable
5510
04:38:03,520 --> 04:38:12,320
with const we'll name it Product 2 and
5511
04:38:08,639 --> 04:38:15,719
make it equal to another object
5512
04:38:12,320 --> 04:38:19,639
inside this object we have the property
5513
04:38:15,719 --> 04:38:22,600
Name colon and the string
5514
04:38:19,639 --> 04:38:26,199
shirt and we're going to console.log
5515
04:38:22,600 --> 04:38:26,199
this object so
5516
04:38:26,920 --> 04:38:34,160
console.log Product 2 and
5517
04:38:31,879 --> 04:38:37,240
save so the next detail we're going to
5518
04:38:34,160 --> 04:38:38,959
learn about objects is another way to
5519
04:38:37,240 --> 04:38:41,639
access the values
5520
04:38:38,959 --> 04:38:46,959
inside we previously learned the
5521
04:38:41,639 --> 04:38:46,959
notation to do this for example
5522
04:38:47,199 --> 04:38:53,000
console.log product
5523
04:38:50,719 --> 04:38:56,000
to.
5524
04:38:53,000 --> 04:38:58,600
name this will access the value
5525
04:38:56,000 --> 04:39:01,439
associated with the name
5526
04:38:58,600 --> 04:39:04,799
property in JavaScript we have another
5527
04:39:01,439 --> 04:39:07,920
way of accessing values inside objects
5528
04:39:04,799 --> 04:39:11,920
which is using square brackets so we'll
5529
04:39:07,920 --> 04:39:13,039
create a new line and type console
5530
04:39:11,920 --> 04:39:18,199
do
5531
04:39:13,039 --> 04:39:19,320
log product 2 and this time we'll type
5532
04:39:18,199 --> 04:39:21,480
square
5533
04:39:19,320 --> 04:39:25,879
brackets and then inside the square
5534
04:39:21,480 --> 04:39:30,480
brackets we'll have a string with
5535
04:39:25,879 --> 04:39:32,480
name so this is called bracket notation
5536
04:39:30,480 --> 04:39:35,600
and this does the same thing as dot
5537
04:39:32,480 --> 04:39:40,040
notation up here it gets the value
5538
04:39:35,600 --> 04:39:43,520
associated with the name property if we
5539
04:39:40,040 --> 04:39:47,480
save these two lines of code both access
5540
04:39:43,520 --> 04:39:49,798
the string shirt which we see here so
5541
04:39:47,480 --> 04:39:52,718
when do we use the bracket notation
5542
04:39:49,798 --> 04:39:55,680
instead of the dot notation bracket
5543
04:39:52,718 --> 04:39:59,240
notation lets us use properties that
5544
04:39:55,680 --> 04:40:04,878
normally don't work with do notation for
5545
04:39:59,240 --> 04:40:04,878
example at the bottom we can type
5546
04:40:05,240 --> 04:40:15,520
console.log Product 2 and then use a DOT
5547
04:40:10,360 --> 04:40:15,520
and try to access a property called
5548
04:40:16,878 --> 04:40:23,400
delivery-time if we
5549
04:40:19,080 --> 04:40:25,360
save this property will give us an error
5550
04:40:23,400 --> 04:40:27,878
and that's because JavaScript thinks
5551
04:40:25,360 --> 04:40:31,520
that this Dash is a minus sign and it's
5552
04:40:27,878 --> 04:40:33,958
trying to do math so in order to use a
5553
04:40:31,520 --> 04:40:36,520
property like this we have to use
5554
04:40:33,958 --> 04:40:40,080
bracket notation so we're going to
5555
04:40:36,520 --> 04:40:44,160
replace the dot with square
5556
04:40:40,080 --> 04:40:46,760
brackets and and turn this into a
5557
04:40:44,160 --> 04:40:50,638
string now if we
5558
04:40:46,760 --> 04:40:53,200
save it no longer gives us an error and
5559
04:40:50,638 --> 04:40:56,680
because delivery time does not exist in
5560
04:40:53,200 --> 04:40:59,600
the object we get the value
5561
04:40:56,680 --> 04:41:02,280
undefined so using bracket notation we
5562
04:40:59,600 --> 04:41:06,280
can also add values to the object when
5563
04:41:02,280 --> 04:41:09,440
we create it so here we can add a
5564
04:41:06,280 --> 04:41:15,400
comma and we'll add another property
5565
04:41:09,440 --> 04:41:15,400
using bracket notation and a string
5566
04:41:16,000 --> 04:41:22,760
delivery-time and a colon and then a
5567
04:41:19,080 --> 04:41:24,878
value like the string one
5568
04:41:22,760 --> 04:41:28,680
day if we
5569
04:41:24,878 --> 04:41:32,480
save this lets us add a delivery-time
5570
04:41:28,680 --> 04:41:35,080
property to this object so as you can
5571
04:41:32,480 --> 04:41:37,680
see bracket notation lets us use
5572
04:41:35,080 --> 04:41:38,840
properties that normally don't work with
5573
04:41:37,680 --> 04:41:41,400
DOT
5574
04:41:38,840 --> 04:41:44,400
notation another feature of bracket
5575
04:41:41,400 --> 04:41:47,120
notation is that between the brackets we
5576
04:41:44,400 --> 04:41:50,480
don't just have to use a string we can
5577
04:41:47,120 --> 04:41:52,280
use a variable a calculation or anything
5578
04:41:50,480 --> 04:41:54,760
that results in a
5579
04:41:52,280 --> 04:41:58,638
value so you might be wondering which
5580
04:41:54,760 --> 04:42:02,000
one should we use do notation or bracket
5581
04:41:58,638 --> 04:42:04,520
notation we usually use do notation by
5582
04:42:02,000 --> 04:42:07,200
default because it's shorter and easier
5583
04:42:04,520 --> 04:42:10,040
to read but if we need to use properties
5584
04:42:07,200 --> 04:42:11,840
that don't work with do notation then we
5585
04:42:10,040 --> 04:42:15,000
use bracket not
5586
04:42:11,840 --> 04:42:17,840
notation now a shortcut here is when we
5587
04:42:15,000 --> 04:42:20,520
create the object if we only have a
5588
04:42:17,840 --> 04:42:23,000
string between the brackets the brackets
5589
04:42:20,520 --> 04:42:28,638
are actually optional so we can just
5590
04:42:23,000 --> 04:42:31,600
type this if we save the code will still
5591
04:42:28,638 --> 04:42:34,600
work okay the next detail we're going to
5592
04:42:31,600 --> 04:42:38,680
learn is that inside an object we can
5593
04:42:34,600 --> 04:42:41,718
save any type of value so this includes
5594
04:42:38,680 --> 04:42:44,120
numbers strings booleans
5595
04:42:41,718 --> 04:42:47,200
as well as other objects because
5596
04:42:44,120 --> 04:42:51,638
remember objects themselves are also
5597
04:42:47,200 --> 04:42:54,718
values for example we can type a comma
5598
04:42:51,638 --> 04:42:58,760
and add a property called
5599
04:42:54,718 --> 04:43:02,080
rating colon and then an object open
5600
04:42:58,760 --> 04:43:05,798
curly bracket close curly bracket and
5601
04:43:02,080 --> 04:43:12,798
inside this inner object we can add more
5602
04:43:05,798 --> 04:43:16,040
properties like stars colon 4.5
5603
04:43:12,798 --> 04:43:20,638
this is how many stars a product has and
5604
04:43:16,040 --> 04:43:22,320
then a comma and a property called count
5605
04:43:20,638 --> 04:43:25,600
colon
5606
04:43:22,320 --> 04:43:30,200
87 this is how many ratings a product
5607
04:43:25,600 --> 04:43:33,958
has so this is called a nested object or
5608
04:43:30,200 --> 04:43:36,680
an object inside an object we can use
5609
04:43:33,958 --> 04:43:39,878
nested objects to make our values more
5610
04:43:36,680 --> 04:43:42,480
organized so inside the product the
5611
04:43:39,878 --> 04:43:45,440
number of stars that has and the number
5612
04:43:42,480 --> 04:43:48,638
of ratings that it has are both related
5613
04:43:45,440 --> 04:43:51,920
to a rating so it makes sense to group
5614
04:43:48,638 --> 04:43:55,240
them together further inside the
5615
04:43:51,920 --> 04:43:57,760
product now to access values inside the
5616
04:43:55,240 --> 04:44:00,878
inner object we just use the dot
5617
04:43:57,760 --> 04:44:04,920
notation or bracket notation multiple
5618
04:44:00,878 --> 04:44:07,920
times for example at the bottom we can
5619
04:44:04,920 --> 04:44:07,920
type
5620
04:44:09,000 --> 04:44:14,638
console.log product
5621
04:44:11,760 --> 04:44:17,560
2 dot
5622
04:44:14,638 --> 04:44:21,080
rating this will get the value
5623
04:44:17,560 --> 04:44:24,600
associated with rating and this is an
5624
04:44:21,080 --> 04:44:26,160
object so we can use the dot notation
5625
04:44:24,600 --> 04:44:29,798
again
5626
04:44:26,160 --> 04:44:33,040
count so this will get the count inside
5627
04:44:29,798 --> 04:44:38,480
the rating object which is this value
5628
04:44:33,040 --> 04:44:41,638
right here so if we save it will display
5629
04:44:38,480 --> 04:44:45,400
87 and finally another type Ty of value
5630
04:44:41,638 --> 04:44:49,080
we can put in an object is a function so
5631
04:44:45,400 --> 04:44:51,000
in this object let's type comma and
5632
04:44:49,080 --> 04:44:54,520
another property
5633
04:44:51,000 --> 04:44:57,798
fun colon and we're going to create a
5634
04:44:54,520 --> 04:45:01,280
function here so let's type
5635
04:44:57,798 --> 04:45:05,798
function and we'll name the function
5636
04:45:01,280 --> 04:45:07,680
Function One brackets and curly brackets
5637
04:45:05,798 --> 04:45:11,040
and then inside the function we're going
5638
04:45:07,680 --> 04:45:12,840
to have some JavaScript code like usual
5639
04:45:11,040 --> 04:45:17,280
so
5640
04:45:12,840 --> 04:45:21,680
console. log the string
5641
04:45:17,280 --> 04:45:21,680
function inside
5642
04:45:21,718 --> 04:45:28,520
object this saves a function inside the
5643
04:45:25,360 --> 04:45:31,320
object and this works because a function
5644
04:45:28,520 --> 04:45:34,160
is actually just another type of value
5645
04:45:31,320 --> 04:45:36,878
in JavaScript but we'll learn more about
5646
04:45:34,160 --> 04:45:40,200
this feature of functions later in this
5647
04:45:36,878 --> 04:45:43,080
course for now just know that functions
5648
04:45:40,200 --> 04:45:46,760
are also values and we can save them in
5649
04:45:43,080 --> 04:45:50,560
an object to access this function we can
5650
04:45:46,760 --> 04:45:51,718
use the dot or bracket notation as usual
5651
04:45:50,560 --> 04:45:58,040
so at the
5652
04:45:51,718 --> 04:46:01,638
bottom we can type the object Product 2
5653
04:45:58,040 --> 04:46:04,840
and then a DOT and then the property
5654
04:46:01,638 --> 04:46:07,760
fun so this will access the value
5655
04:46:04,840 --> 04:46:10,958
associated with the fun property which
5656
04:46:07,760 --> 04:46:15,760
is a function and because this is a fun
5657
04:46:10,958 --> 04:46:17,798
function we can call it as usual using
5658
04:46:15,760 --> 04:46:22,000
brackets if we
5659
04:46:17,798 --> 04:46:25,120
save this will run the function here and
5660
04:46:22,000 --> 04:46:27,718
it will display function inside object
5661
04:46:25,120 --> 04:46:30,760
into the
5662
04:46:27,718 --> 04:46:34,040
console so when we save functions inside
5663
04:46:30,760 --> 04:46:36,040
an object this is called a method and
5664
04:46:34,040 --> 04:46:38,200
we've actually been using methods this
5665
04:46:36,040 --> 04:46:41,400
whole time
5666
04:46:38,200 --> 04:46:44,360
console.log is actually a method
5667
04:46:41,400 --> 04:46:48,080
console is an object provided by
5668
04:46:44,360 --> 04:46:50,558
JavaScript and log is a function that is
5669
04:46:48,080 --> 04:46:56,600
saved inside the console
5670
04:46:50,558 --> 04:46:56,600
object if we go to the bottom and type
5671
04:46:56,878 --> 04:47:04,000
console.log type of
5672
04:47:01,440 --> 04:47:07,080
console and
5673
04:47:04,000 --> 04:47:12,840
save this will confirm that console is
5674
04:47:07,080 --> 04:47:12,840
just an object and if we change this to
5675
04:47:12,958 --> 04:47:18,680
console.log and
5676
04:47:15,240 --> 04:47:22,718
save this will show us that console.log
5677
04:47:18,680 --> 04:47:26,320
is a function so log is a function that
5678
04:47:22,718 --> 04:47:29,840
is saved inside the console object so we
5679
04:47:26,320 --> 04:47:33,680
call this a method another example of a
5680
04:47:29,840 --> 04:47:36,958
method is math.random which we used in
5681
04:47:33,680 --> 04:47:40,160
the rock paper scissors project math is
5682
04:47:36,958 --> 04:47:43,400
also an object provided by JavaScript
5683
04:47:40,160 --> 04:47:47,280
and random is a function saved inside
5684
04:47:43,400 --> 04:47:50,320
the math object so we call math.random a
5685
04:47:47,280 --> 04:47:53,320
method as well so we've actually been
5686
04:47:50,320 --> 04:47:55,958
using objects and methods all throughout
5687
04:47:53,320 --> 04:47:59,160
this course and now we understand all
5688
04:47:55,958 --> 04:48:01,760
the code that we've been using so far
5689
04:47:59,160 --> 04:48:04,558
next we're going to learn about builtin
5690
04:48:01,760 --> 04:48:08,280
objects so the console object and the
5691
04:48:04,558 --> 04:48:09,958
math object are known as builtin objects
5692
04:48:08,280 --> 04:48:12,600
because they are built in to the
5693
04:48:09,958 --> 04:48:15,200
language they provided by the
5694
04:48:12,600 --> 04:48:18,798
language we're going to learn two more
5695
04:48:15,200 --> 04:48:21,920
built-in objects called Json and local
5696
04:48:18,798 --> 04:48:25,400
storage and we will use these objects to
5697
04:48:21,920 --> 04:48:28,040
improve our rock paper scissors project
5698
04:48:25,400 --> 04:48:30,878
let's start with the Json built-in
5699
04:48:28,040 --> 04:48:32,360
object this object helps us work with
5700
04:48:30,878 --> 04:48:36,440
something called
5701
04:48:32,360 --> 04:48:38,958
Json Json stands for JavaScript object
5702
04:48:36,440 --> 04:48:42,718
notation the easiest way to understand
5703
04:48:38,958 --> 04:48:45,400
Jason is it's BAS basically a syntax
5704
04:48:42,718 --> 04:48:49,040
it's a similar syntax to a JavaScript
5705
04:48:45,400 --> 04:48:51,680
object but it has less features for
5706
04:48:49,040 --> 04:48:54,920
example the code on the left uses
5707
04:48:51,680 --> 04:48:58,680
JavaScript object syntax and the code on
5708
04:48:54,920 --> 04:49:00,798
the right uses Json syntax so one
5709
04:48:58,680 --> 04:49:04,520
difference is that all properties and
5710
04:49:00,798 --> 04:49:07,400
strings must use double quotes in Json
5711
04:49:04,520 --> 04:49:09,878
Jason does not support single quotes
5712
04:49:07,400 --> 04:49:12,920
another difference is that Json does not
5713
04:49:09,878 --> 04:49:16,480
support function functions so as you can
5714
04:49:12,920 --> 04:49:19,320
see Json is basically a syntax that's
5715
04:49:16,480 --> 04:49:20,840
similar to a JavaScript object syntax
5716
04:49:19,320 --> 04:49:24,280
but with less
5717
04:49:20,840 --> 04:49:26,760
features so why would we use Json syntax
5718
04:49:24,280 --> 04:49:29,718
instead of a JavaScript object
5719
04:49:26,760 --> 04:49:31,000
syntax a JavaScript object only makes
5720
04:49:29,718 --> 04:49:34,558
sense in
5721
04:49:31,000 --> 04:49:36,878
JavaScript on the other hand Json syntax
5722
04:49:34,558 --> 04:49:40,040
can be understood by almost every
5723
04:49:36,878 --> 04:49:41,200
programming language so Json syntax is
5724
04:49:40,040 --> 04:49:44,440
more un
5725
04:49:41,200 --> 04:49:47,680
Universal for this reason we use Json
5726
04:49:44,440 --> 04:49:49,440
when we send data between two computers
5727
04:49:47,680 --> 04:49:51,680
that might use different programming
5728
04:49:49,440 --> 04:49:55,040
languages we'll learn how to do this
5729
04:49:51,680 --> 04:49:57,558
later in the course we also use Json
5730
04:49:55,040 --> 04:49:59,680
when we store data we'll learn how to
5731
04:49:57,558 --> 04:50:02,558
store data in this
5732
04:49:59,680 --> 04:50:06,120
lesson now that we understand what Json
5733
04:50:02,558 --> 04:50:09,600
is let's learn about the built in Json
5734
04:50:06,120 --> 04:50:14,040
object the Json object helps us convert
5735
04:50:09,600 --> 04:50:17,520
a JavaScript object to Json for example
5736
04:50:14,040 --> 04:50:20,120
let's convert our object product two to
5737
04:50:17,520 --> 04:50:26,558
Json so we'll create some new
5738
04:50:20,120 --> 04:50:30,440
lines and we'll type the Json object do
5739
04:50:26,558 --> 04:50:33,638
stringify and Open Bracket close bracket
5740
04:50:30,440 --> 04:50:36,440
so stringify is a method of the Json
5741
04:50:33,638 --> 04:50:39,520
object so it's a function that is saved
5742
04:50:36,440 --> 04:50:41,280
inside this object and we can call this
5743
04:50:39,520 --> 04:50:43,760
function using
5744
04:50:41,280 --> 04:50:46,440
brackets between the brackets we can
5745
04:50:43,760 --> 04:50:50,200
give it a JavaScript object we want to
5746
04:50:46,440 --> 04:50:54,638
convert like Product
5747
04:50:50,200 --> 04:50:56,958
2 this will convert the object into Json
5748
04:50:54,638 --> 04:51:00,798
so now let's
5749
04:50:56,958 --> 04:51:00,798
console. log the
5750
04:51:01,520 --> 04:51:07,160
result and
5751
04:51:04,400 --> 04:51:10,680
save and in the console it will display
5752
04:51:07,160 --> 04:51:13,080
the product using Json syntax if we we
5753
04:51:10,680 --> 04:51:15,558
scroll up you'll notice that the
5754
04:51:13,080 --> 04:51:18,120
function that we saved in the object is
5755
04:51:15,558 --> 04:51:20,840
not inside the Json and that's because
5756
04:51:18,120 --> 04:51:23,718
Json does not support
5757
04:51:20,840 --> 04:51:26,360
functions so one thing to note about
5758
04:51:23,718 --> 04:51:31,878
stringify is that it actually results in
5759
04:51:26,360 --> 04:51:33,878
a string so at the front if we type type
5760
04:51:31,878 --> 04:51:36,320
of and
5761
04:51:33,878 --> 04:51:39,040
save it will tell us that the result
5762
04:51:36,320 --> 04:51:41,718
that it gives is actually a
5763
04:51:39,040 --> 04:51:44,240
string so if we remove
5764
04:51:41,718 --> 04:51:47,878
this and
5765
04:51:44,240 --> 04:51:50,920
save now this Json string is ready to be
5766
04:51:47,878 --> 04:51:51,878
sent to another computer or to be saved
5767
04:51:50,920 --> 04:51:54,840
in
5768
04:51:51,878 --> 04:51:57,958
storage next let's learn how to convert
5769
04:51:54,840 --> 04:52:01,120
the other way from a Json back to a
5770
04:51:57,958 --> 04:52:03,878
JavaScript object to do that we'll use
5771
04:52:01,120 --> 04:52:07,240
another method in the built-in Json
5772
04:52:03,878 --> 04:52:11,718
object called json.parse
5773
04:52:07,240 --> 04:52:13,200
at the end we'll type Jon
5774
04:52:11,718 --> 04:52:15,440
dop
5775
04:52:13,200 --> 04:52:18,040
pars and
5776
04:52:15,440 --> 04:52:20,280
brackets and between the brackets we can
5777
04:52:18,040 --> 04:52:22,878
put a Json string that we want to
5778
04:52:20,280 --> 04:52:26,000
convert so we actually have a Json
5779
04:52:22,878 --> 04:52:29,280
string up here so let's just make a copy
5780
04:52:26,000 --> 04:52:31,040
of this we'll select it
5781
04:52:29,280 --> 04:52:34,280
rightclick
5782
04:52:31,040 --> 04:52:40,080
copy and let's create an extra variable
5783
04:52:34,280 --> 04:52:46,280
to make it more clear const Json string
5784
04:52:40,080 --> 04:52:46,280
and make get equal to right click and
5785
04:52:46,558 --> 04:52:52,638
paste and now let's convert this Json
5786
04:52:49,160 --> 04:52:54,798
string back into an object by putting it
5787
04:52:52,638 --> 04:52:58,638
into
5788
04:52:54,798 --> 04:53:02,120
pars and finally we console.log this
5789
04:52:58,638 --> 04:53:02,120
result so
5790
04:53:05,240 --> 04:53:11,400
console.log and
5791
04:53:07,718 --> 04:53:15,718
save and json. pars will turn the Json
5792
04:53:11,400 --> 04:53:18,920
string back into a JavaScript object so
5793
04:53:15,718 --> 04:53:21,680
that's the built-in Json object it helps
5794
04:53:18,920 --> 04:53:24,558
us convert back and forth between a
5795
04:53:21,680 --> 04:53:27,160
JavaScript object and
5796
04:53:24,558 --> 04:53:30,600
Json now we're going to learn the next
5797
04:53:27,160 --> 04:53:33,520
built-in object called local storage
5798
04:53:30,600 --> 04:53:36,440
local storage is used to save values
5799
04:53:33,520 --> 04:53:38,680
more permanently so far we've been
5800
04:53:36,440 --> 04:53:41,520
saving our values in
5801
04:53:38,680 --> 04:53:44,400
variables however variables are
5802
04:53:41,520 --> 04:53:47,718
temporary they only exist on the current
5803
04:53:44,400 --> 04:53:51,320
page if we refresh the page or close the
5804
04:53:47,718 --> 04:53:54,120
page all the variables are deleted for
5805
04:53:51,320 --> 04:53:55,160
example if we go back to our rock paper
5806
04:53:54,120 --> 04:53:58,600
scissors
5807
04:53:55,160 --> 04:54:01,840
project and open the tab for this
5808
04:53:58,600 --> 04:54:06,558
project and we play a few
5809
04:54:01,840 --> 04:54:10,638
games and play it again so we have two
5810
04:54:06,558 --> 04:54:14,120
games if we refresh the page
5811
04:54:10,638 --> 04:54:15,878
notice the score starts from zero again
5812
04:54:14,120 --> 04:54:18,718
and that's because when we refresh the
5813
04:54:15,878 --> 04:54:22,200
page all of these variables are deleted
5814
04:54:18,718 --> 04:54:25,280
and the score gets reset back to zero
5815
04:54:22,200 --> 04:54:26,680
however if we press okay and go to
5816
04:54:25,280 --> 04:54:30,520
superimple
5817
04:54:26,680 --> 04:54:31,440
dodev and we refresh the page and we
5818
04:54:30,520 --> 04:54:34,360
play the
5819
04:54:31,440 --> 04:54:36,920
game notice that the score doesn't start
5820
04:54:34,360 --> 04:54:40,600
from zero it starts from the previous
5821
04:54:36,920 --> 04:54:42,920
score even though we refreshed the page
5822
04:54:40,600 --> 04:54:45,680
and that's because this project saves
5823
04:54:42,920 --> 04:54:47,760
the score in local storage and local
5824
04:54:45,680 --> 04:54:49,120
storage doesn't get deleted when we
5825
04:54:47,760 --> 04:54:52,120
refresh the
5826
04:54:49,120 --> 04:54:56,878
page now let's learn how to use local
5827
04:54:52,120 --> 04:54:59,280
storage in our project let's press okay
5828
04:54:56,878 --> 04:55:02,840
and we'll go back to our code and we'll
5829
04:54:59,280 --> 04:55:06,878
scroll down to where we update the
5830
04:55:02,840 --> 04:55:09,920
score so here after we update the score
5831
04:55:06,878 --> 04:55:11,920
we're going to save it in local storage
5832
04:55:09,920 --> 04:55:15,360
but first first let's learn how local
5833
04:55:11,920 --> 04:55:19,718
storage works so at the bottom here
5834
04:55:15,360 --> 04:55:21,400
we're going to type the local capital S
5835
04:55:19,718 --> 04:55:24,480
Storage
5836
04:55:21,400 --> 04:55:28,760
object to save a value inside local
5837
04:55:24,480 --> 04:55:34,600
storage it has a method called set item
5838
04:55:28,760 --> 04:55:38,080
so we can type dot set capital I item
5839
04:55:34,600 --> 04:55:40,798
and brackets because this is a method or
5840
04:55:38,080 --> 04:55:43,240
a function saved inside the object
5841
04:55:40,798 --> 04:55:46,680
object and we're going to give two
5842
04:55:43,240 --> 04:55:49,520
strings to this method the first string
5843
04:55:46,680 --> 04:55:52,798
is a name this is how we're going to
5844
04:55:49,520 --> 04:55:55,280
access the value that we save later so
5845
04:55:52,798 --> 04:55:59,320
let's use the string
5846
04:55:55,280 --> 04:56:02,080
message as the name and we'll type a
5847
04:55:59,320 --> 04:56:05,320
comma and then we'll type the value that
5848
04:56:02,080 --> 04:56:08,520
we want to save into local storage so
5849
04:56:05,320 --> 04:56:11,080
local storage only supports strings so
5850
04:56:08,520 --> 04:56:13,798
let's save the string
5851
04:56:11,080 --> 04:56:15,798
hello inside local
5852
04:56:13,798 --> 04:56:19,680
storage if we
5853
04:56:15,798 --> 04:56:20,638
save and then go back to our Tab and
5854
04:56:19,680 --> 04:56:23,878
play the
5855
04:56:20,638 --> 04:56:26,920
game it will run all this code and save
5856
04:56:23,878 --> 04:56:28,958
this string into local storage now let's
5857
04:56:26,920 --> 04:56:32,638
learn how to get this string out of
5858
04:56:28,958 --> 04:56:35,080
local storage we'll press okay and we'll
5859
04:56:32,638 --> 04:56:38,360
scroll to the
5860
04:56:35,080 --> 04:56:40,000
top and when we first load the page
5861
04:56:38,360 --> 04:56:44,040
we're going to get that value out of
5862
04:56:40,000 --> 04:56:46,520
local local storage by typing local
5863
04:56:44,040 --> 04:56:49,480
capital S
5864
04:56:46,520 --> 04:56:51,878
storage. getet item this
5865
04:56:49,480 --> 04:56:55,120
time and
5866
04:56:51,878 --> 04:56:57,798
brackets so the get item method gets a
5867
04:56:55,120 --> 04:57:00,520
value out of local storage and we're
5868
04:56:57,798 --> 04:57:03,280
going to give it one string so this
5869
04:57:00,520 --> 04:57:05,760
string is the name that we used earlier
5870
04:57:03,280 --> 04:57:07,840
which was message so we'll type the
5871
04:57:05,760 --> 04:57:11,280
string
5872
04:57:07,840 --> 04:57:14,798
message now let's console log this
5873
04:57:11,280 --> 04:57:14,798
result so
5874
04:57:16,718 --> 04:57:21,958
console.log and a bracket at the
5875
04:57:19,638 --> 04:57:24,718
end and
5876
04:57:21,958 --> 04:57:28,200
save it will get the value that we saved
5877
04:57:24,718 --> 04:57:31,160
earlier out of local storage so we saved
5878
04:57:28,200 --> 04:57:33,200
the string hello and that's exactly what
5879
04:57:31,160 --> 04:57:36,200
gets displayed in the
5880
04:57:33,200 --> 04:57:38,240
console so using local storage we were
5881
04:57:36,200 --> 04:57:41,480
able to get the value that we saved
5882
04:57:38,240 --> 04:57:44,920
earlier even though we refresh the
5883
04:57:41,480 --> 04:57:47,718
page now let's save our score into local
5884
04:57:44,920 --> 04:57:52,520
storage so it doesn't get reset when we
5885
04:57:47,718 --> 04:57:52,520
refresh the page so let's scroll to the
5886
04:57:52,680 --> 04:57:57,638
bottom and instead of using the name
5887
04:57:55,160 --> 04:58:01,440
message we're going to use the name
5888
04:57:57,638 --> 04:58:02,558
score to save our score and instead of
5889
04:58:01,440 --> 04:58:06,400
the string
5890
04:58:02,558 --> 04:58:09,160
hello we're going to save the score
5891
04:58:06,400 --> 04:58:12,280
object now one problem here is that
5892
04:58:09,160 --> 04:58:15,040
local storage only supports strings so
5893
04:58:12,280 --> 04:58:17,400
we need to convert our object into a
5894
04:58:15,040 --> 04:58:20,638
string and we actually learned how to do
5895
04:58:17,400 --> 04:58:24,718
this earlier using json.stringify
5896
04:58:20,638 --> 04:58:27,120
so at the front we can type
5897
04:58:24,718 --> 04:58:30,878
json.
5898
04:58:27,120 --> 04:58:33,558
stringify and then brackets around the
5899
04:58:30,878 --> 04:58:36,798
score and this will convert the
5900
04:58:33,558 --> 04:58:39,320
JavaScript object score into a Json
5901
04:58:36,798 --> 04:58:41,320
string and then it's ready to be saved
5902
04:58:39,320 --> 04:58:45,638
in local store
5903
04:58:41,320 --> 04:58:48,718
so if we save this and then play the
5904
04:58:45,638 --> 04:58:50,760
game it will run this code and save our
5905
04:58:48,718 --> 04:58:53,040
score into local
5906
04:58:50,760 --> 04:58:57,200
storage now let's press
5907
04:58:53,040 --> 04:58:57,200
okay and then's scroll up to the
5908
04:58:57,440 --> 04:59:02,638
top and now instead of getting the
5909
04:58:59,958 --> 04:59:05,798
message we're going to get the score out
5910
04:59:02,638 --> 04:59:08,798
of local storage if we
5911
04:59:05,798 --> 04:59:11,200
save now when we load the page we're
5912
04:59:08,798 --> 04:59:13,878
able to get the score that we saved from
5913
04:59:11,200 --> 04:59:16,840
last time as a Json
5914
04:59:13,878 --> 04:59:19,480
string the last step is instead of
5915
04:59:16,840 --> 04:59:21,320
resetting the score to zero every time
5916
04:59:19,480 --> 04:59:24,920
we're just going to use the score from
5917
04:59:21,320 --> 04:59:28,040
local storage before we do that remember
5918
04:59:24,920 --> 04:59:30,760
that this is just a string so we need to
5919
04:59:28,040 --> 04:59:33,200
convert this back to an
5920
04:59:30,760 --> 04:59:38,400
object we also learned how to do this
5921
04:59:33,200 --> 04:59:41,558
earlier using json. pars so at the
5922
04:59:38,400 --> 04:59:45,798
front we can type
5923
04:59:41,558 --> 04:59:49,440
json. pars and then Open Bracket and at
5924
04:59:45,798 --> 04:59:53,200
the end a close bracket and it will
5925
04:59:49,440 --> 04:59:55,760
convert this back to an object if we
5926
04:59:53,200 --> 04:59:59,638
save it will convert the score from a
5927
04:59:55,760 --> 05:00:02,718
Json string back to an object so now we
5928
04:59:59,638 --> 05:00:06,760
can use it up here so instead of doing
5929
05:00:02,718 --> 05:00:11,600
this we'll remove it and replace it with
5930
05:00:06,760 --> 05:00:16,000
this code so right click cut
5931
05:00:11,600 --> 05:00:19,840
and then here right click and
5932
05:00:16,000 --> 05:00:19,840
paste and we'll remove
5933
05:00:21,000 --> 05:00:26,798
console.log and
5934
05:00:23,558 --> 05:00:30,160
save so now when we load the page it
5935
05:00:26,798 --> 05:00:31,600
will load the score from local storage
5936
05:00:30,160 --> 05:00:34,360
if we play the
5937
05:00:31,600 --> 05:00:36,600
game notice that the score doesn't start
5938
05:00:34,360 --> 05:00:40,040
from zero it starts from the score that
5939
05:00:36,600 --> 05:00:44,558
we had last time let's review what we
5940
05:00:40,040 --> 05:00:48,320
did step by step first when we update
5941
05:00:44,558 --> 05:00:50,600
our score in this code after we update
5942
05:00:48,320 --> 05:00:54,400
the score we're going to save it in
5943
05:00:50,600 --> 05:00:57,440
local storage using local storage. set
5944
05:00:54,400 --> 05:01:00,400
item now local storage only supports
5945
05:00:57,440 --> 05:01:05,360
strings so we have to convert our score
5946
05:01:00,400 --> 05:01:07,920
object into a Json string using json.
5947
05:01:05,360 --> 05:01:11,400
stringify and then after we've saved
5948
05:01:07,920 --> 05:01:14,798
this into local storage when we load the
5949
05:01:11,400 --> 05:01:17,160
page up here we're going to load the
5950
05:01:14,798 --> 05:01:21,958
score that we just saved from local
5951
05:01:17,160 --> 05:01:24,958
storage using local storage. getet item
5952
05:01:21,958 --> 05:01:27,120
and the score was saved as a Json string
5953
05:01:24,958 --> 05:01:30,558
so we need to convert it back into an
5954
05:01:27,120 --> 05:01:34,120
object using json.parse
5955
05:01:30,558 --> 05:01:36,480
so that's how we use the Json object and
5956
05:01:34,120 --> 05:01:38,200
the local storage object to save our
5957
05:01:36,480 --> 05:01:40,920
score more
5958
05:01:38,200 --> 05:01:43,200
permanently let's press okay
5959
05:01:40,920 --> 05:01:46,360
okay and the last feature we're going to
5960
05:01:43,200 --> 05:01:49,280
add is when we click the reset score
5961
05:01:46,360 --> 05:01:52,400
button we also need to remove the score
5962
05:01:49,280 --> 05:01:55,040
from local storage otherwise if we press
5963
05:01:52,400 --> 05:01:58,240
reset score and
5964
05:01:55,040 --> 05:02:00,400
refresh and then play the game it will
5965
05:01:58,240 --> 05:02:03,040
just grab the old score from local
5966
05:02:00,400 --> 05:02:07,600
storage so reset score doesn't really
5967
05:02:03,040 --> 05:02:11,638
work here let's press okay and fix this
5968
05:02:07,600 --> 05:02:14,638
issue so here in the set score button at
5969
05:02:11,638 --> 05:02:18,120
the end we're going to remove the score
5970
05:02:14,638 --> 05:02:19,798
from local storage so we'll type
5971
05:02:18,120 --> 05:02:24,120
local
5972
05:02:19,798 --> 05:02:27,798
storage and then a method called do
5973
05:02:24,120 --> 05:02:30,400
remove item and
5974
05:02:27,798 --> 05:02:32,638
brackets and between the brackets we're
5975
05:02:30,400 --> 05:02:34,958
going to tell local storage which value
5976
05:02:32,638 --> 05:02:37,718
we want to remove so we're going to
5977
05:02:34,958 --> 05:02:40,558
remove the score so we'll type the
5978
05:02:37,718 --> 05:02:41,638
string score
5979
05:02:40,558 --> 05:02:45,600
if we
5980
05:02:41,638 --> 05:02:48,760
save and we click the reset button and
5981
05:02:45,600 --> 05:02:49,798
then we refresh the page and try to play
5982
05:02:48,760 --> 05:02:52,718
the game
5983
05:02:49,798 --> 05:02:55,878
again unfortunately it now gives us an
5984
05:02:52,718 --> 05:02:58,040
error so what is happening here so
5985
05:02:55,878 --> 05:03:00,680
remember that we remov the score from
5986
05:02:58,040 --> 05:03:04,760
local storage so now when we load the
5987
05:03:00,680 --> 05:03:07,160
page this actually doesn't exist when
5988
05:03:04,760 --> 05:03:09,400
something doesn't exist in local storage
5989
05:03:07,160 --> 05:03:11,040
it's going to give us a value called
5990
05:03:09,400 --> 05:03:12,280
null
5991
05:03:11,040 --> 05:03:15,400
and at the
5992
05:03:12,280 --> 05:03:18,878
bottom if we try to access any property
5993
05:03:15,400 --> 05:03:21,360
on null it will give us an error so
5994
05:03:18,878 --> 05:03:24,958
that's what we see here so how do we
5995
05:03:21,360 --> 05:03:28,360
solve this problem if we scroll
5996
05:03:24,958 --> 05:03:31,400
up one way to solve this problem is that
5997
05:03:28,360 --> 05:03:34,400
if there is no score in local storage
5998
05:03:31,400 --> 05:03:37,320
we're going to give it a default value
5999
05:03:34,400 --> 05:03:39,320
let's look at how we can do that so
6000
05:03:37,320 --> 05:03:42,638
after this line we're going to check if
6001
05:03:39,320 --> 05:03:47,520
the score is null we can do that using
6002
05:03:42,638 --> 05:03:51,920
an if statement if brackets and curly
6003
05:03:47,520 --> 05:03:54,558
brackets and we'll check if score is
6004
05:03:51,920 --> 05:03:57,558
equal to
6005
05:03:54,558 --> 05:04:00,558
null and if it is equal to null we're
6006
05:03:57,558 --> 05:04:01,958
going to give this a default score so
6007
05:04:00,558 --> 05:04:06,480
inside the curly
6008
05:04:01,958 --> 05:04:10,000
brackets we'll just make the score equal
6009
05:04:06,480 --> 05:04:11,400
to the default object we had earlier
6010
05:04:10,000 --> 05:04:15,240
which was
6011
05:04:11,400 --> 05:04:18,558
wins zero and then
6012
05:04:15,240 --> 05:04:20,080
losses zero and
6013
05:04:18,558 --> 05:04:23,160
ties
6014
05:04:20,080 --> 05:04:25,680
zero and remember if we need to reassign
6015
05:04:23,160 --> 05:04:29,480
a variable we have to change it from
6016
05:04:25,680 --> 05:04:32,558
const to let if we
6017
05:04:29,480 --> 05:04:35,400
save the score will be null because we
6018
05:04:32,558 --> 05:04:38,120
removed it earlier and now this will
6019
05:04:35,400 --> 05:04:40,360
give it a default score so everything
6020
05:04:38,120 --> 05:04:41,600
should work as before
6021
05:04:40,360 --> 05:04:44,520
if we play the
6022
05:04:41,600 --> 05:04:47,120
game you'll notice that the score starts
6023
05:04:44,520 --> 05:04:49,718
from zero or this default score and
6024
05:04:47,120 --> 05:04:51,958
everything is working again so that's
6025
05:04:49,718 --> 05:04:54,558
how we create the score feature in the
6026
05:04:51,958 --> 05:04:56,400
rock paper scissors project as well as
6027
05:04:54,558 --> 05:04:59,080
the reset score
6028
05:04:56,400 --> 05:05:02,558
feature next we're going to use some
6029
05:04:59,080 --> 05:05:04,600
shortcuts to simplify our code so these
6030
05:05:02,558 --> 05:05:08,840
shortcuts are things that we learned in
6031
05:05:04,600 --> 05:05:10,320
the Boolean lesson so remember that null
6032
05:05:08,840 --> 05:05:13,040
is a falsy
6033
05:05:10,320 --> 05:05:16,440
value that means it will behave just
6034
05:05:13,040 --> 05:05:19,240
like false so a shortcut we can use here
6035
05:05:16,440 --> 05:05:24,080
is instead of checking if the score is
6036
05:05:19,240 --> 05:05:27,440
equal to null we can also remove this
6037
05:05:24,080 --> 05:05:31,120
and check if not
6038
05:05:27,440 --> 05:05:34,600
score so not score does the same thing
6039
05:05:31,120 --> 05:05:39,080
as checking if it's null if the score is
6040
05:05:34,600 --> 05:05:42,200
null not score will flip it into true so
6041
05:05:39,080 --> 05:05:45,558
both of these will return true if the
6042
05:05:42,200 --> 05:05:49,040
score exists it's an object then both of
6043
05:05:45,558 --> 05:05:52,480
these will return false so instead of
6044
05:05:49,040 --> 05:05:56,040
checking if a value is equal to null we
6045
05:05:52,480 --> 05:05:58,400
can just use the not operator as a
6046
05:05:56,040 --> 05:06:01,520
shortcut now also from the boolean's
6047
05:05:58,400 --> 05:06:05,000
lesson we have an even shorter shortcut
6048
05:06:01,520 --> 05:06:08,440
for doing this so notice here that this
6049
05:06:05,000 --> 05:06:11,680
code basically sets a default value if
6050
05:06:08,440 --> 05:06:14,360
the score doesn't exist in the boolean's
6051
05:06:11,680 --> 05:06:17,200
lesson we learned a technique called the
6052
05:06:14,360 --> 05:06:21,520
default operator which is exactly what
6053
05:06:17,200 --> 05:06:26,160
we need here so on this line we can
6054
05:06:21,520 --> 05:06:30,280
remove the semicolon and type
6055
05:06:26,160 --> 05:06:33,840
or and then a default value so we want
6056
05:06:30,280 --> 05:06:36,920
our default value to be this object so
6057
05:06:33,840 --> 05:06:40,040
let's select it and then
6058
05:06:36,920 --> 05:06:45,120
rightclick copy
6059
05:06:40,040 --> 05:06:48,558
and then here right click and
6060
05:06:45,120 --> 05:06:52,558
paste and I'll select these lines and
6061
05:06:48,558 --> 05:06:55,718
press shift tab to remove and indent and
6062
05:06:52,558 --> 05:06:58,600
I'll add a semicolon back at the
6063
05:06:55,718 --> 05:07:02,160
end so the way that the default operator
6064
05:06:58,600 --> 05:07:05,000
works is that if the left side is truthy
6065
05:07:02,160 --> 05:07:08,160
so in this case we have a score it will
6066
05:07:05,000 --> 05:07:11,600
use the left side if the left side is
6067
05:07:08,160 --> 05:07:14,120
falsy or in this case the score is null
6068
05:07:11,600 --> 05:07:17,520
then we will use the right side as a
6069
05:07:14,120 --> 05:07:21,320
default value so this does the same
6070
05:07:17,520 --> 05:07:24,480
thing as this code below but it's just a
6071
05:07:21,320 --> 05:07:27,240
shortcut so now let's comment out this
6072
05:07:24,480 --> 05:07:31,160
code using
6073
05:07:27,240 --> 05:07:33,000
slashstar and at the bottom start slash
6074
05:07:31,160 --> 05:07:35,760
so we'll leave it here just for
6075
05:07:33,000 --> 05:07:40,000
reference and then
6076
05:07:35,760 --> 05:07:41,240
save and if we click reset score again
6077
05:07:40,000 --> 05:07:43,600
and
6078
05:07:41,240 --> 05:07:47,240
refresh and play the
6079
05:07:43,600 --> 05:07:49,840
game it will still work so this is a
6080
05:07:47,240 --> 05:07:52,680
perfect situation to use the default
6081
05:07:49,840 --> 05:07:55,360
operator to simplify our
6082
05:07:52,680 --> 05:07:57,558
code so let's press
6083
05:07:55,360 --> 05:08:00,080
okay and that's all we're going to do
6084
05:07:57,558 --> 05:08:03,040
for this project in this
6085
05:08:00,080 --> 05:08:06,040
lesson now let's move on and learn more
6086
05:08:03,040 --> 05:08:09,958
details about objects the first thing
6087
05:08:06,040 --> 05:08:12,798
we'll learn is the value null so null is
6088
05:08:09,958 --> 05:08:15,840
one of the falsy values in JavaScript
6089
05:08:12,798 --> 05:08:18,000
it's similar to the value undefined they
6090
05:08:15,840 --> 05:08:20,840
both represent that something doesn't
6091
05:08:18,000 --> 05:08:24,638
have a value so what's the difference
6092
05:08:20,840 --> 05:08:26,958
between null and undefined we use null
6093
05:08:24,638 --> 05:08:30,240
when we intentionally want something to
6094
05:08:26,958 --> 05:08:33,160
be empty for example in the previous
6095
05:08:30,240 --> 05:08:35,840
lesson we learned that if a function has
6096
05:08:33,160 --> 05:08:38,840
parameters we can give the parameter a
6097
05:08:35,840 --> 05:08:40,000
default value if the parameter is
6098
05:08:38,840 --> 05:08:43,440
undefined
6099
05:08:40,000 --> 05:08:46,280
it will use the default value however if
6100
05:08:43,440 --> 05:08:48,798
we set this parameter to null it will
6101
05:08:46,280 --> 05:08:52,200
not use the default value and it will
6102
05:08:48,798 --> 05:08:55,200
just use null so null means we
6103
05:08:52,200 --> 05:08:58,120
intentionally want something to be
6104
05:08:55,200 --> 05:09:02,240
empty in most cases though null and
6105
05:08:58,120 --> 05:09:04,200
undefined work the same way okay so the
6106
05:09:02,240 --> 05:09:06,160
next detail about objects we're going to
6107
05:09:04,200 --> 05:09:09,718
learn is called
6108
05:09:06,160 --> 05:09:13,000
autoboxing let's go back to objects. HT
6109
05:09:09,718 --> 05:09:15,680
HML and open the tab for this
6110
05:09:13,000 --> 05:09:17,958
file and let's also comment out the
6111
05:09:15,680 --> 05:09:20,160
previous code so our console doesn't get
6112
05:09:17,958 --> 05:09:22,520
too messy so
6113
05:09:20,160 --> 05:09:26,520
slashstar and at the
6114
05:09:22,520 --> 05:09:29,440
bottom star slash and
6115
05:09:26,520 --> 05:09:32,240
save so let's scroll
6116
05:09:29,440 --> 05:09:35,638
down we learned in this lesson that
6117
05:09:32,240 --> 05:09:37,840
objects can have properties and methods
6118
05:09:35,638 --> 05:09:40,320
so you might be surprised to learn that
6119
05:09:37,840 --> 05:09:44,280
other values also have have properties
6120
05:09:40,320 --> 05:09:46,878
and methods for example at the bottom
6121
05:09:44,280 --> 05:09:48,600
we're going to type
6122
05:09:46,878 --> 05:09:51,718
console.
6123
05:09:48,600 --> 05:09:55,360
log the string
6124
05:09:51,718 --> 05:09:58,520
hello and then the dot notation and a
6125
05:09:55,360 --> 05:10:01,638
property called
6126
05:09:58,520 --> 05:10:04,400
length so strings can also have
6127
05:10:01,638 --> 05:10:07,120
properties the length property tells us
6128
05:10:04,400 --> 05:10:11,400
how many characters or letters are in
6129
05:10:07,120 --> 05:10:15,798
this string so hello has five letters so
6130
05:10:11,400 --> 05:10:21,760
if we save the length property will be
6131
05:10:15,798 --> 05:10:25,558
five here's another example we'll type
6132
05:10:21,760 --> 05:10:29,360
console.log the string hello and then
6133
05:10:25,558 --> 05:10:36,520
the dot notation and a method this time
6134
05:10:29,360 --> 05:10:39,638
2 capital u upper Capital C case and
6135
05:10:36,520 --> 05:10:42,000
brackets so this string also has a
6136
05:10:39,638 --> 05:10:44,600
method called two
6137
05:10:42,000 --> 05:10:47,440
uppercase and this method gives us a
6138
05:10:44,600 --> 05:10:49,240
copy of the string with all letters
6139
05:10:47,440 --> 05:10:53,080
capitalized or in
6140
05:10:49,240 --> 05:10:55,160
uppercase if we save it will give us
6141
05:10:53,080 --> 05:10:58,600
hello in capital
6142
05:10:55,160 --> 05:11:01,280
letters so as you can see simple values
6143
05:10:58,600 --> 05:11:02,440
like strings can also have properties
6144
05:11:01,280 --> 05:11:05,160
and
6145
05:11:02,440 --> 05:11:08,280
methods so now you might be wondering
6146
05:11:05,160 --> 05:11:11,878
these are strings not objects how can
6147
05:11:08,280 --> 05:11:13,920
strings have properties and methods the
6148
05:11:11,878 --> 05:11:17,718
answer is that JavaScript has a special
6149
05:11:13,920 --> 05:11:20,440
feature called Auto boxing JavaScript
6150
05:11:17,718 --> 05:11:23,718
automatically wraps this string in a
6151
05:11:20,440 --> 05:11:27,080
special object first and this object has
6152
05:11:23,718 --> 05:11:29,840
the property length and the method to
6153
05:11:27,080 --> 05:11:32,360
uppercase so this is done automatically
6154
05:11:29,840 --> 05:11:35,000
we don't see the special object that's
6155
05:11:32,360 --> 05:11:36,840
wrapped around this string so this
6156
05:11:35,000 --> 05:11:39,200
feature is called
6157
05:11:36,840 --> 05:11:41,760
autoboxing because JavaScript automat
6158
05:11:39,200 --> 05:11:43,520
automatically wraps the string in an
6159
05:11:41,760 --> 05:11:46,878
object like a
6160
05:11:43,520 --> 05:11:49,680
box so autoboxing also works with other
6161
05:11:46,878 --> 05:11:52,280
types of values like numbers and
6162
05:11:49,680 --> 05:11:55,200
booleans the only thing is that auto
6163
05:11:52,280 --> 05:11:58,520
boxing does not work with null and
6164
05:11:55,200 --> 05:12:00,680
undefined it would just give us an
6165
05:11:58,520 --> 05:12:02,840
error The Last Detail we're going to
6166
05:12:00,680 --> 05:12:07,080
learn about objects is a really
6167
05:12:02,840 --> 05:12:10,120
important detail and that is objects are
6168
05:12:07,080 --> 05:12:13,958
references to demonstrate let's create a
6169
05:12:10,120 --> 05:12:19,718
new variable with an object so
6170
05:12:13,958 --> 05:12:23,080
const object one and make it equal to an
6171
05:12:19,718 --> 05:12:24,680
object inside this object let's have a
6172
05:12:23,080 --> 05:12:29,200
property
6173
05:12:24,680 --> 05:12:31,798
message colon and the string
6174
05:12:29,200 --> 05:12:34,958
hello so you might think that when we
6175
05:12:31,798 --> 05:12:37,718
create an object like this we create a
6176
05:12:34,958 --> 05:12:40,920
value that has other values inside and
6177
05:12:37,718 --> 05:12:43,280
we save the whole thing and a variable
6178
05:12:40,920 --> 05:12:46,558
however this actually works a little
6179
05:12:43,280 --> 05:12:49,240
differently when we create this object
6180
05:12:46,558 --> 05:12:52,680
the actual value is created somewhere in
6181
05:12:49,240 --> 05:12:54,840
the computer's memory and this variable
6182
05:12:52,680 --> 05:12:56,600
actually just gets a reference that
6183
05:12:54,840 --> 05:12:59,200
points to that location in the
6184
05:12:56,600 --> 05:13:02,080
computer's memory this is like a
6185
05:12:59,200 --> 05:13:04,240
shortcut on your computer a shortcut
6186
05:13:02,080 --> 05:13:07,440
points to where the actual file or
6187
05:13:04,240 --> 05:13:09,638
folder is so there's no way to actually
6188
05:13:07,440 --> 05:13:12,160
see this reference but just just know
6189
05:13:09,638 --> 05:13:14,480
that this is a reference and the object
6190
05:13:12,160 --> 05:13:17,240
is somewhere else in the computer's
6191
05:13:14,480 --> 05:13:19,878
memory so the reason it works this way
6192
05:13:17,240 --> 05:13:23,040
is to make the language more efficient
6193
05:13:19,878 --> 05:13:27,360
for example below this line we can
6194
05:13:23,040 --> 05:13:33,200
create a variable const and call it
6195
05:13:27,360 --> 05:13:36,638
object 2 and make it equal to object
6196
05:13:33,200 --> 05:13:40,040
one so this code doesn't actually make a
6197
05:13:36,638 --> 05:13:42,840
copy of the object it this makes a copy
6198
05:13:40,040 --> 05:13:45,320
of the reference that points to the
6199
05:13:42,840 --> 05:13:48,200
object so this makes a language more
6200
05:13:45,320 --> 05:13:51,040
efficient because if we had a really big
6201
05:13:48,200 --> 05:13:54,040
object here it's not good to copy the
6202
05:13:51,040 --> 05:13:57,080
entire object over and over again
6203
05:13:54,040 --> 05:14:00,480
instead Javas just copies the reference
6204
05:13:57,080 --> 05:14:02,080
which is much faster this is called copy
6205
05:14:00,480 --> 05:14:04,240
by
6206
05:14:02,080 --> 05:14:06,920
reference now that we learned that
6207
05:14:04,240 --> 05:14:09,840
objects are actually references let's
6208
05:14:06,920 --> 05:14:13,160
learn some interesting behaviors of
6209
05:14:09,840 --> 05:14:16,200
references so at the bottom here we're
6210
05:14:13,160 --> 05:14:19,360
going to change the property message in
6211
05:14:16,200 --> 05:14:22,600
this object we can do that by typing the
6212
05:14:19,360 --> 05:14:27,000
object object
6213
05:14:22,600 --> 05:14:32,280
1. message property and make it equal to
6214
05:14:27,000 --> 05:14:35,480
something else like the string good
6215
05:14:32,280 --> 05:14:40,400
job and now if we
6216
05:14:35,480 --> 05:14:40,400
console. log object one
6217
05:14:40,520 --> 05:14:44,798
and
6218
05:14:41,878 --> 05:14:47,040
save notice that we were able to change
6219
05:14:44,798 --> 05:14:50,718
the message property even though we
6220
05:14:47,040 --> 05:14:53,120
created object one with const and that's
6221
05:14:50,718 --> 05:14:56,440
because this variable just contains a
6222
05:14:53,120 --> 05:14:58,718
reference that points to the object so
6223
05:14:56,440 --> 05:15:01,320
const prevents us from changing the
6224
05:14:58,718 --> 05:15:03,240
reference in the variable but it doesn't
6225
05:15:01,320 --> 05:15:05,480
prevent us from reaching into the
6226
05:15:03,240 --> 05:15:08,240
reference and changing the object that
6227
05:15:05,480 --> 05:15:10,600
it's pointing to so just be careful when
6228
05:15:08,240 --> 05:15:13,040
you're working with with objects even
6229
05:15:10,600 --> 05:15:16,520
though we use const we can still change
6230
05:15:13,040 --> 05:15:18,920
the values inside the object another
6231
05:15:16,520 --> 05:15:21,638
interesting behavior is that on this
6232
05:15:18,920 --> 05:15:24,638
line we're not actually copying the
6233
05:15:21,638 --> 05:15:28,160
object into this variable we're copying
6234
05:15:24,638 --> 05:15:31,040
the reference so object two actually has
6235
05:15:28,160 --> 05:15:33,240
the same reference as object one they
6236
05:15:31,040 --> 05:15:34,878
actually point to the same object in the
6237
05:15:33,240 --> 05:15:38,480
computer's
6238
05:15:34,878 --> 05:15:40,920
memory so at the bottom if we type
6239
05:15:38,480 --> 05:15:40,920
console
6240
05:15:41,040 --> 05:15:50,638
log object 2 and save you'll notice that
6241
05:15:47,480 --> 05:15:53,360
for object two the message property was
6242
05:15:50,638 --> 05:15:56,798
also changed even though we only changed
6243
05:15:53,360 --> 05:15:59,120
object one the last interesting behavior
6244
05:15:56,798 --> 05:16:02,718
is that we can't compare objects
6245
05:15:59,120 --> 05:16:06,120
directly for example let's go to the
6246
05:16:02,718 --> 05:16:07,920
bottom and we'll create a new object
6247
05:16:06,120 --> 05:16:12,200
using
6248
05:16:07,920 --> 05:16:15,718
const object 3 and we'll make it equal
6249
05:16:12,200 --> 05:16:19,040
to an object and then inside we're going
6250
05:16:15,718 --> 05:16:22,480
to have these same values as object one
6251
05:16:19,040 --> 05:16:29,400
so we'll have the property
6252
05:16:22,480 --> 05:16:33,200
message and the value is the string good
6253
05:16:29,400 --> 05:16:39,120
job so now let's try comparing object 3
6254
05:16:33,200 --> 05:16:40,280
to object one so here we'll type console
6255
05:16:39,120 --> 05:16:46,920
do
6256
05:16:40,280 --> 05:16:48,400
log and check if object 3 is equal to
6257
05:16:46,920 --> 05:16:50,520
object
6258
05:16:48,400 --> 05:16:53,120
one if we
6259
05:16:50,520 --> 05:16:56,320
save it will tell us that these two
6260
05:16:53,120 --> 05:16:59,600
objects are not equal to each other even
6261
05:16:56,320 --> 05:17:02,440
though they have the same values inside
6262
05:16:59,600 --> 05:17:06,320
and that's because remember objects are
6263
05:17:02,440 --> 05:17:09,000
references so object 3 also contains a
6264
05:17:06,320 --> 05:17:12,040
reference and this code compares the
6265
05:17:09,000 --> 05:17:15,040
references and not the values inside the
6266
05:17:12,040 --> 05:17:17,680
object so because object 3 is a
6267
05:17:15,040 --> 05:17:20,558
different reference than object one
6268
05:17:17,680 --> 05:17:22,440
that's why this code results in
6269
05:17:20,558 --> 05:17:24,400
false if we
6270
05:17:22,440 --> 05:17:30,240
did
6271
05:17:24,400 --> 05:17:33,320
console. log and we check if object 2 is
6272
05:17:30,240 --> 05:17:37,040
equal to object
6273
05:17:33,320 --> 05:17:39,440
1 object two has the same reference as
6274
05:17:37,040 --> 05:17:43,440
object one it points to the the same
6275
05:17:39,440 --> 05:17:46,000
object in the computer's memory so if we
6276
05:17:43,440 --> 05:17:48,240
save this will tell us that these two
6277
05:17:46,000 --> 05:17:50,480
variables have the same
6278
05:17:48,240 --> 05:17:52,400
reference so just remember that when
6279
05:17:50,480 --> 05:17:54,320
you're comparing two variables that
6280
05:17:52,400 --> 05:17:57,920
contain objects you're actually
6281
05:17:54,320 --> 05:18:00,520
comparing the references not the values
6282
05:17:57,920 --> 05:18:03,080
inside if we want to compare the values
6283
05:18:00,520 --> 05:18:05,760
inside we would do that manually by
6284
05:18:03,080 --> 05:18:09,040
checking the message property against
6285
05:18:05,760 --> 05:18:11,000
this message property so don't worry
6286
05:18:09,040 --> 05:18:13,320
object references are a little confusing
6287
05:18:11,000 --> 05:18:15,400
at first but the more you work with it
6288
05:18:13,320 --> 05:18:17,638
the more you just get used to
6289
05:18:15,400 --> 05:18:20,798
it the last thing we're going to learn
6290
05:18:17,638 --> 05:18:24,320
in this lesson are some shortcuts for
6291
05:18:20,798 --> 05:18:28,920
objects so first let's make a copy of
6292
05:18:24,320 --> 05:18:31,000
object 3 we'll select the code and
6293
05:18:28,920 --> 05:18:33,760
rightclick
6294
05:18:31,000 --> 05:18:37,840
copy and then at the
6295
05:18:33,760 --> 05:18:40,440
bottom we'll scroll down and right click
6296
05:18:37,840 --> 05:18:45,360
and paste
6297
05:18:40,440 --> 05:18:48,400
and let's rename this variable to object
6298
05:18:45,360 --> 05:18:52,240
4 so now let's say that we want to get
6299
05:18:48,400 --> 05:18:56,638
the message property out of this object
6300
05:18:52,240 --> 05:18:58,718
we can do that by typing object
6301
05:18:56,638 --> 05:19:01,320
4.
6302
05:18:58,718 --> 05:19:04,000
message and now let's also say that we
6303
05:19:01,320 --> 05:19:07,480
want to save this in a variable also
6304
05:19:04,000 --> 05:19:10,120
called message so at the front we'll
6305
05:19:07,480 --> 05:19:15,320
type con
6306
05:19:10,120 --> 05:19:18,680
message and make it equal to this
6307
05:19:15,320 --> 05:19:21,040
value so now if the variable name and
6308
05:19:18,680 --> 05:19:24,120
the property name are the same we
6309
05:19:21,040 --> 05:19:28,280
actually have a shortcut for this to use
6310
05:19:24,120 --> 05:19:31,000
a shortcut we're going to type const and
6311
05:19:28,280 --> 05:19:35,878
curly brackets
6312
05:19:31,000 --> 05:19:39,320
message and make it equal to object
6313
05:19:35,878 --> 05:19:41,718
4 so this shortcut is called
6314
05:19:39,320 --> 05:19:45,080
destructuring this will take the message
6315
05:19:41,718 --> 05:19:48,320
property out of object 4 and save it in
6316
05:19:45,080 --> 05:19:51,200
a variable called message so this line
6317
05:19:48,320 --> 05:19:54,240
of code does the same thing as the code
6318
05:19:51,200 --> 05:19:56,920
above so let's comment out this line
6319
05:19:54,240 --> 05:20:00,920
using double slash and we'll just keep
6320
05:19:56,920 --> 05:20:03,878
it for reference so at the bottom if we
6321
05:20:00,920 --> 05:20:03,878
type
6322
05:20:04,360 --> 05:20:09,840
console.log
6323
05:20:06,400 --> 05:20:12,680
message and Save
6324
05:20:09,840 --> 05:20:15,320
it will display good job so the
6325
05:20:12,680 --> 05:20:18,120
destructuring shortcut took the property
6326
05:20:15,320 --> 05:20:19,520
out of the object and saved it in this
6327
05:20:18,120 --> 05:20:22,040
message
6328
05:20:19,520 --> 05:20:24,558
variable next we can use this
6329
05:20:22,040 --> 05:20:28,040
destructuring shortcut for multiple
6330
05:20:24,558 --> 05:20:31,840
properties for example let's add another
6331
05:20:28,040 --> 05:20:37,638
property to this object using comma and
6332
05:20:31,840 --> 05:20:40,440
we'll add a price property colon
6333
05:20:37,638 --> 05:20:43,638
$7.99 and now we can take the price
6334
05:20:40,440 --> 05:20:48,200
property out of this object by typing
6335
05:20:43,638 --> 05:20:50,638
after message a comma and
6336
05:20:48,200 --> 05:20:53,638
price so this will take the price
6337
05:20:50,638 --> 05:20:55,878
property out of the object and save it
6338
05:20:53,638 --> 05:20:59,958
in a variable called
6339
05:20:55,878 --> 05:20:59,958
price if we
6340
05:21:00,080 --> 05:21:04,558
console.log the
6341
05:21:02,480 --> 05:21:08,958
price and
6342
05:21:04,558 --> 05:21:11,360
save it will display $799
6343
05:21:08,958 --> 05:21:13,600
so that's the destructuring shortcut
6344
05:21:11,360 --> 05:21:14,920
it's an easier way to take properties
6345
05:21:13,600 --> 05:21:17,200
out of an
6346
05:21:14,920 --> 05:21:20,680
object the next shortcut we're going to
6347
05:21:17,200 --> 05:21:23,240
learn is called the shorthand property
6348
05:21:20,680 --> 05:21:25,958
so at the bottom let's create some new
6349
05:21:23,240 --> 05:21:30,520
lines and let's say we want to create a
6350
05:21:25,958 --> 05:21:34,600
new object so we'll type const and let's
6351
05:21:30,520 --> 05:21:36,920
name this object 5 and we'll make it
6352
05:21:34,600 --> 05:21:40,040
equal to an
6353
05:21:36,920 --> 05:21:43,080
object and inside ins this object let's
6354
05:21:40,040 --> 05:21:47,638
say we want to create a message property
6355
05:21:43,080 --> 05:21:52,160
so we'll type message colon and for the
6356
05:21:47,638 --> 05:21:54,718
value let's type the variable
6357
05:21:52,160 --> 05:21:56,958
message so what this does is that it
6358
05:21:54,718 --> 05:22:00,320
takes whatever is inside the message
6359
05:21:56,958 --> 05:22:05,320
variable and substitutes it into this
6360
05:22:00,320 --> 05:22:05,320
code so at the bottom if we
6361
05:22:05,600 --> 05:22:13,080
console.log object 5 and
6362
05:22:10,200 --> 05:22:16,240
save this object will have a property
6363
05:22:13,080 --> 05:22:19,480
called message and the value is whatever
6364
05:22:16,240 --> 05:22:22,920
is inside the message variable which is
6365
05:22:19,480 --> 05:22:26,040
good job so now we actually have a
6366
05:22:22,920 --> 05:22:28,558
shortcut for this code if the property
6367
05:22:26,040 --> 05:22:32,680
and the variable name are the same we
6368
05:22:28,558 --> 05:22:35,760
can actually just type it out once like
6369
05:22:32,680 --> 05:22:38,920
message so this code does the same thing
6370
05:22:35,760 --> 05:22:41,600
as message colon message and this
6371
05:22:38,920 --> 05:22:44,718
shortcut is called the shorthand
6372
05:22:41,600 --> 05:22:46,160
property so if we comment out this line
6373
05:22:44,718 --> 05:22:48,400
using double
6374
05:22:46,160 --> 05:22:51,360
slash and
6375
05:22:48,400 --> 05:22:54,480
save you can see that this shortcut
6376
05:22:51,360 --> 05:22:56,600
creates the same object that we had
6377
05:22:54,480 --> 05:23:00,400
before the last shortcut we're going to
6378
05:22:56,600 --> 05:23:04,360
learn is called the shorthand method so
6379
05:23:00,400 --> 05:23:07,440
at the end let's create a new property
6380
05:23:04,360 --> 05:23:11,120
comma and let's name it
6381
05:23:07,440 --> 05:23:14,840
method Po in and we'll save a function
6382
05:23:11,120 --> 05:23:19,638
in this property so we'll type
6383
05:23:14,840 --> 05:23:21,958
function and let's name it Function One
6384
05:23:19,638 --> 05:23:27,638
brackets and curly
6385
05:23:21,958 --> 05:23:27,638
brackets and inside this function let's
6386
05:23:28,558 --> 05:23:31,558
console.log
6387
05:23:31,760 --> 05:23:38,440
method and now here at the
6388
05:23:35,558 --> 05:23:43,798
bottom let's run this function by Ty
6389
05:23:38,440 --> 05:23:46,718
typing object 5. method so this will
6390
05:23:43,798 --> 05:23:48,240
access this function and we'll run it by
6391
05:23:46,718 --> 05:23:50,360
typing
6392
05:23:48,240 --> 05:23:52,878
brackets if we
6393
05:23:50,360 --> 05:23:56,040
save this will run the code in the
6394
05:23:52,878 --> 05:23:58,840
function and display method in the
6395
05:23:56,040 --> 05:24:02,680
console so we actually have a shortcut
6396
05:23:58,840 --> 05:24:06,958
for writing this so at the bottom we can
6397
05:24:02,680 --> 05:24:10,360
type method again and just type brackets
6398
05:24:06,958 --> 05:24:10,360
and curly brackets
6399
05:24:11,120 --> 05:24:17,718
console.log string
6400
05:24:14,638 --> 05:24:20,958
method so this code does the same thing
6401
05:24:17,718 --> 05:24:24,080
as the code above so these brackets will
6402
05:24:20,958 --> 05:24:27,600
create a function just like here so this
6403
05:24:24,080 --> 05:24:31,878
function name is actually not needed so
6404
05:24:27,600 --> 05:24:31,878
if we comment out these lines of
6405
05:24:32,280 --> 05:24:37,718
code and
6406
05:24:34,760 --> 05:24:41,200
save it will still display method in the
6407
05:24:37,718 --> 05:24:44,080
console because this is a shortcut for
6408
05:24:41,200 --> 05:24:46,958
these lines of code so this shortcut is
6409
05:24:44,080 --> 05:24:50,160
called the shorthand method
6410
05:24:46,958 --> 05:24:52,280
syntax and that's the end of this lesson
6411
05:24:50,160 --> 05:24:55,920
in this lesson we learned another type
6412
05:24:52,280 --> 05:24:59,798
of value called objects objects group
6413
05:24:55,920 --> 05:25:02,480
related values together we added a score
6414
05:24:59,798 --> 05:25:05,160
to our rock paper scissors game we
6415
05:25:02,480 --> 05:25:07,920
learned about built-in objects and used
6416
05:25:05,160 --> 05:25:10,638
the Json and local storage objects to
6417
05:25:07,920 --> 05:25:13,000
save our our score more permanently we
6418
05:25:10,638 --> 05:25:17,040
learned more details about objects like
6419
05:25:13,000 --> 05:25:19,798
null autoboxing and references and we
6420
05:25:17,040 --> 05:25:22,320
learned some useful shortcuts like
6421
05:25:19,798 --> 05:25:24,840
destructuring shorthand properties and
6422
05:25:22,320 --> 05:25:27,320
shorthand methods here are some
6423
05:25:24,840 --> 05:25:30,760
exercises to help you practice working
6424
05:25:27,320 --> 05:25:30,760
with objects
6425
05:25:49,520 --> 05:25:53,680
in this lesson we're going to learn one
6426
05:25:51,520 --> 05:25:56,680
of the most important features of
6427
05:25:53,680 --> 05:25:59,798
JavaScript called the document object
6428
05:25:56,680 --> 05:26:02,400
model or the Dom and we're going to use
6429
05:25:59,798 --> 05:26:06,120
the Dom to improve our rock paper
6430
05:26:02,400 --> 05:26:09,360
scissors project so first we'll create a
6431
05:26:06,120 --> 05:26:13,240
new file for this lesson let's go to our
6432
05:26:09,360 --> 05:26:16,878
code editor and click this icon to show
6433
05:26:13,240 --> 05:26:20,200
our files and then click this icon to
6434
05:26:16,878 --> 05:26:24,240
create a new file and we'll name this
6435
05:26:20,200 --> 05:26:26,240
file 09
6436
05:26:24,240 --> 05:26:29,000
dd.
6437
05:26:26,240 --> 05:26:34,040
HTML and press
6438
05:26:29,000 --> 05:26:35,320
enter next let's copy objects. HTML into
6439
05:26:34,040 --> 05:26:38,040
dom.
6440
05:26:35,320 --> 05:26:41,520
HTML so we'll click here to open the
6441
05:26:38,040 --> 05:26:45,120
file file and then click inside and then
6442
05:26:41,520 --> 05:26:47,600
type contrl A or command a to select the
6443
05:26:45,120 --> 05:26:49,440
code and then
6444
05:26:47,600 --> 05:26:52,120
rightclick
6445
05:26:49,440 --> 05:26:56,360
copy and in
6446
05:26:52,120 --> 05:26:59,878
here right click and
6447
05:26:56,360 --> 05:27:03,120
paste now let's hide these files and
6448
05:26:59,878 --> 05:27:05,280
we'll prepare this file for this lesson
6449
05:27:03,120 --> 05:27:09,360
so let's scroll to the
6450
05:27:05,280 --> 05:27:12,400
top and we'll change the title to
6451
05:27:09,360 --> 05:27:15,840
Dom and let's delete all the JavaScript
6452
05:27:12,400 --> 05:27:15,840
code from the previous
6453
05:27:16,200 --> 05:27:22,920
lesson now let's save this file and
6454
05:27:19,798 --> 05:27:26,600
we'll open it in the browser by right
6455
05:27:22,920 --> 05:27:29,638
clicking open with live
6456
05:27:26,600 --> 05:27:34,440
server and let's also open the console
6457
05:27:29,638 --> 05:27:38,638
on this page we'll right click click
6458
05:27:34,440 --> 05:27:42,160
inspect and then click the console
6459
05:27:38,638 --> 05:27:46,878
and now we can close the previous
6460
05:27:42,160 --> 05:27:49,480
tabs as well as the previous code for
6461
05:27:46,878 --> 05:27:53,160
now and for this lesson we're going to
6462
05:27:49,480 --> 05:27:55,878
do an extra step in the setup inside the
6463
05:27:53,160 --> 05:28:00,120
body we're going to create a
6464
05:27:55,878 --> 05:28:04,440
button so here let's type the code less
6465
05:28:00,120 --> 05:28:07,120
than button greater than and inside the
6466
05:28:04,440 --> 05:28:09,558
button we'll have the text
6467
05:28:07,120 --> 05:28:12,718
hello now let's
6468
05:28:09,558 --> 05:28:15,520
save and we should have a button on the
6469
05:28:12,718 --> 05:28:19,520
page and now we're ready to learn the
6470
05:28:15,520 --> 05:28:22,558
document object model or the Dom in the
6471
05:28:19,520 --> 05:28:25,718
previous lesson we learned about objects
6472
05:28:22,558 --> 05:28:28,920
which group multiple values together we
6473
05:28:25,718 --> 05:28:31,320
also learned about builtin objects which
6474
05:28:28,920 --> 05:28:34,040
are objects that are provided by
6475
05:28:31,320 --> 05:28:40,440
JavaScript some examples of built-in
6476
05:28:34,040 --> 05:28:44,320
objects are console math Json and local
6477
05:28:40,440 --> 05:28:48,280
storage the Dom is another builtin
6478
05:28:44,320 --> 05:28:50,760
object called the document object so
6479
05:28:48,280 --> 05:28:52,798
let's go to our script element and we're
6480
05:28:50,760 --> 05:28:56,040
going to type
6481
05:28:52,798 --> 05:28:58,558
document so this is a built-in object
6482
05:28:56,040 --> 05:29:00,718
provided by JavaScript and we've
6483
05:28:58,558 --> 05:29:03,600
actually seen this document object
6484
05:29:00,718 --> 05:29:06,920
before in the first lesson one of the
6485
05:29:03,600 --> 05:29:14,718
first pieces of code that we learned was
6486
05:29:06,920 --> 05:29:20,160
document dot body do inner Capital
6487
05:29:14,718 --> 05:29:23,080
HTML equals the string hello and
6488
05:29:20,160 --> 05:29:25,760
semicolon so this code removes
6489
05:29:23,080 --> 05:29:29,040
everything on the page and replaces it
6490
05:29:25,760 --> 05:29:32,320
with the text hello if we
6491
05:29:29,040 --> 05:29:33,320
save it will remove the button and just
6492
05:29:32,320 --> 05:29:36,160
put
6493
05:29:33,320 --> 05:29:38,840
hello and now that we learned objects in
6494
05:29:36,160 --> 05:29:40,400
the previous lesson we can fully
6495
05:29:38,840 --> 05:29:43,638
understand this
6496
05:29:40,400 --> 05:29:47,680
syntax document here is a built-in
6497
05:29:43,638 --> 05:29:50,280
object and this is the dot notation this
6498
05:29:47,680 --> 05:29:54,840
means we're accessing a property of the
6499
05:29:50,280 --> 05:29:57,958
document object called body now body is
6500
05:29:54,840 --> 05:30:00,920
also an object so we can use the dot
6501
05:29:57,958 --> 05:30:04,160
notation again to access a property of
6502
05:30:00,920 --> 05:30:08,120
the body object called inner
6503
05:30:04,160 --> 05:30:10,798
HTML and finally we use an equal sign to
6504
05:30:08,120 --> 05:30:12,320
change the inner HTML property to the
6505
05:30:10,798 --> 05:30:15,040
string
6506
05:30:12,320 --> 05:30:17,360
hello but as you can see there's
6507
05:30:15,040 --> 05:30:20,360
something very special about the inner
6508
05:30:17,360 --> 05:30:24,878
HTML property when we change this
6509
05:30:20,360 --> 05:30:27,600
property it also changes the web page so
6510
05:30:24,878 --> 05:30:31,000
this document object and the web page
6511
05:30:27,600 --> 05:30:33,760
are linked together let's do another
6512
05:30:31,000 --> 05:30:37,240
example we'll go to the end here and
6513
05:30:33,760 --> 05:30:38,718
press enter and we'll type the document
6514
05:30:37,240 --> 05:30:41,680
object again
6515
05:30:38,718 --> 05:30:45,000
and we'll use the dot notation again and
6516
05:30:41,680 --> 05:30:47,400
this time let's access the property
6517
05:30:45,000 --> 05:30:50,878
title and we'll change the title
6518
05:30:47,400 --> 05:30:55,600
property using an equal sign and we'll
6519
05:30:50,878 --> 05:30:57,878
change it to the string good
6520
05:30:55,600 --> 05:31:01,440
job if we
6521
05:30:57,878 --> 05:31:04,080
save changing the title property we'll
6522
05:31:01,440 --> 05:31:08,280
also change the title at the top of the
6523
05:31:04,080 --> 05:31:11,798
tabs here so now this says good job
6524
05:31:08,280 --> 05:31:15,120
again as you can see the document object
6525
05:31:11,798 --> 05:31:17,798
is linked to the web page so from these
6526
05:31:15,120 --> 05:31:22,080
examples it shows us that the document
6527
05:31:17,798 --> 05:31:24,360
object represents or models the web page
6528
05:31:22,080 --> 05:31:28,558
and that's why we call this feature the
6529
05:31:24,360 --> 05:31:32,280
document object model or the
6530
05:31:28,558 --> 05:31:35,840
Dom now that we know what the Dom means
6531
05:31:32,280 --> 05:31:38,600
let's learn the syntax rules for the Dom
6532
05:31:35,840 --> 05:31:41,638
so the Dom is just this built in
6533
05:31:38,600 --> 05:31:44,718
document object and this object works
6534
05:31:41,638 --> 05:31:48,760
the same way as any other object it
6535
05:31:44,718 --> 05:31:51,520
contains properties like body and title
6536
05:31:48,760 --> 05:31:54,080
that we can access using the dot
6537
05:31:51,520 --> 05:31:57,000
notation now the special thing about the
6538
05:31:54,080 --> 05:32:00,040
document object is that it is linked to
6539
05:31:57,000 --> 05:32:02,480
the web page that means if we change
6540
05:32:00,040 --> 05:32:04,878
certain properties in this object it
6541
05:32:02,480 --> 05:32:08,480
will also change the web
6542
05:32:04,878 --> 05:32:11,280
page now in addition to properties the
6543
05:32:08,480 --> 05:32:13,958
document object also has methods we can
6544
05:32:11,280 --> 05:32:15,240
use and we'll learn about them later in
6545
05:32:13,958 --> 05:32:18,480
this
6546
05:32:15,240 --> 05:32:21,320
lesson now that we understand the syntax
6547
05:32:18,480 --> 05:32:24,320
of the document object let's learn about
6548
05:32:21,320 --> 05:32:26,920
the properties and methods we can use
6549
05:32:24,320 --> 05:32:29,878
first let's comment out this previous
6550
05:32:26,920 --> 05:32:33,638
code using
6551
05:32:29,878 --> 05:32:35,760
slashstar star slash and we'll create
6552
05:32:33,638 --> 05:32:37,958
some new lines at the
6553
05:32:35,760 --> 05:32:40,120
top so the first property will we're
6554
05:32:37,958 --> 05:32:41,718
going to learn is called
6555
05:32:40,120 --> 05:32:45,240
document.title
6556
05:32:41,718 --> 05:32:48,958
so this property will give us the title
6557
05:32:45,240 --> 05:32:53,280
at the top of the tabs here so if we
6558
05:32:48,958 --> 05:32:53,280
console.log this property
6559
05:32:55,718 --> 05:33:00,958
console.log and
6560
05:32:57,958 --> 05:33:03,680
save this will give us the text at the
6561
05:33:00,958 --> 05:33:05,440
top which is Dom and that's what gets
6562
05:33:03,680 --> 05:33:08,520
displayed in the
6563
05:33:05,440 --> 05:33:11,440
console if we change the doc do. tile
6564
05:33:08,520 --> 05:33:17,280
property it will change the text at the
6565
05:33:11,440 --> 05:33:21,320
top of the tab so here if we type
6566
05:33:17,280 --> 05:33:23,958
document.title and make it equal to the
6567
05:33:21,320 --> 05:33:26,240
string
6568
05:33:23,958 --> 05:33:29,958
changed and
6569
05:33:26,240 --> 05:33:31,280
save now the title at the top of the tab
6570
05:33:29,958 --> 05:33:34,360
will be
6571
05:33:31,280 --> 05:33:37,120
changed so as you can see the title
6572
05:33:34,360 --> 05:33:38,718
property is linked to the title at the
6573
05:33:37,120 --> 05:33:41,320
top of the tab
6574
05:33:38,718 --> 05:33:44,160
we can use it to get the title and we
6575
05:33:41,320 --> 05:33:46,798
can also use it to change the
6576
05:33:44,160 --> 05:33:49,920
title next we're going to learn another
6577
05:33:46,798 --> 05:33:52,320
property called
6578
05:33:49,920 --> 05:33:57,040
document.body so let's go into our
6579
05:33:52,320 --> 05:33:57,040
code and let's type
6580
05:33:58,120 --> 05:34:04,798
document.body now document.body is a
6581
05:34:01,240 --> 05:34:07,718
very special property so this will
6582
05:34:04,798 --> 05:34:11,440
literally get this body HTML element
6583
05:34:07,718 --> 05:34:14,280
element and put it inside our
6584
05:34:11,440 --> 05:34:19,000
JavaScript so let's actually console.log
6585
05:34:14,280 --> 05:34:19,000
this to see how it works
6586
05:34:19,280 --> 05:34:25,840
console.log Open
6587
05:34:21,240 --> 05:34:29,000
Bracket and then close bracket and
6588
05:34:25,840 --> 05:34:30,160
save and inside the console it will tell
6589
05:34:29,000 --> 05:34:34,360
us that
6590
05:34:30,160 --> 05:34:37,000
document.body is the body HTML element
6591
05:34:34,360 --> 05:34:39,520
and if I hover over this it will tell us
6592
05:34:37,000 --> 05:34:43,200
that it is a exactly the body on our
6593
05:34:39,520 --> 05:34:46,160
page if I expand this you can see that
6594
05:34:43,200 --> 05:34:49,320
this code is exactly the code that we
6595
05:34:46,160 --> 05:34:52,440
have here and this shows us one of the
6596
05:34:49,320 --> 05:34:55,958
most important features of JavaScript we
6597
05:34:52,440 --> 05:34:58,718
can have HTML elements inside
6598
05:34:55,958 --> 05:35:02,400
JavaScript the document object or the
6599
05:34:58,718 --> 05:35:05,600
Dom combines JavaScript and HTML
6600
05:35:02,400 --> 05:35:07,878
together and it gives JavaScript control
6601
05:35:05,600 --> 05:35:11,280
of the web page
6602
05:35:07,878 --> 05:35:13,558
okay so now that we have an HTML element
6603
05:35:11,280 --> 05:35:16,760
inside our JavaScript what can we do
6604
05:35:13,558 --> 05:35:20,080
with it a really important thing to know
6605
05:35:16,760 --> 05:35:23,558
is that when an HTML element is inside a
6606
05:35:20,080 --> 05:35:27,320
JavaScript like this the HTML element is
6607
05:35:23,558 --> 05:35:31,280
converted into a JavaScript object so
6608
05:35:27,320 --> 05:35:32,920
for example if we do
6609
05:35:31,280 --> 05:35:39,480
console.
6610
05:35:32,920 --> 05:35:42,040
log type of document do
6611
05:35:39,480 --> 05:35:45,760
body and
6612
05:35:42,040 --> 05:35:48,878
save it will tell us that the body HTML
6613
05:35:45,760 --> 05:35:50,120
element is just an object when it's
6614
05:35:48,878 --> 05:35:53,718
inside
6615
05:35:50,120 --> 05:35:56,760
JavaScript so just like any other object
6616
05:35:53,718 --> 05:36:00,000
this has properties and methods we can
6617
05:35:56,760 --> 05:36:03,878
use so one useful property of the body
6618
05:36:00,000 --> 05:36:09,520
element is inner HTML which we saw
6619
05:36:03,878 --> 05:36:09,520
earlier so down here let's type
6620
05:36:09,558 --> 05:36:22,160
document dot body dot inner Capital
6621
05:36:17,718 --> 05:36:26,280
HTML so the inner HTML property controls
6622
05:36:22,160 --> 05:36:28,480
all the HTML inside the body that's why
6623
05:36:26,280 --> 05:36:31,878
it's called inner
6624
05:36:28,480 --> 05:36:35,280
HTML so if we access this property it
6625
05:36:31,878 --> 05:36:38,520
will give us all the HTML inside the
6626
05:36:35,280 --> 05:36:41,520
body so let's console.log to
6627
05:36:38,520 --> 05:36:41,520
confirm
6628
05:36:43,638 --> 05:36:50,160
console.log and
6629
05:36:46,040 --> 05:36:53,480
save and inner HTML will give us all of
6630
05:36:50,160 --> 05:36:56,718
this HTML inside the body
6631
05:36:53,480 --> 05:37:00,638
element and if we change the inner HTML
6632
05:36:56,718 --> 05:37:03,920
property it will change the HTML inside
6633
05:37:00,638 --> 05:37:07,920
the body element so let's create a new
6634
05:37:03,920 --> 05:37:09,400
line and we'll type document
6635
05:37:07,920 --> 05:37:14,240
dot
6636
05:37:09,400 --> 05:37:20,160
body do inner Capital
6637
05:37:14,240 --> 05:37:23,400
HTML and we'll change it to the string
6638
05:37:20,160 --> 05:37:28,160
changed so this will replace all of the
6639
05:37:23,400 --> 05:37:29,280
HTML inside the body with a text changed
6640
05:37:28,160 --> 05:37:32,798
if we
6641
05:37:29,280 --> 05:37:35,040
save that's exactly what it does and we
6642
05:37:32,798 --> 05:37:39,160
can actually confirm this by going into
6643
05:37:35,040 --> 05:37:43,638
the elements tab so this tab is for HTML
6644
05:37:39,160 --> 05:37:47,280
and CSS we can find the body element
6645
05:37:43,638 --> 05:37:50,360
expand it and you can see all of the
6646
05:37:47,280 --> 05:37:51,360
HTML that we had before was replaced
6647
05:37:50,360 --> 05:37:54,200
with
6648
05:37:51,360 --> 05:37:57,000
changed and don't worry about this part
6649
05:37:54,200 --> 05:38:00,798
this part is just added by live server
6650
05:37:57,000 --> 05:38:04,878
after so this shows that inner HTML
6651
05:38:00,798 --> 05:38:08,878
gives us control of all the HTML inside
6652
05:38:04,878 --> 05:38:11,680
the body we can get this h HTML and we
6653
05:38:08,878 --> 05:38:15,798
can also change this
6654
05:38:11,680 --> 05:38:19,120
HTML now another feature of inner HTML
6655
05:38:15,798 --> 05:38:23,200
is that we can replace this HTML with
6656
05:38:19,120 --> 05:38:26,280
new HTML code not just text so for
6657
05:38:23,200 --> 05:38:29,920
example instead of just text we can
6658
05:38:26,280 --> 05:38:34,000
replace it with the code less than
6659
05:38:29,920 --> 05:38:37,958
button greater than and also less than
6660
05:38:34,000 --> 05:38:41,920
slash button greater than so so this is
6661
05:38:37,958 --> 05:38:45,360
HTML code for creating a button and
6662
05:38:41,920 --> 05:38:46,878
inside the button let's put the text
6663
05:38:45,360 --> 05:38:50,520
good
6664
05:38:46,878 --> 05:38:55,000
job and now this code will replace all
6665
05:38:50,520 --> 05:38:57,080
the HTML inside the body with this new
6666
05:38:55,000 --> 05:39:00,958
HTML if we
6667
05:38:57,080 --> 05:39:05,718
save it removes all the previous HTML
6668
05:39:00,958 --> 05:39:08,320
and this new HTML creates this button so
6669
05:39:05,718 --> 05:39:11,280
using this inner HTML property
6670
05:39:08,320 --> 05:39:14,440
JavaScript can replace the HTML inside
6671
05:39:11,280 --> 05:39:16,920
the body to whatever we want we have
6672
05:39:14,440 --> 05:39:19,920
full control of the web
6673
05:39:16,920 --> 05:39:22,400
page all right now we're going to learn
6674
05:39:19,920 --> 05:39:25,958
a method of the document object that we
6675
05:39:22,400 --> 05:39:29,040
can use as a reminder a method is a
6676
05:39:25,958 --> 05:39:31,600
function that is saved inside an
6677
05:39:29,040 --> 05:39:36,000
object so we're going to learn a very
6678
05:39:31,600 --> 05:39:38,718
important method called document. query
6679
05:39:36,000 --> 05:39:41,638
selector we just learned that
6680
05:39:38,718 --> 05:39:45,040
document.body lets us get the body
6681
05:39:41,638 --> 05:39:48,200
element and put it inside our
6682
05:39:45,040 --> 05:39:51,360
JavaScript document. query selector lets
6683
05:39:48,200 --> 05:39:54,680
us get any element from the page and put
6684
05:39:51,360 --> 05:39:57,840
it inside our JavaScript let's give it a
6685
05:39:54,680 --> 05:40:01,200
try so first we'll comment out the
6686
05:39:57,840 --> 05:40:03,638
previous code using
6687
05:40:01,200 --> 05:40:06,798
slashstar and star
6688
05:40:03,638 --> 05:40:08,558
slash let's create some new lines at the
6689
05:40:06,798 --> 05:40:11,680
top
6690
05:40:08,558 --> 05:40:16,520
and let's type
6691
05:40:11,680 --> 05:40:19,040
document. query capital S
6692
05:40:16,520 --> 05:40:22,120
selector and
6693
05:40:19,040 --> 05:40:24,958
brackets so document. query selector
6694
05:40:22,120 --> 05:40:27,160
lets us get any element from the page
6695
05:40:24,958 --> 05:40:29,638
and put it inside our
6696
05:40:27,160 --> 05:40:33,080
JavaScript between these brackets we're
6697
05:40:29,638 --> 05:40:36,240
going to put a string this string tells
6698
05:40:33,080 --> 05:40:37,798
JavaScript which HTML element to get
6699
05:40:36,240 --> 05:40:40,160
from the page
6700
05:40:37,798 --> 05:40:43,240
so if we type
6701
05:40:40,160 --> 05:40:46,120
button this will get the first button
6702
05:40:43,240 --> 05:40:49,600
element from the page and put it inside
6703
05:40:46,120 --> 05:40:50,440
our JavaScript so let's console.log this
6704
05:40:49,600 --> 05:40:52,360
to
6705
05:40:50,440 --> 05:40:54,760
confirm
6706
05:40:52,360 --> 05:40:58,798
console.
6707
05:40:54,760 --> 05:41:01,798
log close bracket and
6708
05:40:58,798 --> 05:41:04,520
save and let's go back to our
6709
05:41:01,798 --> 05:41:07,798
console now it will tell us that
6710
05:41:04,520 --> 05:41:11,280
document. query selector got this button
6711
05:41:07,798 --> 05:41:14,120
element and put it inside our JavaScript
6712
05:41:11,280 --> 05:41:16,920
which you can see in the console and if
6713
05:41:14,120 --> 05:41:19,558
I hover over this button element it will
6714
05:41:16,920 --> 05:41:22,840
tell us that it is exactly the button on
6715
05:41:19,558 --> 05:41:25,600
the page so that's what document. query
6716
05:41:22,840 --> 05:41:28,878
selector does it can get any element
6717
05:41:25,600 --> 05:41:31,638
from the page and put it inside our
6718
05:41:28,878 --> 05:41:35,280
JavaScript this string tells it which
6719
05:41:31,638 --> 05:41:37,320
element to get if we type button it will
6720
05:41:35,280 --> 05:41:40,320
get the first button element from from
6721
05:41:37,320 --> 05:41:43,478
the page if we type
6722
05:41:40,320 --> 05:41:46,000
body this will now get the first body
6723
05:41:43,478 --> 05:41:48,840
element from the page so it will do the
6724
05:41:46,000 --> 05:41:51,840
same thing as
6725
05:41:48,840 --> 05:41:56,120
document.body but for now let's just
6726
05:41:51,840 --> 05:41:57,478
change this back to Button as an example
6727
05:41:56,120 --> 05:42:01,600
and
6728
05:41:57,478 --> 05:42:04,958
save so remember when an HTML element is
6729
05:42:01,600 --> 05:42:08,320
inside JavaScript it's just a JavaScript
6730
05:42:04,958 --> 05:42:11,320
object so this button element
6731
05:42:08,320 --> 05:42:13,680
is also just an object and it has
6732
05:42:11,320 --> 05:42:17,320
properties and methods we can
6733
05:42:13,680 --> 05:42:19,520
use every HTML element actually has a
6734
05:42:17,320 --> 05:42:22,958
property called inner
6735
05:42:19,520 --> 05:42:26,440
HTML which lets us control the HTML
6736
05:42:22,958 --> 05:42:33,120
inside the element so for this button
6737
05:42:26,440 --> 05:42:36,638
element let's type at the end dot inner
6738
05:42:33,120 --> 05:42:40,000
HTML and this will give us the HTML
6739
05:42:36,638 --> 05:42:42,958
inside the button if we
6740
05:42:40,000 --> 05:42:46,440
save it will give us
6741
05:42:42,958 --> 05:42:50,240
hello and again if we change the inner
6742
05:42:46,440 --> 05:42:53,558
HTML property it will change the HTML
6743
05:42:50,240 --> 05:42:57,080
inside the button so let's make a copy
6744
05:42:53,558 --> 05:42:59,160
of this code we'll select it and
6745
05:42:57,080 --> 05:43:01,718
rightclick
6746
05:42:59,160 --> 05:43:05,558
copy and down
6747
05:43:01,718 --> 05:43:09,040
here right click and
6748
05:43:05,558 --> 05:43:12,920
paste and let's change the inner HTML
6749
05:43:09,040 --> 05:43:15,760
property using an equal sign and the
6750
05:43:12,920 --> 05:43:18,760
string
6751
05:43:15,760 --> 05:43:23,718
changed so this will only change the
6752
05:43:18,760 --> 05:43:26,040
HTML inside the button which is here to
6753
05:43:23,718 --> 05:43:28,920
changed if we
6754
05:43:26,040 --> 05:43:32,440
save you can see that the text inside
6755
05:43:28,920 --> 05:43:34,958
the button is now changed a little
6756
05:43:32,440 --> 05:43:37,680
syntax shortcut I'm going to show you is
6757
05:43:34,958 --> 05:43:40,360
that for the dot notation we can
6758
05:43:37,680 --> 05:43:43,360
actually put it on multiple lines so we
6759
05:43:40,360 --> 05:43:47,840
can type document. query selector and
6760
05:43:43,360 --> 05:43:50,400
then put doin HTML on a separate line to
6761
05:43:47,840 --> 05:43:52,878
make it easier to read and make sure to
6762
05:43:50,400 --> 05:43:55,600
put a tab at the front so that we know
6763
05:43:52,878 --> 05:43:59,478
it's a continuation of the previous
6764
05:43:55,600 --> 05:44:02,520
line okay so using document. query
6765
05:43:59,478 --> 05:44:05,638
selector we can get any element from the
6766
05:44:02,520 --> 05:44:08,680
page put it inside our JavaScript and
6767
05:44:05,638 --> 05:44:11,840
then we can control the h HML inside
6768
05:44:08,680 --> 05:44:15,040
that element and this allows us to only
6769
05:44:11,840 --> 05:44:18,760
change the parts of the page that we
6770
05:44:15,040 --> 05:44:22,600
need next what if we have two buttons on
6771
05:44:18,760 --> 05:44:26,600
the page so let's go up here and we'll
6772
05:44:22,600 --> 05:44:29,798
create another button using less than
6773
05:44:26,600 --> 05:44:31,600
button greater than and we'll have the
6774
05:44:29,798 --> 05:44:33,280
text
6775
05:44:31,600 --> 05:44:36,040
second
6776
05:44:33,280 --> 05:44:39,400
button and
6777
05:44:36,040 --> 05:44:42,680
Save so now we have two buttons on the
6778
05:44:39,400 --> 05:44:45,840
page but document. query selector will
6779
05:44:42,680 --> 05:44:49,040
only get the first button on the page
6780
05:44:45,840 --> 05:44:51,240
how do we get this second button the
6781
05:44:49,040 --> 05:44:53,920
solution is that we're going to add an
6782
05:44:51,240 --> 05:44:57,878
attribute to this button called the
6783
05:44:53,920 --> 05:45:02,798
class attribute so in the opening tag
6784
05:44:57,878 --> 05:45:05,920
we're going to type space class equals
6785
05:45:02,798 --> 05:45:09,600
double quotes So the class attribute
6786
05:45:05,920 --> 05:45:11,718
sort of adds a label to this button so
6787
05:45:09,600 --> 05:45:17,280
inside the double quotes we're going to
6788
05:45:11,718 --> 05:45:19,878
label this button a JS dash
6789
05:45:17,280 --> 05:45:23,440
button and now that we labeled this
6790
05:45:19,878 --> 05:45:24,440
button we can select it using document.
6791
05:45:23,440 --> 05:45:28,160
query
6792
05:45:24,440 --> 05:45:30,600
selector so at the bottom here we'll
6793
05:45:28,160 --> 05:45:35,718
type
6794
05:45:30,600 --> 05:45:39,320
document. query selector again and
6795
05:45:35,718 --> 05:45:41,200
brackets and we'll type A String inside
6796
05:45:39,320 --> 05:45:44,760
and this time we're going to start with
6797
05:45:41,200 --> 05:45:46,840
a DOT when we start with a DOT this
6798
05:45:44,760 --> 05:45:50,478
means that it's going to look for a
6799
05:45:46,840 --> 05:45:53,638
class rather than an element name so
6800
05:45:50,478 --> 05:45:55,440
we're going to look for the class
6801
05:45:53,638 --> 05:45:58,840
js-
6802
05:45:55,440 --> 05:46:02,240
button and now document. query selector
6803
05:45:58,840 --> 05:46:05,718
will select an element with the class JS
6804
05:46:02,240 --> 05:46:08,798
button which is this element here so
6805
05:46:05,718 --> 05:46:12,478
let's confirm this by
6806
05:46:08,798 --> 05:46:14,638
console. logging this
6807
05:46:12,478 --> 05:46:18,520
code and
6808
05:46:14,638 --> 05:46:22,120
save and now you will see that this code
6809
05:46:18,520 --> 05:46:24,920
gives us the second button on the page
6810
05:46:22,120 --> 05:46:27,920
so using a class attribute and then
6811
05:46:24,920 --> 05:46:30,440
starting with a dot in query selector we
6812
05:46:27,920 --> 05:46:32,718
can get any specific element from the
6813
05:46:30,440 --> 05:46:35,520
page and put it in our
6814
05:46:32,718 --> 05:46:38,120
JavaScript by the way when we start with
6815
05:46:35,520 --> 05:46:41,760
a DOT this is called called a class
6816
05:46:38,120 --> 05:46:45,120
selector and this is also used in CSS to
6817
05:46:41,760 --> 05:46:48,280
style elements with a specific class in
6818
05:46:45,120 --> 05:46:49,718
fact anything we use in CSS can also be
6819
05:46:48,280 --> 05:46:52,920
used in this
6820
05:46:49,718 --> 05:46:55,520
string and also a common practice is to
6821
05:46:52,920 --> 05:46:58,638
start the class with
6822
05:46:55,520 --> 05:47:00,520
js- to make it clear that this class is
6823
05:46:58,638 --> 05:47:04,360
being used in
6824
05:47:00,520 --> 05:47:07,840
JavaScript and again HTML elements are
6825
05:47:04,360 --> 05:47:11,360
JavaScript objects so this second button
6826
05:47:07,840 --> 05:47:14,280
is also just an object and remember
6827
05:47:11,360 --> 05:47:19,000
objects are values and we can save them
6828
05:47:14,280 --> 05:47:22,040
inside a variable so instead of
6829
05:47:19,000 --> 05:47:26,878
console.log let's create a variable
6830
05:47:22,040 --> 05:47:30,200
using const and we'll name the variable
6831
05:47:26,878 --> 05:47:33,280
button capital E
6832
05:47:30,200 --> 05:47:36,840
element we usually end the variable name
6833
05:47:33,280 --> 05:47:39,798
with element or LM to make it clear
6834
05:47:36,840 --> 05:47:40,600
clear there's an HTML element inside
6835
05:47:39,798 --> 05:47:43,558
this
6836
05:47:40,600 --> 05:47:47,000
variable and finally we'll type an equal
6837
05:47:43,558 --> 05:47:49,120
sign to save this element and we can
6838
05:47:47,000 --> 05:47:53,200
remove this extra
6839
05:47:49,120 --> 05:47:56,200
bracket and now if we console.log this
6840
05:47:53,200 --> 05:47:56,200
variable
6841
05:47:57,000 --> 05:48:00,760
console.log
6842
05:47:58,680 --> 05:48:03,120
button
6843
05:48:00,760 --> 05:48:05,638
element and
6844
05:48:03,120 --> 05:48:08,760
save it will tell us that the second
6845
05:48:05,638 --> 05:48:12,120
button was Sav saved inside this
6846
05:48:08,760 --> 05:48:15,320
variable so using the Dom we can get
6847
05:48:12,120 --> 05:48:18,200
HTML elements from the page put it
6848
05:48:15,320 --> 05:48:21,240
inside a JavaScript and then save it in
6849
05:48:18,200 --> 05:48:24,638
a variable so the Dom combines
6850
05:48:21,240 --> 05:48:28,000
JavaScript and HTML together it gives
6851
05:48:24,638 --> 05:48:30,958
JavaScript full control of the web
6852
05:48:28,000 --> 05:48:34,360
page all right now that we learned how
6853
05:48:30,958 --> 05:48:36,840
to use the Dom let's do some practical
6854
05:48:34,360 --> 05:48:39,558
examples so I've actually prepared some
6855
05:48:36,840 --> 05:48:42,280
projects that we can do for this lesson
6856
05:48:39,558 --> 05:48:45,958
to open these projects we'll go to our
6857
05:48:42,280 --> 05:48:49,798
browser and create a new tab at the
6858
05:48:45,958 --> 05:48:52,520
top and here we'll type
6859
05:48:49,798 --> 05:48:57,160
super
6860
05:48:52,520 --> 05:49:00,320
simple. SL projects
6861
05:48:57,160 --> 05:49:03,360
slod and press
6862
05:49:00,320 --> 05:49:06,280
enter on this page we'll be working on
6863
05:49:03,360 --> 05:49:08,958
three projects the YouTube subscribe
6864
05:49:06,280 --> 05:49:10,638
button the rock paper scissors project
6865
05:49:08,958 --> 05:49:14,000
we've been working on for the last few
6866
05:49:10,638 --> 05:49:16,360
lessons and this Amazon shipping
6867
05:49:14,000 --> 05:49:19,878
calculator and you'll notice that these
6868
05:49:16,360 --> 05:49:22,080
projects modify the web page so we're
6869
05:49:19,878 --> 05:49:25,240
going to be using the Dom to create
6870
05:49:22,080 --> 05:49:27,878
these projects and in the next lesson
6871
05:49:25,240 --> 05:49:30,680
we're going to use CSS to style these
6872
05:49:27,878 --> 05:49:33,280
projects and make them look nice and you
6873
05:49:30,680 --> 05:49:36,680
can preview that by clicking
6874
05:49:33,280 --> 05:49:38,760
here so using CSS we can make the sub
6875
05:49:36,680 --> 05:49:41,600
subscribe button look like the actual
6876
05:49:38,760 --> 05:49:44,040
subscribe button on YouTube and if we
6877
05:49:41,600 --> 05:49:46,718
click this link to see the rock paper
6878
05:49:44,040 --> 05:49:50,440
scissors game you'll see that we'll make
6879
05:49:46,718 --> 05:49:52,320
it look really nice with these icons but
6880
05:49:50,440 --> 05:49:55,638
for this lesson we're only going to
6881
05:49:52,320 --> 05:49:59,160
focus on the functionality and not the
6882
05:49:55,638 --> 05:50:02,958
styling so let's go back to the projects
6883
05:49:59,160 --> 05:50:07,120
we'll click back and click back
6884
05:50:02,958 --> 05:50:08,440
again until we're at projects sdom
6885
05:50:07,120 --> 05:50:11,878
and we're going to create the
6886
05:50:08,440 --> 05:50:14,440
functionality for these projects first
6887
05:50:11,878 --> 05:50:17,878
so before we start let's create a new
6888
05:50:14,440 --> 05:50:22,240
file just for these projects we'll go to
6889
05:50:17,878 --> 05:50:25,520
our code editor and click this icon and
6890
05:50:22,240 --> 05:50:31,478
then click this icon to create a new
6891
05:50:25,520 --> 05:50:31,478
file let's name this file 09
6892
05:50:31,600 --> 05:50:38,120
dd-
6893
05:50:33,638 --> 05:50:42,878
projects. HTML and press
6894
05:50:38,120 --> 05:50:46,638
enter now let's copy dom. HTML into this
6895
05:50:42,878 --> 05:50:50,760
file so we'll open it and then click in
6896
05:50:46,638 --> 05:50:53,718
here and type control a or command a to
6897
05:50:50,760 --> 05:50:55,478
select the code and then
6898
05:50:53,718 --> 05:50:57,920
rightclick
6899
05:50:55,478 --> 05:51:02,478
copy and in
6900
05:50:57,920 --> 05:51:05,478
here right click and
6901
05:51:02,478 --> 05:51:07,120
paste now let's close our files and
6902
05:51:05,478 --> 05:51:09,718
we'll prepare this file
6903
05:51:07,120 --> 05:51:13,478
so let's scroll up and we'll change the
6904
05:51:09,718 --> 05:51:17,798
title to Dom
6905
05:51:13,478 --> 05:51:20,680
projects and let's remove our HTML but
6906
05:51:17,798 --> 05:51:23,040
keep the script
6907
05:51:20,680 --> 05:51:26,080
element and we'll also remove the
6908
05:51:23,040 --> 05:51:26,080
JavaScript from
6909
05:51:26,840 --> 05:51:32,958
before finally let's save this file and
6910
05:51:30,638 --> 05:51:37,718
we'll open it in the browser by right
6911
05:51:32,958 --> 05:51:40,200
clicking open with live server
6912
05:51:37,718 --> 05:51:44,000
and let's also open the console just in
6913
05:51:40,200 --> 05:51:46,920
case right click click
6914
05:51:44,000 --> 05:51:49,958
inspect and then click the
6915
05:51:46,920 --> 05:51:52,878
console all right we're ready to start
6916
05:51:49,958 --> 05:51:54,440
with the projects let's go back to super
6917
05:51:52,878 --> 05:51:57,040
simple
6918
05:51:54,440 --> 05:51:59,718
dodev and we'll start by creating the
6919
05:51:57,040 --> 05:52:03,040
YouTube subscribe button let's actually
6920
05:51:59,718 --> 05:52:05,000
press refresh to get it back to normal
6921
05:52:03,040 --> 05:52:07,240
and when we click this button it will
6922
05:52:05,000 --> 05:52:11,160
change to subscribe
6923
05:52:07,240 --> 05:52:14,958
red first let's create the HTML elements
6924
05:52:11,160 --> 05:52:16,600
for this project we'll go to the body
6925
05:52:14,958 --> 05:52:19,958
we'll create some new
6926
05:52:16,600 --> 05:52:24,400
lines and let's create the paragraph
6927
05:52:19,958 --> 05:52:27,400
first we'll type less than P greater
6928
05:52:24,400 --> 05:52:30,000
than and inside the paragraph we'll have
6929
05:52:27,400 --> 05:52:31,920
the text
6930
05:52:30,000 --> 05:52:33,680
YouTube
6931
05:52:31,920 --> 05:52:37,280
subscribe
6932
05:52:33,680 --> 05:52:38,920
button and now let's create the button
6933
05:52:37,280 --> 05:52:43,600
so on the next
6934
05:52:38,920 --> 05:52:48,000
line we'll type less than button greater
6935
05:52:43,600 --> 05:52:51,718
than and inside the button
6936
05:52:48,000 --> 05:52:52,638
subscribe now let's save and go back to
6937
05:52:51,718 --> 05:52:56,000
our
6938
05:52:52,638 --> 05:52:58,440
Tab and now we have the HTML elements
6939
05:52:56,000 --> 05:53:01,520
that we need so now let's make this
6940
05:52:58,440 --> 05:53:04,798
interactive with JavaScript and remember
6941
05:53:01,520 --> 05:53:07,760
we have a process for this first we'll
6942
05:53:04,798 --> 05:53:10,440
figure out what steps we need to do this
6943
05:53:07,760 --> 05:53:13,798
is called an algorithm and then we'll
6944
05:53:10,440 --> 05:53:16,320
convert these steps into code so the
6945
05:53:13,798 --> 05:53:19,280
steps that we need here are when we
6946
05:53:16,320 --> 05:53:22,160
click this button if the text is
6947
05:53:19,280 --> 05:53:24,878
subscribe we'll change it to
6948
05:53:22,160 --> 05:53:28,160
subscribed otherwise we'll change it
6949
05:53:24,878 --> 05:53:31,600
back now let's convert these steps into
6950
05:53:28,160 --> 05:53:34,958
code let's go to our button element and
6951
05:53:31,600 --> 05:53:40,600
we're going to add an onclick attribute
6952
05:53:34,958 --> 05:53:44,440
we'll type space on click equals double
6953
05:53:40,600 --> 05:53:47,240
quotes and inside here we'll write some
6954
05:53:44,440 --> 05:53:50,200
JavaScript so first we need to get the
6955
05:53:47,240 --> 05:53:52,760
text inside the button and we learned
6956
05:53:50,200 --> 05:53:55,638
how to do this earlier we can use
6957
05:53:52,760 --> 05:53:58,638
document. Query selector to put this
6958
05:53:55,638 --> 05:54:03,160
button into our JavaScript and then use
6959
05:53:58,638 --> 05:54:08,360
inner HTML to get this HTML inside the
6960
05:54:03,160 --> 05:54:08,360
button so in our code let's type
6961
05:54:08,760 --> 05:54:16,478
document. query
6962
05:54:11,958 --> 05:54:18,520
selector brackets and a string and as we
6963
05:54:16,478 --> 05:54:22,558
learned we're going to use a class
6964
05:54:18,520 --> 05:54:27,920
attribute to select this specific button
6965
05:54:22,558 --> 05:54:32,400
so in the opening tag let's add a class
6966
05:54:27,920 --> 05:54:34,160
attribute and let's make the class
6967
05:54:32,400 --> 05:54:37,280
js-
6968
05:54:34,160 --> 05:54:40,478
subscribe Dash
6969
05:54:37,280 --> 05:54:43,440
button and then inside document. query
6970
05:54:40,478 --> 05:54:45,680
selector we're going to type a DOT to
6971
05:54:43,440 --> 05:54:48,200
select a class and we're going to select
6972
05:54:45,680 --> 05:54:50,240
the class
6973
05:54:48,200 --> 05:54:53,240
js-
6974
05:54:50,240 --> 05:54:56,760
subscribe Das
6975
05:54:53,240 --> 05:55:00,040
button and now let's console.log this to
6976
05:54:56,760 --> 05:55:03,280
confirm that we got this button so at
6977
05:55:00,040 --> 05:55:03,280
the front
6978
05:55:05,080 --> 05:55:10,440
console.log and
6979
05:55:07,440 --> 05:55:12,760
save and now let's click our
6980
05:55:10,440 --> 05:55:15,878
button and it will show us that
6981
05:55:12,760 --> 05:55:18,840
document. query selector got the button
6982
05:55:15,878 --> 05:55:21,798
on the page so now let's save this
6983
05:55:18,840 --> 05:55:24,558
button in a variable so we can use it
6984
05:55:21,798 --> 05:55:28,280
later instead of
6985
05:55:24,558 --> 05:55:31,558
console.log let's type const to create a
6986
05:55:28,280 --> 05:55:33,080
variable and we'll name it
6987
05:55:31,558 --> 05:55:37,798
button
6988
05:55:33,080 --> 05:55:40,400
element and make it equal to this
6989
05:55:37,798 --> 05:55:42,558
result so now that we have the button
6990
05:55:40,400 --> 05:55:46,080
inside our JavaScript we're going to
6991
05:55:42,558 --> 05:55:49,080
check if the text inside the button is
6992
05:55:46,080 --> 05:55:52,840
subscribe to check the text we can use
6993
05:55:49,080 --> 05:55:56,920
an if statement so at the bottom here
6994
05:55:52,840 --> 05:55:57,958
we're going to type if brackets and
6995
05:55:56,920 --> 05:56:01,200
curly
6996
05:55:57,958 --> 05:56:04,760
brackets and inside this condition let's
6997
05:56:01,200 --> 05:56:07,920
get the text inside the button so we'll
6998
05:56:04,760 --> 05:56:13,160
type button
6999
05:56:07,920 --> 05:56:15,680
element do inner Capital
7000
05:56:13,160 --> 05:56:19,840
HTML and we're going to check if it's
7001
05:56:15,680 --> 05:56:24,160
equal to subscribe so we'll type triple
7002
05:56:19,840 --> 05:56:27,360
equal the string
7003
05:56:24,160 --> 05:56:30,520
subscribe now if it is equal to
7004
05:56:27,360 --> 05:56:32,360
subscribe inside the curly brackets
7005
05:56:30,520 --> 05:56:34,440
we're going to change the text in the
7006
05:56:32,360 --> 05:56:38,040
button to
7007
05:56:34,440 --> 05:56:39,600
subscribed so let's type the code
7008
05:56:38,040 --> 05:56:45,878
button
7009
05:56:39,600 --> 05:56:48,920
element do inner Capital HTM L and we'll
7010
05:56:45,878 --> 05:56:51,920
change it with an equal sign to the
7011
05:56:48,920 --> 05:56:51,920
string
7012
05:56:52,400 --> 05:56:58,240
subscribed and the last step is
7013
05:56:55,120 --> 05:57:00,600
otherwise we'll change it back so we'll
7014
05:56:58,240 --> 05:57:05,520
add an else to this if
7015
05:57:00,600 --> 05:57:08,080
statement else and curly brackets and
7016
05:57:05,520 --> 05:57:10,080
inside we're going to change the text
7017
05:57:08,080 --> 05:57:13,280
back to
7018
05:57:10,080 --> 05:57:15,440
subscribe so let's type
7019
05:57:13,280 --> 05:57:19,280
button
7020
05:57:15,440 --> 05:57:25,040
element. inner Capital
7021
05:57:19,280 --> 05:57:27,320
HTML and make it equal to the string
7022
05:57:25,040 --> 05:57:30,680
subscribe and
7023
05:57:27,320 --> 05:57:32,920
save now before you try out this project
7024
05:57:30,680 --> 05:57:36,280
make sure that the text inside the
7025
05:57:32,920 --> 05:57:39,320
button has no spaces or new lines around
7026
05:57:36,280 --> 05:57:42,200
it and it looks like this and I'll show
7027
05:57:39,320 --> 05:57:45,478
you why in a second let's go to our
7028
05:57:42,200 --> 05:57:49,120
project and try it out so when we click
7029
05:57:45,478 --> 05:57:52,400
this button it will change to the text
7030
05:57:49,120 --> 05:57:55,440
subscribed if we click it again it will
7031
05:57:52,400 --> 05:57:57,440
go back to the original text so that's
7032
05:57:55,440 --> 05:58:01,120
how we create the Subscribe button
7033
05:57:57,440 --> 05:58:04,478
project using the Dom so now let's go
7034
05:58:01,120 --> 05:58:06,638
back into our code and I'll show you why
7035
05:58:04,478 --> 05:58:08,840
if we add new lines
7036
05:58:06,638 --> 05:58:11,440
and some spaces around this
7037
05:58:08,840 --> 05:58:14,320
text there's actually going to be some
7038
05:58:11,440 --> 05:58:17,558
problems so if we save this
7039
05:58:14,320 --> 05:58:20,160
code and then go back to our project and
7040
05:58:17,558 --> 05:58:23,240
click the button again you'll notice
7041
05:58:20,160 --> 05:58:26,200
that it no longer changes the text and
7042
05:58:23,240 --> 05:58:29,840
that's because now we have a bunch of
7043
05:58:26,200 --> 05:58:32,160
spaces around this text and these spaces
7044
05:58:29,840 --> 05:58:36,200
will show up in inner
7045
05:58:32,160 --> 05:58:37,400
HTML and now inner HTML will not equal
7046
05:58:36,200 --> 05:58:39,520
exactly
7047
05:58:37,400 --> 05:58:42,280
subscribe so how do we solve this
7048
05:58:39,520 --> 05:58:45,280
problem when there are spaces around our
7049
05:58:42,280 --> 05:58:49,478
text to solve this we're going to use a
7050
05:58:45,280 --> 05:58:52,680
different property of an HTML element so
7051
05:58:49,478 --> 05:58:56,478
instead of the inner HTML property we're
7052
05:58:52,680 --> 05:58:58,240
going to use the property inner capital
7053
05:58:56,478 --> 05:59:02,200
T
7054
05:58:58,240 --> 05:59:05,000
text so inner text will give us the text
7055
05:59:02,200 --> 05:59:07,240
inside this element but without all the
7056
05:59:05,000 --> 05:59:10,320
spaces around it
7057
05:59:07,240 --> 05:59:14,120
so now this will equal exactly
7058
05:59:10,320 --> 05:59:17,760
subscribe if we save and go back to our
7059
05:59:14,120 --> 05:59:20,920
project and click it again it'll start
7060
05:59:17,760 --> 05:59:24,120
working again so that's the inner text
7061
05:59:20,920 --> 05:59:26,878
property of an HTML element it gets us
7062
05:59:24,120 --> 05:59:29,400
the text without the extra
7063
05:59:26,878 --> 05:59:31,680
spaces so before we move on to the
7064
05:59:29,400 --> 05:59:33,200
second project I'm going to show you how
7065
05:59:31,680 --> 05:59:37,240
to make our code
7066
05:59:33,200 --> 05:59:40,360
cleaner right now we're mixing a HTML
7067
05:59:37,240 --> 05:59:43,160
and JavaScript together so to make our
7068
05:59:40,360 --> 05:59:45,798
code cleaner and easier to read we're
7069
05:59:43,160 --> 05:59:47,638
going to separate the JavaScript code
7070
05:59:45,798 --> 05:59:49,760
and to do that we're going to put this
7071
05:59:47,638 --> 05:59:52,798
code in a function
7072
05:59:49,760 --> 05:59:58,440
instead so inside the script
7073
05:59:52,798 --> 06:00:02,878
element let's create a function using
7074
05:59:58,440 --> 06:00:07,120
function and we'll name the function
7075
06:00:02,878 --> 06:00:09,280
subcribe brackets and curly brackets
7076
06:00:07,120 --> 06:00:12,280
and inside these curly brackets we're
7077
06:00:09,280 --> 06:00:13,680
going to move all of this code so let's
7078
06:00:12,280 --> 06:00:16,080
select this
7079
06:00:13,680 --> 06:00:17,680
code and we'll right
7080
06:00:16,080 --> 06:00:23,440
click
7081
06:00:17,680 --> 06:00:25,558
cut and in here right click and
7082
06:00:23,440 --> 06:00:28,320
paste and if we need to fix the
7083
06:00:25,558 --> 06:00:31,638
formatting we can select these lines and
7084
06:00:28,320 --> 06:00:34,080
press tab a few times and now that we
7085
06:00:31,638 --> 06:00:36,160
have this function we're going to go to
7086
06:00:34,080 --> 06:00:38,920
the onclick attribute and and we're
7087
06:00:36,160 --> 06:00:41,958
going to call this function so we'll
7088
06:00:38,920 --> 06:00:44,798
type the function name
7089
06:00:41,958 --> 06:00:48,478
subscribe and
7090
06:00:44,798 --> 06:00:51,080
brackets so this will run all the code
7091
06:00:48,478 --> 06:00:54,320
inside the function so it will do the
7092
06:00:51,080 --> 06:00:57,000
same thing as before except now our code
7093
06:00:54,320 --> 06:00:59,638
is cleaner because we grouped all the
7094
06:00:57,000 --> 06:01:02,638
JavaScript code at the bottom and we're
7095
06:00:59,638 --> 06:01:04,040
no longer mixing as much HTML and
7096
06:01:02,638 --> 06:01:07,120
JavaScript
7097
06:01:04,040 --> 06:01:10,958
together now let's move on to the second
7098
06:01:07,120 --> 06:01:13,280
project we'll go back to superimple
7099
06:01:10,958 --> 06:01:15,958
dodev and we're going to work on the
7100
06:01:13,280 --> 06:01:17,360
rock paper scissors project so let's
7101
06:01:15,958 --> 06:01:19,760
click this
7102
06:01:17,360 --> 06:01:22,718
link and it will show us the next
7103
06:01:19,760 --> 06:01:25,478
version of this project so you notice a
7104
06:01:22,718 --> 06:01:27,320
few changes here the first change is
7105
06:01:25,478 --> 06:01:31,040
that we're going to show the score on
7106
06:01:27,320 --> 06:01:33,160
the page instead of in a popup and the
7107
06:01:31,040 --> 06:01:36,120
second change is that when we click one
7108
06:01:33,160 --> 06:01:39,240
of these buttons to play the game it
7109
06:01:36,120 --> 06:01:42,120
will show us the result and the moves
7110
06:01:39,240 --> 06:01:43,080
that we picked on the page rather than
7111
06:01:42,120 --> 06:01:46,000
in a
7112
06:01:43,080 --> 06:01:48,920
popup let's create a new file for this
7113
06:01:46,000 --> 06:01:50,760
rock paper scissors game for this lesson
7114
06:01:48,920 --> 06:01:54,280
so let's go to our code
7115
06:01:50,760 --> 06:01:57,840
editor and we'll click this icon and
7116
06:01:54,280 --> 06:02:00,718
click this icon to create a new file and
7117
06:01:57,840 --> 06:02:02,600
we'll name this
7118
06:02:00,718 --> 06:02:06,958
09-
7119
06:02:02,600 --> 06:02:08,840
rock- paper Das
7120
06:02:06,958 --> 06:02:11,478
scissors.
7121
06:02:08,840 --> 06:02:14,600
HTML and press
7122
06:02:11,478 --> 06:02:17,840
enter and let's copy the previous rock
7123
06:02:14,600 --> 06:02:21,958
paper scissors which is here we'll click
7124
06:02:17,840 --> 06:02:24,680
here and type control a or command a
7125
06:02:21,958 --> 06:02:30,520
right click
7126
06:02:24,680 --> 06:02:33,680
copy and here right click and
7127
06:02:30,520 --> 06:02:37,360
paste and let's hide our
7128
06:02:33,680 --> 06:02:41,798
files and let's save this F file and we
7129
06:02:37,360 --> 06:02:43,840
can also close 08 rock paper scissors
7130
06:02:41,798 --> 06:02:49,840
and finally we'll open this in the
7131
06:02:43,840 --> 06:02:49,840
browser by right clicking open with live
7132
06:02:49,878 --> 06:02:55,360
server now we're ready to begin the
7133
06:02:52,478 --> 06:02:58,320
second project so let's go back to the
7134
06:02:55,360 --> 06:03:00,840
project at super simple Dev and we're
7135
06:02:58,320 --> 06:03:03,878
going to start by putting the score on
7136
06:03:00,840 --> 06:03:07,240
the page so to do this we're going to
7137
06:03:03,878 --> 06:03:11,280
need somewhere to put the score so let's
7138
06:03:07,240 --> 06:03:13,958
create an HTML element for this we'll
7139
06:03:11,280 --> 06:03:16,240
scroll up to our
7140
06:03:13,958 --> 06:03:20,040
HTML which is
7141
06:03:16,240 --> 06:03:22,600
here and after the scissors button let's
7142
06:03:20,040 --> 06:03:26,878
add a paragraph element where we're
7143
06:03:22,600 --> 06:03:27,958
going to put our score so less than P
7144
06:03:26,878 --> 06:03:31,080
greater
7145
06:03:27,958 --> 06:03:33,080
than and let's add a class attribute so
7146
06:03:31,080 --> 06:03:36,120
we can select this element in our
7147
06:03:33,080 --> 06:03:43,320
JavaScript so in the opening tag we'll
7148
06:03:36,120 --> 06:03:45,000
type space class equals double quotes
7149
06:03:43,320 --> 06:03:48,160
js-
7150
06:03:45,000 --> 06:03:50,440
score now that we have a class let's get
7151
06:03:48,160 --> 06:03:54,080
this element in our
7152
06:03:50,440 --> 06:03:57,320
JavaScript so let's just do it down here
7153
06:03:54,080 --> 06:03:58,840
so we'll type
7154
06:03:57,320 --> 06:04:01,080
document.
7155
06:03:58,840 --> 06:04:04,878
query
7156
06:04:01,080 --> 06:04:07,200
selector brackets and a string and then
7157
06:04:04,878 --> 06:04:12,958
we're going to type a Dot and we're
7158
06:04:07,200 --> 06:04:14,878
going to select the class js- score so
7159
06:04:12,958 --> 06:04:17,680
js-
7160
06:04:14,878 --> 06:04:21,558
score so this will get the paragraph
7161
06:04:17,680 --> 06:04:24,320
element from above and put it inside our
7162
06:04:21,558 --> 06:04:27,638
JavaScript and now let's put the score
7163
06:04:24,320 --> 06:04:28,920
inside the element to do that we can use
7164
06:04:27,638 --> 06:04:33,958
inner
7165
06:04:28,920 --> 06:04:37,718
HTML dot inner Capital
7166
06:04:33,958 --> 06:04:40,000
HTML and we'll make it equal to the
7167
06:04:37,718 --> 06:04:43,320
score if we scroll
7168
06:04:40,000 --> 06:04:46,440
down we actually create the score down
7169
06:04:43,320 --> 06:04:49,680
here so we can actually just copy this
7170
06:04:46,440 --> 06:04:51,520
string so we'll select it
7171
06:04:49,680 --> 06:04:55,080
rightclick
7172
06:04:51,520 --> 06:04:59,478
copy and let's scroll
7173
06:04:55,080 --> 06:05:02,320
up to here and I'll actually put this on
7174
06:04:59,478 --> 06:05:05,680
a separate line to make it easier to
7175
06:05:02,320 --> 06:05:08,040
read and now here we're going to type a
7176
06:05:05,680 --> 06:05:10,920
string using back
7177
06:05:08,040 --> 06:05:14,558
ticks and inside the string we're going
7178
06:05:10,920 --> 06:05:17,798
to rightclick and
7179
06:05:14,558 --> 06:05:21,160
paste so this will put the score that we
7180
06:05:17,798 --> 06:05:23,558
used to have in our popup inside this
7181
06:05:21,160 --> 06:05:25,760
element so inside this
7182
06:05:23,558 --> 06:05:28,840
paragraph if we
7183
06:05:25,760 --> 06:05:31,718
save and then go back to our
7184
06:05:28,840 --> 06:05:35,320
tab you can see that now it displays the
7185
06:05:31,718 --> 06:05:37,478
score on the page now before we move on
7186
06:05:35,320 --> 06:05:40,520
I want want to point something out with
7187
06:05:37,478 --> 06:05:43,878
HTML so remember that our reset score
7188
06:05:40,520 --> 06:05:46,958
button was beside our other buttons and
7189
06:05:43,878 --> 06:05:49,478
now it's below them so what determines
7190
06:05:46,958 --> 06:05:52,680
if an element appears beside something
7191
06:05:49,478 --> 06:05:56,760
or below something so the paragraph
7192
06:05:52,680 --> 06:05:59,440
element Here is known as a block element
7193
06:05:56,760 --> 06:06:03,040
a block element will always take up an
7194
06:05:59,440 --> 06:06:05,040
entire line by itself so this line
7195
06:06:03,040 --> 06:06:07,878
already has some buttons so the
7196
06:06:05,040 --> 06:06:10,638
paragraph will take up the entire line
7197
06:06:07,878 --> 06:06:13,478
under the buttons that's why this text
7198
06:06:10,638 --> 06:06:16,798
appears under the buttons and not beside
7199
06:06:13,478 --> 06:06:19,878
them and also because a block element
7200
06:06:16,798 --> 06:06:23,200
like this paragraph takes up this entire
7201
06:06:19,878 --> 06:06:27,478
line the next button has to appear below
7202
06:06:23,200 --> 06:06:29,600
it so that's why we get this layout here
7203
06:06:27,478 --> 06:06:31,718
so this is just a short review of
7204
06:06:29,600 --> 06:06:34,600
layouts if you want to learn this in
7205
06:06:31,718 --> 06:06:37,878
more detail you can check out my HTML
7206
06:06:34,600 --> 06:06:40,478
and CSS full course in the video
7207
06:06:37,878 --> 06:06:43,280
description all right the next feature
7208
06:06:40,478 --> 06:06:46,558
we're going to do is if we play the game
7209
06:06:43,280 --> 06:06:49,520
we also want to update the score right
7210
06:06:46,558 --> 06:06:52,878
now if we play it doesn't update it on
7211
06:06:49,520 --> 06:06:55,520
the page let's fix this in our
7212
06:06:52,878 --> 06:06:58,558
JavaScript so let's go down to where we
7213
06:06:55,520 --> 06:07:02,200
update the score so we'll scroll
7214
06:06:58,558 --> 06:07:05,600
down which is right here we update the
7215
06:07:02,200 --> 06:07:07,760
score and save it in local storage and
7216
06:07:05,600 --> 06:07:11,240
after we do this we're also going to
7217
06:07:07,760 --> 06:07:14,120
update the score on the page so we can
7218
06:07:11,240 --> 06:07:18,080
actually use the same code that we used
7219
06:07:14,120 --> 06:07:20,320
above which is here so let's make a copy
7220
06:07:18,080 --> 06:07:21,840
of this code
7221
06:07:20,320 --> 06:07:24,840
rightclick
7222
06:07:21,840 --> 06:07:29,400
copy and down
7223
06:07:24,840 --> 06:07:33,240
here right click and
7224
06:07:29,400 --> 06:07:37,320
paste and I'll add a tab at the front if
7225
06:07:33,240 --> 06:07:39,558
we save and then try out our game we'll
7226
06:07:37,320 --> 06:07:42,120
click a move press
7227
06:07:39,558 --> 06:07:45,120
okay and now you'll notice the score
7228
06:07:42,120 --> 06:07:48,200
also updates on the page so let's go
7229
06:07:45,120 --> 06:07:50,558
back into our code and do some cleanup
7230
06:07:48,200 --> 06:07:53,360
so you notice that this code is the same
7231
06:07:50,558 --> 06:07:56,240
as the code we had above and this is a
7232
06:07:53,360 --> 06:08:00,680
great situation to use a function to
7233
06:07:56,240 --> 06:08:05,798
reuse this code so at the bottom here
7234
06:08:00,680 --> 06:08:08,040
let's create a function using function
7235
06:08:05,798 --> 06:08:09,878
and we'll call it
7236
06:08:08,040 --> 06:08:11,478
update
7237
06:08:09,878 --> 06:08:14,478
score
7238
06:08:11,478 --> 06:08:17,400
element brackets and curly
7239
06:08:14,478 --> 06:08:21,160
brackets and we'll move this code into
7240
06:08:17,400 --> 06:08:22,798
the function so we'll select it right
7241
06:08:21,160 --> 06:08:28,120
click
7242
06:08:22,798 --> 06:08:30,958
copy and in here right click and
7243
06:08:28,120 --> 06:08:33,798
paste and now instead of writing this
7244
06:08:30,958 --> 06:08:36,718
code multiple times we're just going to
7245
06:08:33,798 --> 06:08:42,200
call the function
7246
06:08:36,718 --> 06:08:44,718
update score element and
7247
06:08:42,200 --> 06:08:46,878
brackets this will run all the code
7248
06:08:44,718 --> 06:08:50,440
inside the function so it does the same
7249
06:08:46,878 --> 06:08:53,600
thing as before except we can reuse the
7250
06:08:50,440 --> 06:08:56,558
code so let's scroll back
7251
06:08:53,600 --> 06:09:00,000
up and instead of typing out all this
7252
06:08:56,558 --> 06:09:01,558
code again we can just use our
7253
06:09:00,000 --> 06:09:03,200
function
7254
06:09:01,558 --> 06:09:05,718
update
7255
06:09:03,200 --> 06:09:07,120
score element
7256
06:09:05,718 --> 06:09:09,440
and
7257
06:09:07,120 --> 06:09:12,120
brackets now let's
7258
06:09:09,440 --> 06:09:15,440
save it will display the score on the
7259
06:09:12,120 --> 06:09:19,120
page at the start and when we click a
7260
06:09:15,440 --> 06:09:22,360
move and click okay it will update the
7261
06:09:19,120 --> 06:09:24,160
score on the page so the last feature
7262
06:09:22,360 --> 06:09:27,040
we're going to do in relation to the
7263
06:09:24,160 --> 06:09:29,760
score is when we click the reset score
7264
06:09:27,040 --> 06:09:30,680
button we also want to update the score
7265
06:09:29,760 --> 06:09:34,000
on the
7266
06:09:30,680 --> 06:09:36,000
page right now if we click it it doesn't
7267
06:09:34,000 --> 06:09:38,920
actually update it
7268
06:09:36,000 --> 06:09:43,280
so let's go into our code and let's go
7269
06:09:38,920 --> 06:09:46,200
to the reset button which is here and
7270
06:09:43,280 --> 06:09:49,360
after we reset the score we're going to
7271
06:09:46,200 --> 06:09:51,280
call that function again
7272
06:09:49,360 --> 06:09:54,798
update
7273
06:09:51,280 --> 06:09:57,120
score element and
7274
06:09:54,798 --> 06:10:00,798
brackets if we
7275
06:09:57,120 --> 06:10:04,600
save and now let's play the game and
7276
06:10:00,798 --> 06:10:07,440
press okay so we have a score and if we
7277
06:10:04,600 --> 06:10:11,000
click reset score it will reset
7278
06:10:07,440 --> 06:10:13,878
everything back to zero so now we
7279
06:10:11,000 --> 06:10:15,520
finished the score let's go back to
7280
06:10:13,878 --> 06:10:17,920
super simple
7281
06:10:15,520 --> 06:10:20,680
Dev and play the
7282
06:10:17,920 --> 06:10:23,520
game and now we're going to work on this
7283
06:10:20,680 --> 06:10:27,200
section we're going to show the result
7284
06:10:23,520 --> 06:10:29,478
and the moves that we picked on the page
7285
06:10:27,200 --> 06:10:32,920
so first let's create some paragraphs
7286
06:10:29,478 --> 06:10:36,400
for these as well we'll go to our
7287
06:10:32,920 --> 06:10:41,280
HTML and above the score
7288
06:10:36,400 --> 06:10:44,000
let's add a less than P greater than
7289
06:10:41,280 --> 06:10:48,320
this is going to be the result so let's
7290
06:10:44,000 --> 06:10:50,520
give it a class of
7291
06:10:48,320 --> 06:10:53,440
js-
7292
06:10:50,520 --> 06:10:57,400
result and let's create another
7293
06:10:53,440 --> 06:11:03,040
paragraph less than P greater than and
7294
06:10:57,400 --> 06:11:05,920
we'll give this one a class equals
7295
06:11:03,040 --> 06:11:09,080
js- moves
7296
06:11:05,920 --> 06:11:12,160
now let's use the Dom to put the result
7297
06:11:09,080 --> 06:11:14,080
and the moves in these paragraphs feel
7298
06:11:12,160 --> 06:11:17,558
free to pause the video if you want to
7299
06:11:14,080 --> 06:11:21,040
try it yourself first so let's scroll
7300
06:11:17,558 --> 06:11:24,920
down to where we display the
7301
06:11:21,040 --> 06:11:29,000
result which is here so we display it in
7302
06:11:24,920 --> 06:11:31,280
a popup and instead of a popup we're
7303
06:11:29,000 --> 06:11:34,520
going to get the paragraph and put this
7304
06:11:31,280 --> 06:11:36,680
result inside the paragraph so we'll
7305
06:11:34,520 --> 06:11:39,878
type
7306
06:11:36,680 --> 06:11:43,680
document. query
7307
06:11:39,878 --> 06:11:48,320
selector brackets and a string and we'll
7308
06:11:43,680 --> 06:11:50,600
type a DOT and select the class
7309
06:11:48,320 --> 06:11:56,558
js-
7310
06:11:50,600 --> 06:12:01,680
result and then dot inner Capital
7311
06:11:56,558 --> 06:12:04,440
HTML and we'll change this to
7312
06:12:01,680 --> 06:12:09,798
result and now let's also display the
7313
06:12:04,440 --> 06:12:14,760
moves so we'll type some new lines and
7314
06:12:09,798 --> 06:12:18,600
document. query selector again brackets
7315
06:12:14,760 --> 06:12:20,718
and a string dot
7316
06:12:18,600 --> 06:12:25,638
js-
7317
06:12:20,718 --> 06:12:29,360
moves do inner Capital
7318
06:12:25,638 --> 06:12:32,160
HTML and make it equal to this text
7319
06:12:29,360 --> 06:12:34,440
right here so let's type a template
7320
06:12:32,160 --> 06:12:37,558
string because we're going to insert our
7321
06:12:34,440 --> 06:12:39,120
Moves In inside the string and we'll
7322
06:12:37,558 --> 06:12:42,638
Type
7323
06:12:39,120 --> 06:12:44,520
U and we'll insert the player move
7324
06:12:42,638 --> 06:12:50,400
dollar curly
7325
06:12:44,520 --> 06:12:54,440
brackets Player move and then a dash and
7326
06:12:50,400 --> 06:12:57,520
then the computers move so dollar curly
7327
06:12:54,440 --> 06:12:59,320
brackets again and
7328
06:12:57,520 --> 06:13:03,718
computer
7329
06:12:59,320 --> 06:13:06,440
move computer at the end so now that
7330
06:13:03,718 --> 06:13:09,400
we're displaying everything on the page
7331
06:13:06,440 --> 06:13:12,760
we don't need this popup at the end so
7332
06:13:09,400 --> 06:13:15,878
we can actually delete this
7333
06:13:12,760 --> 06:13:18,958
popup all right now let's
7334
06:13:15,878 --> 06:13:21,240
save and go back to our
7335
06:13:18,958 --> 06:13:24,320
Tab and play our
7336
06:13:21,240 --> 06:13:27,120
game now it will show the result and the
7337
06:13:24,320 --> 06:13:30,120
moves that we picked on the page instead
7338
06:13:27,120 --> 06:13:33,000
of in a popup let's play it again to
7339
06:13:30,120 --> 06:13:35,840
make sure it works and finally when we
7340
06:13:33,000 --> 06:13:39,440
click reset score it it will reset
7341
06:13:35,840 --> 06:13:41,520
everything back to zero and that's it
7342
06:13:39,440 --> 06:13:43,798
now we're displaying everything on the
7343
06:13:41,520 --> 06:13:46,840
web page using the
7344
06:13:43,798 --> 06:13:50,040
Dom now let's move on to the third and
7345
06:13:46,840 --> 06:13:52,120
final project we'll go back to Super
7346
06:13:50,040 --> 06:13:55,840
simple.
7347
06:13:52,120 --> 06:13:58,360
deev and we'll click back to go back to
7348
06:13:55,840 --> 06:14:01,000
our projects and we're going to create
7349
06:13:58,360 --> 06:14:02,878
this third project here which is an
7350
06:14:01,000 --> 06:14:05,520
Amazon shipping
7351
06:14:02,878 --> 06:14:08,120
calculator the way this works is is that
7352
06:14:05,520 --> 06:14:11,638
inside this text box we're going to type
7353
06:14:08,120 --> 06:14:13,200
the cost of an order in dollars if the
7354
06:14:11,638 --> 06:14:16,240
order is under
7355
06:14:13,200 --> 06:14:18,600
$4 for example
7356
06:14:16,240 --> 06:14:22,120
$25 and we click
7357
06:14:18,600 --> 06:14:25,160
calculate it will add $10 of shipping
7358
06:14:22,120 --> 06:14:27,798
and display the total down here but if
7359
06:14:25,160 --> 06:14:32,120
we type a cost that is over
7360
06:14:27,798 --> 06:14:35,160
$40 like 50 and press
7361
06:14:32,120 --> 06:14:38,360
calculate it will be free shipping so so
7362
06:14:35,160 --> 06:14:40,600
it will display the same total down here
7363
06:14:38,360 --> 06:14:41,440
so let's learn how to create this using
7364
06:14:40,600 --> 06:14:46,240
the
7365
06:14:41,440 --> 06:14:49,200
Dom let's go back to our 09 Dom projects
7366
06:14:46,240 --> 06:14:50,558
file and we'll start by creating the
7367
06:14:49,200 --> 06:14:53,680
HTML
7368
06:14:50,558 --> 06:14:58,080
elements so under our subscribe
7369
06:14:53,680 --> 06:15:02,200
button let's create this paragraph using
7370
06:14:58,080 --> 06:15:06,120
less than P greater than
7371
06:15:02,200 --> 06:15:09,878
Amazon shipping
7372
06:15:06,120 --> 06:15:13,760
calculator and next let's create this
7373
06:15:09,878 --> 06:15:17,718
text box so the HTML element for a text
7374
06:15:13,760 --> 06:15:22,558
box is called input so we'll type less
7375
06:15:17,718 --> 06:15:24,798
than input greater than so the input
7376
06:15:22,558 --> 06:15:28,360
element is special because it doesn't
7377
06:15:24,798 --> 06:15:29,478
require a closing tag this is called a
7378
06:15:28,360 --> 06:15:32,798
void
7379
06:15:29,478 --> 06:15:37,320
element and lastly let's create the
7380
06:15:32,798 --> 06:15:41,360
button so here we create less than
7381
06:15:37,320 --> 06:15:43,600
button greater than
7382
06:15:41,360 --> 06:15:47,520
calculate now let's
7383
06:15:43,600 --> 06:15:51,360
save and open the tab for this file
7384
06:15:47,520 --> 06:15:55,120
which is right here and we have the text
7385
06:15:51,360 --> 06:15:57,400
the text box and the button that we need
7386
06:15:55,120 --> 06:16:00,478
now one other thing we're going to add
7387
06:15:57,400 --> 06:16:02,638
is that in the final project if we don't
7388
06:16:00,478 --> 06:16:05,920
have anything in the text box we're
7389
06:16:02,638 --> 06:16:08,638
going to have this gray text so this is
7390
06:16:05,920 --> 06:16:11,160
called a placeholder to add a
7391
06:16:08,638 --> 06:16:14,878
placeholder to a text box we're going to
7392
06:16:11,160 --> 06:16:18,360
use the placeholder attribute so inside
7393
06:16:14,878 --> 06:16:20,958
our input element we're going to type
7394
06:16:18,360 --> 06:16:25,160
Space Place
7395
06:16:20,958 --> 06:16:27,840
holder equals double quotes and inside
7396
06:16:25,160 --> 06:16:33,558
the quotes we'll put the text we want as
7397
06:16:27,840 --> 06:16:35,920
the placeholder which is cost of
7398
06:16:33,558 --> 06:16:39,760
order and
7399
06:16:35,920 --> 06:16:42,760
save now if we go back to our project we
7400
06:16:39,760 --> 06:16:45,200
now have a placeholder in our text box
7401
06:16:42,760 --> 06:16:48,400
that disappears when we start
7402
06:16:45,200 --> 06:16:51,760
typing so that's all the HTML that we
7403
06:16:48,400 --> 06:16:54,558
need now let's work on the JavaScript
7404
06:16:51,760 --> 06:16:58,120
and again we'll figure out what steps we
7405
06:16:54,558 --> 06:17:00,600
need to do so when we click this button
7406
06:16:58,120 --> 06:17:04,520
we're going to get the text inside the
7407
06:17:00,600 --> 06:17:07,798
text box if the amount is below $40
7408
06:17:04,520 --> 06:17:11,040
we'll add $10 of shipping and then we'll
7409
06:17:07,798 --> 06:17:14,320
display the total on the page let's
7410
06:17:11,040 --> 06:17:19,760
convert these steps into code so we'll
7411
06:17:14,320 --> 06:17:23,120
go to our button and add and onclick
7412
06:17:19,760 --> 06:17:25,680
attribute and inside here let's also
7413
06:17:23,120 --> 06:17:29,280
create a function to separate our
7414
06:17:25,680 --> 06:17:32,360
JavaScript code like we did before so in
7415
06:17:29,280 --> 06:17:34,958
the script we're going to create a
7416
06:17:32,360 --> 06:17:37,920
function function
7417
06:17:34,958 --> 06:17:42,718
and let's name it
7418
06:17:37,920 --> 06:17:46,240
calculate total brackets and curly
7419
06:17:42,718 --> 06:17:50,280
brackets and inside on click we're just
7420
06:17:46,240 --> 06:17:51,798
going to call the function so
7421
06:17:50,280 --> 06:17:53,680
calculate
7422
06:17:51,798 --> 06:17:56,478
total
7423
06:17:53,680 --> 06:18:01,080
brackets the next step is to get the
7424
06:17:56,478 --> 06:18:04,360
text inside the text box so first let's
7425
06:18:01,080 --> 06:18:07,440
get this input element and put it inside
7426
06:18:04,360 --> 06:18:11,000
our J JavaScript to do that we can use
7427
06:18:07,440 --> 06:18:13,558
document. Query selector again so we'll
7428
06:18:11,000 --> 06:18:18,400
add a class to this input so we can
7429
06:18:13,558 --> 06:18:20,360
select it class equals
7430
06:18:18,400 --> 06:18:22,080
js-
7431
06:18:20,360 --> 06:18:25,040
cost-
7432
06:18:22,080 --> 06:18:27,520
input and then inside our JavaScript
7433
06:18:25,040 --> 06:18:29,040
we'll use
7434
06:18:27,520 --> 06:18:30,558
document.
7435
06:18:29,040 --> 06:18:35,840
Query
7436
06:18:30,558 --> 06:18:39,000
selector brackets and a string and a Dot
7437
06:18:35,840 --> 06:18:40,958
and this class
7438
06:18:39,000 --> 06:18:42,878
js-
7439
06:18:40,958 --> 06:18:45,840
cost-
7440
06:18:42,878 --> 06:18:49,600
input so this code will get the input
7441
06:18:45,840 --> 06:18:53,440
element and put it inside our JavaScript
7442
06:18:49,600 --> 06:18:53,440
let's confirm by
7443
06:18:53,478 --> 06:19:00,080
console. logging the
7444
06:18:57,878 --> 06:19:03,120
result and
7445
06:19:00,080 --> 06:19:05,320
save and now when we click the calculate
7446
06:19:03,120 --> 06:19:08,600
button it will give us
7447
06:19:05,320 --> 06:19:11,120
the input element from the page let's
7448
06:19:08,600 --> 06:19:14,200
save this input element in a variable so
7449
06:19:11,120 --> 06:19:17,840
we can use it later instead of
7450
06:19:14,200 --> 06:19:20,280
console.log we'll use const and we'll
7451
06:19:17,840 --> 06:19:24,360
name the variable
7452
06:19:20,280 --> 06:19:27,160
input element and make it equal to this
7453
06:19:24,360 --> 06:19:30,638
element and remove the extra
7454
06:19:27,160 --> 06:19:33,760
bracket and next we need to get the text
7455
06:19:30,638 --> 06:19:35,520
inside the input element so so far in
7456
06:19:33,760 --> 06:19:40,000
this lesson we've been using the
7457
06:19:35,520 --> 06:19:42,840
property inner HTML to do this however
7458
06:19:40,000 --> 06:19:47,160
for input elements you notice that there
7459
06:19:42,840 --> 06:19:49,680
is no HTML inside so for input elements
7460
06:19:47,160 --> 06:19:50,798
we're going to use a different property
7461
06:19:49,680 --> 06:19:53,920
called
7462
06:19:50,798 --> 06:19:56,040
value so at the bottom here we're going
7463
06:19:53,920 --> 06:19:58,400
to type
7464
06:19:56,040 --> 06:20:00,040
input
7465
06:19:58,400 --> 06:20:03,558
element.
7466
06:20:00,040 --> 06:20:05,680
value this is how we get the text inside
7467
06:20:03,558 --> 06:20:08,680
a text box
7468
06:20:05,680 --> 06:20:11,520
so let's console.log this to confirm
7469
06:20:08,680 --> 06:20:15,160
that it works so we
7470
06:20:11,520 --> 06:20:17,440
console do
7471
06:20:15,160 --> 06:20:20,280
log and
7472
06:20:17,440 --> 06:20:25,040
save and now let's type something in the
7473
06:20:20,280 --> 06:20:28,320
text box like 50 and click
7474
06:20:25,040 --> 06:20:31,360
calculate and input. value will give us
7475
06:20:28,320 --> 06:20:34,360
the text inside the text
7476
06:20:31,360 --> 06:20:38,320
box let's save this text in a variable
7477
06:20:34,360 --> 06:20:42,600
so so we can use it later con and we'll
7478
06:20:38,320 --> 06:20:45,440
name the variable cost and make it equal
7479
06:20:42,600 --> 06:20:48,680
to the text in the text
7480
06:20:45,440 --> 06:20:50,558
box the next step is to check if this
7481
06:20:48,680 --> 06:20:53,718
cost is under
7482
06:20:50,558 --> 06:20:58,878
$40 if it is We'll add
7483
06:20:53,718 --> 06:21:00,200
$10 so down here let's type if brackets
7484
06:20:58,878 --> 06:21:03,320
and curly
7485
06:21:00,200 --> 06:21:07,760
brackets and inside the condition we'll
7486
06:21:03,320 --> 06:21:11,200
check if cost is less than
7487
06:21:07,760 --> 06:21:17,000
40 and if it is inside the curly
7488
06:21:11,200 --> 06:21:21,558
brackets we'll do cost equals itself
7489
06:21:17,000 --> 06:21:24,280
plus $10 of shipping and remember when
7490
06:21:21,558 --> 06:21:26,840
we change a variable we have to switch
7491
06:21:24,280 --> 06:21:29,798
from const to
7492
06:21:26,840 --> 06:21:32,920
let and finally we're going to display
7493
06:21:29,798 --> 06:21:35,478
the total cost on the page so let's
7494
06:21:32,920 --> 06:21:39,958
create a paragraph where we can display
7495
06:21:35,478 --> 06:21:44,440
the cost so down here we'll create a
7496
06:21:39,958 --> 06:21:48,000
paragraph less than P greater than let's
7497
06:21:44,440 --> 06:21:53,920
give it a class
7498
06:21:48,000 --> 06:21:57,320
js- total Das cost and now inside our
7499
06:21:53,920 --> 06:22:02,520
JavaScript let's use
7500
06:21:57,320 --> 06:22:05,760
document. Query selector brackets and
7501
06:22:02,520 --> 06:22:07,718
string and we'll Type A Dot and the
7502
06:22:05,760 --> 06:22:12,718
class
7503
06:22:07,718 --> 06:22:16,320
js- total Das cost and we're going to
7504
06:22:12,718 --> 06:22:21,240
put the cost inside the paragraph we can
7505
06:22:16,320 --> 06:22:24,958
use dot inner Capital
7506
06:22:21,240 --> 06:22:28,520
HTML and make it equal and let's use a
7507
06:22:24,958 --> 06:22:31,440
template string so back ticks and we'll
7508
06:22:28,520 --> 06:22:37,320
have a dollar and we're going to insert
7509
06:22:31,440 --> 06:22:41,878
the cost using dollar and curly brackets
7510
06:22:37,320 --> 06:22:44,958
cost now let's save and try out this
7511
06:22:41,878 --> 06:22:46,080
project so first we'll type a cost that
7512
06:22:44,958 --> 06:22:50,200
is over
7513
06:22:46,080 --> 06:22:53,000
$40 like 50 if we press
7514
06:22:50,200 --> 06:22:55,200
calculate we're not going to add $10 of
7515
06:22:53,000 --> 06:22:59,080
shipping and we'll display the same
7516
06:22:55,200 --> 06:23:00,040
total on the page now let's try a number
7517
06:22:59,080 --> 06:23:05,000
under
7518
06:23:00,040 --> 06:23:08,000
$40 like 25 and press calculate
7519
06:23:05,000 --> 06:23:11,080
and this number doesn't look right it's
7520
06:23:08,000 --> 06:23:11,080
saying that we have to pay
7521
06:23:11,280 --> 06:23:17,840
$2,510 so what's going on here let's go
7522
06:23:14,440 --> 06:23:21,000
into our code and let's use console.log
7523
06:23:17,840 --> 06:23:24,040
to figure out what's wrong so first
7524
06:23:21,000 --> 06:23:25,840
let's console.log the cost to make sure
7525
06:23:24,040 --> 06:23:31,080
that we're getting the right number from
7526
06:23:25,840 --> 06:23:31,080
the text box so down here
7527
06:23:31,520 --> 06:23:39,320
console.log the cost
7528
06:23:34,718 --> 06:23:40,478
and save and then let's Type 25 again
7529
06:23:39,320 --> 06:23:43,680
and press
7530
06:23:40,478 --> 06:23:45,558
calculate and it will give us 25 so
7531
06:23:43,680 --> 06:23:49,400
we're getting the correct text from the
7532
06:23:45,558 --> 06:23:52,320
text box now let's console.log down here
7533
06:23:49,400 --> 06:23:54,200
to see if the math is working so we'll
7534
06:23:52,320 --> 06:23:55,840
type
7535
06:23:54,200 --> 06:23:57,760
console.
7536
06:23:55,840 --> 06:23:59,878
log
7537
06:23:57,760 --> 06:24:04,000
cost and
7538
06:23:59,878 --> 06:24:05,600
save and let's try 25 again and
7539
06:24:04,000 --> 06:24:09,080
calculate
7540
06:24:05,600 --> 06:24:13,680
and down here when we add 10 this is
7541
06:24:09,080 --> 06:24:16,760
where things go wrong and it results in
7542
06:24:13,680 --> 06:24:20,478
20510 so it's not doing math properly
7543
06:24:16,760 --> 06:24:23,478
here so let's check if cost is a number
7544
06:24:20,478 --> 06:24:27,478
to make sure that it's doing math so
7545
06:24:23,478 --> 06:24:27,478
here we'll type
7546
06:24:27,798 --> 06:24:35,320
console.log the type of
7547
06:24:32,040 --> 06:24:40,718
cost and Save
7548
06:24:35,320 --> 06:24:44,120
let's Type 25 again and calculate and
7549
06:24:40,718 --> 06:24:47,558
aha it's telling us that the cost is a
7550
06:24:44,120 --> 06:24:50,360
string so this is actually not a number
7551
06:24:47,558 --> 06:24:53,638
it is a string that's why it's not doing
7552
06:24:50,360 --> 06:24:57,000
math so remember from the strings lesson
7553
06:24:53,638 --> 06:24:59,320
when we add a string with a number
7554
06:24:57,000 --> 06:25:02,280
JavaScript will automatically convert
7555
06:24:59,320 --> 06:25:04,920
this number into a string and combine
7556
06:25:02,280 --> 06:25:09,718
them together that's that's why it just
7557
06:25:04,920 --> 06:25:10,878
combines 25 and 10 here this is called
7558
06:25:09,718 --> 06:25:13,840
type
7559
06:25:10,878 --> 06:25:17,120
coercion so whenever we get a value from
7560
06:25:13,840 --> 06:25:20,400
the Dom like this the value will be a
7561
06:25:17,120 --> 06:25:23,280
string so in order to do math we have to
7562
06:25:20,400 --> 06:25:26,400
manually convert this string into a
7563
06:25:23,280 --> 06:25:30,638
number to do that JavaScript has a
7564
06:25:26,400 --> 06:25:35,160
builtin function called number so before
7565
06:25:30,638 --> 06:25:40,240
this code we're going to type capital n
7566
06:25:35,160 --> 06:25:42,478
number Open Bracket and close bracket so
7567
06:25:40,240 --> 06:25:44,680
the number function takes whatever's
7568
06:25:42,478 --> 06:25:49,638
between the brackets and manually
7569
06:25:44,680 --> 06:25:54,120
converts it into a number so now if we
7570
06:25:49,638 --> 06:25:57,558
save and we Type 25 and press
7571
06:25:54,120 --> 06:26:01,000
calculate the cost is now a number and
7572
06:25:57,558 --> 06:26:04,760
it will do the math properly and give us
7573
06:26:01,000 --> 06:26:07,958
35 so remember whenever we get a value
7574
06:26:04,760 --> 06:26:10,280
from the Dom the value will be a string
7575
06:26:07,958 --> 06:26:13,200
so if we want to do math with it we have
7576
06:26:10,280 --> 06:26:16,760
to manually convert this value into a
7577
06:26:13,200 --> 06:26:19,798
number first so now let's remove the
7578
06:26:16,760 --> 06:26:21,638
console. logs that we used to figure out
7579
06:26:19,798 --> 06:26:24,080
this
7580
06:26:21,638 --> 06:26:27,160
problem and
7581
06:26:24,080 --> 06:26:30,520
save okay we're going to add one more
7582
06:26:27,160 --> 06:26:32,400
feature to this project let's go back to
7583
06:26:30,520 --> 06:26:35,680
superimple
7584
06:26:32,400 --> 06:26:39,600
dodev and inside the text box we're
7585
06:26:35,680 --> 06:26:42,718
going to Type 25 and press
7586
06:26:39,600 --> 06:26:45,160
enter so pressing enter will also
7587
06:26:42,718 --> 06:26:47,798
calculate the total and display it on
7588
06:26:45,160 --> 06:26:50,760
the page so let's learn how to create
7589
06:26:47,798 --> 06:26:53,320
this feature so if we go back to our
7590
06:26:50,760 --> 06:26:55,240
code so far in this course we've been
7591
06:26:53,320 --> 06:26:57,878
using the attribute
7592
06:26:55,240 --> 06:27:02,280
onclick which runs some JavaScript when
7593
06:26:57,878 --> 06:27:06,360
we click an element HTML has another
7594
06:27:02,280 --> 06:27:09,000
attribute we can use called on key down
7595
06:27:06,360 --> 06:27:12,760
which runs JavaScript when we press a
7596
06:27:09,000 --> 06:27:16,840
key down on our keyboard so inside the
7597
06:27:12,760 --> 06:27:22,958
input this time let's add the attribute
7598
06:27:16,840 --> 06:27:26,320
on key down equals double quotes and
7599
06:27:22,958 --> 06:27:31,440
then inside here
7600
06:27:26,320 --> 06:27:34,920
console. log and the string
7601
06:27:31,440 --> 06:27:38,958
typing so now every time we type in the
7602
06:27:34,920 --> 06:27:42,478
input it will console.log this message
7603
06:27:38,958 --> 06:27:45,638
let's save it and give it a try we'll go
7604
06:27:42,478 --> 06:27:49,638
to the tab for this file and then inside
7605
06:27:45,638 --> 06:27:51,840
the text box we'll type some numbers and
7606
06:27:49,638 --> 06:27:54,718
you can see that every time we type
7607
06:27:51,840 --> 06:27:56,360
something it will run this code and
7608
06:27:54,718 --> 06:27:58,840
display this
7609
06:27:56,360 --> 06:28:02,680
message so that's how we do something
7610
06:27:58,840 --> 06:28:06,478
when we type in an element so clicks and
7611
06:28:02,680 --> 06:28:10,478
key Downs are known known as events on
7612
06:28:06,478 --> 06:28:13,760
click and on key down are known as event
7613
06:28:10,478 --> 06:28:17,400
listeners they check for events and runs
7614
06:28:13,760 --> 06:28:20,240
JavaScript when those events happen now
7615
06:28:17,400 --> 06:28:21,958
in addition to clicks and key Downs
7616
06:28:20,240 --> 06:28:23,878
there are many other events we can
7617
06:28:21,958 --> 06:28:26,680
listen for in
7618
06:28:23,878 --> 06:28:28,840
JavaScript okay so now let's figure out
7619
06:28:26,680 --> 06:28:31,920
what steps we need to do for this
7620
06:28:28,840 --> 06:28:34,920
project when we press a key down in the
7621
06:28:31,920 --> 06:28:38,200
text box we're going to check if the key
7622
06:28:34,920 --> 06:28:41,080
is the enter key if it is we'll do the
7623
06:28:38,200 --> 06:28:44,600
same thing as the calculate
7624
06:28:41,080 --> 06:28:47,958
button so how do we know what key we
7625
06:28:44,600 --> 06:28:51,120
pressed inside on key down we're
7626
06:28:47,958 --> 06:28:54,600
actually given a special object called
7627
06:28:51,120 --> 06:28:56,798
event so instead of this string let's
7628
06:28:54,600 --> 06:28:58,760
remove it and we'll
7629
06:28:56,798 --> 06:29:01,240
console.log
7630
06:28:58,760 --> 06:29:03,600
event so this is an object that's
7631
06:29:01,240 --> 06:29:06,798
provided to us by JavaScript and it
7632
06:29:03,600 --> 06:29:09,878
contains information about the event
7633
06:29:06,798 --> 06:29:15,040
every event listener including on click
7634
06:29:09,878 --> 06:29:18,558
also gets an event object if we
7635
06:29:15,040 --> 06:29:22,160
save and type in this text
7636
06:29:18,558 --> 06:29:25,798
box it will show us that event is this
7637
06:29:22,160 --> 06:29:29,320
object and inside the object it has a
7638
06:29:25,798 --> 06:29:33,040
bunch of information including the key
7639
06:29:29,320 --> 06:29:38,600
that we typed so here let's use the
7640
06:29:33,040 --> 06:29:42,520
event object and we'll get dot key and
7641
06:29:38,600 --> 06:29:45,080
save so now inside this text box if we
7642
06:29:42,520 --> 06:29:47,798
type something it will tell us the key
7643
06:29:45,080 --> 06:29:51,040
that we pressed and if we press
7644
06:29:47,798 --> 06:29:54,120
enter it will tell us that the key is
7645
06:29:51,040 --> 06:29:57,440
enter so the next step is to check if
7646
06:29:54,120 --> 06:30:00,840
the key is enter and we can do that
7647
06:29:57,440 --> 06:30:04,400
using an if statement so in our
7648
06:30:00,840 --> 06:30:08,600
code we'll type a new line
7649
06:30:04,400 --> 06:30:12,360
if brackets and curly brackets and
7650
06:30:08,600 --> 06:30:18,840
inside the condition we'll check if
7651
06:30:12,360 --> 06:30:22,040
event. key is equal to the string
7652
06:30:18,840 --> 06:30:23,680
enter if it is equal to enter we're
7653
06:30:22,040 --> 06:30:26,718
going to do the same thing as the
7654
06:30:23,680 --> 06:30:30,240
calculate button so we can actually just
7655
06:30:26,718 --> 06:30:35,440
use this function again inside the curly
7656
06:30:30,240 --> 06:30:37,798
brackets we'll type calculate
7657
06:30:35,440 --> 06:30:40,040
total and
7658
06:30:37,798 --> 06:30:43,478
brackets and
7659
06:30:40,040 --> 06:30:48,240
save so now let's go back to our project
7660
06:30:43,478 --> 06:30:51,440
and type 25 enter and it will calculate
7661
06:30:48,240 --> 06:30:53,200
the total and display it on the page so
7662
06:30:51,440 --> 06:30:57,160
that's how we create this keyboard
7663
06:30:53,200 --> 06:30:59,958
feature of this project lastly let's
7664
06:30:57,160 --> 06:31:03,360
clean up our code and move this into a
7665
06:30:59,958 --> 06:31:05,080
function like the rest of our code so
7666
06:31:03,360 --> 06:31:08,360
inside the script
7667
06:31:05,080 --> 06:31:10,160
element let's create a new function
7668
06:31:08,360 --> 06:31:13,320
using
7669
06:31:10,160 --> 06:31:19,798
function and we'll name it
7670
06:31:13,320 --> 06:31:22,638
handle cost key down brackets and curly
7671
06:31:19,798 --> 06:31:26,240
brackets and let's move this code into
7672
06:31:22,638 --> 06:31:28,040
the function we'll select it
7673
06:31:26,240 --> 06:31:34,120
rightclick
7674
06:31:28,040 --> 06:31:36,120
cut and in here right click and paste
7675
06:31:34,120 --> 06:31:39,440
if we need to fix the formatting we can
7676
06:31:36,120 --> 06:31:41,320
select these lines and press Tab and
7677
06:31:39,440 --> 06:31:44,080
let's remove this
7678
06:31:41,320 --> 06:31:45,520
console.log and now up here we're going
7679
06:31:44,080 --> 06:31:47,200
to call this
7680
06:31:45,520 --> 06:31:53,000
function
7681
06:31:47,200 --> 06:31:55,240
handle cost key down and
7682
06:31:53,000 --> 06:31:59,040
brackets now the last thing we have to
7683
06:31:55,240 --> 06:32:01,280
do is that event does not exist inside
7684
06:31:59,040 --> 06:32:04,440
this function so we have to put the
7685
06:32:01,280 --> 06:32:06,798
event object into the function
7686
06:32:04,440 --> 06:32:09,200
and remember to put a value into a
7687
06:32:06,798 --> 06:32:12,398
function we can use a
7688
06:32:09,200 --> 06:32:16,920
parameter so between these brackets we
7689
06:32:12,398 --> 06:32:18,920
can create a parameter called event and
7690
06:32:16,920 --> 06:32:21,920
now to save something inside this
7691
06:32:18,920 --> 06:32:24,798
parameter we're going to go up to these
7692
06:32:21,920 --> 06:32:27,878
brackets and type
7693
06:32:24,798 --> 06:32:30,360
event this will take the event object
7694
06:32:27,878 --> 06:32:34,040
and put it inside the function where we
7695
06:32:30,360 --> 06:32:35,120
can use it just like a variable so now
7696
06:32:34,040 --> 06:32:41,160
if we
7697
06:32:35,120 --> 06:32:44,520
save and try out the project 25 enter so
7698
06:32:41,160 --> 06:32:47,478
this still works and now we finished all
7699
06:32:44,520 --> 06:32:49,440
three projects in this lesson so in the
7700
06:32:47,478 --> 06:32:51,760
rest of this lesson we're going to learn
7701
06:32:49,440 --> 06:32:54,320
some more details about
7702
06:32:51,760 --> 06:32:57,440
JavaScript in the last project we
7703
06:32:54,320 --> 06:33:01,440
learned how to manually convert a string
7704
06:32:57,440 --> 06:33:04,120
into a number using the number function
7705
06:33:01,440 --> 06:33:07,440
we can also convert the other way from a
7706
06:33:04,120 --> 06:33:09,878
number to a string so let's go to the
7707
06:33:07,440 --> 06:33:15,240
top of the script
7708
06:33:09,878 --> 06:33:18,558
element and we can type capital S string
7709
06:33:15,240 --> 06:33:21,440
and brackets so the built-in string
7710
06:33:18,558 --> 06:33:24,440
function will convert a value into a
7711
06:33:21,440 --> 06:33:28,200
string between the brackets we can put a
7712
06:33:24,440 --> 06:33:30,680
number like 25 and this will convert the
7713
06:33:28,200 --> 06:33:33,360
number into the string
7714
06:33:30,680 --> 06:33:35,600
25 the next detail we're going to learn
7715
06:33:33,360 --> 06:33:40,200
is a special behavior of
7716
06:33:35,600 --> 06:33:45,200
strings So Below this line we can type
7717
06:33:40,200 --> 06:33:47,878
console do log the string
7718
06:33:45,200 --> 06:33:51,600
25 minus
7719
06:33:47,878 --> 06:33:55,320
5 so if a string only contains a number
7720
06:33:51,600 --> 06:33:57,440
and we subtract multiply or divide
7721
06:33:55,320 --> 06:34:01,000
JavaScript will automatically convert
7722
06:33:57,440 --> 06:34:05,760
the string into a number so this gets
7723
06:34:01,000 --> 06:34:10,280
converted into the number 25 minus 5 and
7724
06:34:05,760 --> 06:34:13,798
if we save it will do math and give us
7725
06:34:10,280 --> 06:34:17,200
20 so this is another example of type
7726
06:34:13,798 --> 06:34:19,920
coercion or automatic type
7727
06:34:17,200 --> 06:34:22,520
conversion however it's not recommended
7728
06:34:19,920 --> 06:34:25,360
to do math with strings like this
7729
06:34:22,520 --> 06:34:30,718
because adding Works differently for
7730
06:34:25,360 --> 06:34:30,718
example on a new line let's type
7731
06:34:30,840 --> 06:34:38,760
console.log the string 25
7732
06:34:34,680 --> 06:34:41,840
+ 5 and
7733
06:34:38,760 --> 06:34:45,760
save this will convert the number into a
7734
06:34:41,840 --> 06:34:48,878
string and combine them together into
7735
06:34:45,760 --> 06:34:51,638
255 so because adding strings Works
7736
06:34:48,878 --> 06:34:54,840
differently the best practice is always
7737
06:34:51,638 --> 06:34:58,240
do math using numbers don't do math
7738
06:34:54,840 --> 06:35:00,600
using strings if we need to we can
7739
06:34:58,240 --> 06:35:03,920
manually convert the string into a
7740
06:35:00,600 --> 06:35:06,600
number using the number function like we
7741
06:35:03,920 --> 06:35:09,600
did here the last thing we're going to
7742
06:35:06,600 --> 06:35:13,398
learn in this lesson is another built-in
7743
06:35:09,600 --> 06:35:15,638
object called the window object so in
7744
06:35:13,398 --> 06:35:18,680
this lesson we learned about the
7745
06:35:15,638 --> 06:35:21,760
document object the document object
7746
06:35:18,680 --> 06:35:25,240
represents the web page the window
7747
06:35:21,760 --> 06:35:28,080
object represents the browser so let's
7748
06:35:25,240 --> 06:35:32,398
go into our script element and Try It
7749
06:35:28,080 --> 06:35:35,878
Out Below this we'll Type
7750
06:35:32,398 --> 06:35:39,040
window so so this is the window object
7751
06:35:35,878 --> 06:35:41,718
and it represents the browser because it
7752
06:35:39,040 --> 06:35:45,360
represents the browser everything inside
7753
06:35:41,718 --> 06:35:49,160
the browser is inside the window object
7754
06:35:45,360 --> 06:35:52,600
so let's think what's inside the browser
7755
06:35:49,160 --> 06:35:55,558
well the web page is inside the browser
7756
06:35:52,600 --> 06:35:59,600
so the document object is inside the
7757
06:35:55,558 --> 06:36:01,600
window object if we type
7758
06:35:59,600 --> 06:36:04,200
window.
7759
06:36:01,600 --> 06:36:06,600
document this will give us the same
7760
06:36:04,200 --> 06:36:10,200
document object that we've been using in
7761
06:36:06,600 --> 06:36:13,600
this lesson so what else is part of the
7762
06:36:10,200 --> 06:36:18,878
browser well the console is also part of
7763
06:36:13,600 --> 06:36:20,718
the browser so here if we type
7764
06:36:18,878 --> 06:36:23,240
window.
7765
06:36:20,718 --> 06:36:25,920
console this will give us the same
7766
06:36:23,240 --> 06:36:30,558
console object we've been using in this
7767
06:36:25,920 --> 06:36:35,040
course so we can actually do
7768
06:36:30,558 --> 06:36:36,160
console.log and the string window
7769
06:36:35,040 --> 06:36:41,000
and
7770
06:36:36,160 --> 06:36:43,360
save and this will do the same thing as
7771
06:36:41,000 --> 06:36:46,920
console.log what else is part of the
7772
06:36:43,360 --> 06:36:50,478
browser well popups are also part of the
7773
06:36:46,920 --> 06:36:52,240
browser so if we type
7774
06:36:50,478 --> 06:36:55,200
window.
7775
06:36:52,240 --> 06:36:57,200
alert this will give us the same alert
7776
06:36:55,200 --> 06:36:59,320
function that we've been using in this
7777
06:36:57,200 --> 06:37:01,920
course to create
7778
06:36:59,320 --> 06:37:05,080
popups however you might have noticed
7779
06:37:01,920 --> 06:37:07,320
that we never Type window window. doent
7780
06:37:05,080 --> 06:37:09,160
or window.
7781
06:37:07,320 --> 06:37:12,320
console.log and that's because the
7782
06:37:09,160 --> 06:37:15,478
window object has a shortcut we don't
7783
06:37:12,320 --> 06:37:18,840
have to type window dot at the front we
7784
06:37:15,478 --> 06:37:21,680
can just type document or console and
7785
06:37:18,840 --> 06:37:25,558
JavaScript will automatically add window
7786
06:37:21,680 --> 06:37:28,280
dot at the front for us so window is a
7787
06:37:25,558 --> 06:37:31,080
built-in object that represents the
7788
06:37:28,280 --> 06:37:33,840
browser we don't have to type out window
7789
06:37:31,080 --> 06:37:36,360
dot ourselves because JavaScript adds it
7790
06:37:33,840 --> 06:37:39,398
for us automatically but it's still nice
7791
06:37:36,360 --> 06:37:41,680
to know how this works behind the scenes
7792
06:37:39,398 --> 06:37:43,600
and that's the end of this lesson in
7793
06:37:41,680 --> 06:37:47,000
this lesson we learned about the
7794
06:37:43,600 --> 06:37:49,760
document object model or the Dom which
7795
06:37:47,000 --> 06:37:53,000
allows JavaScript to fully control the
7796
06:37:49,760 --> 06:37:55,638
web page we learned how to use document.
7797
06:37:53,000 --> 06:37:58,040
Query selector to get elements from the
7798
06:37:55,638 --> 06:38:00,638
web page and put them inside our
7799
06:37:58,040 --> 06:38:04,398
JavaScript we learned how to use inner
7800
06:38:00,638 --> 06:38:07,240
HTML to modify the HTML inside an
7801
06:38:04,398 --> 06:38:09,558
element we worked on three projects
7802
06:38:07,240 --> 06:38:12,120
using the Dom we learned how to make
7803
06:38:09,558 --> 06:38:15,200
elements interactive with the keyboard
7804
06:38:12,120 --> 06:38:18,280
using on key down and we learned some
7805
06:38:15,200 --> 06:38:21,398
more details about strings as well as
7806
06:38:18,280 --> 06:38:23,920
the window object which represents the
7807
06:38:21,398 --> 06:38:29,478
browser here are some exercises you can
7808
06:38:23,920 --> 06:38:29,478
do on your own to practice using the Dom
7809
06:38:54,520 --> 06:38:59,558
in this lesson we're going to add CSS to
7810
06:38:57,520 --> 06:39:02,558
all of our projects and we're going to
7811
06:38:59,558 --> 06:39:05,600
finish our rock paper scissors project
7812
06:39:02,558 --> 06:39:08,280
CSS is a different language that changes
7813
06:39:05,600 --> 06:39:10,360
the appearance of our website it's one
7814
06:39:08,280 --> 06:39:13,920
of the three languages that we use to
7815
06:39:10,360 --> 06:39:15,718
create websites so first let's look at
7816
06:39:13,920 --> 06:39:19,200
the projects we're going to work on in
7817
06:39:15,718 --> 06:39:21,558
this lesson we'll go to our browser and
7818
06:39:19,200 --> 06:39:26,120
create a new tab at the
7819
06:39:21,558 --> 06:39:29,160
top and here we're going to type
7820
06:39:26,120 --> 06:39:33,920
super simple
7821
06:39:29,160 --> 06:39:36,440
dodev SL projects slash
7822
06:39:33,920 --> 06:39:38,040
Dom Das
7823
06:39:36,440 --> 06:39:40,920
with-
7824
06:39:38,040 --> 06:39:43,478
CSS and press
7825
06:39:40,920 --> 06:39:45,600
enter so these are the same three
7826
06:39:43,478 --> 06:39:48,160
projects we created in the previous
7827
06:39:45,600 --> 06:39:52,680
lesson except this time we're going to
7828
06:39:48,160 --> 06:39:55,200
add CSS to make these projects look nice
7829
06:39:52,680 --> 06:39:58,398
let's start by creating a copy of the
7830
06:39:55,200 --> 06:40:01,000
Project's HTML file from the previous
7831
06:39:58,398 --> 06:40:04,440
lesson we'll go to our code
7832
06:40:01,000 --> 06:40:07,240
editor and click this icon to show our
7833
06:40:04,440 --> 06:40:09,000
files and then here we're going to
7834
06:40:07,240 --> 06:40:12,840
select
7835
06:40:09,000 --> 06:40:14,920
09-- projects we're going to right
7836
06:40:12,840 --> 06:40:20,080
click
7837
06:40:14,920 --> 06:40:25,080
copy and down here right click and
7838
06:40:20,080 --> 06:40:27,520
paste and let's rename this file by
7839
06:40:25,080 --> 06:40:31,600
right-clicking
7840
06:40:27,520 --> 06:40:34,080
rename at the end we're going to remove
7841
06:40:31,600 --> 06:40:38,240
copy and at the beginning
7842
06:40:34,080 --> 06:40:40,878
we're going to change it to 10 and press
7843
06:40:38,240 --> 06:40:43,920
enter now let's hide our
7844
06:40:40,878 --> 06:40:47,200
files and we're going to open 10 Dom
7845
06:40:43,920 --> 06:40:50,840
projects in the browser by
7846
06:40:47,200 --> 06:40:55,680
right-clicking open with live
7847
06:40:50,840 --> 06:40:55,680
server now we can close our previous
7848
06:40:55,920 --> 06:41:02,718
tabs as well as the previous code from
7849
06:40:58,718 --> 06:41:04,478
lesson 9 which is this file and these
7850
06:41:02,718 --> 06:41:07,240
two
7851
06:41:04,478 --> 06:41:09,718
and now we're ready to add CSS to our
7852
06:41:07,240 --> 06:41:12,760
projects we'll start with the YouTube
7853
06:41:09,718 --> 06:41:13,840
subscribe button let's go to the tab for
7854
06:41:12,760 --> 06:41:16,160
our
7855
06:41:13,840 --> 06:41:19,600
project and we're going to style this
7856
06:41:16,160 --> 06:41:22,320
button first so we reviewed CSS in
7857
06:41:19,600 --> 06:41:25,718
lesson 4 and one of the ways we can
7858
06:41:22,320 --> 06:41:29,478
write CSS code is using the style
7859
06:41:25,718 --> 06:41:32,398
element so inside the head section we're
7860
06:41:29,478 --> 06:41:37,000
going to create an element using less
7861
06:41:32,398 --> 06:41:41,040
than style greater than so the style
7862
06:41:37,000 --> 06:41:44,520
element lets us write CSS code inside so
7863
06:41:41,040 --> 06:41:48,200
inside here we're going to write
7864
06:41:44,520 --> 06:41:50,558
button open curly bracket close curly
7865
06:41:48,200 --> 06:41:54,558
bracket so the code in front of the
7866
06:41:50,558 --> 06:41:56,680
brackets is called the CSS selector this
7867
06:41:54,558 --> 06:42:00,200
tells the computer which elements we
7868
06:41:56,680 --> 06:42:03,398
want to style or change the appearance
7869
06:42:00,200 --> 06:42:06,558
so button will style all button elements
7870
06:42:03,398 --> 06:42:09,600
on the page but in this situation we
7871
06:42:06,558 --> 06:42:11,718
only want to style the Subscribe button
7872
06:42:09,600 --> 06:42:14,878
because the calculate button will be
7873
06:42:11,718 --> 06:42:18,320
styled differently so to style a
7874
06:42:14,878 --> 06:42:21,200
specific element we can use the class
7875
06:42:18,320 --> 06:42:24,760
attribute so if we look at our button
7876
06:42:21,200 --> 06:42:28,040
currently it already has a class of JS
7877
06:42:24,760 --> 06:42:31,240
subscribe button but this class is being
7878
06:42:28,040 --> 06:42:33,478
used by our JavaScript a good practice
7879
06:42:31,240 --> 06:42:34,920
is to add a different class that will be
7880
06:42:33,478 --> 06:42:37,760
used by
7881
06:42:34,920 --> 06:42:40,398
CSS so an element can have multiple
7882
06:42:37,760 --> 06:42:43,878
classes we just separate them with a
7883
06:42:40,398 --> 06:42:46,798
space so inside this class attribute
7884
06:42:43,878 --> 06:42:49,478
we're going to type space and add
7885
06:42:46,798 --> 06:42:52,360
another class
7886
06:42:49,478 --> 06:42:56,000
subcribe dash
7887
06:42:52,360 --> 06:42:58,200
button now this element has two classes
7888
06:42:56,000 --> 06:42:59,200
and we're going to use this second class
7889
06:42:58,200 --> 06:43:02,798
in our
7890
06:42:59,200 --> 06:43:05,478
CSS so to style a specific class we're
7891
06:43:02,798 --> 06:43:09,398
going to remove button and we're going
7892
06:43:05,478 --> 06:43:11,958
to type a DOT so starting with a DOT
7893
06:43:09,398 --> 06:43:14,798
means we're going to style a class
7894
06:43:11,958 --> 06:43:17,360
rather than an element name so we'll
7895
06:43:14,798 --> 06:43:20,040
style the class
7896
06:43:17,360 --> 06:43:24,040
subscribe Das
7897
06:43:20,040 --> 06:43:26,520
button which is this button right here
7898
06:43:24,040 --> 06:43:28,360
and now inside these curly brackets
7899
06:43:26,520 --> 06:43:33,520
we're going to tell the computer how to
7900
06:43:28,360 --> 06:43:36,718
style this button for example border
7901
06:43:33,520 --> 06:43:39,120
colon none and
7902
06:43:36,718 --> 06:43:42,240
semicolon if we
7903
06:43:39,120 --> 06:43:45,080
save this will remove the border from
7904
06:43:42,240 --> 06:43:47,958
the button so it no longer has a border
7905
06:43:45,080 --> 06:43:51,478
like this button so that's how we style
7906
06:43:47,958 --> 06:43:55,160
a specific element with CSS we add a
7907
06:43:51,478 --> 06:43:58,680
class to the element and then inside CSS
7908
06:43:55,160 --> 06:44:00,920
we start with a DOT and the class and
7909
06:43:58,680 --> 06:44:03,558
between the curly brackets the code on
7910
06:44:00,920 --> 06:44:05,600
the left is called the property
7911
06:44:03,558 --> 06:44:09,398
this tells a computer what we want to
7912
06:44:05,600 --> 06:44:11,160
change on the right is called the value
7913
06:44:09,398 --> 06:44:14,878
this tells a computer what we want to
7914
06:44:11,160 --> 06:44:17,840
change the property to we separate the
7915
06:44:14,878 --> 06:44:20,760
property and value with a colon and we
7916
06:44:17,840 --> 06:44:23,600
end the whole thing with a semicolon so
7917
06:44:20,760 --> 06:44:26,878
this is also called a property value
7918
06:44:23,600 --> 06:44:30,240
pair as a reminder this is just a review
7919
06:44:26,878 --> 06:44:33,200
of CSS if you want to learn CSS in more
7920
06:44:30,240 --> 06:44:36,478
detail you can check out my HTML and and
7921
06:44:33,200 --> 06:44:39,360
CSS full course in the video
7922
06:44:36,478 --> 06:44:41,798
description so we just added one style
7923
06:44:39,360 --> 06:44:44,440
to this button we're going to add more
7924
06:44:41,798 --> 06:44:47,160
Styles so that it looks like our final
7925
06:44:44,440 --> 06:44:49,760
design to make this easier I'm going to
7926
06:44:47,160 --> 06:44:52,840
rearrange my windows and I'm going to
7927
06:44:49,760 --> 06:44:55,080
put the final design at the bottom and
7928
06:44:52,840 --> 06:44:57,798
then our project at the
7929
06:44:55,080 --> 06:44:58,878
top this will make it easier to compare
7930
06:44:57,798 --> 06:45:01,600
the two
7931
06:44:58,878 --> 06:45:03,520
designs next to make it look like the
7932
06:45:01,600 --> 06:45:07,200
final design we're we're going to style
7933
06:45:03,520 --> 06:45:08,000
our element one by one let's go back to
7934
06:45:07,200 --> 06:45:12,080
our
7935
06:45:08,000 --> 06:45:15,398
code and press enter and next let's
7936
06:45:12,080 --> 06:45:18,360
change the background color to Black to
7937
06:45:15,398 --> 06:45:24,320
do that we'll type
7938
06:45:18,360 --> 06:45:26,240
background Das color colon black and
7939
06:45:24,320 --> 06:45:29,558
semicolon and
7940
06:45:26,240 --> 06:45:32,958
save now our button has a black
7941
06:45:29,558 --> 06:45:36,280
background let's keep going one by one
7942
06:45:32,958 --> 06:45:41,558
we change the text color to white next
7943
06:45:36,280 --> 06:45:45,478
so in our code we'll type color colon
7944
06:45:41,558 --> 06:45:48,040
white and semicolon and
7945
06:45:45,478 --> 06:45:50,120
save now if you're wondering how I know
7946
06:45:48,040 --> 06:45:52,958
all these properties you can usually
7947
06:45:50,120 --> 06:45:54,878
find them by searching in Google just
7948
06:45:52,958 --> 06:45:56,120
make sure you search for what you are
7949
06:45:54,878 --> 06:46:00,040
trying to
7950
06:45:56,120 --> 06:46:02,360
do let's keep going one by one the next
7951
06:46:00,040 --> 06:46:06,080
thing we'll change is we're going to add
7952
06:46:02,360 --> 06:46:09,840
spacing on the inside of the button in
7953
06:46:06,080 --> 06:46:13,440
CSS space on the inside of an element is
7954
06:46:09,840 --> 06:46:16,958
called padding so we'll create a new
7955
06:46:13,440 --> 06:46:22,398
line and we'll use the property
7956
06:46:16,958 --> 06:46:24,600
padding Das toop colon
7957
06:46:22,398 --> 06:46:27,600
10px and
7958
06:46:24,600 --> 06:46:30,360
save so this will add space on the
7959
06:46:27,600 --> 06:46:33,718
inside of the element called the padding
7960
06:46:30,360 --> 06:46:38,000
at the top of 10 PX
7961
06:46:33,718 --> 06:46:40,600
so the PX here means pixels a pixel is a
7962
06:46:38,000 --> 06:46:43,160
unit of measurement in computers your
7963
06:46:40,600 --> 06:46:45,798
screen is made up of many small little
7964
06:46:43,160 --> 06:46:49,160
squares each of these squares is called
7965
06:46:45,798 --> 06:46:51,920
a pixel so a pixel is the smallest thing
7966
06:46:49,160 --> 06:46:54,920
that you can have on your screen screen
7967
06:46:51,920 --> 06:46:58,478
sizes are measured in pixels images and
7968
06:46:54,920 --> 06:47:00,320
video sizes are also measured in pixels
7969
06:46:58,478 --> 06:47:02,520
and don't worry the more you work with
7970
06:47:00,320 --> 06:47:06,638
pixels the more you'll get used to how
7971
06:47:02,520 --> 06:47:10,200
big a pixel is so in this example 10
7972
06:47:06,638 --> 06:47:11,958
pixels is equal to this amount of space
7973
06:47:10,200 --> 06:47:15,478
and it looks pretty close to the final
7974
06:47:11,958 --> 06:47:17,920
design so let's keep going we'll add
7975
06:47:15,478 --> 06:47:20,718
space on the inside of the element at
7976
06:47:17,920 --> 06:47:27,320
the bottom this time so we'll create a
7977
06:47:20,718 --> 06:47:28,840
new line and type padding Dash bottom
7978
06:47:27,320 --> 06:47:33,440
colon
7979
06:47:28,840 --> 06:47:35,760
10px again and Save
7980
06:47:33,440 --> 06:47:37,798
and that adds space at the bottom of the
7981
06:47:35,760 --> 06:47:40,958
element of 10
7982
06:47:37,798 --> 06:47:44,478
pixels next let's increase the space on
7983
06:47:40,958 --> 06:47:52,120
the left and the right we'll go into our
7984
06:47:44,478 --> 06:47:59,600
code and add padding Das left colon 10
7985
06:47:52,120 --> 06:48:03,040
pixels and padding Das right colon 10
7986
06:47:59,600 --> 06:48:05,280
pixels let's save
7987
06:48:03,040 --> 06:48:07,798
and it added some extra space on the
7988
06:48:05,280 --> 06:48:10,040
left and right but I think our final
7989
06:48:07,798 --> 06:48:12,798
design has a little more space on the
7990
06:48:10,040 --> 06:48:16,200
left and right so let's go back and
7991
06:48:12,798 --> 06:48:19,280
increase our padding so instead of 10
7992
06:48:16,200 --> 06:48:21,520
let's try 15 on both
7993
06:48:19,280 --> 06:48:24,798
sides so we'll
7994
06:48:21,520 --> 06:48:26,398
save and now the spacing looks close
7995
06:48:24,798 --> 06:48:29,878
enough to the final
7996
06:48:26,398 --> 06:48:33,478
design so in CSS it's normal to do some
7997
06:48:29,878 --> 06:48:36,920
trial and error to get the styling right
7998
06:48:33,478 --> 06:48:40,840
let's keep styling this one by one next
7999
06:48:36,920 --> 06:48:43,920
we'll make the text thicker or bold so
8000
06:48:40,840 --> 06:48:46,200
let's go into our code and to change the
8001
06:48:43,920 --> 06:48:53,040
thickness of the text we'll use the
8002
06:48:46,200 --> 06:48:55,120
property font Das weight colon
8003
06:48:53,040 --> 06:48:58,920
bold let's
8004
06:48:55,120 --> 06:49:01,360
save and that will make our text bold so
8005
06:48:58,920 --> 06:49:03,760
we're almost there now let's make the
8006
06:49:01,360 --> 06:49:07,320
corners rounded look like in the final
8007
06:49:03,760 --> 06:49:09,680
design we'll go back to our CSS and the
8008
06:49:07,320 --> 06:49:11,360
property for making the corners round is
8009
06:49:09,680 --> 06:49:13,798
called
8010
06:49:11,360 --> 06:49:18,120
border Das
8011
06:49:13,798 --> 06:49:20,320
radius and we'll make it colon 5
8012
06:49:18,120 --> 06:49:22,920
pixels let's
8013
06:49:20,320 --> 06:49:26,398
save and you can see that it made our
8014
06:49:22,920 --> 06:49:28,398
Corners round so the pixels here tells
8015
06:49:26,398 --> 06:49:31,440
the computer how round we want the
8016
06:49:28,398 --> 06:49:33,280
corners to be the higher the pixels the
8017
06:49:31,440 --> 06:49:37,398
more round it will get
8018
06:49:33,280 --> 06:49:40,600
so if we change this to 10 pixels and
8019
06:49:37,398 --> 06:49:43,160
save it will make the corners even more
8020
06:49:40,600 --> 06:49:46,360
round so let's change this to something
8021
06:49:43,160 --> 06:49:51,280
really big to make it completely round
8022
06:49:46,360 --> 06:49:54,478
we'll change this to 50 pixels and
8023
06:49:51,280 --> 06:49:57,280
save and now our button is completely
8024
06:49:54,478 --> 06:49:59,680
round the last style we're going to add
8025
06:49:57,280 --> 06:50:02,320
is in the final design if we put our
8026
06:49:59,680 --> 06:50:06,120
Mouse over the button it turns into this
8027
06:50:02,320 --> 06:50:07,760
hand the icon so we call this a pointer
8028
06:50:06,120 --> 06:50:11,760
and we're going to do the same thing in
8029
06:50:07,760 --> 06:50:14,558
our project so let's go to our code and
8030
06:50:11,760 --> 06:50:17,080
to create that pointer icon we're going
8031
06:50:14,558 --> 06:50:20,718
to use the property
8032
06:50:17,080 --> 06:50:23,120
cursor colon
8033
06:50:20,718 --> 06:50:26,398
pointer and let's
8034
06:50:23,120 --> 06:50:28,080
save and put our Mouse over the button
8035
06:50:26,398 --> 06:50:31,718
and you'll notice it turns into this
8036
06:50:28,080 --> 06:50:34,360
hand pointer icon and that's it now our
8037
06:50:31,718 --> 06:50:37,520
subscribe button looks like the final
8038
06:50:34,360 --> 06:50:39,718
design next let's click the Subscribe
8039
06:50:37,520 --> 06:50:42,520
button you'll notice that it only
8040
06:50:39,718 --> 06:50:43,798
changes the text but if we click the
8041
06:50:42,520 --> 06:50:46,398
final
8042
06:50:43,798 --> 06:50:49,440
design it also changes the background
8043
06:50:46,398 --> 06:50:52,040
color and the text color so we're going
8044
06:50:49,440 --> 06:50:53,360
to learn how to change the CSS when we
8045
06:50:52,040 --> 06:50:56,200
click a
8046
06:50:53,360 --> 06:50:58,280
button let's go back to our code and
8047
06:50:56,200 --> 06:50:59,120
this time we're going to scroll down to
8048
06:50:58,280 --> 06:51:02,680
our
8049
06:50:59,120 --> 06:51:05,600
JavaScript which is here so we learned
8050
06:51:02,680 --> 06:51:08,040
in the previous lesson we can get HTML
8051
06:51:05,600 --> 06:51:10,558
elements from the page and put them
8052
06:51:08,040 --> 06:51:13,280
inside our JavaScript and we also
8053
06:51:10,558 --> 06:51:15,958
learned that these HTML elements are
8054
06:51:13,280 --> 06:51:19,440
just JavaScript objects and they can
8055
06:51:15,958 --> 06:51:20,958
have properties like inner text and
8056
06:51:19,440 --> 06:51:24,080
inner
8057
06:51:20,958 --> 06:51:27,638
HTML every element has another property
8058
06:51:24,080 --> 06:51:31,120
we can use called class list class list
8059
06:51:27,638 --> 06:51:33,600
gives us control of the class attribute
8060
06:51:31,120 --> 06:51:37,240
so one solution we can do is when we
8061
06:51:33,600 --> 06:51:39,680
click the button we can add a class and
8062
06:51:37,240 --> 06:51:42,040
then this class will have different
8063
06:51:39,680 --> 06:51:44,878
styles so let's see how we do that in
8064
06:51:42,040 --> 06:51:47,718
our code we'll scroll down to the
8065
06:51:44,878 --> 06:51:50,600
Subscribe function and when we click the
8066
06:51:47,718 --> 06:51:53,920
button and make the button subscribed
8067
06:51:50,600 --> 06:51:59,520
we're also going to add a class so let's
8068
06:51:53,920 --> 06:52:05,040
create a new line and we'll type button
8069
06:51:59,520 --> 06:52:09,040
element dot class capital L
8070
06:52:05,040 --> 06:52:10,798
list so class list itself is an object
8071
06:52:09,040 --> 06:52:15,000
which means it has properties and
8072
06:52:10,798 --> 06:52:19,200
methods we can use one method is called
8073
06:52:15,000 --> 06:52:25,040
add which adds a class to an element so
8074
06:52:19,200 --> 06:52:27,878
after this let's type dot add and
8075
06:52:25,040 --> 06:52:30,878
brackets and now inside these brackets
8076
06:52:27,878 --> 06:52:32,840
we're going to put a string so this
8077
06:52:30,878 --> 06:52:36,000
string is a class that we want want to
8078
06:52:32,840 --> 06:52:38,798
add when we click this button let's add
8079
06:52:36,000 --> 06:52:41,478
a class called
8080
06:52:38,798 --> 06:52:43,878
is-
8081
06:52:41,478 --> 06:52:47,080
subscribed and
8082
06:52:43,878 --> 06:52:50,440
save so now every time we click this
8083
06:52:47,080 --> 06:52:54,120
button it will add a class to the button
8084
06:52:50,440 --> 06:52:58,320
called is- subscribed let's give it a
8085
06:52:54,120 --> 06:53:00,520
try first we'll rightclick on the page
8086
06:52:58,320 --> 06:53:04,240
and then click
8087
06:53:00,520 --> 06:53:06,120
inspect and we'll go to the elements Tab
8088
06:53:04,240 --> 06:53:07,200
and I'll rearrange my windows so you can
8089
06:53:06,120 --> 06:53:10,760
see
8090
06:53:07,200 --> 06:53:14,320
it and then inside the HTML pay
8091
06:53:10,760 --> 06:53:15,718
attention to the class of the button now
8092
06:53:14,320 --> 06:53:18,680
when we click the
8093
06:53:15,718 --> 06:53:22,200
button it's going to add an extra class
8094
06:53:18,680 --> 06:53:25,320
called is- subscribed so that's what
8095
06:53:22,200 --> 06:53:28,080
this line of code does and now that this
8096
06:53:25,320 --> 06:53:31,638
button has the is subscribed class we
8097
06:53:28,080 --> 06:53:33,040
can style it in our CSS so let's go back
8098
06:53:31,638 --> 06:53:35,440
to our code
8099
06:53:33,040 --> 06:53:40,160
and we'll scroll up to our
8100
06:53:35,440 --> 06:53:44,520
CSS and here we'll type dot to style a
8101
06:53:40,160 --> 06:53:46,280
class and we'll style the class is-
8102
06:53:44,520 --> 06:53:48,200
subscribed
8103
06:53:46,280 --> 06:53:50,638
is-
8104
06:53:48,200 --> 06:53:53,160
subscribed and curly
8105
06:53:50,638 --> 06:53:55,558
brackets and now inside these curly
8106
06:53:53,160 --> 06:53:59,080
brackets let's change the background
8107
06:53:55,558 --> 06:54:00,798
color to Gray and the text color to
8108
06:53:59,080 --> 06:54:05,440
Black
8109
06:54:00,798 --> 06:54:10,680
Background Das color colon
8110
06:54:05,440 --> 06:54:13,478
gray and then color colon
8111
06:54:10,680 --> 06:54:16,398
black and make sure to type these Styles
8112
06:54:13,478 --> 06:54:18,600
below the Subscribe button Styles so
8113
06:54:16,398 --> 06:54:19,760
that these Styles will override the
8114
06:54:18,600 --> 06:54:22,398
Styles
8115
06:54:19,760 --> 06:54:25,600
above now if we
8116
06:54:22,398 --> 06:54:29,638
save and then click our
8117
06:54:25,600 --> 06:54:31,798
button it will add the is subscrib class
8118
06:54:29,638 --> 06:54:35,160
and now this button will get our new
8119
06:54:31,798 --> 06:54:38,638
styles that we added here so that's one
8120
06:54:35,160 --> 06:54:41,398
way to change the CSS when we click a
8121
06:54:38,638 --> 06:54:44,040
button all right now I'm going to move
8122
06:54:41,398 --> 06:54:47,398
this back to the
8123
06:54:44,040 --> 06:54:50,040
top and notice that our background color
8124
06:54:47,398 --> 06:54:53,680
is different from the final design the
8125
06:54:50,040 --> 06:54:56,958
final design uses a much lighter gray so
8126
06:54:53,680 --> 06:54:59,160
how do we get this exact color to do
8127
06:54:56,958 --> 06:55:03,798
that we're going to open the elements
8128
06:54:59,160 --> 06:55:06,478
tab again so on this page we're going to
8129
06:55:03,798 --> 06:55:09,520
rightclick click
8130
06:55:06,478 --> 06:55:12,398
inspect and then click the elements
8131
06:55:09,520 --> 06:55:14,798
Tab and I'll rearrange my windows so we
8132
06:55:12,398 --> 06:55:14,798
can see
8133
06:55:15,280 --> 06:55:21,200
it so in this section in the style
8134
06:55:18,398 --> 06:55:24,718
section we can see the CSS that the
8135
06:55:21,200 --> 06:55:27,798
element has so first let's actually find
8136
06:55:24,718 --> 06:55:29,040
this button which is right here and
8137
06:55:27,798 --> 06:55:33,600
we'll click
8138
06:55:29,040 --> 06:55:36,280
it and here it will show us the CSS that
8139
06:55:33,600 --> 06:55:38,958
this button has and it will show us the
8140
06:55:36,280 --> 06:55:41,360
background color that we should use so
8141
06:55:38,958 --> 06:55:44,160
let's make a copy of this color and put
8142
06:55:41,360 --> 06:55:46,000
it into our code
8143
06:55:44,160 --> 06:55:50,320
rightclick
8144
06:55:46,000 --> 06:55:53,280
copy and here we'll remove it and
8145
06:55:50,320 --> 06:55:55,958
rightclick and
8146
06:55:53,280 --> 06:55:59,680
paste now let's
8147
06:55:55,958 --> 06:56:00,760
save and go back to our project and try
8148
06:55:59,680 --> 06:56:03,320
it
8149
06:56:00,760 --> 06:56:07,320
out and now we get get the exact same
8150
06:56:03,320 --> 06:56:11,760
color as the final design so by the way
8151
06:56:07,320 --> 06:56:16,398
this color is known as an RGB value RGB
8152
06:56:11,760 --> 06:56:19,638
means red green and blue and computers
8153
06:56:16,398 --> 06:56:23,440
can create any color using a combination
8154
06:56:19,638 --> 06:56:26,000
of red green and blue so the first
8155
06:56:23,440 --> 06:56:28,558
number here is how much red we want in
8156
06:56:26,000 --> 06:56:31,000
our color the second number is how much
8157
06:56:28,558 --> 06:56:33,120
green we want and the third number is
8158
06:56:31,000 --> 06:56:35,958
how much blue we want
8159
06:56:33,120 --> 06:56:41,080
each number goes from 0 to
8160
06:56:35,958 --> 06:56:44,718
255 Zer means less color and darker 255
8161
06:56:41,080 --> 06:56:47,718
means more color and lighter so this
8162
06:56:44,718 --> 06:56:51,240
color here uses 240 for all of the
8163
06:56:47,718 --> 06:56:54,000
colors so it's close to 255 and will
8164
06:56:51,240 --> 06:56:56,000
give us a very light gray color that you
8165
06:56:54,000 --> 06:56:59,160
see
8166
06:56:56,000 --> 06:57:02,840
here next if we go back to the final
8167
06:56:59,160 --> 06:57:05,120
design and we click our button again
8168
06:57:02,840 --> 06:57:07,240
it will change back to the original
8169
06:57:05,120 --> 06:57:10,798
style so we're going to create this
8170
06:57:07,240 --> 06:57:12,760
feature in our project as well so one
8171
06:57:10,798 --> 06:57:17,040
way to do this is when we click the
8172
06:57:12,760 --> 06:57:19,798
button again we can remove this class so
8173
06:57:17,040 --> 06:57:23,280
let's scroll down to the
8174
06:57:19,798 --> 06:57:25,280
bottom to the Subscribe function and
8175
06:57:23,280 --> 06:57:28,840
when we click the button and we change
8176
06:57:25,280 --> 06:57:32,240
it back to subscribe we can remove this
8177
06:57:28,840 --> 06:57:35,760
class to do that class list has a
8178
06:57:32,240 --> 06:57:38,760
another method we can use called remove
8179
06:57:35,760 --> 06:57:40,200
so let's create a new line and we'll
8180
06:57:38,760 --> 06:57:46,200
type
8181
06:57:40,200 --> 06:57:48,638
button element do class capital L
8182
06:57:46,200 --> 06:57:51,440
list dot
8183
06:57:48,638 --> 06:57:54,600
remove and
8184
06:57:51,440 --> 06:57:58,000
brackets so this does the opposite of
8185
06:57:54,600 --> 06:58:01,040
add it will remove a class from this
8186
06:57:58,000 --> 06:58:03,718
element so inside the brackets we'll
8187
06:58:01,040 --> 06:58:06,920
type a string and the class we want to
8188
06:58:03,718 --> 06:58:09,478
remove which is
8189
06:58:06,920 --> 06:58:12,080
is-
8190
06:58:09,478 --> 06:58:15,478
subscribed and
8191
06:58:12,080 --> 06:58:18,520
save now let's try out our project we'll
8192
06:58:15,478 --> 06:58:21,878
click the button it will get the class
8193
06:58:18,520 --> 06:58:24,798
is subscribed and get the extra Styles
8194
06:58:21,878 --> 06:58:26,958
and now when we click the button again
8195
06:58:24,798 --> 06:58:29,878
it will remove the class and it will
8196
06:58:26,958 --> 06:58:33,200
remove the extra
8197
06:58:29,878 --> 06:58:36,360
Styles so notice here that when we add a
8198
06:58:33,200 --> 06:58:39,320
class we just type the class name we
8199
06:58:36,360 --> 06:58:43,160
don't type a DOT and the class name like
8200
06:58:39,320 --> 06:58:45,600
we did for query selector typing a DOT
8201
06:58:43,160 --> 06:58:48,360
only makes sense in query
8202
06:58:45,600 --> 06:58:52,398
selector next we're going to style the
8203
06:58:48,360 --> 06:58:55,798
text on the page let's scroll up to our
8204
06:58:52,398 --> 06:58:58,920
CSS and one thing we can do is to style
8205
06:58:55,798 --> 06:59:04,080
all the paragraph elements on the page
8206
06:58:58,920 --> 06:59:06,360
using this code P and curly brackets
8207
06:59:04,080 --> 06:59:08,760
however we're going to use a better
8208
06:59:06,360 --> 06:59:11,558
solution instead of styling all the
8209
06:59:08,760 --> 06:59:12,958
paragraphs we're just going to style the
8210
06:59:11,558 --> 06:59:15,520
body
8211
06:59:12,958 --> 06:59:18,398
element when we change the text in the
8212
06:59:15,520 --> 06:59:22,000
body element it will change the text in
8213
06:59:18,398 --> 06:59:25,558
the entire page so inside these curly
8214
06:59:22,000 --> 06:59:27,718
brackets let's change the text here so
8215
06:59:25,558 --> 06:59:31,798
we're going to use a different style of
8216
06:59:27,718 --> 06:59:33,958
text this is called a font to change the
8217
06:59:31,798 --> 06:59:37,600
font font we're going to use this
8218
06:59:33,958 --> 06:59:42,520
property font Das
8219
06:59:37,600 --> 06:59:45,520
family colon and we'll change it to
8220
06:59:42,520 --> 06:59:47,958
aial which is what I used in the final
8221
06:59:45,520 --> 06:59:51,638
design so let's
8222
06:59:47,958 --> 06:59:55,160
save and this will style all the text
8223
06:59:51,638 --> 06:59:58,398
inside the body and change the font to
8224
06:59:55,160 --> 07:00:01,478
aial and a good practice is to write any
8225
06:59:58,398 --> 07:00:04,638
styles for the body at the top so if we
8226
07:00:01,478 --> 07:00:07,680
need to we can override it later so
8227
07:00:04,638 --> 07:00:09,840
let's move these to the top we'll right
8228
07:00:07,680 --> 07:00:12,320
click
8229
07:00:09,840 --> 07:00:15,958
cut and then up
8230
07:00:12,320 --> 07:00:18,440
here create some new lines and right
8231
07:00:15,958 --> 07:00:20,958
click and
8232
07:00:18,440 --> 07:00:24,160
paste and we're going to add one more
8233
07:00:20,958 --> 07:00:26,558
style before moving on let's add some
8234
07:00:24,160 --> 07:00:30,080
space between the Subscribe button and
8235
07:00:26,558 --> 07:00:32,840
the second project so earlier we learned
8236
07:00:30,080 --> 07:00:36,280
that space on the inside of it element
8237
07:00:32,840 --> 07:00:40,280
is called padding space on the outside
8238
07:00:36,280 --> 07:00:43,040
of an element is called margin so inside
8239
07:00:40,280 --> 07:00:46,958
our subscribe button at the
8240
07:00:43,040 --> 07:00:54,958
bottom let's add a property called
8241
07:00:46,958 --> 07:00:58,120
margin Das bottom colon 30 pixels and
8242
07:00:54,958 --> 07:01:00,718
save so this will add space on the
8243
07:00:58,120 --> 07:01:03,120
outside of the element at the bottom of
8244
07:01:00,718 --> 07:01:05,638
30 pixels
8245
07:01:03,120 --> 07:01:07,878
now let's move on and style the Amazon
8246
07:01:05,638 --> 07:01:10,680
shipping calculator with
8247
07:01:07,878 --> 07:01:13,638
CSS again we'll add a class to these
8248
07:01:10,680 --> 07:01:17,600
elements and then style them in our
8249
07:01:13,638 --> 07:01:20,080
CSS let's scroll down to the text box
8250
07:01:17,600 --> 07:01:23,360
which is the input element and we're
8251
07:01:20,080 --> 07:01:29,680
going to add another class by typing
8252
07:01:23,360 --> 07:01:32,080
space and let's use the class cost Das
8253
07:01:29,680 --> 07:01:36,798
input and now we're going to style this
8254
07:01:32,080 --> 07:01:42,080
in CSS so let's scroll up and here we'll
8255
07:01:36,798 --> 07:01:44,360
style the class using dot cost Das
8256
07:01:42,080 --> 07:01:47,878
input and curly
8257
07:01:44,360 --> 07:01:51,080
brackets and inside we'll style this one
8258
07:01:47,878 --> 07:01:54,520
by one let's look at our final design
8259
07:01:51,080 --> 07:01:57,160
and see what styles we need so first
8260
07:01:54,520 --> 07:01:59,600
let's change the text size because our
8261
07:01:57,160 --> 07:02:02,478
text is a little smaller than the text
8262
07:01:59,600 --> 07:02:08,440
here so the change the text size
8263
07:02:02,478 --> 07:02:13,320
we're going to use Font Das size colon
8264
07:02:08,440 --> 07:02:16,840
and let's try 15 pixels and
8265
07:02:13,320 --> 07:02:18,120
save and now our text looks close enough
8266
07:02:16,840 --> 07:02:21,958
to the final
8267
07:02:18,120 --> 07:02:25,600
design next let's add some space inside
8268
07:02:21,958 --> 07:02:28,920
the text box so remember space inside an
8269
07:02:25,600 --> 07:02:30,440
element is called padding so we're going
8270
07:02:28,920 --> 07:02:32,558
to type
8271
07:02:30,440 --> 07:02:35,160
padding Das
8272
07:02:32,558 --> 07:02:41,320
top of 10
8273
07:02:35,160 --> 07:02:45,920
pixels padding Das bottom also 10
8274
07:02:41,320 --> 07:02:47,958
pixels and let's add padding to the
8275
07:02:45,920 --> 07:02:51,920
left 10
8276
07:02:47,958 --> 07:02:57,398
pixels and padding
8277
07:02:51,920 --> 07:03:00,398
dasr of 10 pixels so this will add a
8278
07:02:57,398 --> 07:03:03,520
space on the inside of our text box in
8279
07:03:00,398 --> 07:03:07,240
every direction if we
8280
07:03:03,520 --> 07:03:09,320
save now it looks just like the final
8281
07:03:07,240 --> 07:03:11,760
design now I'm going to show you a
8282
07:03:09,320 --> 07:03:15,840
shortcut for padding that will save us
8283
07:03:11,760 --> 07:03:19,200
some typing so if we create a new line
8284
07:03:15,840 --> 07:03:24,558
we can actually use a property called
8285
07:03:19,200 --> 07:03:27,680
padding and colon and then type 10
8286
07:03:24,558 --> 07:03:31,080
pixels this padding property let us add
8287
07:03:27,680 --> 07:03:34,240
padding on multiple sides at once if we
8288
07:03:31,080 --> 07:03:37,840
type one value here like 10 pixels it
8289
07:03:34,240 --> 07:03:40,680
will add 10 pixels to every side so this
8290
07:03:37,840 --> 07:03:43,600
line does the same thing as these four
8291
07:03:40,680 --> 07:03:46,440
lines above so let's actually comment
8292
07:03:43,600 --> 07:03:51,240
this out using
8293
07:03:46,440 --> 07:03:53,958
slashstar and star slash and
8294
07:03:51,240 --> 07:03:57,160
save and you can see that this one line
8295
07:03:53,958 --> 07:04:00,520
of CSS did the same thing as the other
8296
07:03:57,160 --> 07:04:02,920
four lines of CSS so this shortcut can
8297
07:04:00,520 --> 07:04:05,320
save us some typing
8298
07:04:02,920 --> 07:04:06,520
next let's move on and style the
8299
07:04:05,320 --> 07:04:09,360
calculate
8300
07:04:06,520 --> 07:04:12,638
button again we'll add a class to this
8301
07:04:09,360 --> 07:04:15,878
button so we can style it so in this
8302
07:04:12,638 --> 07:04:20,398
button let's add a class
8303
07:04:15,878 --> 07:04:23,000
attribute class equals
8304
07:04:20,398 --> 07:04:26,760
calculate Das
8305
07:04:23,000 --> 07:04:32,638
button now let's style this in our CSS
8306
07:04:26,760 --> 07:04:35,200
by scrolling up and here we'll type Dot
8307
07:04:32,638 --> 07:04:37,840
calculate dash
8308
07:04:35,200 --> 07:04:40,680
button and curly
8309
07:04:37,840 --> 07:04:43,080
brackets and inside these curly brackets
8310
07:04:40,680 --> 07:04:45,920
we're going to style this button one by
8311
07:04:43,080 --> 07:04:49,240
one so let's start with the background
8312
07:04:45,920 --> 07:04:55,120
color so we'll type
8313
07:04:49,240 --> 07:04:57,520
background Das color colon green and
8314
07:04:55,120 --> 07:05:01,200
semicolon and
8315
07:04:57,520 --> 07:05:02,320
save next let's change the text color to
8316
07:05:01,200 --> 07:05:06,840
white
8317
07:05:02,320 --> 07:05:09,000
so we'll type color colon
8318
07:05:06,840 --> 07:05:12,120
white and save
8319
07:05:09,000 --> 07:05:15,280
again okay let's keep going and we'll
8320
07:05:12,120 --> 07:05:17,638
remove the border around this button so
8321
07:05:15,280 --> 07:05:20,680
we'll type
8322
07:05:17,638 --> 07:05:22,280
border colon
8323
07:05:20,680 --> 07:05:25,200
none
8324
07:05:22,280 --> 07:05:27,360
save next let's make our text a little
8325
07:05:25,200 --> 07:05:32,478
bigger like in the final
8326
07:05:27,360 --> 07:05:35,920
design so we'll type font Das
8327
07:05:32,478 --> 07:05:38,398
size and make it 15
8328
07:05:35,920 --> 07:05:42,360
pixels and
8329
07:05:38,398 --> 07:05:44,798
save okay so now let's add the space on
8330
07:05:42,360 --> 07:05:48,520
the inside of the button so we're going
8331
07:05:44,798 --> 07:05:50,160
to use this shortcut again we'll type
8332
07:05:48,520 --> 07:05:53,360
the padding
8333
07:05:50,160 --> 07:05:56,600
property colon and this time we're going
8334
07:05:53,360 --> 07:05:58,958
to give it two values separated by
8335
07:05:56,600 --> 07:06:03,320
spaces 10
8336
07:05:58,958 --> 07:06:06,520
pixels and maybe 50 pixels so it's
8337
07:06:03,320 --> 07:06:09,680
easier to see what this does so when we
8338
07:06:06,520 --> 07:06:12,638
give two values to padding the first
8339
07:06:09,680 --> 07:06:15,718
value is the vertical padding so the top
8340
07:06:12,638 --> 07:06:19,840
and bottom the second value is the
8341
07:06:15,718 --> 07:06:21,080
horizontal padding or left and right if
8342
07:06:19,840 --> 07:06:23,638
we
8343
07:06:21,080 --> 07:06:27,280
save so you can see that the left and
8344
07:06:23,638 --> 07:06:29,840
right has a lot of padding which is 50
8345
07:06:27,280 --> 07:06:33,398
pixels so now let's make this match our
8346
07:06:29,840 --> 07:06:38,638
final design so instead of 50 pixels
8347
07:06:33,398 --> 07:06:41,798
let's bring it down to 15 pixels and
8348
07:06:38,638 --> 07:06:43,840
save okay so that looks pretty close
8349
07:06:41,798 --> 07:06:46,558
let's also increase the padding on the
8350
07:06:43,840 --> 07:06:48,840
top and bottom so that the text box and
8351
07:06:46,558 --> 07:06:51,000
the button line up with each other like
8352
07:06:48,840 --> 07:06:53,680
in the final
8353
07:06:51,000 --> 07:06:58,718
project so let's change the vertical
8354
07:06:53,680 --> 07:07:01,080
padding to maybe 12 pixels and
8355
07:06:58,718 --> 07:07:03,398
save the last thing we'll style for this
8356
07:07:01,080 --> 07:07:05,878
project is when we put our Mouse over
8357
07:07:03,398 --> 07:07:08,760
the button it turns into the pointer
8358
07:07:05,878 --> 07:07:11,280
icon so to create this we're going to
8359
07:07:08,760 --> 07:07:15,000
use the property
8360
07:07:11,280 --> 07:07:19,440
cursor colon
8361
07:07:15,000 --> 07:07:22,080
pointer and save and give it a
8362
07:07:19,440 --> 07:07:25,160
try and that's it we just finished
8363
07:07:22,080 --> 07:07:28,040
styling the Amazon shipping calculator
8364
07:07:25,160 --> 07:07:32,840
so now let's give this a try we'll Type
8365
07:07:28,040 --> 07:07:35,280
25 in the text box and press calculate
8366
07:07:32,840 --> 07:07:38,120
and at the bottom it will add $10 of
8367
07:07:35,280 --> 07:07:41,000
shipping and show
8368
07:07:38,120 --> 07:07:43,558
$35 finally we're going to style the
8369
07:07:41,000 --> 07:07:46,160
last project in this lesson which is the
8370
07:07:43,558 --> 07:07:49,520
rock paper scissors project and this
8371
07:07:46,160 --> 07:07:52,558
will finish the project let's go back to
8372
07:07:49,520 --> 07:07:55,878
superimple dodev and we'll scroll down
8373
07:07:52,558 --> 07:07:58,680
on this page and then click this link to
8374
07:07:55,878 --> 07:08:01,638
show the final design for rock paper
8375
07:07:58,680 --> 07:08:03,080
scissors so I'll rearrange my windows so
8376
07:08:01,638 --> 07:08:05,320
we can see
8377
07:08:03,080 --> 07:08:08,360
this and we're going to change the
8378
07:08:05,320 --> 07:08:11,878
buttons to these nice big icons for each
8379
07:08:08,360 --> 07:08:15,320
of the moves and when we click a move it
8380
07:08:11,878 --> 07:08:17,958
will show the result in bold and show an
8381
07:08:15,320 --> 07:08:20,320
icon of the move that we picked and the
8382
07:08:17,958 --> 07:08:22,958
move that the computer picked so we're
8383
07:08:20,320 --> 07:08:25,760
going to make this project look really
8384
07:08:22,958 --> 07:08:28,638
nice now let's get started I'm going to
8385
07:08:25,760 --> 07:08:31,440
rearrange my windows back so we have it
8386
07:08:28,638 --> 07:08:33,840
at the bottom and let's create a cop
8387
07:08:31,440 --> 07:08:37,040
copy of the rock paper scissors project
8388
07:08:33,840 --> 07:08:40,478
for this lesson we'll go to our code
8389
07:08:37,040 --> 07:08:44,160
editor and click here to show our
8390
07:08:40,478 --> 07:08:47,798
files and we're going to make a copy of
8391
07:08:44,160 --> 07:08:50,280
09- Ro paper scissors so let's click
8392
07:08:47,798 --> 07:08:52,000
this file and then
8393
07:08:50,280 --> 07:08:57,160
rightclick
8394
07:08:52,000 --> 07:09:00,240
copy and down here right click and
8395
07:08:57,160 --> 07:09:03,000
paste and we'll rename this file by
8396
07:09:00,240 --> 07:09:07,360
right-clicking
8397
07:09:03,000 --> 07:09:09,600
rename and at the end we'll remove copy
8398
07:09:07,360 --> 07:09:14,878
and at the beginning we'll change it
8399
07:09:09,600 --> 07:09:18,120
from 9 to 10 and press
8400
07:09:14,878 --> 07:09:21,798
enter now let's click here to hide the
8401
07:09:18,120 --> 07:09:25,000
files and we can close the 09
8402
07:09:21,798 --> 07:09:28,320
file and let's open the 10 rock paper
8403
07:09:25,000 --> 07:09:33,320
scissors file in the browser so we'll
8404
07:09:28,320 --> 07:09:33,320
right click and then open with live
8405
07:09:33,638 --> 07:09:41,360
server and I'll move this tab to the top
8406
07:09:37,080 --> 07:09:44,718
here so we can see it side by side so
8407
07:09:41,360 --> 07:09:46,478
let's start by styling the body we want
8408
07:09:44,718 --> 07:09:50,478
to make the background color of the
8409
07:09:46,478 --> 07:09:53,200
entire page this dark gray color we'll
8410
07:09:50,478 --> 07:09:56,440
go into our code and let's create a
8411
07:09:53,200 --> 07:10:00,798
style element so we can write some
8412
07:09:56,440 --> 07:10:01,920
CSS inside the head let's type less than
8413
07:10:00,798 --> 07:10:05,040
Style
8414
07:10:01,920 --> 07:10:08,600
greater than and then inside here we're
8415
07:10:05,040 --> 07:10:11,160
going to style the body so we'll type
8416
07:10:08,600 --> 07:10:13,958
body and curly
8417
07:10:11,160 --> 07:10:19,280
brackets now inside here we're going to
8418
07:10:13,958 --> 07:10:19,280
change the background color so
8419
07:10:19,760 --> 07:10:25,360
background-color colon and we're going
8420
07:10:22,520 --> 07:10:28,840
to get the color that we see here by
8421
07:10:25,360 --> 07:10:32,040
right clicking click
8422
07:10:28,840 --> 07:10:36,240
inspect and then go to the elements tab
8423
07:10:32,040 --> 07:10:39,840
Tab and I'll rearrange it so we can see
8424
07:10:36,240 --> 07:10:43,638
it and then here we'll find the body
8425
07:10:39,840 --> 07:10:46,638
element and click it and in this style
8426
07:10:43,638 --> 07:10:49,718
section we can find the background color
8427
07:10:46,638 --> 07:10:51,600
that we need so let's select
8428
07:10:49,718 --> 07:10:53,398
this and
8429
07:10:51,600 --> 07:10:55,440
rightclick
8430
07:10:53,398 --> 07:10:59,558
copy and in
8431
07:10:55,440 --> 07:11:04,638
here right click and
8432
07:10:59,558 --> 07:11:08,520
paste and a semi colon at the end let's
8433
07:11:04,638 --> 07:11:11,280
save and I'll move this back to the
8434
07:11:08,520 --> 07:11:14,520
corner and now our project has the same
8435
07:11:11,280 --> 07:11:18,320
background color as the final design
8436
07:11:14,520 --> 07:11:23,280
next let's make the text color white so
8437
07:11:18,320 --> 07:11:29,558
in our CSS we'll use the color property
8438
07:11:23,280 --> 07:11:32,280
and colon white and semicolon and save
8439
07:11:29,558 --> 07:11:35,240
and that will make our text White
8440
07:11:32,280 --> 07:11:40,520
next let's change the style or the font
8441
07:11:35,240 --> 07:11:43,398
of this text we'll type font
8442
07:11:40,520 --> 07:11:47,080
dasam colon
8443
07:11:43,398 --> 07:11:48,638
aial which is what the final design uses
8444
07:11:47,080 --> 07:11:51,638
and
8445
07:11:48,638 --> 07:11:54,558
save all right now let's style these
8446
07:11:51,638 --> 07:11:57,558
elements one by one to match the final
8447
07:11:54,558 --> 07:12:00,638
design we'll start with this paragraph
8448
07:11:57,558 --> 07:12:01,718
at the top so inside the paragraph
8449
07:12:00,638 --> 07:12:05,200
element
8450
07:12:01,718 --> 07:12:08,840
let's add a class so we can style it in
8451
07:12:05,200 --> 07:12:11,920
CSS we'll add class
8452
07:12:08,840 --> 07:12:15,520
equals let's call this the
8453
07:12:11,920 --> 07:12:18,680
title and then in our CSS we can style
8454
07:12:15,520 --> 07:12:19,840
this class by starting with a DOT and
8455
07:12:18,680 --> 07:12:22,638
then
8456
07:12:19,840 --> 07:12:25,840
title and curly
8457
07:12:22,638 --> 07:12:29,200
brackets so let's make our title really
8458
07:12:25,840 --> 07:12:37,080
big like the final design we'll change
8459
07:12:29,200 --> 07:12:40,680
the font Das size colon 30 pixels and
8460
07:12:37,080 --> 07:12:44,558
save so that looks close enough next
8461
07:12:40,680 --> 07:12:52,958
let's make the text bold in our CSS
8462
07:12:44,558 --> 07:12:56,240
we'll use Font D weight colon bold and
8463
07:12:52,958 --> 07:12:58,878
save now let's move on to installing the
8464
07:12:56,240 --> 07:13:01,280
buttons so first we're going to need
8465
07:12:58,878 --> 07:13:04,000
these images in our project and I'll
8466
07:13:01,280 --> 07:13:07,320
show you how to get them we'll put our
8467
07:13:04,000 --> 07:13:10,680
Mouse over the rock image and we'll
8468
07:13:07,320 --> 07:13:13,080
rightclick and we'll click save
8469
07:13:10,680 --> 07:13:16,280
image and now we're going to find the
8470
07:13:13,080 --> 07:13:18,160
folder that contains all of our code so
8471
07:13:16,280 --> 07:13:21,440
for me it's on the
8472
07:13:18,160 --> 07:13:23,958
desktop and it's this folder right here
8473
07:13:21,440 --> 07:13:26,520
so I'll double click this folder and
8474
07:13:23,958 --> 07:13:31,320
then leave the file name as the default
8475
07:13:26,520 --> 07:13:34,040
rock- emoji and click save
8476
07:13:31,320 --> 07:13:37,798
and now in our code editor if we click
8477
07:13:34,040 --> 07:13:40,680
here we should be able to see the rock
8478
07:13:37,798 --> 07:13:43,320
image let's do the same with the paper
8479
07:13:40,680 --> 07:13:47,240
and scissors image so we'll hover over
8480
07:13:43,320 --> 07:13:49,718
it rightclick save
8481
07:13:47,240 --> 07:13:52,320
image and in the same folder that
8482
07:13:49,718 --> 07:13:56,478
contains our code we're going to save
8483
07:13:52,320 --> 07:13:59,958
the paper image and finally rightclick
8484
07:13:56,478 --> 07:14:02,200
save image and we'll save the scissors
8485
07:13:59,958 --> 07:14:04,398
image
8486
07:14:02,200 --> 07:14:06,840
all right now that we have these images
8487
07:14:04,398 --> 07:14:10,000
in our code editor let's learn how to
8488
07:14:06,840 --> 07:14:13,680
load them onto the page so we can do
8489
07:14:10,000 --> 07:14:17,798
this using an HTML element so we'll go
8490
07:14:13,680 --> 07:14:21,000
back to our HTML code and we'll scroll
8491
07:14:17,798 --> 07:14:25,280
down and inside the button we're going
8492
07:14:21,000 --> 07:14:30,240
to add an image element so let's type
8493
07:14:25,280 --> 07:14:33,760
less than IMG and greater than so this
8494
07:14:30,240 --> 07:14:36,878
is the image HTML element it loads an
8495
07:14:33,760 --> 07:14:39,760
image onto the page the image element
8496
07:14:36,878 --> 07:14:42,878
doesn't require a closing tag this is
8497
07:14:39,760 --> 07:14:45,600
called a void element now to load an
8498
07:14:42,878 --> 07:14:49,360
image we're going to add an attribute to
8499
07:14:45,600 --> 07:14:53,840
this element called
8500
07:14:49,360 --> 07:14:57,958
SRC so SRC stands for Source it tells a
8501
07:14:53,840 --> 07:14:59,520
computer which file or image to load so
8502
07:14:57,958 --> 07:15:01,958
let's look in our
8503
07:14:59,520 --> 07:15:05,760
project for this button we're going to
8504
07:15:01,958 --> 07:15:10,440
load rock- emoji.png
8505
07:15:05,760 --> 07:15:12,718
inside the source attribute we'll type
8506
07:15:10,440 --> 07:15:14,558
rock-
8507
07:15:12,718 --> 07:15:17,558
emoji.png
8508
07:15:14,558 --> 07:15:21,120
so what this does is it will look for
8509
07:15:17,558 --> 07:15:24,000
the file with this name beside the HTML
8510
07:15:21,120 --> 07:15:28,040
file and it finds it right here and it
8511
07:15:24,000 --> 07:15:31,680
will load it onto the page if we
8512
07:15:28,040 --> 07:15:32,878
save now inside our button it loaded the
8513
07:15:31,680 --> 07:15:36,520
rock
8514
07:15:32,878 --> 07:15:39,398
image right now this image is too big so
8515
07:15:36,520 --> 07:15:43,280
let's use CSS to decrease the size of
8516
07:15:39,398 --> 07:15:45,280
this image we'll hide the files and
8517
07:15:43,280 --> 07:15:48,280
let's give a class attribute to the
8518
07:15:45,280 --> 07:15:52,638
image element so we can style it so
8519
07:15:48,280 --> 07:15:56,280
we'll type class equals and let's call
8520
07:15:52,638 --> 07:15:59,000
this a move Das
8521
07:15:56,280 --> 07:16:01,638
icon and I'm also just going to add some
8522
07:15:59,000 --> 07:16:06,200
new lines to make the code a little
8523
07:16:01,638 --> 07:16:09,680
easier to read so we'll scroll up to the
8524
07:16:06,200 --> 07:16:16,240
CSS and we're going to style this class
8525
07:16:09,680 --> 07:16:19,320
using dot move Dash icon and curly
8526
07:16:16,240 --> 07:16:23,360
brackets and let's decrease the height
8527
07:16:19,320 --> 07:16:29,958
of this image we can use the property
8528
07:16:23,360 --> 07:16:32,120
height colon and a pixel value 50 pixels
8529
07:16:29,958 --> 07:16:34,398
and Save
8530
07:16:32,120 --> 07:16:38,160
so this will make the height of this
8531
07:16:34,398 --> 07:16:40,320
image 50 pixels and it will also resize
8532
07:16:38,160 --> 07:16:43,878
the width automatically so that the
8533
07:16:40,320 --> 07:16:46,320
image keeps its shape so this size looks
8534
07:16:43,878 --> 07:16:47,440
pretty close to the final design so we
8535
07:16:46,320 --> 07:16:50,320
can move
8536
07:16:47,440 --> 07:16:53,040
on another feature of the source
8537
07:16:50,320 --> 07:16:56,840
attribute is that we can put our files
8538
07:16:53,040 --> 07:16:58,200
into folders so let's open the files by
8539
07:16:56,840 --> 07:17:00,440
clicking
8540
07:16:58,200 --> 07:17:04,080
here and let's say that we want to
8541
07:17:00,440 --> 07:17:06,200
organize all of our images into a folder
8542
07:17:04,080 --> 07:17:07,878
so we're going to create a folder by
8543
07:17:06,200 --> 07:17:13,120
clicking this
8544
07:17:07,878 --> 07:17:13,120
icon and let's name this folder
8545
07:17:13,760 --> 07:17:18,398
images and we're going to drag these
8546
07:17:15,920 --> 07:17:21,478
images into this
8547
07:17:18,398 --> 07:17:25,040
folder and drag this in
8548
07:17:21,478 --> 07:17:27,878
here and in
8549
07:17:25,040 --> 07:17:30,638
here now unfortunately you can see that
8550
07:17:27,878 --> 07:17:33,718
the image doesn't load anymore and
8551
07:17:30,638 --> 07:17:36,360
that's because if we look at our code
8552
07:17:33,718 --> 07:17:40,478
Source tells a computer to look for this
8553
07:17:36,360 --> 07:17:43,558
file beside this HTML
8554
07:17:40,478 --> 07:17:47,638
file and right now there is no file
8555
07:17:43,558 --> 07:17:50,440
called rock- emoji.png because we put it
8556
07:17:47,638 --> 07:17:52,878
in a folder so to tell the computer to
8557
07:17:50,440 --> 07:17:55,798
look inside this folder we're going to
8558
07:17:52,878 --> 07:17:57,280
type the folder name at the start which
8559
07:17:55,798 --> 07:17:59,680
is
8560
07:17:57,280 --> 07:18:03,478
images and then we're going to type a
8561
07:17:59,680 --> 07:18:06,638
slash to go into the images folder and
8562
07:18:03,478 --> 07:18:08,840
then look for this file which is right
8563
07:18:06,638 --> 07:18:12,040
here if we
8564
07:18:08,840 --> 07:18:15,520
save the computer is now able to find
8565
07:18:12,040 --> 07:18:18,798
this image and load it onto the web page
8566
07:18:15,520 --> 07:18:20,520
so this feature is called file paaths we
8567
07:18:18,798 --> 07:18:24,600
can tell the computer to look for a
8568
07:18:20,520 --> 07:18:27,360
folder beside the HTML file like images
8569
07:18:24,600 --> 07:18:32,520
and then use a slash to tell it to go
8570
07:18:27,360 --> 07:18:32,520
into the folder and look for a file
8571
07:18:32,558 --> 07:18:38,280
now let's use this code to load the
8572
07:18:34,718 --> 07:18:40,600
other images onto our page so for the
8573
07:18:38,280 --> 07:18:45,080
paper image we're going to go to this
8574
07:18:40,600 --> 07:18:49,600
button remove the text and then create
8575
07:18:45,080 --> 07:18:52,798
an image element less than IMG greater
8576
07:18:49,600 --> 07:18:56,958
than and we'll give it an attribute
8577
07:18:52,798 --> 07:19:01,478
Source equals and we'll locate the image
8578
07:18:56,958 --> 07:19:04,958
it is in the images folder so we'll type
8579
07:19:01,478 --> 07:19:08,440
images and then slash to go into the
8580
07:19:04,958 --> 07:19:10,280
folder and we'll load the file paper-
8581
07:19:08,440 --> 07:19:12,080
emoji.png
8582
07:19:10,280 --> 07:19:14,320
so
8583
07:19:12,080 --> 07:19:16,160
paper-
8584
07:19:14,320 --> 07:19:18,558
emoji.png
8585
07:19:16,160 --> 07:19:22,120
and
8586
07:19:18,558 --> 07:19:24,320
save so our image is really big let's
8587
07:19:22,120 --> 07:19:30,080
give it the same class that we gave the
8588
07:19:24,320 --> 07:19:35,080
rock image so we'll add a class equals
8589
07:19:30,080 --> 07:19:38,200
move Dash icon and
8590
07:19:35,080 --> 07:19:42,520
save so these Styles get applied to all
8591
07:19:38,200 --> 07:19:45,160
elements with the class move- icon so it
8592
07:19:42,520 --> 07:19:47,520
applies to both of these
8593
07:19:45,160 --> 07:19:50,878
elements now let's do the same thing for
8594
07:19:47,520 --> 07:19:55,240
the scissors button we'll remove the
8595
07:19:50,878 --> 07:19:59,040
text and we'll replace it with an image
8596
07:19:55,240 --> 07:20:02,040
element and we'll give it the source
8597
07:19:59,040 --> 07:20:03,638
attribute images
8598
07:20:02,040 --> 07:20:06,600
slash
8599
07:20:03,638 --> 07:20:08,120
scissors Das
8600
07:20:06,600 --> 07:20:12,160
emoji.png
8601
07:20:08,120 --> 07:20:14,440
and we'll also give this a
8602
07:20:12,160 --> 07:20:18,760
class of
8603
07:20:14,440 --> 07:20:20,680
move- icon to resize the images like up
8604
07:20:18,760 --> 07:20:23,760
here let's
8605
07:20:20,680 --> 07:20:25,440
save and now we have all the images that
8606
07:20:23,760 --> 07:20:28,240
we
8607
07:20:25,440 --> 07:20:31,680
need now let's make these buttons look
8608
07:20:28,240 --> 07:20:34,798
like the final design we we scroll
8609
07:20:31,680 --> 07:20:37,680
up and let's add a class to these
8610
07:20:34,798 --> 07:20:42,958
buttons so we can style them with
8611
07:20:37,680 --> 07:20:44,440
CSS so we'll add class equals and let's
8612
07:20:42,958 --> 07:20:46,280
use
8613
07:20:44,440 --> 07:20:49,160
move-
8614
07:20:46,280 --> 07:20:53,600
button and for this button We'll add the
8615
07:20:49,160 --> 07:20:55,160
same class class equals
8616
07:20:53,600 --> 07:20:58,398
move-
8617
07:20:55,160 --> 07:21:03,440
Button as well as for the third
8618
07:20:58,398 --> 07:21:07,160
button class = move-
8619
07:21:03,440 --> 07:21:10,680
button now let's scroll up to our CSS
8620
07:21:07,160 --> 07:21:16,240
and we're going to style this class
8621
07:21:10,680 --> 07:21:19,080
using move- button and curly
8622
07:21:16,240 --> 07:21:21,398
brackets so first let's change the
8623
07:21:19,080 --> 07:21:25,478
background color to match the background
8624
07:21:21,398 --> 07:21:30,040
color of the page so we'll use
8625
07:21:25,478 --> 07:21:33,440
background Das color colon and we'll use
8626
07:21:30,040 --> 07:21:35,280
a special value called
8627
07:21:33,440 --> 07:21:38,878
transparent and this will make the
8628
07:21:35,280 --> 07:21:41,798
button see- through if we
8629
07:21:38,878 --> 07:21:44,760
save now these buttons are
8630
07:21:41,798 --> 07:21:48,160
see-through next let's add this white
8631
07:21:44,760 --> 07:21:49,200
border to our buttons so we'll use the
8632
07:21:48,160 --> 07:21:52,080
Border
8633
07:21:49,200 --> 07:21:55,520
property colon and we're going to give
8634
07:21:52,080 --> 07:21:59,360
it three values the first value is our
8635
07:21:55,520 --> 07:22:03,160
border width or how thick the border is
8636
07:21:59,360 --> 07:22:07,280
let's use one pixel for now the second
8637
07:22:03,160 --> 07:22:11,360
value is the Border style and we'll use
8638
07:22:07,280 --> 07:22:14,920
solid because it's a solid border other
8639
07:22:11,360 --> 07:22:18,200
values we can use here are dotted or
8640
07:22:14,920 --> 07:22:21,240
dashed and the third value is the Border
8641
07:22:18,200 --> 07:22:26,120
color so we're going to use
8642
07:22:21,240 --> 07:22:29,680
white and semicolon at the end and
8643
07:22:26,120 --> 07:22:31,600
save and that will add a border so let's
8644
07:22:29,680 --> 07:22:34,520
make our border a little thicker like
8645
07:22:31,600 --> 07:22:37,798
the final design we'll change this first
8646
07:22:34,520 --> 07:22:40,040
value which is the Border width to three
8647
07:22:37,798 --> 07:22:43,440
pixels and
8648
07:22:40,040 --> 07:22:46,558
save okay so that looks pretty close now
8649
07:22:43,440 --> 07:22:49,398
let's change the size of our buttons
8650
07:22:46,558 --> 07:22:52,120
usually we use the padding to add space
8651
07:22:49,398 --> 07:22:55,360
on the inside of an element but in this
8652
07:22:52,120 --> 07:22:57,718
case our images have different sizes so
8653
07:22:55,360 --> 07:23:02,440
we're going to use width and height to
8654
07:22:57,718 --> 07:23:04,120
set an exact size so so in our CSS we'll
8655
07:23:02,440 --> 07:23:08,440
type
8656
07:23:04,120 --> 07:23:11,120
WID colon and let's make it 100
8657
07:23:08,440 --> 07:23:16,840
pixels and
8658
07:23:11,120 --> 07:23:19,680
height and also 100 pixels and
8659
07:23:16,840 --> 07:23:21,878
save so it looks like our final design
8660
07:23:19,680 --> 07:23:24,840
is a little bigger than what we have
8661
07:23:21,878 --> 07:23:30,878
here so let's increase the width and the
8662
07:23:24,840 --> 07:23:33,878
height so let's try 120 pixels and Save
8663
07:23:30,878 --> 07:23:36,440
all right so that looks pretty close now
8664
07:23:33,878 --> 07:23:41,600
let's make these buttons round and the
8665
07:23:36,440 --> 07:23:43,280
property for that is called border Das
8666
07:23:41,600 --> 07:23:45,920
radius
8667
07:23:43,280 --> 07:23:49,000
colon and to know how much we need to
8668
07:23:45,920 --> 07:23:52,080
make it round we can set it to half of
8669
07:23:49,000 --> 07:23:54,160
the width or the height so we'll set it
8670
07:23:52,080 --> 07:23:56,398
to 60
8671
07:23:54,160 --> 07:23:58,958
pixels and
8672
07:23:56,398 --> 07:24:01,798
save okay so it's coming along really
8673
07:23:58,958 --> 07:24:05,120
well and lastly we're going to add some
8674
07:24:01,798 --> 07:24:07,558
space between the buttons so remember
8675
07:24:05,120 --> 07:24:11,160
that space outside of an element is
8676
07:24:07,558 --> 07:24:13,760
called margin so let's add some margin
8677
07:24:11,160 --> 07:24:15,360
on the right so we'll
8678
07:24:13,760 --> 07:24:17,360
type
8679
07:24:15,360 --> 07:24:24,240
margin
8680
07:24:17,360 --> 07:24:27,520
dasr colon and maybe 10 pixels and
8681
07:24:24,240 --> 07:24:30,958
save and finally when we put our Mouse
8682
07:24:27,520 --> 07:24:37,798
over the button it turns into a pointer
8683
07:24:30,958 --> 07:24:42,000
so the property for that is cursor colon
8684
07:24:37,798 --> 07:24:44,840
pointer and save and now our buttons
8685
07:24:42,000 --> 07:24:47,680
match the final design so let's keep
8686
07:24:44,840 --> 07:24:50,240
moving and style the next part of the
8687
07:24:47,680 --> 07:24:53,120
project which is the result and the
8688
07:24:50,240 --> 07:24:55,600
moves if you don't see this here you can
8689
07:24:53,120 --> 07:24:56,478
just play the game and it'll give us a
8690
07:24:55,600 --> 07:24:59,440
new
8691
07:24:56,478 --> 07:25:01,878
result so to make this easier to style
8692
07:24:59,440 --> 07:25:04,680
we're going to go into our code we're
8693
07:25:01,878 --> 07:25:07,160
going to find the result which is here
8694
07:25:04,680 --> 07:25:10,160
and we're going to add some fake results
8695
07:25:07,160 --> 07:25:13,920
like you
8696
07:25:10,160 --> 07:25:16,718
win let's save and now we have this
8697
07:25:13,920 --> 07:25:20,398
result and we're going to style it so
8698
07:25:16,718 --> 07:25:23,080
let's give this a class of
8699
07:25:20,398 --> 07:25:27,360
result and then in our
8700
07:25:23,080 --> 07:25:31,120
CSS we're going to style the class dot
8701
07:25:27,360 --> 07:25:33,558
result and curly brackets
8702
07:25:31,120 --> 07:25:38,638
so let's make the text bigger we're
8703
07:25:33,558 --> 07:25:42,478
going to use Font Das size colon and
8704
07:25:38,638 --> 07:25:45,958
maybe 25 pixels and
8705
07:25:42,478 --> 07:25:50,878
save okay that looks pretty good let's
8706
07:25:45,958 --> 07:25:53,600
make the text bold so we use Font Das
8707
07:25:50,878 --> 07:25:55,760
weight colon
8708
07:25:53,600 --> 07:25:58,600
bold and
8709
07:25:55,760 --> 07:26:02,680
save and finally we're going to add
8710
07:25:58,600 --> 07:26:07,478
extra spaces between this and the
8711
07:26:02,680 --> 07:26:07,478
buttons so we'll add
8712
07:26:07,638 --> 07:26:16,200
margin-top and maybe 50 pixels and
8713
07:26:13,040 --> 07:26:19,958
save okay so I think that looks close
8714
07:26:16,200 --> 07:26:21,600
enough now let's style the moves and
8715
07:26:19,958 --> 07:26:24,280
again we'll scroll
8716
07:26:21,600 --> 07:26:27,680
down and we're going to add some fake
8717
07:26:24,280 --> 07:26:30,600
moves in here so it's easier to style so
8718
07:26:27,680 --> 07:26:34,878
we'll Type U
8719
07:26:30,600 --> 07:26:38,958
and then an image so let's use the less
8720
07:26:34,878 --> 07:26:41,958
than image and the source
8721
07:26:38,958 --> 07:26:44,318
attribute and let's just load the rock
8722
07:26:41,958 --> 07:26:47,520
image and the scissors image for the
8723
07:26:44,318 --> 07:26:50,760
computer so to load the rock image we'll
8724
07:26:47,520 --> 07:26:54,718
look inside the images folder slash to
8725
07:26:50,760 --> 07:26:56,520
go into the folder and then rock-
8726
07:26:54,718 --> 07:26:58,360
emoji.png
8727
07:26:56,520 --> 07:27:01,680
so
8728
07:26:58,360 --> 07:27:05,040
rock- emoji
8729
07:27:01,680 --> 07:27:10,600
PNG and greater than and we'll add
8730
07:27:05,040 --> 07:27:15,280
another image less than image source
8731
07:27:10,600 --> 07:27:19,600
equals Images slash the scissors
8732
07:27:15,280 --> 07:27:21,240
Emoji scissors Das
8733
07:27:19,600 --> 07:27:26,280
emoji.png
8734
07:27:21,240 --> 07:27:27,920
and greater than and finally the text
8735
07:27:26,280 --> 07:27:31,000
computer
8736
07:27:27,920 --> 07:27:33,600
computer let's save
8737
07:27:31,000 --> 07:27:36,318
and this will create some results
8738
07:27:33,600 --> 07:27:39,840
although the images are really big so we
8739
07:27:36,318 --> 07:27:43,280
can use the class move icon to resize
8740
07:27:39,840 --> 07:27:46,200
them to be the same size as the buttons
8741
07:27:43,280 --> 07:27:47,000
so for both of these images let's add
8742
07:27:46,200 --> 07:27:48,558
the
8743
07:27:47,000 --> 07:27:50,520
class
8744
07:27:48,558 --> 07:27:55,520
move-
8745
07:27:50,520 --> 07:28:00,360
icon and here as well class equals
8746
07:27:55,520 --> 07:28:02,478
move- icon and Save
8747
07:28:00,360 --> 07:28:06,680
and now our images look
8748
07:28:02,478 --> 07:28:09,040
good next let's style this score section
8749
07:28:06,680 --> 07:28:12,718
so the only thing we need here is to add
8750
07:28:09,040 --> 07:28:18,000
spaces between these two so in this
8751
07:28:12,718 --> 07:28:22,240
score element let's add a class of
8752
07:28:18,000 --> 07:28:26,840
score and we'll scroll up and style this
8753
07:28:22,240 --> 07:28:29,680
element using DOT score
8754
07:28:26,840 --> 07:28:31,200
brackets and let's add some margin at
8755
07:28:29,680 --> 07:28:33,760
the top
8756
07:28:31,200 --> 07:28:38,878
so
8757
07:28:33,760 --> 07:28:41,878
margin-top colon 50 pixels and
8758
07:28:38,878 --> 07:28:43,958
save and let's compare it and it looks
8759
07:28:41,878 --> 07:28:47,398
like our final design has a little more
8760
07:28:43,958 --> 07:28:51,120
spacing than this so let's change this
8761
07:28:47,398 --> 07:28:54,718
to 60 pixels and
8762
07:28:51,120 --> 07:28:57,680
save and that looks close enough and
8763
07:28:54,718 --> 07:29:00,920
finally we'll style the reset score
8764
07:28:57,680 --> 07:29:05,680
button so let's go back to our HTM
8765
07:29:00,920 --> 07:29:10,920
ml we'll add a class to this button so
8766
07:29:05,680 --> 07:29:14,398
here class equals reset
8767
07:29:10,920 --> 07:29:19,440
dcore Das
8768
07:29:14,398 --> 07:29:21,160
button so at the top we'll type dot
8769
07:29:19,440 --> 07:29:23,440
reset
8770
07:29:21,160 --> 07:29:25,398
dcore
8771
07:29:23,440 --> 07:29:27,760
Dutton curly
8772
07:29:25,398 --> 07:29:32,958
brackets and we'll make the background
8773
07:29:27,760 --> 07:29:34,718
color white so background dasc color
8774
07:29:32,958 --> 07:29:37,600
colon
8775
07:29:34,718 --> 07:29:42,920
white and let's also remove the border
8776
07:29:37,600 --> 07:29:46,920
from our button using border colon
8777
07:29:42,920 --> 07:29:49,680
none let's save and see how it
8778
07:29:46,920 --> 07:29:52,160
looks and then let's increase the size
8779
07:29:49,680 --> 07:29:56,398
of this text because the final design
8780
07:29:52,160 --> 07:30:02,360
looks a little bigger so we'll add font
8781
07:29:56,398 --> 07:30:05,520
Das size colon 15 pixels and
8782
07:30:02,360 --> 07:30:08,520
save now let's add some extra space on
8783
07:30:05,520 --> 07:30:13,120
the inside of the button so that's
8784
07:30:08,520 --> 07:30:15,958
padding padding colon and we'll give it
8785
07:30:13,120 --> 07:30:19,600
two values the first value is the
8786
07:30:15,958 --> 07:30:22,478
vertical padding let's use 10
8787
07:30:19,600 --> 07:30:27,000
pixels and the second value is the
8788
07:30:22,478 --> 07:30:31,240
horizontal padding so let's use 15
8789
07:30:27,000 --> 07:30:33,318
pixels and Save
8790
07:30:31,240 --> 07:30:36,360
and it looks like our final project is a
8791
07:30:33,318 --> 07:30:40,280
little shorter than our button so let's
8792
07:30:36,360 --> 07:30:44,558
change the vertical padding to maybe
8793
07:30:40,280 --> 07:30:50,200
eight and save and the last step is to
8794
07:30:44,558 --> 07:30:51,798
add the cursor pointer so here cursor
8795
07:30:50,200 --> 07:30:54,120
colon
8796
07:30:51,798 --> 07:30:56,680
pointer and
8797
07:30:54,120 --> 07:30:58,920
save and that's pretty much it we
8798
07:30:56,680 --> 07:31:01,760
finished styling our rock paper scissors
8799
07:30:58,920 --> 07:31:04,840
project so now I'm going to rearrange my
8800
07:31:01,760 --> 07:31:07,680
windows so we can see the entire design
8801
07:31:04,840 --> 07:31:10,840
and it looks really nice the last step
8802
07:31:07,680 --> 07:31:13,840
here is to remove these fake results and
8803
07:31:10,840 --> 07:31:17,520
use JavaScript to insert these results
8804
07:31:13,840 --> 07:31:17,520
instead so let's scroll
8805
07:31:17,558 --> 07:31:25,240
down and we'll remove this
8806
07:31:22,000 --> 07:31:26,958
result and let's actually copy this code
8807
07:31:25,240 --> 07:31:31,200
because we want our JavaScript to
8808
07:31:26,958 --> 07:31:32,680
generate this code so we'll right click
8809
07:31:31,200 --> 07:31:35,360
and
8810
07:31:32,680 --> 07:31:38,200
copy and let's scroll to the
8811
07:31:35,360 --> 07:31:41,840
bottom to where we insert the moves onto
8812
07:31:38,200 --> 07:31:45,920
the page which is here and instead of
8813
07:31:41,840 --> 07:31:49,638
this text we're going to rightclick and
8814
07:31:45,920 --> 07:31:51,840
paste the code that we had before and
8815
07:31:49,638 --> 07:31:54,318
this time instead of picking Rock every
8816
07:31:51,840 --> 07:31:58,318
time we're going to substitute this with
8817
07:31:54,318 --> 07:32:00,080
the player move so we're remove this and
8818
07:31:58,318 --> 07:32:03,040
because this is already a template
8819
07:32:00,080 --> 07:32:07,318
string we can insert a value directly
8820
07:32:03,040 --> 07:32:09,398
inside using dollar and curly brackets
8821
07:32:07,318 --> 07:32:11,160
and we'll insert the
8822
07:32:09,398 --> 07:32:14,040
player
8823
07:32:11,160 --> 07:32:17,760
move let's also insert the computer's
8824
07:32:14,040 --> 07:32:20,520
move in here so we'll remove this and
8825
07:32:17,760 --> 07:32:25,638
insert a value using dollar and curly
8826
07:32:20,520 --> 07:32:28,080
brackets and we'll insert computer
8827
07:32:25,638 --> 07:32:31,318
move and now that we're inserting this
8828
07:32:28,080 --> 07:32:33,080
with JavaScript we can scroll up and
8829
07:32:31,318 --> 07:32:37,200
remove the fake
8830
07:32:33,080 --> 07:32:38,680
result which is here so we can select it
8831
07:32:37,200 --> 07:32:41,240
and delete
8832
07:32:38,680 --> 07:32:43,280
it now let's
8833
07:32:41,240 --> 07:32:45,878
save and we're not going to have
8834
07:32:43,280 --> 07:32:49,318
anything in our results and when we
8835
07:32:45,878 --> 07:32:51,878
click a move it will show us the result
8836
07:32:49,318 --> 07:32:54,680
and also show us the moves that we
8837
07:32:51,878 --> 07:32:56,680
picked and that's it we finished the
8838
07:32:54,680 --> 07:32:58,520
rock paper scissors
8839
07:32:56,680 --> 07:33:00,878
project the last thing we're going to
8840
07:32:58,520 --> 07:33:03,160
learn in this lesson is how to organize
8841
07:33:00,878 --> 07:33:06,318
our code into different
8842
07:33:03,160 --> 07:33:10,440
files so notice that right now all of
8843
07:33:06,318 --> 07:33:13,638
our HTML CSS and JavaScript is in one
8844
07:33:10,440 --> 07:33:16,718
HTML file and this makes the code harder
8845
07:33:13,638 --> 07:33:19,920
to read because the file is bigger and
8846
07:33:16,718 --> 07:33:22,040
it mixes three different languages to
8847
07:33:19,920 --> 07:33:24,440
make our code more organized and easier
8848
07:33:22,040 --> 07:33:28,040
to read we're going to separate each
8849
07:33:24,440 --> 07:33:30,558
language into its own file so let's
8850
07:33:28,040 --> 07:33:33,558
scroll down and we'll start by
8851
07:33:30,558 --> 07:33:37,920
separating our JavaScript into its own
8852
07:33:33,558 --> 07:33:41,160
file we'll click here to show our files
8853
07:33:37,920 --> 07:33:44,798
and then click this icon to create a new
8854
07:33:41,160 --> 07:33:47,798
file and we'll name this file
8855
07:33:44,798 --> 07:33:47,798
10-
8856
07:33:48,718 --> 07:33:54,760
rock-paper-
8857
07:33:50,680 --> 07:33:57,878
scissors. JS and press
8858
07:33:54,760 --> 07:34:00,558
enter so when we end a file
8859
07:33:57,878 --> 07:34:04,440
withjs it tells the computer that this
8860
07:34:00,558 --> 07:34:08,080
file contains JavaScript code not just
8861
07:34:04,440 --> 07:34:10,760
text now let's go back to our HTML
8862
07:34:08,080 --> 07:34:14,040
file and we're going to move all of this
8863
07:34:10,760 --> 07:34:16,600
code into the Javascript file so we'll
8864
07:34:14,040 --> 07:34:16,600
select this
8865
07:34:17,520 --> 07:34:22,600
code and then we'll
8866
07:34:20,240 --> 07:34:26,680
rightclick and
8867
07:34:22,600 --> 07:34:31,638
copy and inside the Javascript file
8868
07:34:26,680 --> 07:34:31,638
we'll rightclick and paste
8869
07:34:31,840 --> 07:34:37,360
now let's
8870
07:34:33,240 --> 07:34:41,318
save and we'll go back to the HTML file
8871
07:34:37,360 --> 07:34:44,000
and we can delete all this JavaScript
8872
07:34:41,318 --> 07:34:47,520
code and now we're just going to load
8873
07:34:44,000 --> 07:34:50,360
our Javascript file on to the web page
8874
07:34:47,520 --> 07:34:55,958
to do that we can use an attribute of
8875
07:34:50,360 --> 07:34:58,718
the script element called SRC or source
8876
07:34:55,958 --> 07:35:01,440
so we'll make it equal and this does the
8877
07:34:58,718 --> 07:35:03,958
same thing as the image element it tells
8878
07:35:01,440 --> 07:35:06,840
a computer which file to
8879
07:35:03,958 --> 07:35:09,840
load if we type
8880
07:35:06,840 --> 07:35:09,840
10-
8881
07:35:11,680 --> 07:35:17,680
rock-paper-scissors
8882
07:35:14,080 --> 07:35:21,680
DJs this will look for a file called 10
8883
07:35:17,680 --> 07:35:24,920
rockpaper scissors. JS beside our HTML
8884
07:35:21,680 --> 07:35:28,600
file which is this file here and it will
8885
07:35:24,920 --> 07:35:31,240
run all the JavaScript inside this file
8886
07:35:28,600 --> 07:35:34,280
so it does the same thing as before
8887
07:35:31,240 --> 07:35:35,440
except now our JavaScript code is in its
8888
07:35:34,280 --> 07:35:38,958
own
8889
07:35:35,440 --> 07:35:41,558
file and this makes our code cleaner
8890
07:35:38,958 --> 07:35:44,318
because each file only contains one
8891
07:35:41,558 --> 07:35:45,398
language and each file also contains
8892
07:35:44,318 --> 07:35:49,558
less
8893
07:35:45,398 --> 07:35:50,638
code now let's go back to the HTML file
8894
07:35:49,558 --> 07:35:53,080
and
8895
07:35:50,638 --> 07:35:55,760
save and you'll notice that our project
8896
07:35:53,080 --> 07:35:57,760
works the same way as before we just
8897
07:35:55,760 --> 07:36:00,200
organized our code
8898
07:35:57,760 --> 07:36:02,958
better another feature of The Source
8899
07:36:00,200 --> 07:36:05,600
attribute is that it also uses file
8900
07:36:02,958 --> 07:36:09,040
paths so we can put this Javascript file
8901
07:36:05,600 --> 07:36:12,240
in a folder and we'll be able to find it
8902
07:36:09,040 --> 07:36:14,840
for example let's show our files and
8903
07:36:12,240 --> 07:36:15,760
let's create a new folder by clicking
8904
07:36:14,840 --> 07:36:20,958
this
8905
07:36:15,760 --> 07:36:20,958
icon and let's name this folder
8906
07:36:21,240 --> 07:36:29,160
scripts so this folder will contain all
8907
07:36:24,200 --> 07:36:31,760
of our JS files so we can drag this file
8908
07:36:29,160 --> 07:36:31,760
into the
8909
07:36:32,360 --> 07:36:37,920
folder and now we can locate it using
8910
07:36:35,160 --> 07:36:42,000
the source attribute by typing the
8911
07:36:37,920 --> 07:36:45,558
folder name which is scripts and then a
8912
07:36:42,000 --> 07:36:49,440
slash to go inside this folder and look
8913
07:36:45,558 --> 07:36:51,558
for this file and it will find it right
8914
07:36:49,440 --> 07:36:54,398
here if we
8915
07:36:51,558 --> 07:36:57,280
save everything works as
8916
07:36:54,398 --> 07:37:00,080
normal another feature is we can use
8917
07:36:57,280 --> 07:37:02,920
multiple script elements this lets us
8918
07:37:00,080 --> 07:37:05,200
split our JavaScript into multiple files
8919
07:37:02,920 --> 07:37:06,958
and then load them all onto the page
8920
07:37:05,200 --> 07:37:09,600
from top to
8921
07:37:06,958 --> 07:37:13,200
bottom next we're going to learn how to
8922
07:37:09,600 --> 07:37:16,280
separate our CSS into its own
8923
07:37:13,200 --> 07:37:20,318
file let's scroll up to our
8924
07:37:16,280 --> 07:37:23,318
CSS so we can do the same thing with CSS
8925
07:37:20,318 --> 07:37:26,360
so let's click the HTML
8926
07:37:23,318 --> 07:37:30,878
file and let's create a new
8927
07:37:26,360 --> 07:37:32,478
folder and we'll call this folder Style
8928
07:37:30,878 --> 07:37:35,280
and press
8929
07:37:32,478 --> 07:37:39,240
enter so this folder will contain all of
8930
07:37:35,280 --> 07:37:42,080
our CSS code let's click the folder and
8931
07:37:39,240 --> 07:37:45,958
we'll create a new file by clicking this
8932
07:37:42,080 --> 07:37:47,638
icon and let's name this file
8933
07:37:45,958 --> 07:37:49,318
10-
8934
07:37:47,638 --> 07:37:51,638
ro-
8935
07:37:49,318 --> 07:37:55,240
paper-
8936
07:37:51,638 --> 07:37:59,638
scissors. CSS and press
8937
07:37:55,240 --> 07:38:03,280
enter so ending the file with CSS means
8938
07:37:59,638 --> 07:38:05,280
this file contains CSS code and now we
8939
07:38:03,280 --> 07:38:10,040
can go back to our
8940
07:38:05,280 --> 07:38:12,760
HTML and move our CSS into its own file
8941
07:38:10,040 --> 07:38:15,120
so let's select all this
8942
07:38:12,760 --> 07:38:16,958
code and then right
8943
07:38:15,120 --> 07:38:23,520
click
8944
07:38:16,958 --> 07:38:26,280
copy and in here right click and
8945
07:38:23,520 --> 07:38:30,360
paste and save this
8946
07:38:26,280 --> 07:38:32,718
file now let's go back to our HTML
8947
07:38:30,360 --> 07:38:35,840
and we can remove this
8948
07:38:32,718 --> 07:38:37,958
code and we'll learn how to load our CSS
8949
07:38:35,840 --> 07:38:40,398
file onto our
8950
07:38:37,958 --> 07:38:43,120
website so we're not going to use the
8951
07:38:40,398 --> 07:38:46,080
style element for this we're going to
8952
07:38:43,120 --> 07:38:50,398
use a different element called the link
8953
07:38:46,080 --> 07:38:53,040
element so we'll type less than link
8954
07:38:50,398 --> 07:38:55,680
greater than and the link element
8955
07:38:53,040 --> 07:38:58,920
doesn't require a closing tag this is
8956
07:38:55,680 --> 07:39:02,558
another void element so the link element
8957
07:38:58,920 --> 07:39:05,478
uses two attributes the first attribute
8958
07:39:02,558 --> 07:39:05,478
is called
8959
07:39:05,920 --> 07:39:12,878
R means relation this tells a computer
8960
07:39:09,958 --> 07:39:15,558
what type of file we're loading so we're
8961
07:39:12,878 --> 07:39:18,878
going to set this attribute to style
8962
07:39:15,558 --> 07:39:21,638
sheet this means we're loading a CSS
8963
07:39:18,878 --> 07:39:24,840
file and then we'll add a second
8964
07:39:21,638 --> 07:39:28,360
attribute called
8965
07:39:24,840 --> 07:39:30,160
href so href tells a computer which file
8966
07:39:28,360 --> 07:39:33,638
we want to load
8967
07:39:30,160 --> 07:39:36,600
so this also supports file paaths so we
8968
07:39:33,638 --> 07:39:39,360
can type the Styles
8969
07:39:36,600 --> 07:39:42,878
folder this will look for a folder
8970
07:39:39,360 --> 07:39:45,840
beside the HTML called Styles which is
8971
07:39:42,878 --> 07:39:49,280
this one right here and then we'll type
8972
07:39:45,840 --> 07:39:53,160
slash to go inside the folder and look
8973
07:39:49,280 --> 07:40:00,878
for this CSS file which is
8974
07:39:53,160 --> 07:40:04,478
10- Rock Das paper Das scissors
8975
07:40:00,878 --> 07:40:08,200
CSS so this will load all the CSS inside
8976
07:40:04,478 --> 07:40:11,080
this file and apply it to our page so it
8977
07:40:08,200 --> 07:40:13,798
does the same thing as before except we
8978
07:40:11,080 --> 07:40:17,958
separated each language into its own
8979
07:40:13,798 --> 07:40:21,080
file if we save everything still works
8980
07:40:17,958 --> 07:40:23,558
and all the Styles get applied and just
8981
07:40:21,080 --> 07:40:26,558
like the script element we can also use
8982
07:40:23,558 --> 07:40:28,000
multiple link elements to load multiple
8983
07:40:26,558 --> 07:40:30,798
CSS
8984
07:40:28,000 --> 07:40:33,680
files so that's how we separate our code
8985
07:40:30,798 --> 07:40:36,878
into separate files using the script
8986
07:40:33,680 --> 07:40:39,398
element and the link element it makes
8987
07:40:36,878 --> 07:40:42,280
our code a lot easier to read because
8988
07:40:39,398 --> 07:40:45,718
each file contains one language and it
8989
07:40:42,280 --> 07:40:48,920
contains less code and that's the end of
8990
07:40:45,718 --> 07:40:50,958
this lesson as a final reminder the CSS
8991
07:40:48,920 --> 07:40:53,840
we learned in this lesson is just a
8992
07:40:50,958 --> 07:40:57,520
review if you want to learn CSS in more
8993
07:40:53,840 --> 07:40:59,920
detail you can check out my HTML and CSS
8994
07:40:57,520 --> 07:41:02,318
full course in the video
8995
07:40:59,920 --> 07:41:06,318
description so in this lesson we
8996
07:41:02,318 --> 07:41:09,240
reviewed CSS and added CSS to all of our
8997
07:41:06,318 --> 07:41:12,080
projects we learned about the class list
8998
07:41:09,240 --> 07:41:14,958
property which lets us control the class
8999
07:41:12,080 --> 07:41:17,318
attribute of an element we finished our
9000
07:41:14,958 --> 07:41:19,760
rock paper scissors project and we
9001
07:41:17,318 --> 07:41:23,920
learned how to organize our JavaScript
9002
07:41:19,760 --> 07:41:23,920
and CSS code into separate
9003
07:41:25,000 --> 07:41:30,040
files thanks for watching this course so
9004
07:41:27,558 --> 07:41:32,040
far if you want to support this channel
9005
07:41:30,040 --> 07:41:34,318
you can check out the premium version of
9006
07:41:32,040 --> 07:41:36,718
my courses just like this one where you
9007
07:41:34,318 --> 07:41:39,200
can get a certificate of completion and
9008
07:41:36,718 --> 07:41:41,958
a Better Learning platform if you're
9009
07:41:39,200 --> 07:41:44,520
interested in extra videos from me more
9010
07:41:41,958 --> 07:41:47,240
in-depth videos and behindth scenes
9011
07:41:44,520 --> 07:41:49,920
content you can check out these links
9012
07:41:47,240 --> 07:41:52,760
here you can also support the channel by
9013
07:41:49,920 --> 07:41:55,600
liking the video subscribing and sharing
9014
07:41:52,760 --> 07:41:59,280
this video with others thanks again and
9015
07:41:55,600 --> 07:42:01,120
let's continue with the course
9016
07:41:59,280 --> 07:42:05,280
here are some exercises to help you
9017
07:42:01,120 --> 07:42:08,280
practice using HTML CSS and JavaScript
9018
07:42:05,280 --> 07:42:08,280
together
9019
07:42:31,600 --> 07:42:36,318
in this lesson we're going to learn two
9020
07:42:33,718 --> 07:42:39,200
more features of JavaScript called
9021
07:42:36,318 --> 07:42:42,398
arrays and loops and we're going to use
9022
07:42:39,200 --> 07:42:45,718
these features to create this to-do list
9023
07:42:42,398 --> 07:42:48,798
project first let's create a new file
9024
07:42:45,718 --> 07:42:51,718
for this lesson we'll go to our code
9025
07:42:48,798 --> 07:42:54,638
editor and click up here to show our
9026
07:42:51,718 --> 07:42:57,600
files and this time make sure you have
9027
07:42:54,638 --> 07:42:59,600
one of these HTML files selected so we
9028
07:42:57,600 --> 07:43:00,638
don't create the new file in one of
9029
07:42:59,600 --> 07:43:03,160
these
9030
07:43:00,638 --> 07:43:05,680
folders so now we're going to click this
9031
07:43:03,160 --> 07:43:09,958
icon to create a new
9032
07:43:05,680 --> 07:43:16,120
file and we're going to name this file
9033
07:43:09,958 --> 07:43:17,920
11- arrays Das and Das
9034
07:43:16,120 --> 07:43:20,840
loops.
9035
07:43:17,920 --> 07:43:24,160
HTML and press
9036
07:43:20,840 --> 07:43:27,878
enter now let's copy the previous lesson
9037
07:43:24,160 --> 07:43:30,878
into this file so we'll click on 10 Dom
9038
07:43:27,878 --> 07:43:33,958
projects and and we'll type here and typ
9039
07:43:30,878 --> 07:43:36,080
control a or command a to select the
9040
07:43:33,958 --> 07:43:38,080
code and then
9041
07:43:36,080 --> 07:43:40,638
rightclick
9042
07:43:38,080 --> 07:43:44,478
copy and in
9043
07:43:40,638 --> 07:43:48,360
here right click and
9044
07:43:44,478 --> 07:43:51,318
paste now let's hide our files and we'll
9045
07:43:48,360 --> 07:43:53,360
prepare this file for this lesson so we
9046
07:43:51,318 --> 07:43:59,520
can scroll to the
9047
07:43:53,360 --> 07:44:01,360
top and we'll change the title to arrays
9048
07:43:59,520 --> 07:44:06,080
and
9049
07:44:01,360 --> 07:44:06,080
loops and let's remove all of the
9050
07:44:09,000 --> 07:44:16,878
CSS and we'll also remove the
9051
07:44:13,200 --> 07:44:16,878
HTML which is right
9052
07:44:18,718 --> 07:44:23,080
here and we'll remove all the
9053
07:44:24,840 --> 07:44:29,440
JavaScript now let's
9054
07:44:27,040 --> 07:44:35,080
save and we'll open this file in the
9055
07:44:29,440 --> 07:44:38,440
browser by right clicking open with live
9056
07:44:35,080 --> 07:44:41,840
server and let's also open the console
9057
07:44:38,440 --> 07:44:44,718
so we right click click
9058
07:44:41,840 --> 07:44:47,080
inspect and click the
9059
07:44:44,718 --> 07:44:48,398
console and now we can close the
9060
07:44:47,080 --> 07:44:53,000
previous
9061
07:44:48,398 --> 07:44:53,000
tabs and the previous code for
9062
07:44:53,398 --> 07:45:01,280
now until we just have the lesson 11
9063
07:44:57,360 --> 07:45:04,000
file now we're ready to learn arrays an
9064
07:45:01,280 --> 07:45:07,240
array is another type of value in
9065
07:45:04,000 --> 07:45:10,478
JavaScript and it represents a list of
9066
07:45:07,240 --> 07:45:13,958
other values so let's do an example and
9067
07:45:10,478 --> 07:45:17,040
create our first array we'll go into the
9068
07:45:13,958 --> 07:45:19,958
script element and we're going to type
9069
07:45:17,040 --> 07:45:22,718
open square bracket and closed square
9070
07:45:19,958 --> 07:45:26,840
bracket and inside the square brackets
9071
07:45:22,718 --> 07:45:29,240
we'll type a value like the number 10
9072
07:45:26,840 --> 07:45:32,478
and then we'll type comma and and
9073
07:45:29,240 --> 07:45:35,680
another value like the number 20 and
9074
07:45:32,478 --> 07:45:37,478
then comma again and a third value like
9075
07:45:35,680 --> 07:45:42,280
the number
9076
07:45:37,478 --> 07:45:46,958
30 so this is an array and it represents
9077
07:45:42,280 --> 07:45:51,440
a list of three numbers 10 20 and
9078
07:45:46,958 --> 07:45:53,638
30 now arrays themselves are also values
9079
07:45:51,440 --> 07:45:56,798
which means we can save them in a
9080
07:45:53,638 --> 07:45:59,760
variable so at the front we can create a
9081
07:45:56,798 --> 07:46:04,040
variable using const
9082
07:45:59,760 --> 07:46:07,600
and let's name it my array and we'll
9083
07:46:04,040 --> 07:46:11,240
make it equal to this array and we'll
9084
07:46:07,600 --> 07:46:14,280
add a semicolon at the end so now we
9085
07:46:11,240 --> 07:46:16,478
created a list of values and we saved
9086
07:46:14,280 --> 07:46:19,878
this list in this
9087
07:46:16,478 --> 07:46:22,478
variable let's create a new line and
9088
07:46:19,878 --> 07:46:22,478
we'll
9089
07:46:22,920 --> 07:46:28,958
console.log my
9090
07:46:25,760 --> 07:46:31,240
array and Save
9091
07:46:28,958 --> 07:46:34,360
and it will display the list of values
9092
07:46:31,240 --> 07:46:37,240
in the console so that's basically what
9093
07:46:34,360 --> 07:46:40,360
an array is it's a list of
9094
07:46:37,240 --> 07:46:43,840
values now to get a specific value in an
9095
07:46:40,360 --> 07:46:47,478
array we can use square brackets so
9096
07:46:43,840 --> 07:46:51,040
let's create a new line and we'll type
9097
07:46:47,478 --> 07:46:53,878
my array and square
9098
07:46:51,040 --> 07:46:55,958
brackets inside these brackets we'll put
9099
07:46:53,878 --> 07:46:59,280
a number like
9100
07:46:55,958 --> 07:47:02,920
zero this number represents the position
9101
07:46:59,280 --> 07:47:05,600
in the array so zero means the first
9102
07:47:02,920 --> 07:47:10,360
value if we
9103
07:47:05,600 --> 07:47:12,798
console do log this
9104
07:47:10,360 --> 07:47:16,760
code and
9105
07:47:12,798 --> 07:47:19,680
save my array Square braet 0 gives us
9106
07:47:16,760 --> 07:47:21,478
the first value which is 10 and that's
9107
07:47:19,680 --> 07:47:25,360
what's displayed in the
9108
07:47:21,478 --> 07:47:28,398
console now if we change this to
9109
07:47:25,360 --> 07:47:32,798
one this will get us the second value in
9110
07:47:28,398 --> 07:47:36,478
the array which is 20 if we save it
9111
07:47:32,798 --> 07:47:40,040
displays 20 so this number represents
9112
07:47:36,478 --> 07:47:44,360
the position in the array zero is the
9113
07:47:40,040 --> 07:47:48,398
first value one is the second value two
9114
07:47:44,360 --> 07:47:51,638
is the third value and so on we can also
9115
07:47:48,398 --> 07:47:55,080
change a value in an array also using
9116
07:47:51,638 --> 07:47:59,798
square brackets so let's create a new
9117
07:47:55,080 --> 07:48:02,440
line and we'll type my array
9118
07:47:59,798 --> 07:48:05,840
square brackets and let's say we want to
9119
07:48:02,440 --> 07:48:08,760
change the first value so we'll type
9120
07:48:05,840 --> 07:48:13,080
zero for the first value and we just
9121
07:48:08,760 --> 07:48:17,040
make it equal to something else like
9122
07:48:13,080 --> 07:48:17,040
99 now if we
9123
07:48:17,398 --> 07:48:23,120
console.log my array
9124
07:48:20,878 --> 07:48:26,558
again and
9125
07:48:23,120 --> 07:48:29,280
save you can see that this changed the
9126
07:48:26,558 --> 07:48:32,080
first value to 99
9127
07:48:29,280 --> 07:48:35,040
so that's basically how arrays work we
9128
07:48:32,080 --> 07:48:38,240
can access a value inside an array and
9129
07:48:35,040 --> 07:48:41,040
we can also change a value inside an
9130
07:48:38,240 --> 07:48:44,920
array now that we understand the basics
9131
07:48:41,040 --> 07:48:47,760
of arrays let's learn the syntax rules
9132
07:48:44,920 --> 07:48:50,520
to create an array we start with an open
9133
07:48:47,760 --> 07:48:54,200
square bracket and we end with a closed
9134
07:48:50,520 --> 07:48:57,240
square bracket inside we can put a list
9135
07:48:54,200 --> 07:48:59,398
of values and we separate each value
9136
07:48:57,240 --> 07:49:01,760
with a comma
9137
07:48:59,398 --> 07:49:05,840
we can also write an array on multiple
9138
07:49:01,760 --> 07:49:08,200
lines like this we just put the new
9139
07:49:05,840 --> 07:49:11,840
lines after the
9140
07:49:08,200 --> 07:49:15,080
comma Now to get a value inside an array
9141
07:49:11,840 --> 07:49:19,478
we can use square brackets and a number
9142
07:49:15,080 --> 07:49:21,958
like one this number is called the index
9143
07:49:19,478 --> 07:49:25,000
it represents the position in the array
9144
07:49:21,958 --> 07:49:28,478
that we want to get so the first value
9145
07:49:25,000 --> 07:49:33,520
is index zero the second value is index
9146
07:49:28,478 --> 07:49:36,318
one 1 third value is index 2 and so on
9147
07:49:33,520 --> 07:49:39,240
notice that the index starts at zero
9148
07:49:36,318 --> 07:49:42,958
this is called a zero indexed
9149
07:49:39,240 --> 07:49:46,798
array now inside an array we can put any
9150
07:49:42,958 --> 07:49:50,638
type of value for example let's create a
9151
07:49:46,798 --> 07:49:54,240
new line and we'll create a new array
9152
07:49:50,638 --> 07:49:58,160
using square brackets and inside we can
9153
07:49:54,240 --> 07:50:01,558
put the number one and then comma and we
9154
07:49:58,160 --> 07:50:05,600
can also put a string like
9155
07:50:01,558 --> 07:50:09,840
hello and another comma and we can put a
9156
07:50:05,600 --> 07:50:14,040
Boolean value like true and another
9157
07:50:09,840 --> 07:50:14,920
comma and we can even put an object like
9158
07:50:14,040 --> 07:50:17,718
Curly
9159
07:50:14,920 --> 07:50:20,360
brackets Name
9160
07:50:17,718 --> 07:50:24,760
colon
9161
07:50:20,360 --> 07:50:28,398
socks now an array itself is also a
9162
07:50:24,760 --> 07:50:32,638
value that means we can save arrays in
9163
07:50:28,398 --> 07:50:37,360
very variables like this or even save it
9164
07:50:32,638 --> 07:50:43,240
in an array for example in this array we
9165
07:50:37,360 --> 07:50:46,958
can add an array inside like 1 comma
9166
07:50:43,240 --> 07:50:50,360
2 next arrays have a weird behavior when
9167
07:50:46,958 --> 07:50:55,040
we try to check the type of an array so
9168
07:50:50,360 --> 07:50:55,040
on a new line let's type
9169
07:50:55,638 --> 07:51:02,958
console.log type of and then square
9170
07:50:59,638 --> 07:51:05,760
brackets one comma
9171
07:51:02,958 --> 07:51:09,600
2 and
9172
07:51:05,760 --> 07:51:13,080
save this will tell us that an array is
9173
07:51:09,600 --> 07:51:15,478
an object and that's because an array is
9174
07:51:13,080 --> 07:51:18,440
actually an object but it's just a
9175
07:51:15,478 --> 07:51:20,878
special type of object if we want to
9176
07:51:18,440 --> 07:51:25,798
check if something is specifically an
9177
07:51:20,878 --> 07:51:29,638
array we can use this code capital A
9178
07:51:25,798 --> 07:51:31,240
array dot is
9179
07:51:29,638 --> 07:51:33,840
array
9180
07:51:31,240 --> 07:51:38,040
brackets and inside the brackets we'll
9181
07:51:33,840 --> 07:51:42,360
put an array like square brackets 1
9182
07:51:38,040 --> 07:51:46,398
comma 2 so this will check if this value
9183
07:51:42,360 --> 07:51:49,760
is an array if we
9184
07:51:46,398 --> 07:51:51,958
console. log this
9185
07:51:49,760 --> 07:51:55,240
result and
9186
07:51:51,958 --> 07:51:58,680
save it will display
9187
07:51:55,240 --> 07:52:01,638
true and finally because arrays are are
9188
07:51:58,680 --> 07:52:04,878
just a type of object they also have
9189
07:52:01,638 --> 07:52:08,840
properties and methods we can use so one
9190
07:52:04,878 --> 07:52:11,958
useful property is called length so
9191
07:52:08,840 --> 07:52:11,958
we'll type
9192
07:52:12,440 --> 07:52:18,600
console.log my
9193
07:52:15,680 --> 07:52:21,440
array.
9194
07:52:18,600 --> 07:52:25,840
length this will tell us how many values
9195
07:52:21,440 --> 07:52:28,958
are in the array so my array has three
9196
07:52:25,840 --> 07:52:30,958
values so if we save
9197
07:52:28,958 --> 07:52:34,318
it will display
9198
07:52:30,958 --> 07:52:38,840
three next we'll learn a useful method
9199
07:52:34,318 --> 07:52:41,080
of an array called push this adds a
9200
07:52:38,840 --> 07:52:45,280
value to the end of the
9201
07:52:41,080 --> 07:52:47,080
array if we did my
9202
07:52:45,280 --> 07:52:48,958
array.
9203
07:52:47,080 --> 07:52:53,680
push
9204
07:52:48,958 --> 07:52:58,240
100 this will add 100 to the end of my
9205
07:52:53,680 --> 07:52:58,240
array if we console.log
9206
07:52:58,878 --> 07:53:02,878
my
9207
07:53:00,520 --> 07:53:06,718
array and
9208
07:53:02,878 --> 07:53:07,520
save you can see that 100 was added at
9209
07:53:06,718 --> 07:53:10,000
the
9210
07:53:07,520 --> 07:53:14,280
end the last method we're going to learn
9211
07:53:10,000 --> 07:53:20,080
for now is called do splice this removes
9212
07:53:14,280 --> 07:53:22,600
a value from an array for example my
9213
07:53:20,080 --> 07:53:24,558
array do
9214
07:53:22,600 --> 07:53:28,200
splice and
9215
07:53:24,558 --> 07:53:30,600
brackets and a splice takes two numbers
9216
07:53:28,200 --> 07:53:33,160
the first number is the index that we
9217
07:53:30,600 --> 07:53:37,440
want to remove so let's say we want to
9218
07:53:33,160 --> 07:53:40,798
remove the first value which is index
9219
07:53:37,440 --> 07:53:43,080
zero the second number we give to splice
9220
07:53:40,798 --> 07:53:46,760
is the number of values we want to
9221
07:53:43,080 --> 07:53:50,398
remove if we give it one it will remove
9222
07:53:46,760 --> 07:53:53,600
one value at index zero if we give it
9223
07:53:50,398 --> 07:53:57,080
two it will remove two values starting
9224
07:53:53,600 --> 07:53:59,558
at index zero so for now let's just
9225
07:53:57,080 --> 07:54:04,160
remove one value
9226
07:53:59,558 --> 07:54:04,160
and let's create a new line and
9227
07:54:04,920 --> 07:54:10,280
console.log my
9228
07:54:08,080 --> 07:54:13,840
array and
9229
07:54:10,280 --> 07:54:17,478
save you can see that splice removed the
9230
07:54:13,840 --> 07:54:18,798
first value from the array or index0
9231
07:54:17,478 --> 07:54:22,000
which was
9232
07:54:18,798 --> 07:54:25,120
99 all right now that we understand the
9233
07:54:22,000 --> 07:54:28,520
basics of arrays and the syntax rules
9234
07:54:25,120 --> 07:54:30,600
let's do some practical examples so
9235
07:54:28,520 --> 07:54:34,558
prepared a project we can do for this
9236
07:54:30,600 --> 07:54:36,318
lesson we'll go to our browser create a
9237
07:54:34,558 --> 07:54:41,718
new tab at the
9238
07:54:36,318 --> 07:54:43,360
top and here we'll type
9239
07:54:41,718 --> 07:54:51,160
superimple
9240
07:54:43,360 --> 07:54:54,160
dodev SL projects slash arrays and press
9241
07:54:51,160 --> 07:54:56,000
enter so this page contains the to-do
9242
07:54:54,160 --> 07:54:59,318
list project we're going to create in
9243
07:54:56,000 --> 07:55:02,440
this lesson so down here is the final
9244
07:54:59,318 --> 07:55:06,318
version of the project we can type a
9245
07:55:02,440 --> 07:55:10,558
name for our to-do like make
9246
07:55:06,318 --> 07:55:13,958
dinner give it a due date and then click
9247
07:55:10,558 --> 07:55:18,600
add and it will add it to our list we
9248
07:55:13,958 --> 07:55:22,280
can add another to-do like wash
9249
07:55:18,600 --> 07:55:25,120
dishes and then select a due date and
9250
07:55:22,280 --> 07:55:28,638
click add again and it will add another
9251
07:55:25,120 --> 07:55:31,760
to-do to our list and each to-do also
9252
07:55:28,638 --> 07:55:34,958
has a delete button so we can delete it
9253
07:55:31,760 --> 07:55:37,798
when we're finished the task so this is
9254
07:55:34,958 --> 07:55:40,478
the final version of the project and
9255
07:55:37,798 --> 07:55:42,280
these two up here are simpler versions
9256
07:55:40,478 --> 07:55:45,600
of the project that we're going to use
9257
07:55:42,280 --> 07:55:48,840
to work our way up so let's start with
9258
07:55:45,600 --> 07:55:51,398
the first project up here we're going to
9259
07:55:48,840 --> 07:55:53,920
open our console by
9260
07:55:51,398 --> 07:55:56,840
right-clicking click
9261
07:55:53,920 --> 07:55:59,200
inspect and click the
9262
07:55:56,840 --> 07:56:02,600
console and the way way this first
9263
07:55:59,200 --> 07:56:06,638
project works is we can type a to-do in
9264
07:56:02,600 --> 07:56:10,600
this text box like make
9265
07:56:06,638 --> 07:56:13,600
dinner and when we click add it will add
9266
07:56:10,600 --> 07:56:14,318
the to-do to an array and display it in
9267
07:56:13,600 --> 07:56:18,558
the
9268
07:56:14,318 --> 07:56:23,878
console if we type another to-do like
9269
07:56:18,558 --> 07:56:26,718
wash dishes and click add it will add it
9270
07:56:23,878 --> 07:56:28,718
to the array and display it in the
9271
07:56:26,718 --> 07:56:31,440
console so let's create create this
9272
07:56:28,718 --> 07:56:34,520
project we'll start by creating a file
9273
07:56:31,440 --> 07:56:38,000
for this project we'll go to our code
9274
07:56:34,520 --> 07:56:41,798
editor and click up here to show our
9275
07:56:38,000 --> 07:56:45,080
files and click this icon to create a
9276
07:56:41,798 --> 07:56:46,920
file and we'll name this
9277
07:56:45,080 --> 07:56:48,638
11-
9278
07:56:46,920 --> 07:56:50,200
too-
9279
07:56:48,638 --> 07:56:53,120
list.
9280
07:56:50,200 --> 07:56:56,000
HTML and press
9281
07:56:53,120 --> 07:56:58,718
enter now let's copy the code from
9282
07:56:56,000 --> 07:57:02,200
arrays and loops. HTML
9283
07:56:58,718 --> 07:57:04,680
so we'll click here control a or command
9284
07:57:02,200 --> 07:57:06,200
a and then
9285
07:57:04,680 --> 07:57:12,638
rightclick
9286
07:57:06,200 --> 07:57:15,878
copy and down here right click and
9287
07:57:12,638 --> 07:57:20,878
paste and let's close this for
9288
07:57:15,878 --> 07:57:26,160
now we'll scroll up and change the title
9289
07:57:20,878 --> 07:57:29,718
to to do list and remove all the
9290
07:57:26,160 --> 07:57:29,718
JavaScript code
9291
07:57:31,000 --> 07:57:35,638
and this time instead of writing all the
9292
07:57:33,200 --> 07:57:38,240
JavaScript in here let's actually put
9293
07:57:35,638 --> 07:57:40,958
the JavaScript in a separate file which
9294
07:57:38,240 --> 07:57:42,760
we learned in the previous lesson so
9295
07:57:40,958 --> 07:57:45,638
we'll open our files
9296
07:57:42,760 --> 07:57:49,680
again and this time we'll go to our
9297
07:57:45,638 --> 07:57:52,318
scripts folder we'll click this JS file
9298
07:57:49,680 --> 07:57:57,120
and we'll click this icon to add a new
9299
07:57:52,318 --> 07:58:02,000
file to this folder and let's name it
9300
07:57:57,120 --> 07:58:04,520
11- to-do Das
9301
07:58:02,000 --> 07:58:08,120
list.js and press
9302
07:58:04,520 --> 07:58:12,798
enter next we're going to load this file
9303
07:58:08,120 --> 07:58:15,280
into our HTML file so let's open this
9304
07:58:12,798 --> 07:58:17,840
and in the script element we can remove
9305
07:58:15,280 --> 07:58:20,318
the spaces and we're going to add an
9306
07:58:17,840 --> 07:58:23,680
attribute called
9307
07:58:20,318 --> 07:58:26,638
SRC equals and we're going to load the
9308
07:58:23,680 --> 07:58:29,600
Javascript file that we just created
9309
07:58:26,638 --> 07:58:31,638
which is inside the script folder so
9310
07:58:29,600 --> 07:58:35,200
we'll type
9311
07:58:31,638 --> 07:58:39,040
scripts and then a slash to go into this
9312
07:58:35,200 --> 07:58:40,760
folder and we'll load the file
9313
07:58:39,040 --> 07:58:43,718
11-
9314
07:58:40,760 --> 07:58:46,160
too-
9315
07:58:43,718 --> 07:58:49,600
list.js and
9316
07:58:46,160 --> 07:58:53,680
save so now I'm going to drag this file
9317
07:58:49,600 --> 07:58:56,478
down here so I can see both the HTML and
9318
07:58:53,680 --> 07:58:59,798
JavaScript at the same time close this
9319
07:58:56,478 --> 07:59:01,160
for now and I can close the other code
9320
07:58:59,798 --> 07:59:04,160
for now as
9321
07:59:01,160 --> 07:59:06,558
well and finally let's open this in our
9322
07:59:04,160 --> 07:59:10,280
browser so we'll right
9323
07:59:06,558 --> 07:59:13,160
click open with live
9324
07:59:10,280 --> 07:59:17,318
server and let's also open the console
9325
07:59:13,160 --> 07:59:20,360
on this page right click click
9326
07:59:17,318 --> 07:59:22,600
inspect and click the
9327
07:59:20,360 --> 07:59:25,638
console now one more thing I'm going to
9328
07:59:22,600 --> 07:59:28,200
do for this video is I'll rearrange my
9329
07:59:25,638 --> 07:59:30,160
windows so that we can have the the
9330
07:59:28,200 --> 07:59:34,040
final design at the
9331
07:59:30,160 --> 07:59:37,360
bottom let's start by creating the HTML
9332
07:59:34,040 --> 07:59:40,600
elements let's go to the body and we'll
9333
07:59:37,360 --> 07:59:43,520
actually create a paragraph element to
9334
07:59:40,600 --> 07:59:47,000
start inside the paragraph we'll put the
9335
07:59:43,520 --> 07:59:51,558
text to-do
9336
07:59:47,000 --> 07:59:55,520
list next let's create the text box so
9337
07:59:51,558 --> 07:59:59,520
to create a text box less than
9338
07:59:55,520 --> 08:00:05,600
input greater than and add a placeholder
9339
07:59:59,520 --> 08:00:10,520
to this text box Place holder equals to
9340
08:00:05,600 --> 08:00:14,840
do name finally let's add this
9341
08:00:10,520 --> 08:00:18,680
button so on a new line let's type less
9342
08:00:14,840 --> 08:00:21,318
than button greater than and inside the
9343
08:00:18,680 --> 08:00:23,600
button we'll have the text
9344
08:00:21,318 --> 08:00:26,840
add now let's
9345
08:00:23,600 --> 08:00:29,478
save and this creates all the HTML
9346
08:00:26,840 --> 08:00:33,120
elements that we need
9347
08:00:29,478 --> 08:00:35,798
next let's write our JavaScript so first
9348
08:00:33,120 --> 08:00:39,240
we're going to create an array to store
9349
08:00:35,798 --> 08:00:41,798
our to-dos and then when we click the
9350
08:00:39,240 --> 08:00:45,000
add button we're going to get the text
9351
08:00:41,798 --> 08:00:49,000
from the text box and add it to our
9352
08:00:45,000 --> 08:00:52,080
array and finally we'll console.log the
9353
08:00:49,000 --> 08:00:55,958
array now let's convert these steps into
9354
08:00:52,080 --> 08:00:58,440
code let's create a new array first
9355
08:00:55,958 --> 08:01:00,360
using const
9356
08:00:58,440 --> 08:01:04,440
let's name it
9357
08:01:00,360 --> 08:01:05,440
to-do list and we'll make it equal to
9358
08:01:04,440 --> 08:01:08,398
square
9359
08:01:05,440 --> 08:01:12,398
brackets so this is an array with no
9360
08:01:08,398 --> 08:01:15,680
values inside we also call this an empty
9361
08:01:12,398 --> 08:01:19,080
array next when we click the button
9362
08:01:15,680 --> 08:01:22,638
let's get the value from the text box so
9363
08:01:19,080 --> 08:01:24,760
let's go to our button and add an
9364
08:01:22,638 --> 08:01:28,240
onclick
9365
08:01:24,760 --> 08:01:32,360
attribute and then inside here let's
9366
08:01:28,240 --> 08:01:35,000
create a function for this so down here
9367
08:01:32,360 --> 08:01:40,520
let's create a
9368
08:01:35,000 --> 08:01:42,040
function we'll name it add Todo brackets
9369
08:01:40,520 --> 08:01:44,878
and curly
9370
08:01:42,040 --> 08:01:47,958
brackets and then inside the onclick
9371
08:01:44,878 --> 08:01:52,398
attribute we're just going to call this
9372
08:01:47,958 --> 08:01:55,398
function add too and
9373
08:01:52,398 --> 08:01:58,798
brackets the next step is to get the
9374
08:01:55,398 --> 08:02:02,600
text in the text box we can do that
9375
08:01:58,798 --> 08:02:04,878
using document. query selector so to use
9376
08:02:02,600 --> 08:02:08,398
Query selector we're going to put a
9377
08:02:04,878 --> 08:02:10,440
class on this input element so we'll
9378
08:02:08,398 --> 08:02:12,878
type the class
9379
08:02:10,440 --> 08:02:16,798
attribute
9380
08:02:12,878 --> 08:02:24,478
js- name Das
9381
08:02:16,798 --> 08:02:28,520
input and then in here document do query
9382
08:02:24,478 --> 08:02:32,318
selector brackets and a string and we'll
9383
08:02:28,520 --> 08:02:34,718
type a DOT to get a class and we'll get
9384
08:02:32,318 --> 08:02:36,600
this class
9385
08:02:34,718 --> 08:02:38,440
js-
9386
08:02:36,600 --> 08:02:42,120
name-
9387
08:02:38,440 --> 08:02:45,280
input as a reminder this gets an element
9388
08:02:42,120 --> 08:02:49,040
with the class JS name input which is
9389
08:02:45,280 --> 08:02:52,200
this element and puts it into our
9390
08:02:49,040 --> 08:02:56,440
JavaScript and now let's save this in a
9391
08:02:52,200 --> 08:03:01,878
variable so at the start let's type
9392
08:02:56,440 --> 08:03:03,280
const in input element and make it equal
9393
08:03:01,878 --> 08:03:06,478
to this
9394
08:03:03,280 --> 08:03:08,000
result so now we took this input and put
9395
08:03:06,478 --> 08:03:10,760
it into our
9396
08:03:08,000 --> 08:03:13,440
JavaScript to get the text out we're
9397
08:03:10,760 --> 08:03:18,478
going to use a property of the input
9398
08:03:13,440 --> 08:03:20,440
element called value so down here
9399
08:03:18,478 --> 08:03:21,958
input
9400
08:03:20,440 --> 08:03:24,920
element.
9401
08:03:21,958 --> 08:03:27,478
value and let's save the value in the
9402
08:03:24,920 --> 08:03:28,958
text box in a variable so we can use it
9403
08:03:27,478 --> 08:03:33,478
later
9404
08:03:28,958 --> 08:03:37,440
at the front const name and we'll make
9405
08:03:33,478 --> 08:03:41,638
it equal to whatever's in the text
9406
08:03:37,440 --> 08:03:45,318
box before we continue let's
9407
08:03:41,638 --> 08:03:48,840
console.log the name to check if this is
9408
08:03:45,318 --> 08:03:53,160
working so let's save this Javascript
9409
08:03:48,840 --> 08:03:56,600
file and let's also save this HTML
9410
08:03:53,160 --> 08:03:58,638
file we'll go to our browser and I'll
9411
08:03:56,600 --> 08:04:01,318
resize it so we can you can see the
9412
08:03:58,638 --> 08:04:06,760
console and now if we type something in
9413
08:04:01,318 --> 08:04:09,440
the text box like make dinner and click
9414
08:04:06,760 --> 08:04:12,478
add it will get the text from the text
9415
08:04:09,440 --> 08:04:16,120
box and then display it in the
9416
08:04:12,478 --> 08:04:19,760
console okay so it's looking good so far
9417
08:04:16,120 --> 08:04:22,398
the next step is to add this name to our
9418
08:04:19,760 --> 08:04:26,638
to-do list so we learned how to do this
9419
08:04:22,398 --> 08:04:29,760
earlier we can use a method called push
9420
08:04:26,638 --> 08:04:33,840
push will add a value to the end of the
9421
08:04:29,760 --> 08:04:35,600
array so let's remove this for now and
9422
08:04:33,840 --> 08:04:38,840
at the
9423
08:04:35,600 --> 08:04:42,478
bottom we're going to type our
9424
08:04:38,840 --> 08:04:45,398
array to do
9425
08:04:42,478 --> 08:04:48,398
list. push
9426
08:04:45,398 --> 08:04:50,920
brackets and then between the brackets
9427
08:04:48,398 --> 08:04:53,878
we're going to add our name
9428
08:04:50,920 --> 08:04:58,558
here and now the last step is to
9429
08:04:53,878 --> 08:04:58,558
console.log the entire array
9430
08:05:00,478 --> 08:05:06,478
console.log Todo
9431
08:05:03,878 --> 08:05:11,000
list and
9432
08:05:06,478 --> 08:05:15,080
save now let's give it a try or'll type
9433
08:05:11,000 --> 08:05:18,840
make dinner in the text box and click
9434
08:05:15,080 --> 08:05:22,638
add it will take this text add it to the
9435
08:05:18,840 --> 08:05:25,798
array and then console.log the array and
9436
08:05:22,638 --> 08:05:30,080
now we have our to-do list let's add
9437
08:05:25,798 --> 08:05:32,600
another to-do we'll type type wash
9438
08:05:30,080 --> 08:05:35,398
dishes and click
9439
08:05:32,600 --> 08:05:39,000
add again it will get the text in the
9440
08:05:35,398 --> 08:05:42,360
text box and then add it to the array so
9441
08:05:39,000 --> 08:05:43,958
now our array has two values and then we
9442
08:05:42,360 --> 08:05:47,160
display them in the
9443
08:05:43,958 --> 08:05:50,760
console so that's how we create this
9444
08:05:47,160 --> 08:05:52,200
first version of the to-do list project
9445
08:05:50,760 --> 08:05:55,040
now one more feature we're going to
9446
08:05:52,200 --> 08:05:58,600
create is if we add something to our
9447
08:05:55,040 --> 08:06:02,318
to-do list and click add
9448
08:05:58,600 --> 08:06:03,760
it will reset the text box to do that
9449
08:06:02,318 --> 08:06:07,040
let's go into our
9450
08:06:03,760 --> 08:06:09,478
code and we'll create some new lines and
9451
08:06:07,040 --> 08:06:12,840
remember that the value property
9452
08:06:09,478 --> 08:06:15,398
represents the text in the text box so
9453
08:06:12,840 --> 08:06:18,798
to change the text in the text box we
9454
08:06:15,398 --> 08:06:20,718
can simply change the value property so
9455
08:06:18,798 --> 08:06:22,478
we'll type
9456
08:06:20,718 --> 08:06:26,040
input
9457
08:06:22,478 --> 08:06:27,958
element. value and change it to the
9458
08:06:26,040 --> 08:06:29,958
empty string
9459
08:06:27,958 --> 08:06:33,878
so this will make the text in the text
9460
08:06:29,958 --> 08:06:37,638
box become empty if we
9461
08:06:33,878 --> 08:06:39,798
save and now type something in the text
9462
08:06:37,638 --> 08:06:43,240
box and click
9463
08:06:39,798 --> 08:06:46,160
add it will reset the text in the text
9464
08:06:43,240 --> 08:06:49,920
box let's move on to the second version
9465
08:06:46,160 --> 08:06:53,200
of the to-do list so here when we type
9466
08:06:49,920 --> 08:06:56,958
something in the text box like make
9467
08:06:53,200 --> 08:06:59,920
dinner and click add it will actually
9468
08:06:56,958 --> 08:07:04,360
display it on the page if we type
9469
08:06:59,920 --> 08:07:07,958
something else like wash dishes and
9470
08:07:04,360 --> 08:07:11,360
click add it will also add it to the
9471
08:07:07,958 --> 08:07:14,798
page so how do we take our array and
9472
08:07:11,360 --> 08:07:16,478
display each value on the page to do
9473
08:07:14,798 --> 08:07:20,398
this we're going to learn another
9474
08:07:16,478 --> 08:07:23,600
feature of JavaScript called loops loops
9475
08:07:20,398 --> 08:07:28,160
let us run some code over and over like
9476
08:07:23,600 --> 08:07:31,160
a loop so let's go back to our 11 arrays
9477
08:07:28,160 --> 08:07:33,920
and Loops file and we can close this
9478
08:07:31,160 --> 08:07:37,360
JavaScript file for now and we're going
9479
08:07:33,920 --> 08:07:41,120
to learn Loops so first let's comment
9480
08:07:37,360 --> 08:07:45,760
out the previous code by typing
9481
08:07:41,120 --> 08:07:47,878
slashstar and at the bottom star
9482
08:07:45,760 --> 08:07:51,638
slash let's scroll
9483
08:07:47,878 --> 08:07:54,878
down and we'll create our first Loop
9484
08:07:51,638 --> 08:07:57,840
we'll start by creating a variable using
9485
08:07:54,878 --> 08:08:02,520
the word let and we'll name name this
9486
08:07:57,840 --> 08:08:06,680
variable I and we'll make it equal to
9487
08:08:02,520 --> 08:08:10,718
1 next we're going to type the word
9488
08:08:06,680 --> 08:08:13,040
while and then brackets and curly
9489
08:08:10,718 --> 08:08:15,120
brackets and then inside these curly
9490
08:08:13,040 --> 08:08:18,120
brackets we're going to put some code
9491
08:08:15,120 --> 08:08:22,520
that the computer will run over and over
9492
08:08:18,120 --> 08:08:24,160
just like a loop let's put the code
9493
08:08:22,520 --> 08:08:26,000
console.
9494
08:08:24,160 --> 08:08:29,558
log
9495
08:08:26,000 --> 08:08:33,280
I so this will display the variable I in
9496
08:08:29,558 --> 08:08:35,360
the console over and over again now
9497
08:08:33,280 --> 08:08:38,280
obviously we don't want to Loop this
9498
08:08:35,360 --> 08:08:41,040
forever so how do we get this Loop to
9499
08:08:38,280 --> 08:08:44,080
stop we can do that using the round
9500
08:08:41,040 --> 08:08:46,160
brackets up here inside these round
9501
08:08:44,080 --> 08:08:49,520
brackets we're going to put some code
9502
08:08:46,160 --> 08:08:54,000
that results in true or false for
9503
08:08:49,520 --> 08:08:58,478
example we can check if I is less than
9504
08:08:54,000 --> 08:09:01,920
or equal to 5 so the way this works is
9505
08:08:58,478 --> 08:09:05,718
that if this code results in true the
9506
08:09:01,920 --> 08:09:08,840
loop will keep going over and over once
9507
08:09:05,718 --> 08:09:11,920
this results in false the loop will stop
9508
08:09:08,840 --> 08:09:14,120
and it will go to the next line now you
9509
08:09:11,920 --> 08:09:17,840
may notice that this code will never
9510
08:09:14,120 --> 08:09:21,920
result in false because I is equal to 1
9511
08:09:17,840 --> 08:09:24,200
and 1 is always less than or equal to 5
9512
08:09:21,920 --> 08:09:28,160
so when does this actually become false
9513
08:09:24,200 --> 08:09:30,840
and Stop the Loop the answer is inside
9514
08:09:28,160 --> 08:09:34,878
this loop we're also going to update
9515
08:09:30,840 --> 08:09:39,680
this variable I so we'll type I and
9516
08:09:34,878 --> 08:09:43,080
we'll make it equal to itself plus
9517
08:09:39,680 --> 08:09:47,200
1 so now every time we Loop over this
9518
08:09:43,080 --> 08:09:50,440
code we're going to increase I by 1 and
9519
08:09:47,200 --> 08:09:53,398
eventually I will be greater than 5 this
9520
08:09:50,440 --> 08:09:55,638
will return false and it will stop the
9521
08:09:53,398 --> 08:09:58,240
loop if we
9522
08:09:55,638 --> 08:10:01,160
save and then go back back to the tab
9523
08:09:58,240 --> 08:10:04,398
for this file and I'll rearrange my
9524
08:10:01,160 --> 08:10:08,240
windows so we can see the console this
9525
08:10:04,398 --> 08:10:11,398
Loop makes the computer count from 1 to
9526
08:10:08,240 --> 08:10:14,160
5 so let's go over this code step by
9527
08:10:11,398 --> 08:10:18,120
step to make sure we understand how it
9528
08:10:14,160 --> 08:10:22,360
works first we create a variable I and
9529
08:10:18,120 --> 08:10:26,680
we make it equal to one and then we do a
9530
08:10:22,360 --> 08:10:29,638
loop so if this condition is true the
9531
08:10:26,680 --> 08:10:33,080
computer will keep running this code
9532
08:10:29,638 --> 08:10:36,600
over and over again so the first time it
9533
08:10:33,080 --> 08:10:39,600
Loops I equals 1 and then it displays
9534
08:10:36,600 --> 08:10:43,600
one in the console and then we increase
9535
08:10:39,600 --> 08:10:47,200
I to two now we go back to the top and
9536
08:10:43,600 --> 08:10:50,040
we check this code 2 is less than or
9537
08:10:47,200 --> 08:10:53,680
equal to 5 this is true so we're going
9538
08:10:50,040 --> 08:10:56,958
to run this code again this time I equal
9539
08:10:53,680 --> 08:11:01,360
2 and we display it in the console and
9540
08:10:56,958 --> 08:11:04,318
then we we increase I to three and now 3
9541
08:11:01,360 --> 08:11:07,478
is still less than or equal to 5 so this
9542
08:11:04,318 --> 08:11:10,360
is true which means we keep running this
9543
08:11:07,478 --> 08:11:15,200
code and eventually this is going to
9544
08:11:10,360 --> 08:11:17,558
increase I to six once I is six this
9545
08:11:15,200 --> 08:11:20,318
will become false which will cause the
9546
08:11:17,558 --> 08:11:24,440
loop to stop and then we go to the next
9547
08:11:20,318 --> 08:11:27,638
line so that's why it counts from 1 to 5
9548
08:11:24,440 --> 08:11:32,680
and then it stops at five
9549
08:11:27,638 --> 08:11:35,200
so this is called a while loop while
9550
08:11:32,680 --> 08:11:38,000
this condition is true it will keep
9551
08:11:35,200 --> 08:11:40,920
running this code over and over again
9552
08:11:38,000 --> 08:11:44,280
just like a loop as soon as this
9553
08:11:40,920 --> 08:11:47,200
condition is false it will stop the
9554
08:11:44,280 --> 08:11:50,040
loop all right now that we understand
9555
08:11:47,200 --> 08:11:53,638
how a while loop Works let's learn the
9556
08:11:50,040 --> 08:11:56,398
syntax rules to create a while loop we
9557
08:11:53,638 --> 08:11:59,798
type the word while and then round
9558
08:11:56,398 --> 08:12:02,200
brackets and curly brackets the code
9559
08:11:59,798 --> 08:12:05,638
inside the round brackets is called the
9560
08:12:02,200 --> 08:12:09,318
loop condition the code inside the curly
9561
08:12:05,638 --> 08:12:13,200
brackets is called the loop body the
9562
08:12:09,318 --> 08:12:15,760
variable I at the top is called the loop
9563
08:12:13,200 --> 08:12:18,920
variable every time we loop we're going
9564
08:12:15,760 --> 08:12:21,958
to increase the loop variable this is
9565
08:12:18,920 --> 08:12:24,280
known as the increment step the
9566
08:12:21,958 --> 08:12:26,680
increment step makes sure that the loop
9567
08:12:24,280 --> 08:12:29,000
ends at some point without this
9568
08:12:26,680 --> 08:12:31,718
increment step the loop would just keep
9569
08:12:29,000 --> 08:12:33,360
going forever this is known as an
9570
08:12:31,718 --> 08:12:38,958
infinite
9571
08:12:33,360 --> 08:12:42,760
Loop now remember that I = I + 1 has a
9572
08:12:38,958 --> 08:12:47,878
shortcut instead of this we can just do
9573
08:12:42,760 --> 08:12:50,680
I plus = 1 and remember we actually have
9574
08:12:47,878 --> 08:12:57,240
an even shorter shortcut for plus equal
9575
08:12:50,680 --> 08:13:00,160
1 instead of this we can also do I ++
9576
08:12:57,240 --> 08:13:04,318
so this will increase the value of I by
9577
08:13:00,160 --> 08:13:07,440
one every time just like before so those
9578
08:13:04,318 --> 08:13:10,840
are the three major parts of a loop the
9579
08:13:07,440 --> 08:13:12,200
loop variable the loop condition and the
9580
08:13:10,840 --> 08:13:16,120
increment
9581
08:13:12,200 --> 08:13:17,638
step now each time we run this Loop this
9582
08:13:16,120 --> 08:13:21,040
is called an
9583
08:13:17,638 --> 08:13:25,000
iteration so in this Loop we did five
9584
08:13:21,040 --> 08:13:28,840
iterations we ran this code five times
9585
08:13:25,000 --> 08:13:31,160
and lastly Loops create a scope any
9586
08:13:28,840 --> 08:13:34,558
variable that we create between these
9587
08:13:31,160 --> 08:13:38,000
curly brackets will only exist inside
9588
08:13:34,558 --> 08:13:42,040
the curly brackets so that's a while
9589
08:13:38,000 --> 08:13:44,600
loop while this condition is true it
9590
08:13:42,040 --> 08:13:48,040
will keep running this code over and
9591
08:13:44,600 --> 08:13:51,360
over again once this condition becomes
9592
08:13:48,040 --> 08:13:52,680
false it will stop the loop and go to
9593
08:13:51,360 --> 08:13:55,718
the next
9594
08:13:52,680 --> 08:13:57,920
line so in JavaScript there's actually
9595
08:13:55,718 --> 08:14:00,638
two types of loops
9596
08:13:57,920 --> 08:14:03,240
the first type is a while loop which we
9597
08:14:00,638 --> 08:14:07,360
just learned now we're going to learn
9598
08:14:03,240 --> 08:14:09,958
another type of loop called a for Loop
9599
08:14:07,360 --> 08:14:14,318
to create a for Loop we'll create some
9600
08:14:09,958 --> 08:14:18,360
new lines and then down here we'll type
9601
08:14:14,318 --> 08:14:21,240
four and brackets and curly
9602
08:14:18,360 --> 08:14:24,520
brackets inside these brackets we're
9603
08:14:21,240 --> 08:14:27,600
going to type three pieces of code the
9604
08:14:24,520 --> 08:14:30,000
first piece of code is a loop variable
9605
08:14:27,600 --> 08:14:36,318
which is the same thing as this line up
9606
08:14:30,000 --> 08:14:40,000
here so we'll type let I equal one and
9607
08:14:36,318 --> 08:14:43,398
then semicolon space and we'll type a
9608
08:14:40,000 --> 08:14:48,040
second piece of code which is the loop
9609
08:14:43,398 --> 08:14:52,478
condition so here we'll type I less than
9610
08:14:48,040 --> 08:14:54,558
equal to 5 and then semicolon and space
9611
08:14:52,478 --> 08:14:57,840
and the last piece of code is the
9612
08:14:54,558 --> 08:15:01,718
increment step which is this line right
9613
08:14:57,840 --> 08:15:04,680
here so we'll type
9614
08:15:01,718 --> 08:15:06,398
i++ and between these curly brackets
9615
08:15:04,680 --> 08:15:09,638
we'll write the code that we want to
9616
08:15:06,398 --> 08:15:12,798
Loop over and over so let's just type
9617
08:15:09,638 --> 08:15:12,798
the code
9618
08:15:13,120 --> 08:15:19,718
console.log I and
9619
08:15:16,958 --> 08:15:22,680
save so this for Loop does the same
9620
08:15:19,718 --> 08:15:26,520
thing as the while loop above it counts
9621
08:15:22,680 --> 08:15:29,200
from 1 to 5 and if we look at this code
9622
08:15:26,520 --> 08:15:32,558
we can see that a for Loop is just a
9623
08:15:29,200 --> 08:15:35,238
shorter version of this while loop
9624
08:15:32,558 --> 08:15:38,080
instead of writing the loop variable
9625
08:15:35,238 --> 08:15:41,638
condition and increment step separately
9626
08:15:38,080 --> 08:15:44,920
we group all of them together at the top
9627
08:15:41,638 --> 08:15:48,360
so this Loop works the same way first we
9628
08:15:44,920 --> 08:15:51,440
create a loop variable and then as long
9629
08:15:48,360 --> 08:15:55,160
as this Loop condition is true we will
9630
08:15:51,440 --> 08:15:57,680
keep running this code over and over and
9631
08:15:55,160 --> 08:16:00,798
every time we run this code we're also
9632
08:15:57,680 --> 08:16:03,638
going to increase the loop variable by
9633
08:16:00,798 --> 08:16:07,318
one so now that we learned two ways of
9634
08:16:03,638 --> 08:16:10,280
doing a loop which one should we use if
9635
08:16:07,318 --> 08:16:13,238
we're doing a standard Loop for example
9636
08:16:10,280 --> 08:16:15,840
it has a loop variable a condition and
9637
08:16:13,238 --> 08:16:18,760
an increment step every time it's
9638
08:16:15,840 --> 08:16:21,638
recommended to use a for Loop because a
9639
08:16:18,760 --> 08:16:25,040
for Loop is shorter and more organized
9640
08:16:21,638 --> 08:16:28,000
than a while loop however if it's a
9641
08:16:25,040 --> 08:16:31,398
nonstandard loop then it might be better
9642
08:16:28,000 --> 08:16:34,520
to use a while loop so what's an example
9643
08:16:31,398 --> 08:16:37,318
of a non-standard loop so let's say we
9644
08:16:34,520 --> 08:16:39,958
want to Generate random numbers until we
9645
08:16:37,318 --> 08:16:43,958
get a number that's at least
9646
08:16:39,958 --> 08:16:46,120
0.5 to create this Loop we'll create a
9647
08:16:43,958 --> 08:16:48,318
variable that will store the random
9648
08:16:46,120 --> 08:16:49,878
number using
9649
08:16:48,318 --> 08:16:51,440
let
9650
08:16:49,878 --> 08:16:54,878
random
9651
08:16:51,440 --> 08:16:58,840
number and make it equal to zero to
9652
08:16:54,878 --> 08:17:02,920
start and then we'll do a while
9653
08:16:58,840 --> 08:17:05,760
loop brackets and curly brackets now
9654
08:17:02,920 --> 08:17:07,920
inside the loop condition we want to
9655
08:17:05,760 --> 08:17:10,238
keep running this Loop until random
9656
08:17:07,920 --> 08:17:13,718
number is at least
9657
08:17:10,238 --> 08:17:19,040
0.5 so we'll check if
9658
08:17:13,718 --> 08:17:22,958
random number is less than
9659
08:17:19,040 --> 08:17:25,398
0.5 because if it is less than 0.5 we
9660
08:17:22,958 --> 08:17:28,440
want to keep running this Loop until we
9661
08:17:25,398 --> 08:17:31,238
get a random number that's at least
9662
08:17:28,440 --> 08:17:33,120
0.5 and then inside this loop we're
9663
08:17:31,238 --> 08:17:36,440
going to generate a random number
9664
08:17:33,120 --> 08:17:41,520
between 0 and 1 and then save it in the
9665
08:17:36,440 --> 08:17:46,680
variable up here so we'll type random
9666
08:17:41,520 --> 08:17:49,120
number and make it equal to capital M
9667
08:17:46,680 --> 08:17:52,840
math.
9668
08:17:49,120 --> 08:17:56,200
random so if this random number is less
9669
08:17:52,840 --> 08:17:58,840
than 0.5 it will keep generating random
9670
08:17:56,200 --> 08:18:00,280
numbers until we get a number that is at
9671
08:17:58,840 --> 08:18:04,398
least
9672
08:18:00,280 --> 08:18:07,360
0.5 so at the bottom if we
9673
08:18:04,398 --> 08:18:08,510
console. log
9674
08:18:07,360 --> 08:18:09,718
random
9675
08:18:08,510 --> 08:18:11,878
[Music]
9676
08:18:09,718 --> 08:18:14,718
number and
9677
08:18:11,878 --> 08:18:16,360
save it will give us a random number
9678
08:18:14,718 --> 08:18:19,318
that's at least
9679
08:18:16,360 --> 08:18:22,600
0.5 so notice that this is a
9680
08:18:19,318 --> 08:18:25,160
non-standard loop it doesn't really have
9681
08:18:22,600 --> 08:18:27,920
a loop variable that we increase every
9682
08:18:25,160 --> 08:18:31,440
time and it also doesn't have the
9683
08:18:27,920 --> 08:18:34,478
increment step so in this situation when
9684
08:18:31,440 --> 08:18:37,000
we have a non-standard loop it's better
9685
08:18:34,478 --> 08:18:38,318
to use a while loop because they're a
9686
08:18:37,000 --> 08:18:41,238
bit more
9687
08:18:38,318 --> 08:18:43,840
flexible all right now that we learned
9688
08:18:41,238 --> 08:18:46,398
the basics of Loops let's do some
9689
08:18:43,840 --> 08:18:49,280
practical examples we're going to learn
9690
08:18:46,398 --> 08:18:51,760
a technique called looping through an
9691
08:18:49,280 --> 08:18:54,680
array this means we're going to go
9692
08:18:51,760 --> 08:18:57,440
through each value of an array one by
9693
08:18:54,680 --> 08:19:00,680
one and do something with each each
9694
08:18:57,440 --> 08:19:04,040
value so first let's comment out the
9695
08:19:00,680 --> 08:19:09,238
previous code using
9696
08:19:04,040 --> 08:19:12,478
slashstar and star slash at the bottom
9697
08:19:09,238 --> 08:19:18,558
let's create an array of strings so
9698
08:19:12,478 --> 08:19:20,920
we'll create a variable const to do list
9699
08:19:18,558 --> 08:19:24,200
equal to an
9700
08:19:20,920 --> 08:19:27,840
array and inside this array we'll have
9701
08:19:24,200 --> 08:19:32,840
the string make
9702
08:19:27,840 --> 08:19:35,080
dinner another string wash
9703
08:19:32,840 --> 08:19:38,238
dishes and another
9704
08:19:35,080 --> 08:19:41,200
string watch
9705
08:19:38,238 --> 08:19:44,680
YouTube now let's take each value in
9706
08:19:41,200 --> 08:19:47,680
this array and display it in the console
9707
08:19:44,680 --> 08:19:50,478
to do that we're going to run a loop and
9708
08:19:47,680 --> 08:19:54,000
this Loop is going to count from zero to
9709
08:19:50,478 --> 08:19:56,160
the last index in the array so remember
9710
08:19:54,000 --> 08:19:59,360
that the index is the position of a
9711
08:19:56,160 --> 08:20:03,120
value in the array the first value is
9712
08:19:59,360 --> 08:20:07,238
index zero the second value is index one
9713
08:20:03,120 --> 08:20:11,878
third value is index 2 and so on So
9714
08:20:07,238 --> 08:20:12,878
Below this let's type four brackets and
9715
08:20:11,878 --> 08:20:15,680
curly
9716
08:20:12,878 --> 08:20:18,680
brackets inside these brackets we're
9717
08:20:15,680 --> 08:20:20,958
going to create the loop variable so
9718
08:20:18,680 --> 08:20:27,680
here we're going to count the
9719
08:20:20,958 --> 08:20:31,200
indexes let index equals zero semicolon
9720
08:20:27,680 --> 08:20:34,238
space and we'll do the loop condition so
9721
08:20:31,200 --> 08:20:38,040
we'll keep looping as long as the index
9722
08:20:34,238 --> 08:20:40,520
is less than or equal to the last index
9723
08:20:38,040 --> 08:20:43,440
so remember that the index starts from
9724
08:20:40,520 --> 08:20:46,120
zero this means that the last index in
9725
08:20:43,440 --> 08:20:50,798
an array will be the number of values in
9726
08:20:46,120 --> 08:20:52,440
the array minus one or the array. length
9727
08:20:50,798 --> 08:20:57,360
minus
9728
08:20:52,440 --> 08:20:59,878
one to do list do
9729
08:20:57,360 --> 08:21:03,958
length minus
9730
08:20:59,878 --> 08:21:06,840
1 and here we'll add another semicolon
9731
08:21:03,958 --> 08:21:11,638
and we'll add the increment step which
9732
08:21:06,840 --> 08:21:14,878
is index Plus+ so we'll increase it by
9733
08:21:11,638 --> 08:21:17,440
one every time now inside these curly
9734
08:21:14,878 --> 08:21:22,638
brackets we can do something for each
9735
08:21:17,440 --> 08:21:27,080
index of this array for now let's just
9736
08:21:22,638 --> 08:21:28,478
console. log this index
9737
08:21:27,080 --> 08:21:33,040
and
9738
08:21:28,478 --> 08:21:36,238
save so this will count from 0 to two
9739
08:21:33,040 --> 08:21:39,920
which is exactly all the indexes in this
9740
08:21:36,238 --> 08:21:43,120
array and now using this index we can
9741
08:21:39,920 --> 08:21:47,520
also access the value at this
9742
08:21:43,120 --> 08:21:52,000
index so instead of just the index here
9743
08:21:47,520 --> 08:21:56,760
we can do to-do list and then square
9744
08:21:52,000 --> 08:21:58,680
brackets and between the brackets index
9745
08:21:56,760 --> 08:22:02,318
this will take whatever the index
9746
08:21:58,680 --> 08:22:06,040
variable is and access that index in the
9747
08:22:02,318 --> 08:22:09,520
array so if the index variable is zero
9748
08:22:06,040 --> 08:22:13,080
this will access to-do list index0 which
9749
08:22:09,520 --> 08:22:16,120
is the first value when the index is one
9750
08:22:13,080 --> 08:22:19,040
it will access to-do list index one
9751
08:22:16,120 --> 08:22:22,878
which is the second value and so
9752
08:22:19,040 --> 08:22:26,958
on so for now let's save the value in a
9753
08:22:22,878 --> 08:22:31,280
variable using const value
9754
08:22:26,958 --> 08:22:33,718
and make it equal to to-do list bracket
9755
08:22:31,280 --> 08:22:38,558
index and now let's
9756
08:22:33,718 --> 08:22:41,600
console.log the value instead if we
9757
08:22:38,558 --> 08:22:45,318
save this will Loop through each index
9758
08:22:41,600 --> 08:22:47,718
of the array get the value at each index
9759
08:22:45,318 --> 08:22:50,558
and then display each value which is
9760
08:22:47,718 --> 08:22:53,160
what we see in the console so this
9761
08:22:50,558 --> 08:22:56,680
technique is called looping through an
9762
08:22:53,160 --> 08:22:59,360
array we use a loop to go through each
9763
08:22:56,680 --> 08:23:01,798
value of an array and then we can do
9764
08:22:59,360 --> 08:23:04,280
something with each
9765
08:23:01,798 --> 08:23:06,600
value now I'm going to show you a few
9766
08:23:04,280 --> 08:23:09,760
shortcuts we can use when looping
9767
08:23:06,600 --> 08:23:12,798
through an array instead of checking if
9768
08:23:09,760 --> 08:23:16,080
index is less than or equal to to-do
9769
08:23:12,798 --> 08:23:21,200
list. length minus one we can shorten
9770
08:23:16,080 --> 08:23:24,878
this to index less than to-do list.
9771
08:23:21,200 --> 08:23:27,718
length so this check does the same thing
9772
08:23:24,878 --> 08:23:30,638
as before the loop Loop will stop at
9773
08:23:27,718 --> 08:23:32,120
index equal length minus one but it
9774
08:23:30,638 --> 08:23:35,478
saves us some
9775
08:23:32,120 --> 08:23:38,360
typing another shortcut is instead of
9776
08:23:35,478 --> 08:23:41,080
naming the loop variable index we can
9777
08:23:38,360 --> 08:23:44,878
shorten this to
9778
08:23:41,080 --> 08:23:47,920
I and we'll shorten this as well and
9779
08:23:44,878 --> 08:23:52,718
this as well and that's why we often
9780
08:23:47,920 --> 08:23:55,360
name the loop variable I I means
9781
08:23:52,718 --> 08:23:57,600
index next we're going to learn a
9782
08:23:55,360 --> 08:24:00,680
technique that we can combine with
9783
08:23:57,600 --> 08:24:04,360
looping through an array called the
9784
08:24:00,680 --> 08:24:08,160
accumulator pattern so first let's
9785
08:24:04,360 --> 08:24:10,958
comment out the previous code using
9786
08:24:08,160 --> 08:24:14,040
slashstar and star
9787
08:24:10,958 --> 08:24:16,718
slash and at the
9788
08:24:14,040 --> 08:24:19,878
bottom let's say we have an array of
9789
08:24:16,718 --> 08:24:22,958
numbers like this how do we calculate
9790
08:24:19,878 --> 08:24:26,558
the total of all the numbers in the
9791
08:24:22,958 --> 08:24:31,080
array let's set up this problem let's
9792
08:24:26,558 --> 08:24:37,080
say we have an array of numbers const
9793
08:24:31,080 --> 08:24:39,040
nums equals array and then the numbers 1
9794
08:24:37,080 --> 08:24:42,280
1 and
9795
08:24:39,040 --> 08:24:44,840
3 and we want to calculate the total of
9796
08:24:42,280 --> 08:24:47,080
all the numbers in this array to
9797
08:24:44,840 --> 08:24:50,200
calculate the total we'll learn the
9798
08:24:47,080 --> 08:24:52,760
accumulator pattern the first step of
9799
08:24:50,200 --> 08:24:56,120
the accumulator pattern is to create a
9800
08:24:52,760 --> 08:25:01,200
variable to store the result so below
9801
08:24:56,120 --> 08:25:04,638
this let's create a variable const total
9802
08:25:01,200 --> 08:25:07,318
and we'll make it equal to zero and the
9803
08:25:04,638 --> 08:25:12,920
next step is to Loop through this array
9804
08:25:07,318 --> 08:25:16,398
and update the result so down here four
9805
08:25:12,920 --> 08:25:19,040
brackets and curly brackets and inside
9806
08:25:16,398 --> 08:25:25,318
the round brackets we'll create the loop
9807
08:25:19,040 --> 08:25:28,238
variable let I or index equals z
9808
08:25:25,318 --> 08:25:34,360
semicolon space and we'll create the
9809
08:25:28,238 --> 08:25:37,280
loop condition I less than nums do
9810
08:25:34,360 --> 08:25:40,718
length and then semicolon and the
9811
08:25:37,280 --> 08:25:44,440
increment step
9812
08:25:40,718 --> 08:25:48,200
i++ so as we learned earlier this Loop
9813
08:25:44,440 --> 08:25:50,160
will go through each index of this array
9814
08:25:48,200 --> 08:25:53,440
and now between these curly
9815
08:25:50,160 --> 08:25:57,040
brackets first let's use the index to
9816
08:25:53,440 --> 08:26:00,760
get each value so we'll type
9817
08:25:57,040 --> 08:26:04,440
nums and then square brackets and access
9818
08:26:00,760 --> 08:26:06,958
the index I and let's save this in a
9819
08:26:04,440 --> 08:26:11,520
variable using
9820
08:26:06,958 --> 08:26:14,520
const num equals this
9821
08:26:11,520 --> 08:26:18,478
value and finally we're going to add
9822
08:26:14,520 --> 08:26:22,120
each number to the total we can type
9823
08:26:18,478 --> 08:26:26,238
total and make it equal to
9824
08:26:22,120 --> 08:26:28,958
itself plus each number and remember
9825
08:26:26,238 --> 08:26:31,160
remember we have a shortcut for this
9826
08:26:28,958 --> 08:26:34,238
which is plus
9827
08:26:31,160 --> 08:26:36,920
equals and finally since we're changing
9828
08:26:34,238 --> 08:26:39,600
this total variable we have to change
9829
08:26:36,920 --> 08:26:43,120
from const to
9830
08:26:39,600 --> 08:26:45,120
let all right so after this Loop we
9831
08:26:43,120 --> 08:26:49,160
should have added each number in the
9832
08:26:45,120 --> 08:26:50,680
array to the total so at the bottom
9833
08:26:49,160 --> 08:26:54,280
let's
9834
08:26:50,680 --> 08:26:57,520
console. log the
9835
08:26:54,280 --> 08:27:00,398
total and Save
9836
08:26:57,520 --> 08:27:03,040
and it will display five which is the
9837
08:27:00,398 --> 08:27:06,760
exact total of all the numbers in this
9838
08:27:03,040 --> 08:27:09,200
array so that's the accumulator pattern
9839
08:27:06,760 --> 08:27:11,718
we first create a variable to store the
9840
08:27:09,200 --> 08:27:16,000
result and then we Loop through the
9841
08:27:11,718 --> 08:27:18,478
array and update the result so notice
9842
08:27:16,000 --> 08:27:21,760
that as we Loop through the array we're
9843
08:27:18,478 --> 08:27:24,280
adding or accumulating the results into
9844
08:27:21,760 --> 08:27:27,318
this variable and that's why this is
9845
08:27:24,280 --> 08:27:29,638
called the accumulator pattern pattern
9846
08:27:27,318 --> 08:27:31,558
and we call this variable the
9847
08:27:29,638 --> 08:27:34,398
accumulator
9848
08:27:31,558 --> 08:27:37,680
variable all right let's do another
9849
08:27:34,398 --> 08:27:39,718
example using the accumulator pattern
9850
08:27:37,680 --> 08:27:42,398
let's say we're given this array of
9851
08:27:39,718 --> 08:27:45,478
numbers again and we want to create a
9852
08:27:42,398 --> 08:27:50,040
copy of the array where each number is
9853
08:27:45,478 --> 08:27:54,718
doubled so if the array is 1 13 we're
9854
08:27:50,040 --> 08:27:58,200
going to create a new array with 2
9855
08:27:54,718 --> 08:28:00,958
26 so as at the bottom we'll create some
9856
08:27:58,200 --> 08:28:03,638
new lines and use the accumulator
9857
08:28:00,958 --> 08:28:08,000
pattern the first step is to create a
9858
08:28:03,638 --> 08:28:11,080
variable to store the result let's type
9859
08:28:08,000 --> 08:28:12,798
const and let's name this
9860
08:28:11,080 --> 08:28:15,958
nums
9861
08:28:12,798 --> 08:28:18,878
doubled and we'll make it equal to an
9862
08:28:15,958 --> 08:28:21,080
array this time so notice in the
9863
08:28:18,878 --> 08:28:24,558
previous example the accumulator
9864
08:28:21,080 --> 08:28:27,920
variable was a number in this example
9865
08:28:24,558 --> 08:28:30,718
the accumulator variable is an array so
9866
08:28:27,920 --> 08:28:33,398
we can use different types of values to
9867
08:28:30,718 --> 08:28:36,478
accumulate the result it all depends on
9868
08:28:33,398 --> 08:28:38,798
the problem we're trying to solve so now
9869
08:28:36,478 --> 08:28:42,238
the next step is to Loop through this
9870
08:28:38,798 --> 08:28:46,920
array and update the result at the
9871
08:28:42,238 --> 08:28:48,478
bottom we'll create a four Loop brackets
9872
08:28:46,920 --> 08:28:51,398
and curly
9873
08:28:48,478 --> 08:28:56,440
brackets inside the round brackets we'll
9874
08:28:51,398 --> 08:29:00,080
create the loop variable let I equal
9875
08:28:56,440 --> 08:29:05,558
zero and we'll create the loop condition
9876
08:29:00,080 --> 08:29:08,798
I less than nums do length and then the
9877
08:29:05,558 --> 08:29:12,398
increment step
9878
08:29:08,798 --> 08:29:14,920
i++ and now between the curly brackets
9879
08:29:12,398 --> 08:29:21,840
we're going to get the number at each
9880
08:29:14,920 --> 08:29:25,440
index so const num equals nums square
9881
08:29:21,840 --> 08:29:26,718
bracket I and then we're going to update
9882
08:29:25,440 --> 08:29:29,440
the result
9883
08:29:26,718 --> 08:29:31,920
so down here we're going to add this
9884
08:29:29,440 --> 08:29:35,238
number doubled to this
9885
08:29:31,920 --> 08:29:38,840
array so remember to add a value to an
9886
08:29:35,238 --> 08:29:40,558
array we can use the method push so
9887
08:29:38,840 --> 08:29:42,318
we'll type
9888
08:29:40,558 --> 08:29:46,000
nums
9889
08:29:42,318 --> 08:29:48,520
doubled do push
9890
08:29:46,000 --> 08:29:55,200
brackets and we're going to add to this
9891
08:29:48,520 --> 08:29:56,920
array the number num multiplied by 2 and
9892
08:29:55,200 --> 08:29:58,360
now at the bottom
9893
08:29:56,920 --> 08:30:03,638
let's
9894
08:29:58,360 --> 08:30:06,280
console. log the result nums
9895
08:30:03,638 --> 08:30:09,520
doubled and
9896
08:30:06,280 --> 08:30:12,920
save so this second Loop will create an
9897
08:30:09,520 --> 08:30:14,760
array where each number is doubled so
9898
08:30:12,920 --> 08:30:17,840
that's how we solve this
9899
08:30:14,760 --> 08:30:19,958
example all right now that we understand
9900
08:30:17,840 --> 08:30:22,798
how to Loop through an array and the
9901
08:30:19,958 --> 08:30:26,680
accumulator pattern let's go
9902
08:30:22,798 --> 08:30:29,440
back and we'll create the second version
9903
08:30:26,680 --> 08:30:32,000
of our to-do list so when we add
9904
08:30:29,440 --> 08:30:36,398
something to the list it will appear on
9905
08:30:32,000 --> 08:30:39,638
the page let's go to our code editor and
9906
08:30:36,398 --> 08:30:42,440
we'll open 11 Todo list.
9907
08:30:39,638 --> 08:30:46,238
HTML and we're also going to open the
9908
08:30:42,440 --> 08:30:48,360
Javascript file so it's this one and for
9909
08:30:46,238 --> 08:30:51,360
the video I'm going to drag it to the
9910
08:30:48,360 --> 08:30:55,080
bottom of my code editor so that I can
9911
08:30:51,360 --> 08:30:56,920
see the files side by side so I'll close
9912
08:30:55,080 --> 08:31:00,478
this for now
9913
08:30:56,920 --> 08:31:04,680
and I'll rearrange my windows a
9914
08:31:00,478 --> 08:31:07,840
bit let's open the tab for this project
9915
08:31:04,680 --> 08:31:10,440
so we'll review what we have so far we
9916
08:31:07,840 --> 08:31:16,638
can click in this text box and type a
9917
08:31:10,440 --> 08:31:19,600
to-do like make dinner and click add and
9918
08:31:16,638 --> 08:31:22,680
it will add this to-do to this array
9919
08:31:19,600 --> 08:31:27,520
which is this array right here we can
9920
08:31:22,680 --> 08:31:31,160
type another to-do like wash dishes and
9921
08:31:27,520 --> 08:31:33,958
click add and it will add it to the end
9922
08:31:31,160 --> 08:31:37,160
of the array so now that we have this
9923
08:31:33,958 --> 08:31:40,318
array of to-dos we want to display it on
9924
08:31:37,160 --> 08:31:42,200
the page to do that we're going to Loop
9925
08:31:40,318 --> 08:31:46,280
through this array and we're going to
9926
08:31:42,200 --> 08:31:49,440
create some HTML code for each to-do and
9927
08:31:46,280 --> 08:31:53,280
then put that code on the web page using
9928
08:31:49,440 --> 08:31:56,478
the Dom so first let's Loop through this
9929
08:31:53,280 --> 08:32:00,718
array to make this easier let's make a
9930
08:31:56,478 --> 08:32:05,520
copy of this array so right click
9931
08:32:00,718 --> 08:32:07,920
copy and then here we'll remove this and
9932
08:32:05,520 --> 08:32:10,680
rightclick and
9933
08:32:07,920 --> 08:32:15,200
paste so this will give us some default
9934
08:32:10,680 --> 08:32:19,238
values to work with so at the top let's
9935
08:32:15,200 --> 08:32:24,200
Loop through this array using a for Loop
9936
08:32:19,238 --> 08:32:26,600
so we'll type four brackets and curly
9937
08:32:24,200 --> 08:32:29,280
brackets and then in inside the round
9938
08:32:26,600 --> 08:32:35,280
brackets we're going to create the loop
9939
08:32:29,280 --> 08:32:39,478
variable let I or index equal zero
9940
08:32:35,280 --> 08:32:43,798
semicolon and the loop condition I less
9941
08:32:39,478 --> 08:32:47,280
than too list do
9942
08:32:43,798 --> 08:32:49,920
length semicolon and then the increment
9943
08:32:47,280 --> 08:32:53,558
step
9944
08:32:49,920 --> 08:32:57,280
i++ so this will Loop through each index
9945
08:32:53,558 --> 08:33:00,680
of this array and then inside the curly
9946
08:32:57,280 --> 08:33:03,600
brackets let's get the string for each
9947
08:33:00,680 --> 08:33:08,878
index so we'll create a variable to save
9948
08:33:03,600 --> 08:33:15,080
it const to-do and we'll make it equal
9949
08:33:08,878 --> 08:33:18,680
to to-do list square brackets and
9950
08:33:15,080 --> 08:33:22,520
I and now for each to-do we're going to
9951
08:33:18,680 --> 08:33:27,440
create some HTML code so we'll create a
9952
08:33:22,520 --> 08:33:30,958
new line and create a variable const
9953
08:33:27,440 --> 08:33:35,398
HTML and make it equal and we'll create
9954
08:33:30,958 --> 08:33:36,398
some HTML code using this to-do using a
9955
08:33:35,398 --> 08:33:39,440
template
9956
08:33:36,398 --> 08:33:43,120
string and then inside we'll create a
9957
08:33:39,440 --> 08:33:46,680
paragraph element so less than P greater
9958
08:33:43,120 --> 08:33:49,318
than and then less than SL P greater
9959
08:33:46,680 --> 08:33:52,398
than inside this paragraph we're going
9960
08:33:49,318 --> 08:33:56,440
to insert this to-do so we'll type
9961
08:33:52,398 --> 08:33:59,398
dollar and curly brackets and
9962
08:33:56,440 --> 08:34:02,958
Todo all right so now we're looping
9963
08:33:59,398 --> 08:34:06,360
through this array and for each to-do we
9964
08:34:02,958 --> 08:34:09,000
created some HTML code and now we're
9965
08:34:06,360 --> 08:34:12,798
going to combine all of this HTML code
9966
08:34:09,000 --> 08:34:15,360
together and put it on the web page to
9967
08:34:12,798 --> 08:34:18,878
combine this HTML together we're going
9968
08:34:15,360 --> 08:34:22,040
to use the accumulator pattern so at the
9969
08:34:18,878 --> 08:34:28,120
top of the loop we'll create a variable
9970
08:34:22,040 --> 08:34:29,798
to store the result let to do list
9971
08:34:28,120 --> 08:34:32,638
Capital
9972
08:34:29,798 --> 08:34:36,318
HTML and we'll make it equal to the
9973
08:34:32,638 --> 08:34:38,520
empty string at the start and then as we
9974
08:34:36,318 --> 08:34:43,280
Loop through the array we're going to
9975
08:34:38,520 --> 08:34:46,440
add this HTML to the variable up here so
9976
08:34:43,280 --> 08:34:50,798
let's create a new line and we'll do
9977
08:34:46,440 --> 08:34:54,160
to-do list Capital
9978
08:34:50,798 --> 08:34:58,238
HTML plus equals
9979
08:34:54,160 --> 08:35:02,360
HTML to combine all of this HTML code
9980
08:34:58,238 --> 08:35:08,760
together so now after the loop let's
9981
08:35:02,360 --> 08:35:13,238
console do log to do list
9982
08:35:08,760 --> 08:35:16,600
HTML to see what we get if we
9983
08:35:13,238 --> 08:35:18,840
save we took this array of strings
9984
08:35:16,600 --> 08:35:21,360
generated paragraph elements for each
9985
08:35:18,840 --> 08:35:23,958
string and then combine them all
9986
08:35:21,360 --> 08:35:27,798
together so now that we have all this
9987
08:35:23,958 --> 08:35:31,398
HTML we can put it on the page using the
9988
08:35:27,798 --> 08:35:33,360
Dom so first let's create an element
9989
08:35:31,398 --> 08:35:38,638
where we can put this
9990
08:35:33,360 --> 08:35:41,200
HTML so inside the HTML file after the
9991
08:35:38,638 --> 08:35:45,000
button we're going to create a different
9992
08:35:41,200 --> 08:35:49,200
type of element called a div element so
9993
08:35:45,000 --> 08:35:52,558
we'll type less than div greater
9994
08:35:49,200 --> 08:35:55,238
than so the div element represents a
9995
08:35:52,558 --> 08:35:58,478
container its purpose is to contain
9996
08:35:55,238 --> 08:36:00,840
other elements inside like paragraphs
9997
08:35:58,478 --> 08:36:03,920
buttons and even other
9998
08:36:00,840 --> 08:36:06,798
divs so in this situation we can't
9999
08:36:03,920 --> 08:36:10,398
actually use a paragraph element because
10000
08:36:06,798 --> 08:36:13,120
in HTML we cannot have a paragraph
10001
08:36:10,398 --> 08:36:16,440
inside another paragraph so that's why
10002
08:36:13,120 --> 08:36:18,958
we have to use a div element here for
10003
08:36:16,440 --> 08:36:22,040
now let's put some text inside this
10004
08:36:18,958 --> 08:36:26,760
element so we can learn more about it
10005
08:36:22,040 --> 08:36:29,478
we'll type text and Save
10006
08:36:26,760 --> 08:36:32,520
so like the paragraph element the div
10007
08:36:29,478 --> 08:36:35,638
element is a block element that means it
10008
08:36:32,520 --> 08:36:38,040
will take up an entire line by itself
10009
08:36:35,638 --> 08:36:41,600
and that's why it appears below the text
10010
08:36:38,040 --> 08:36:44,318
box and the button now one difference
10011
08:36:41,600 --> 08:36:47,558
between a div and a paragraph is that a
10012
08:36:44,318 --> 08:36:50,878
paragraph adds extra space above and
10013
08:36:47,558 --> 08:36:54,958
below the paragraph while a div does not
10014
08:36:50,878 --> 08:36:57,120
add any extra space above or below so it
10015
08:36:54,958 --> 08:37:00,080
doesn't have any default
10016
08:36:57,120 --> 08:37:04,878
styling all right so now that we learned
10017
08:37:00,080 --> 08:37:07,878
the div let's put this HTML code inside
10018
08:37:04,878 --> 08:37:11,040
this div first we need to get this
10019
08:37:07,878 --> 08:37:14,958
element into our JavaScript and to do
10020
08:37:11,040 --> 08:37:18,600
that we'll add a class to this element
10021
08:37:14,958 --> 08:37:22,600
class equals
10022
08:37:18,600 --> 08:37:25,878
js- too Das
10023
08:37:22,600 --> 08:37:28,638
list and then down here let's scroll
10024
08:37:25,878 --> 08:37:31,798
down and we'll put this div element
10025
08:37:28,638 --> 08:37:37,080
inside our JavaScript we can do that
10026
08:37:31,798 --> 08:37:40,840
using document do query
10027
08:37:37,080 --> 08:37:44,120
selector brackets and a string and we'll
10028
08:37:40,840 --> 08:37:47,000
type a DOT to select a class and we'll
10029
08:37:44,120 --> 08:37:49,160
select the class
10030
08:37:47,000 --> 08:37:51,000
js-
10031
08:37:49,160 --> 08:37:54,318
too-
10032
08:37:51,000 --> 08:37:56,558
list so this will get this div element
10033
08:37:54,318 --> 08:37:59,798
and put it in inside our
10034
08:37:56,558 --> 08:38:05,440
JavaScript and then every HTML element
10035
08:37:59,798 --> 08:38:09,760
has a property called dot inner Capital
10036
08:38:05,440 --> 08:38:12,798
HTML which controls the HTML inside this
10037
08:38:09,760 --> 08:38:15,958
element and now to put the to-do list
10038
08:38:12,798 --> 08:38:17,878
HTML into this div element we're going
10039
08:38:15,958 --> 08:38:21,080
to make the inner
10040
08:38:17,878 --> 08:38:25,840
HTML equal to the
10041
08:38:21,080 --> 08:38:28,280
to-do list HTML
10042
08:38:25,840 --> 08:38:32,638
and now let's save this
10043
08:38:28,280 --> 08:38:36,798
file and also save the HTML
10044
08:38:32,638 --> 08:38:39,600
file so this code will take the HTML
10045
08:38:36,798 --> 08:38:42,200
that we created using the loop and put
10046
08:38:39,600 --> 08:38:45,520
it into the div element and that's how
10047
08:38:42,200 --> 08:38:48,638
we make them show up on the page so now
10048
08:38:45,520 --> 08:38:53,638
let's try adding another to-do we'll
10049
08:38:48,638 --> 08:38:56,238
type watch YouTube and click
10050
08:38:53,638 --> 08:38:59,080
add and unfortunately
10051
08:38:56,238 --> 08:39:01,760
this new Todo doesn't show up on the
10052
08:38:59,080 --> 08:39:05,680
page and that's because when we click
10053
08:39:01,760 --> 08:39:08,120
add it will run this add Todo function
10054
08:39:05,680 --> 08:39:11,280
and update the list but we didn't
10055
08:39:08,120 --> 08:39:15,120
actually update the HTML on the
10056
08:39:11,280 --> 08:39:18,600
page so to update the HTML we need to
10057
08:39:15,120 --> 08:39:22,520
run all this code again every time we
10058
08:39:18,600 --> 08:39:25,920
add a too so let's create a function for
10059
08:39:22,520 --> 08:39:30,040
this code so we can reuse it so at the
10060
08:39:25,920 --> 08:39:33,318
top we'll create a
10061
08:39:30,040 --> 08:39:34,958
function and let's name this
10062
08:39:33,318 --> 08:39:39,840
render
10063
08:39:34,958 --> 08:39:43,200
to-do list brackets and curly
10064
08:39:39,840 --> 08:39:46,280
brackets so the word render means to
10065
08:39:43,200 --> 08:39:49,760
display something on the page so we'll
10066
08:39:46,280 --> 08:39:53,000
put all of this code into this function
10067
08:39:49,760 --> 08:39:56,318
so we can delete this curly bracket and
10068
08:39:53,000 --> 08:39:59,238
then at the end we'll type a closed
10069
08:39:56,318 --> 08:40:02,680
curly bracket and let's reformat this
10070
08:39:59,238 --> 08:40:05,440
code by selecting these lines and then
10071
08:40:02,680 --> 08:40:09,638
press tab to add an
10072
08:40:05,440 --> 08:40:12,558
indent so now let's use this function at
10073
08:40:09,638 --> 08:40:15,958
the start we'll display this to-do list
10074
08:40:12,558 --> 08:40:19,238
on the page so we'll call this function
10075
08:40:15,958 --> 08:40:22,440
by typing render
10076
08:40:19,238 --> 08:40:26,160
to-do list and
10077
08:40:22,440 --> 08:40:29,478
brackets and then let's scroll down
10078
08:40:26,160 --> 08:40:31,440
every time we add a to-do to the list
10079
08:40:29,478 --> 08:40:34,760
we're also going to display the list
10080
08:40:31,440 --> 08:40:41,040
again so at the bottom
10081
08:40:34,760 --> 08:40:42,160
render to do list and brackets again so
10082
08:40:41,040 --> 08:40:44,958
if we
10083
08:40:42,160 --> 08:40:48,000
save at the start it will display the
10084
08:40:44,958 --> 08:40:53,520
list on the page and then if we add it
10085
08:40:48,000 --> 08:40:57,238
to the list like watch YouTube and click
10086
08:40:53,520 --> 08:41:00,040
add it will add it to the list and also
10087
08:40:57,238 --> 08:41:02,398
display it on the page so that's how we
10088
08:41:00,040 --> 08:41:03,440
create the second version of the to-do
10089
08:41:02,398 --> 08:41:06,878
list
10090
08:41:03,440 --> 08:41:09,718
project by the way if we scroll up to
10091
08:41:06,878 --> 08:41:12,478
the render Todo list function this
10092
08:41:09,718 --> 08:41:16,040
technique is called generating the
10093
08:41:12,478 --> 08:41:19,718
HTML instead of writing all the HTML by
10094
08:41:16,040 --> 08:41:22,680
hand up here we looped through an array
10095
08:41:19,718 --> 08:41:25,360
and we generated the HTML using
10096
08:41:22,680 --> 08:41:26,958
JavaScript
10097
08:41:25,360 --> 08:41:29,238
so when creating websites with
10098
08:41:26,958 --> 08:41:33,120
JavaScript we usually follow a
10099
08:41:29,238 --> 08:41:36,398
three-step process first we save the
10100
08:41:33,120 --> 08:41:37,478
data in this case we saved our data as
10101
08:41:36,398 --> 08:41:41,398
an
10102
08:41:37,478 --> 08:41:45,798
array next we use the data to generate
10103
08:41:41,398 --> 08:41:48,478
the HTML which we did here and finally
10104
08:41:45,798 --> 08:41:50,398
we make the website interactive which
10105
08:41:48,478 --> 08:41:53,600
we'll do later in this
10106
08:41:50,398 --> 08:41:55,878
lesson this is the main idea of
10107
08:41:53,600 --> 08:41:58,398
JavaScript and we follow follow this
10108
08:41:55,878 --> 08:42:00,920
overall process when creating
10109
08:41:58,398 --> 08:42:03,000
websites the rock paper scissors project
10110
08:42:00,920 --> 08:42:06,238
from the previous lessons was a bit
10111
08:42:03,000 --> 08:42:08,958
different because all the HTML we needed
10112
08:42:06,238 --> 08:42:10,080
was already there we just had to modify
10113
08:42:08,958 --> 08:42:12,318
it with
10114
08:42:10,080 --> 08:42:15,360
JavaScript so this process we're using
10115
08:42:12,318 --> 08:42:18,000
for the to-do list is one step above
10116
08:42:15,360 --> 08:42:20,280
what we did for rock paper scissors we
10117
08:42:18,000 --> 08:42:23,558
need to generate some
10118
08:42:20,280 --> 08:42:25,840
HTML and this is a standard process for
10119
08:42:23,558 --> 08:42:28,040
creating websites we're going to use
10120
08:42:25,840 --> 08:42:30,798
this process for the to-do list and
10121
08:42:28,040 --> 08:42:34,920
later the Amazon Project as well as
10122
08:42:30,798 --> 08:42:34,920
websites that you build Beyond this
10123
08:42:35,080 --> 08:42:40,360
course let's take a break before
10124
08:42:37,398 --> 08:42:42,200
continuing with the rest of this lesson
10125
08:42:40,360 --> 08:42:46,958
here are some exercises that will help
10126
08:42:42,200 --> 08:42:46,958
you practice what we learned so far
10127
08:43:07,398 --> 08:43:12,478
now let's create the final version of
10128
08:43:09,398 --> 08:43:14,238
the to-do list we'll go back to
10129
08:43:12,478 --> 08:43:18,280
superimple
10130
08:43:14,238 --> 08:43:21,000
dodev and then here we'll scroll down
10131
08:43:18,280 --> 08:43:24,798
and we'll create this final version so
10132
08:43:21,000 --> 08:43:26,200
in this version we can type a too like
10133
08:43:24,798 --> 08:43:29,520
make
10134
08:43:26,200 --> 08:43:33,600
dinner and we can also add a due
10135
08:43:29,520 --> 08:43:37,318
date and when we click add each to-do
10136
08:43:33,600 --> 08:43:39,760
will now have a name and a due date and
10137
08:43:37,318 --> 08:43:43,760
they will also have a delete button that
10138
08:43:39,760 --> 08:43:46,080
we can click to remove it from the list
10139
08:43:43,760 --> 08:43:49,440
so let's build this out one feature at a
10140
08:43:46,080 --> 08:43:52,718
time we'll start by creating this delete
10141
08:43:49,440 --> 08:43:55,558
button we'll go into our code and
10142
08:43:52,718 --> 08:43:58,798
remember we're generating the HTML
10143
08:43:55,558 --> 08:44:02,680
for the to-do list so for each value in
10144
08:43:58,798 --> 08:44:05,238
the array we create a paragraph element
10145
08:44:02,680 --> 08:44:09,080
so to add a delete button we just have
10146
08:44:05,238 --> 08:44:12,638
to add a delete button inside here so
10147
08:44:09,080 --> 08:44:16,760
inside the paragraph we'll create a less
10148
08:44:12,638 --> 08:44:20,958
than button greater than and then less
10149
08:44:16,760 --> 08:44:24,040
than SLB button greater than and then
10150
08:44:20,958 --> 08:44:26,120
inside this button we'll put the text
10151
08:44:24,040 --> 08:44:27,280
delete
10152
08:44:26,120 --> 08:44:30,200
let's
10153
08:44:27,280 --> 08:44:33,398
save and in the console you'll see that
10154
08:44:30,200 --> 08:44:36,280
the HTML we generated now has a delete
10155
08:44:33,398 --> 08:44:38,000
button inside the paragraph and that's
10156
08:44:36,280 --> 08:44:41,160
what shows up on the
10157
08:44:38,000 --> 08:44:44,520
page next we're going to reformat this
10158
08:44:41,160 --> 08:44:47,398
HTML to make it a little easier to read
10159
08:44:44,520 --> 08:44:48,360
so we'll create some new lines here and
10160
08:44:47,398 --> 08:44:51,160
at the
10161
08:44:48,360 --> 08:44:55,398
end and let's put the content of the
10162
08:44:51,160 --> 08:44:57,718
paragraph on its own line like this
10163
08:44:55,398 --> 08:45:00,200
and also put the delete button on its
10164
08:44:57,718 --> 08:45:02,638
own line so remember that template
10165
08:45:00,200 --> 08:45:05,360
strings have a feature called multi-line
10166
08:45:02,638 --> 08:45:08,200
strings so this is perfect for writing
10167
08:45:05,360 --> 08:45:08,200
HTML
10168
08:45:08,318 --> 08:45:12,600
code the last step in the process is to
10169
08:45:11,080 --> 08:45:15,440
make the website
10170
08:45:12,600 --> 08:45:17,520
interactive so next let's make our
10171
08:45:15,440 --> 08:45:20,958
delete button do something when we click
10172
08:45:17,520 --> 08:45:25,520
it to do that we use the onclick
10173
08:45:20,958 --> 08:45:28,440
attribute as usual so inside this button
10174
08:45:25,520 --> 08:45:33,200
we're going to add an
10175
08:45:28,440 --> 08:45:35,478
onclick attribute equals double quotes
10176
08:45:33,200 --> 08:45:37,680
and then inside these double quotes we
10177
08:45:35,478 --> 08:45:41,238
can run some JavaScript when we click
10178
08:45:37,680 --> 08:45:44,160
this button so this works the exact same
10179
08:45:41,238 --> 08:45:47,120
way as what we've been doing so far in
10180
08:45:44,160 --> 08:45:50,238
this course the only difference now is
10181
08:45:47,120 --> 08:45:51,680
that here we're generating this HTML
10182
08:45:50,238 --> 08:45:54,360
using
10183
08:45:51,680 --> 08:45:56,760
JavaScript okay so when we click one of
10184
08:45:54,360 --> 08:46:00,040
these delete buttons we want to remove
10185
08:45:56,760 --> 08:46:02,600
this to-do from the list earlier in this
10186
08:46:00,040 --> 08:46:06,080
lesson we learned how to remove a value
10187
08:46:02,600 --> 08:46:09,600
from an array using a method called
10188
08:46:06,080 --> 08:46:15,558
splice so inside this onclick attribute
10189
08:46:09,600 --> 08:46:18,120
we're going to type the to-do list dot
10190
08:46:15,558 --> 08:46:22,040
splice and
10191
08:46:18,120 --> 08:46:24,318
brackets so splice takes two numbers the
10192
08:46:22,040 --> 08:46:25,840
first number is the index that we want
10193
08:46:24,318 --> 08:46:28,558
to remove
10194
08:46:25,840 --> 08:46:30,600
so if we click this delete button how do
10195
08:46:28,558 --> 08:46:33,160
we know which index to
10196
08:46:30,600 --> 08:46:36,318
remove well if we look at our Loop up
10197
08:46:33,160 --> 08:46:40,280
here we already have the index it's this
10198
08:46:36,318 --> 08:46:43,200
variable I so we're going to insert I
10199
08:46:40,280 --> 08:46:47,360
into this string and we can do that by
10200
08:46:43,200 --> 08:46:51,520
typing dollar curly brackets and
10201
08:46:47,360 --> 08:46:54,120
I now splice also takes another number
10202
08:46:51,520 --> 08:46:56,840
so we'll type comma and the second
10203
08:46:54,120 --> 08:47:00,000
number is how many values we want to
10204
08:46:56,840 --> 08:47:02,398
remove so here we just want to remove
10205
08:47:00,000 --> 08:47:05,680
one value at this
10206
08:47:02,398 --> 08:47:08,238
index and finally because we updated the
10207
08:47:05,680 --> 08:47:12,120
to-do list we need to display the list
10208
08:47:08,238 --> 08:47:15,760
again on the page to display the list we
10209
08:47:12,120 --> 08:47:20,520
can use this function render to do list
10210
08:47:15,760 --> 08:47:25,120
so down here we're going to type render
10211
08:47:20,520 --> 08:47:27,000
Todo list and brackets
10212
08:47:25,120 --> 08:47:30,920
now if we
10213
08:47:27,000 --> 08:47:33,760
save you can see that in the generated
10214
08:47:30,920 --> 08:47:36,878
HTML when we click the first delete
10215
08:47:33,760 --> 08:47:40,520
button it will remove the value at
10216
08:47:36,878 --> 08:47:43,160
index0 which is the first value if we
10217
08:47:40,520 --> 08:47:45,958
click the second button it will remove
10218
08:47:43,160 --> 08:47:48,200
the value at index one which is the
10219
08:47:45,958 --> 08:47:52,600
second value so we're basically
10220
08:47:48,200 --> 08:47:55,680
generating all this HTML using a loop so
10221
08:47:52,600 --> 08:47:57,958
now if we click this delete button
10222
08:47:55,680 --> 08:48:01,200
it will remove it from the list and then
10223
08:47:57,958 --> 08:48:03,440
display the updated list on the page so
10224
08:48:01,200 --> 08:48:07,600
that's how we create the delete
10225
08:48:03,440 --> 08:48:10,160
button next let's go back to superimple
10226
08:48:07,600 --> 08:48:10,920
dodev and we're going to create the due
10227
08:48:10,160 --> 08:48:14,238
date
10228
08:48:10,920 --> 08:48:16,238
feature so first let's create this date
10229
08:48:14,238 --> 08:48:20,760
selector in our
10230
08:48:16,238 --> 08:48:23,398
HTML we'll go to our HTML file and then
10231
08:48:20,760 --> 08:48:25,318
under the text box we're going to add
10232
08:48:23,398 --> 08:48:30,280
another input element
10233
08:48:25,318 --> 08:48:33,080
so less than input greater than and to
10234
08:48:30,280 --> 08:48:35,760
make it a date selector input elements
10235
08:48:33,080 --> 08:48:38,760
have an attribute called
10236
08:48:35,760 --> 08:48:42,638
type so this attribute determines what
10237
08:48:38,760 --> 08:48:44,718
kind of input it is if the type is text
10238
08:48:42,638 --> 08:48:46,238
which is the default value it's going to
10239
08:48:44,718 --> 08:48:50,318
be a
10240
08:48:46,238 --> 08:48:52,360
textbox now if we change the type to
10241
08:48:50,318 --> 08:48:56,958
date and
10242
08:48:52,360 --> 08:48:56,958
save it's going to create a date
10243
08:48:57,160 --> 08:49:02,200
selector now let's go back into our
10244
08:48:59,478 --> 08:49:05,160
JavaScript code and first we're going to
10245
08:49:02,200 --> 08:49:08,160
scroll up and remember that right now
10246
08:49:05,160 --> 08:49:11,600
our to-do list is just an array of
10247
08:49:08,160 --> 08:49:14,360
strings but this time each to-do is also
10248
08:49:11,600 --> 08:49:17,920
going to have a due date so how do we
10249
08:49:14,360 --> 08:49:21,840
group the name and the due date together
10250
08:49:17,920 --> 08:49:24,080
we can do that using an object so here
10251
08:49:21,840 --> 08:49:27,440
instead of just a string we're going to
10252
08:49:24,080 --> 08:49:31,718
create an an object and we'll give it a
10253
08:49:27,440 --> 08:49:35,878
name property which is make dinner and
10254
08:49:31,718 --> 08:49:38,160
we'll give it a due date property and
10255
08:49:35,878 --> 08:49:40,920
we'll make the due date a
10256
08:49:38,160 --> 08:49:46,958
string so you can type whatever date you
10257
08:49:40,920 --> 08:49:46,958
have on the page for me it's 20
10258
08:49:47,200 --> 08:49:52,478
22-12
10259
08:49:49,920 --> 08:49:55,440
d22 and I'll end this object with a
10260
08:49:52,478 --> 08:49:58,920
curly bracket and I'll turn this to do
10261
08:49:55,440 --> 08:50:01,920
into an object as well so open curly
10262
08:49:58,920 --> 08:50:01,920
bracket
10263
08:50:02,160 --> 08:50:07,718
name and do
10264
08:50:06,160 --> 08:50:09,238
date
10265
08:50:07,718 --> 08:50:11,280
2022
10266
08:50:09,238 --> 08:50:14,280
D12
10267
08:50:11,280 --> 08:50:17,558
d22 and closed curly
10268
08:50:14,280 --> 08:50:20,840
bracket now that each to-do is an object
10269
08:50:17,558 --> 08:50:23,238
we need to update the rest of our code
10270
08:50:20,840 --> 08:50:25,200
let's scroll down and we'll start with
10271
08:50:23,238 --> 08:50:28,638
the render function
10272
08:50:25,200 --> 08:50:32,040
so here inside the loop each to-do is no
10273
08:50:28,638 --> 08:50:36,040
longer just a string it's an object so
10274
08:50:32,040 --> 08:50:39,878
let's change this variable name to to-do
10275
08:50:36,040 --> 08:50:43,120
object to make it more clear and now we
10276
08:50:39,878 --> 08:50:48,318
need to get the name and due date out of
10277
08:50:43,120 --> 08:50:56,478
this object so we'll type const name
10278
08:50:48,318 --> 08:51:00,760
equals to do object. name and const do
10279
08:50:56,478 --> 08:51:03,360
date equals to do
10280
08:51:00,760 --> 08:51:06,638
object. do
10281
08:51:03,360 --> 08:51:08,878
date and now instead of inserting to-do
10282
08:51:06,638 --> 08:51:10,760
which no longer exists we're going to
10283
08:51:08,878 --> 08:51:14,558
insert the
10284
08:51:10,760 --> 08:51:16,440
name and we're also going to insert the
10285
08:51:14,558 --> 08:51:18,638
DU
10286
08:51:16,440 --> 08:51:22,280
date if we
10287
08:51:18,638 --> 08:51:23,238
save now each to-do will also display a
10288
08:51:22,280 --> 08:51:25,600
due
10289
08:51:23,238 --> 08:51:27,760
date before before we continue we're
10290
08:51:25,600 --> 08:51:30,120
going to review a shortcut we can use
10291
08:51:27,760 --> 08:51:32,558
with objects called
10292
08:51:30,120 --> 08:51:34,478
destructuring so here you'll notice the
10293
08:51:32,558 --> 08:51:36,878
variable name is the same as the
10294
08:51:34,478 --> 08:51:40,040
property name we actually have a
10295
08:51:36,878 --> 08:51:43,520
shortcut for this using
10296
08:51:40,040 --> 08:51:47,840
const curly brackets
10297
08:51:43,520 --> 08:51:51,520
name equals Todo
10298
08:51:47,840 --> 08:51:53,638
object so this is called destructuring
10299
08:51:51,520 --> 08:51:56,040
this takes the name property out of the
10300
08:51:53,638 --> 08:51:59,040
object and and puts it in a variable
10301
08:51:56,040 --> 08:52:02,040
also called name and this is a shortcut
10302
08:51:59,040 --> 08:52:05,558
for this line up here so we can comment
10303
08:52:02,040 --> 08:52:08,718
out this line we can also use multiple
10304
08:52:05,558 --> 08:52:11,478
properties in this shortcut to also take
10305
08:52:08,718 --> 08:52:15,478
the due date out of the object we can
10306
08:52:11,478 --> 08:52:18,760
just add a comma and do
10307
08:52:15,478 --> 08:52:21,000
date so this will do the same thing as
10308
08:52:18,760 --> 08:52:22,600
this line of code and we can comment
10309
08:52:21,000 --> 08:52:25,440
this
10310
08:52:22,600 --> 08:52:26,878
out if we save
10311
08:52:25,440 --> 08:52:30,760
everything still
10312
08:52:26,878 --> 08:52:34,440
works next let's scroll down and we're
10313
08:52:30,760 --> 08:52:36,920
going to update our add Todo function so
10314
08:52:34,440 --> 08:52:39,440
this time when we click the add button
10315
08:52:36,920 --> 08:52:42,760
we're going to get the name and the due
10316
08:52:39,440 --> 08:52:44,520
date and put it into our list so let's
10317
08:52:42,760 --> 08:52:47,478
get the due date out of this date
10318
08:52:44,520 --> 08:52:51,318
selector first we can do that using the
10319
08:52:47,478 --> 08:52:54,040
Dom like we did here so let's add a
10320
08:52:51,318 --> 08:52:56,638
class attribute so we can get it using
10321
08:52:54,040 --> 08:52:59,638
queries selector
10322
08:52:56,638 --> 08:53:01,280
js- do
10323
08:52:59,638 --> 08:53:05,318
dd-
10324
08:53:01,280 --> 08:53:06,878
input and then down here let's create a
10325
08:53:05,318 --> 08:53:12,318
variable
10326
08:53:06,878 --> 08:53:15,200
const date input element and make it
10327
08:53:12,318 --> 08:53:18,558
equal to
10328
08:53:15,200 --> 08:53:22,840
document. query
10329
08:53:18,558 --> 08:53:24,798
selector and a string Dot and then the
10330
08:53:22,840 --> 08:53:26,920
class we want to select which which is
10331
08:53:24,798 --> 08:53:28,680
this class
10332
08:53:26,920 --> 08:53:30,280
js-
10333
08:53:28,680 --> 08:53:33,080
do-
10334
08:53:30,280 --> 08:53:35,878
date-
10335
08:53:33,080 --> 08:53:38,638
input so this will get the date selector
10336
08:53:35,878 --> 08:53:41,718
element and put it into our
10337
08:53:38,638 --> 08:53:43,478
JavaScript and now below this let's get
10338
08:53:41,718 --> 08:53:46,360
the due date out of the
10339
08:53:43,478 --> 08:53:49,000
element we can do that using the value
10340
08:53:46,360 --> 08:53:54,680
property again so let's create a
10341
08:53:49,000 --> 08:54:00,558
variable first const do date and we'll
10342
08:53:54,680 --> 08:54:02,440
make it equal to the date input
10343
08:54:00,558 --> 08:54:04,958
element.
10344
08:54:02,440 --> 08:54:08,000
value so this will get the date that we
10345
08:54:04,958 --> 08:54:11,000
selected and save it in this
10346
08:54:08,000 --> 08:54:14,160
variable and now when we add a to-do to
10347
08:54:11,000 --> 08:54:17,718
our list instead of just a name we're
10348
08:54:14,160 --> 08:54:21,238
going to add an object so open curly
10349
08:54:17,718 --> 08:54:23,718
bracket We'll add a name property and
10350
08:54:21,238 --> 08:54:29,318
the value will be the name variable up
10351
08:54:23,718 --> 08:54:30,360
here so name and then comma and a doe
10352
08:54:29,318 --> 08:54:33,080
date
10353
08:54:30,360 --> 08:54:38,080
property and the value will be this due
10354
08:54:33,080 --> 08:54:40,840
date variable up here so due date and
10355
08:54:38,080 --> 08:54:43,760
then a closed curly
10356
08:54:40,840 --> 08:54:47,000
bracket and remember that objects also
10357
08:54:43,760 --> 08:54:49,440
have a shortcut for this if the property
10358
08:54:47,000 --> 08:54:52,478
and the variable name are the same we
10359
08:54:49,440 --> 08:54:55,680
can just type it out once like
10360
08:54:52,478 --> 08:54:58,558
this this will do the same thing as this
10361
08:54:55,680 --> 08:55:00,920
line above same thing with the second
10362
08:54:58,558 --> 08:55:03,558
line if the property and the variable
10363
08:55:00,920 --> 08:55:07,440
name are the same we can just type a
10364
08:55:03,558 --> 08:55:10,280
comma and type it out
10365
08:55:07,440 --> 08:55:13,120
once this is called the shorthand
10366
08:55:10,280 --> 08:55:16,238
property syntax so these two lines do
10367
08:55:13,120 --> 08:55:18,638
the same thing as these lines above so
10368
08:55:16,238 --> 08:55:21,160
we can comment this out using double
10369
08:55:18,638 --> 08:55:23,680
slash and double
10370
08:55:21,160 --> 08:55:26,878
slash so that's all the code that we
10371
08:55:23,680 --> 08:55:28,160
needed to update now let's save our
10372
08:55:26,878 --> 08:55:32,478
Javascript
10373
08:55:28,160 --> 08:55:35,958
file and we'll also save our HTML
10374
08:55:32,478 --> 08:55:40,600
file and let's go to our project We'll
10375
08:55:35,958 --> 08:55:43,680
add a new to-do like watch
10376
08:55:40,600 --> 08:55:46,080
YouTube and select a
10377
08:55:43,680 --> 08:55:49,600
date and click
10378
08:55:46,080 --> 08:55:53,280
add and scroll down you can see that it
10379
08:55:49,600 --> 08:55:55,238
added our new to-do with a name due date
10380
08:55:53,280 --> 08:55:58,120
and a delete button
10381
08:55:55,238 --> 08:56:01,680
if we click this delete button it will
10382
08:55:58,120 --> 08:56:04,040
remove that to-do if we click this one
10383
08:56:01,680 --> 08:56:06,440
it will also remove the correct
10384
08:56:04,040 --> 08:56:08,638
to-do and that's actually all the
10385
08:56:06,440 --> 08:56:11,478
functionality that we need for this
10386
08:56:08,638 --> 08:56:14,000
project so let's go into our code and
10387
08:56:11,478 --> 08:56:15,840
we're going to clean up by removing the
10388
08:56:14,000 --> 08:56:21,160
console.log
10389
08:56:15,840 --> 08:56:24,878
here and the console.log up
10390
08:56:21,160 --> 08:56:28,440
here and Save
10391
08:56:24,878 --> 08:56:31,600
finally let's add CSS to our project to
10392
08:56:28,440 --> 08:56:34,798
make it look like the final design we'll
10393
08:56:31,600 --> 08:56:37,878
go into our code editor and scroll to
10394
08:56:34,798 --> 08:56:41,160
the top and instead of writing all the
10395
08:56:37,878 --> 08:56:44,558
CSS in here let's put the CSS in a
10396
08:56:41,160 --> 08:56:47,280
separate file just like our JavaScript
10397
08:56:44,558 --> 08:56:51,040
so we'll click here to show our
10398
08:56:47,280 --> 08:56:53,760
files and then find the Styles folder
10399
08:56:51,040 --> 08:56:57,520
and we'll click the Styles folder and
10400
08:56:53,760 --> 08:57:01,440
click this icon to create a new file
10401
08:56:57,520 --> 08:57:02,970
inside and we'll name this file
10402
08:57:01,440 --> 08:57:04,318
11-
10403
08:57:02,970 --> 08:57:06,558
[Music]
10404
08:57:04,318 --> 08:57:09,478
to-do-list
10405
08:57:06,558 --> 08:57:12,360
docss and press
10406
08:57:09,478 --> 08:57:15,040
enter and for the video I'm going to
10407
08:57:12,360 --> 08:57:17,760
take this CSS file and put it at the
10408
08:57:15,040 --> 08:57:21,200
bottom of my code editor so I can see
10409
08:57:17,760 --> 08:57:22,798
these files side by side and now I'll
10410
08:57:21,200 --> 08:57:27,398
click here to close
10411
08:57:22,798 --> 08:57:30,718
it and will load this CSS into our
10412
08:57:27,398 --> 08:57:34,958
HTML to do that we can use a link
10413
08:57:30,718 --> 08:57:39,440
element so inside the head section let's
10414
08:57:34,958 --> 08:57:42,280
type less than link greater than and
10415
08:57:39,440 --> 08:57:46,798
we're going to give it two attributes
10416
08:57:42,280 --> 08:57:49,120
Rel equals style
10417
08:57:46,798 --> 08:57:53,318
sheet and
10418
08:57:49,120 --> 08:57:55,160
hre equals the file that we want to load
10419
08:57:53,318 --> 08:57:59,558
so we created this this in the Styles
10420
08:57:55,160 --> 08:58:02,798
folder so we'll type Styles and then a
10421
08:57:59,558 --> 08:58:04,878
slash to go into the folder and we load
10422
08:58:02,798 --> 08:58:06,920
this file
10423
08:58:04,878 --> 08:58:10,600
11-
10424
08:58:06,920 --> 08:58:13,160
too- list.
10425
08:58:10,600 --> 08:58:16,080
CSS and
10426
08:58:13,160 --> 08:58:19,520
save now let's style our project one by
10427
08:58:16,080 --> 08:58:22,080
one until it matches the final design
10428
08:58:19,520 --> 08:58:24,878
we'll start with the text on the page
10429
08:58:22,080 --> 08:58:27,520
we're going to change the font so in
10430
08:58:24,878 --> 08:58:30,680
here let's type
10431
08:58:27,520 --> 08:58:37,318
body curly brackets and then we'll
10432
08:58:30,680 --> 08:58:38,680
change the font Das family colon Arial
10433
08:58:37,318 --> 08:58:41,840
and
10434
08:58:38,680 --> 08:58:45,318
save so that looks pretty good now let's
10435
08:58:41,840 --> 08:58:47,958
work on styling the to-do list first
10436
08:58:45,318 --> 08:58:50,318
let's add some more to-dos to the list
10437
08:58:47,958 --> 08:58:51,920
so we'll type
10438
08:58:50,318 --> 08:58:55,360
watch
10439
08:58:51,920 --> 08:58:56,718
YouTube and then we'll select a date
10440
08:58:55,360 --> 08:58:58,840
and click
10441
08:58:56,718 --> 08:59:01,920
add and we're going to learn how to
10442
08:58:58,840 --> 08:59:05,160
style our list to look like this so
10443
08:59:01,920 --> 08:59:07,718
notice that this list creates a sort of
10444
08:59:05,160 --> 08:59:12,160
grid we're going to create this grid
10445
08:59:07,718 --> 08:59:15,280
using a feature called CSS grid so let's
10446
08:59:12,160 --> 08:59:18,080
go into our HTML
10447
08:59:15,280 --> 08:59:20,760
first we're going to add a class to this
10448
08:59:18,080 --> 08:59:26,718
div element so we can style
10449
08:59:20,760 --> 08:59:30,600
it to-do Das grid R and let's
10450
08:59:26,718 --> 08:59:36,840
save and inside our CSS we're going to
10451
08:59:30,600 --> 08:59:38,280
style this class using dot Todo Das grid
10452
08:59:36,840 --> 08:59:41,280
and curly
10453
08:59:38,280 --> 08:59:44,160
brackets and to turn this into a grid
10454
08:59:41,280 --> 08:59:47,000
we're going to use the property
10455
08:59:44,160 --> 08:59:49,398
display and
10456
08:59:47,000 --> 08:59:56,478
grid and we're going to add another
10457
08:59:49,398 --> 08:59:59,798
property called grid Das template Dash
10458
08:59:56,478 --> 09:00:02,798
columns so this basically sets how many
10459
08:59:59,798 --> 09:00:05,318
columns are in our grid the number of
10460
09:00:02,798 --> 09:00:10,280
values that we give it is the number of
10461
09:00:05,318 --> 09:00:15,958
columns for example if we give it 200
10462
09:00:10,280 --> 09:00:19,120
pixels 150 pixels and 100
10463
09:00:15,958 --> 09:00:22,318
pixels this will create three columns in
10464
09:00:19,120 --> 09:00:24,920
the grid the First Column will be 200
10465
09:00:22,318 --> 09:00:28,878
pixels the second Colum column will be
10466
09:00:24,920 --> 09:00:29,840
150 pixels and the third column will be
10467
09:00:28,878 --> 09:00:32,958
100
10468
09:00:29,840 --> 09:00:36,120
pixels and now each element inside this
10469
09:00:32,958 --> 09:00:37,798
div will go into the columns so the
10470
09:00:36,120 --> 09:00:40,200
first element will go in the First
10471
09:00:37,798 --> 09:00:42,600
Column second element will go in the
10472
09:00:40,200 --> 09:00:45,318
second column and the third element will
10473
09:00:42,600 --> 09:00:48,280
go in the third column if we have more
10474
09:00:45,318 --> 09:00:50,520
than three elements it will wrap around
10475
09:00:48,280 --> 09:00:52,760
and create a new
10476
09:00:50,520 --> 09:00:55,958
row so let's
10477
09:00:52,760 --> 09:00:58,638
save and and unfortunately that didn't
10478
09:00:55,958 --> 09:01:00,638
quite work and that's because if we go
10479
09:00:58,638 --> 09:01:04,080
back to our
10480
09:01:00,638 --> 09:01:07,080
JavaScript remember that each to-do is
10481
09:01:04,080 --> 09:01:10,040
one paragraph element so this entire
10482
09:01:07,080 --> 09:01:13,680
to-do with the name due date and delete
10483
09:01:10,040 --> 09:01:16,280
button will go inside the First Column
10484
09:01:13,680 --> 09:01:19,238
and then the next entire to-do will go
10485
09:01:16,280 --> 09:01:21,718
inside the second column but what we
10486
09:01:19,238 --> 09:01:24,520
actually want is for the name to go in
10487
09:01:21,718 --> 09:01:28,040
column 1 due date column 2
10488
09:01:24,520 --> 09:01:30,160
and delete button column 3 to do this
10489
09:01:28,040 --> 09:01:32,958
we're going to separate this element
10490
09:01:30,160 --> 09:01:35,080
into three elements so that each element
10491
09:01:32,958 --> 09:01:38,920
will go into each
10492
09:01:35,080 --> 09:01:41,520
column so instead of one
10493
09:01:38,920 --> 09:01:45,680
paragraph let's actually use a div
10494
09:01:41,520 --> 09:01:49,680
element so less than div greater than
10495
09:01:45,680 --> 09:01:55,398
and less than slash div greater than and
10496
09:01:49,680 --> 09:01:55,398
in between we'll insert the name
10497
09:01:56,200 --> 09:02:01,160
so the reason we use a div element is
10498
09:01:58,878 --> 09:02:03,760
because div elements don't have any
10499
09:02:01,160 --> 09:02:05,360
default styling so it's a little easier
10500
09:02:03,760 --> 09:02:08,840
to style with
10501
09:02:05,360 --> 09:02:12,360
CSS for the due date let's also create a
10502
09:02:08,840 --> 09:02:16,600
div element so less than
10503
09:02:12,360 --> 09:02:20,360
div and then at the end less than slash
10504
09:02:16,600 --> 09:02:23,520
div greater than and finally for the
10505
09:02:20,360 --> 09:02:26,478
delete button we already have an element
10506
09:02:23,520 --> 09:02:29,040
so so let's just reformat these lines
10507
09:02:26,478 --> 09:02:32,000
we'll select these lines and then press
10508
09:02:29,040 --> 09:02:35,318
shift tab to remove the
10509
09:02:32,000 --> 09:02:38,080
indent let's remove the extra line and
10510
09:02:35,318 --> 09:02:39,160
we basically separated each to-do into
10511
09:02:38,080 --> 09:02:41,318
three
10512
09:02:39,160 --> 09:02:44,920
elements if we
10513
09:02:41,318 --> 09:02:48,040
save now the grid is working because
10514
09:02:44,920 --> 09:02:50,600
this element goes into the First Column
10515
09:02:48,040 --> 09:02:52,760
this element goes into the second column
10516
09:02:50,600 --> 09:02:54,840
and the button goes into the third
10517
09:02:52,760 --> 09:02:57,000
column
10518
09:02:54,840 --> 09:03:01,160
and that's how we lay out these elements
10519
09:02:57,000 --> 09:03:03,638
in a grid like the final design next
10520
09:03:01,160 --> 09:03:08,040
let's also lay out the inputs and the
10521
09:03:03,638 --> 09:03:10,878
add button in a grid we'll go to our
10522
09:03:08,040 --> 09:03:14,360
HTML and let's put these three elements
10523
09:03:10,878 --> 09:03:18,080
in a div so we can use grid so we'll
10524
09:03:14,360 --> 09:03:20,760
create a less than div greater
10525
09:03:18,080 --> 09:03:24,360
than and then
10526
09:03:20,760 --> 09:03:29,600
inside let's remove this and we'll add
10527
09:03:24,360 --> 09:03:33,160
it at the end less than SL div and let's
10528
09:03:29,600 --> 09:03:36,200
reformat these lines by selecting them
10529
09:03:33,160 --> 09:03:39,360
and then press tab to add an
10530
09:03:36,200 --> 09:03:43,878
indent and now let's make this div a
10531
09:03:39,360 --> 09:03:48,238
grid as well let's go back to our CSS
10532
09:03:43,878 --> 09:03:55,120
and we'll add a class to this div class
10533
09:03:48,238 --> 09:03:57,638
equals let's call it to-do Das input d
10534
09:03:55,120 --> 09:04:02,160
dgrid and instead of writing all this
10535
09:03:57,638 --> 09:04:06,360
CSS again we can use a feature of CSS so
10536
09:04:02,160 --> 09:04:09,440
here we're going to type a comma and
10537
09:04:06,360 --> 09:04:12,840
enter so when we type a comma we can
10538
09:04:09,440 --> 09:04:17,120
style multiple classes at the same time
10539
09:04:12,840 --> 09:04:23,280
so we're also going to style dot
10540
09:04:17,120 --> 09:04:24,520
too- input Das grid if we save the CSS
10541
09:04:23,280 --> 09:04:27,718
file
10542
09:04:24,520 --> 09:04:30,878
and let's also save the HTML
10543
09:04:27,718 --> 09:04:33,360
file now the input and the add button
10544
09:04:30,878 --> 09:04:37,080
are also laid out in the same
10545
09:04:33,360 --> 09:04:39,920
grid next let's adjust the spacing
10546
09:04:37,080 --> 09:04:43,840
inside our grid so grid has some
10547
09:04:39,920 --> 09:04:47,760
properties for this we'll go to our CSS
10548
09:04:43,840 --> 09:04:52,878
press enter and we'll use the property
10549
09:04:47,760 --> 09:04:56,280
column Das Gap so this sets the spacing
10550
09:04:52,878 --> 09:05:01,120
between the Columns of the grid so let's
10551
09:04:56,280 --> 09:05:04,200
make this colon 10 pixels and
10552
09:05:01,120 --> 09:05:06,920
save so now it will add 10 pixels
10553
09:05:04,200 --> 09:05:09,718
between each column let's add some
10554
09:05:06,920 --> 09:05:13,840
spacing between the rows as well and
10555
09:05:09,718 --> 09:05:19,600
grid has another property for this row
10556
09:05:13,840 --> 09:05:23,040
Das Gap colon 10 pixels and
10557
09:05:19,600 --> 09:05:25,840
save so that will add 10 pixels of space
10558
09:05:23,040 --> 09:05:28,680
between the rows now notice it didn't
10559
09:05:25,840 --> 09:05:30,798
add space between these two rows and
10560
09:05:28,680 --> 09:05:34,120
that's because these two are separate
10561
09:05:30,798 --> 09:05:36,318
grids this is the to-do list and this is
10562
09:05:34,120 --> 09:05:39,520
the to-do input
10563
09:05:36,318 --> 09:05:41,000
grid so to add space between them we
10564
09:05:39,520 --> 09:05:46,160
just going to use
10565
09:05:41,000 --> 09:05:50,638
margin at the bottom we'll style dot
10566
09:05:46,160 --> 09:05:53,280
too- input Das
10567
09:05:50,638 --> 09:05:59,120
grid and we'll just add some margin
10568
09:05:53,280 --> 09:06:03,600
under this grid so margin Das bottom
10569
09:05:59,120 --> 09:06:06,638
colon 10 pixels and
10570
09:06:03,600 --> 09:06:09,878
save all right now let's move on to
10571
09:06:06,638 --> 09:06:13,078
styling the inputs and the buttons we'll
10572
09:06:09,878 --> 09:06:16,598
start with the inputs first let's add a
10573
09:06:13,078 --> 09:06:21,078
class so we can style them here let's
10574
09:06:16,598 --> 09:06:24,360
add a class name Das
10575
09:06:21,078 --> 09:06:26,680
input and down here let's let's also add
10576
09:06:24,360 --> 09:06:30,320
another class
10577
09:06:26,680 --> 09:06:32,680
do- dat Das
10578
09:06:30,320 --> 09:06:36,800
input let's
10579
09:06:32,680 --> 09:06:38,238
save and now inside our CSS we'll style
10580
09:06:36,800 --> 09:06:41,918
both of these
10581
09:06:38,238 --> 09:06:46,840
inputs so we'll style do
10582
09:06:41,918 --> 09:06:48,800
name- input curly brackets and first
10583
09:06:46,840 --> 09:06:54,398
let's make the text bigger like the
10584
09:06:48,800 --> 09:06:59,640
final design we'll set the font Das size
10585
09:06:54,398 --> 09:07:02,520
colon 15 pixels and save okay so that
10586
09:06:59,640 --> 09:07:07,160
looks pretty good now let's add spacing
10587
09:07:02,520 --> 09:07:11,320
on the inside of this input so we'll add
10588
09:07:07,160 --> 09:07:14,278
padding six pixels and
10589
09:07:11,320 --> 09:07:17,520
save and that looks pretty good let's
10590
09:07:14,278 --> 09:07:19,878
move on to the due date input so we
10591
09:07:17,520 --> 09:07:22,960
actually want the same Styles as the
10592
09:07:19,878 --> 09:07:27,078
name input so again we can use that
10593
09:07:22,960 --> 09:07:29,520
feature of CSS we'll type a comma and
10594
09:07:27,078 --> 09:07:31,320
then dot
10595
09:07:29,520 --> 09:07:35,520
do-
10596
09:07:31,320 --> 09:07:39,918
date- input so now these Styles will be
10597
09:07:35,520 --> 09:07:41,160
applied to this class and to this class
10598
09:07:39,918 --> 09:07:44,680
let's
10599
09:07:41,160 --> 09:07:47,200
save and that looks pretty good to me
10600
09:07:44,680 --> 09:07:51,078
let's move on and style the
10601
09:07:47,200 --> 09:07:54,360
buttons we'll go into our HTML and find
10602
09:07:51,078 --> 09:07:55,480
the add button let's add a class so we
10603
09:07:54,360 --> 09:08:00,078
can style
10604
09:07:55,480 --> 09:08:03,520
it and we'll use add-
10605
09:08:00,078 --> 09:08:07,360
too- button let's
10606
09:08:03,520 --> 09:08:12,398
save and then inside our CSS we'll style
10607
09:08:07,360 --> 09:08:16,000
that class using dot add-
10608
09:08:12,398 --> 09:08:18,238
too- button curly
10609
09:08:16,000 --> 09:08:21,160
brackets and let's start with the
10610
09:08:18,238 --> 09:08:24,122
background color we'll set the
10611
09:08:21,160 --> 09:08:25,840
background-color
10612
09:08:24,122 --> 09:08:28,122
colon
10613
09:08:25,840 --> 09:08:31,078
green and
10614
09:08:28,122 --> 09:08:35,360
save now let's do the text
10615
09:08:31,078 --> 09:08:37,758
color color colon
10616
09:08:35,360 --> 09:08:40,840
white and
10617
09:08:37,758 --> 09:08:46,122
save now let's remove the border around
10618
09:08:40,840 --> 09:08:47,960
our button using border colon
10619
09:08:46,122 --> 09:08:50,718
none
10620
09:08:47,960 --> 09:08:54,122
save and let's make the text a little
10621
09:08:50,718 --> 09:08:58,640
bigger so we'll do font
10622
09:08:54,122 --> 09:09:01,122
D size colon 15
10623
09:08:58,640 --> 09:09:03,878
pixels and
10624
09:09:01,122 --> 09:09:06,238
save and the last thing we'll add is
10625
09:09:03,878 --> 09:09:09,718
when we put our Mouse over the button it
10626
09:09:06,238 --> 09:09:11,960
turns into this pointer icon we can do
10627
09:09:09,718 --> 09:09:15,238
that using
10628
09:09:11,960 --> 09:09:18,000
cursor colon
10629
09:09:15,238 --> 09:09:22,200
pointer and
10630
09:09:18,000 --> 09:09:24,238
save next let's style the delete buttons
10631
09:09:22,200 --> 09:09:27,122
so these delete buttons are created in
10632
09:09:24,238 --> 09:09:28,598
our JavaScript we'll go into our
10633
09:09:27,122 --> 09:09:32,960
JavaScript
10634
09:09:28,598 --> 09:09:34,840
file and then here let's add a class to
10635
09:09:32,960 --> 09:09:39,758
each of the delete buttons so we can
10636
09:09:34,840 --> 09:09:44,398
style them so we'll add class equals
10637
09:09:39,758 --> 09:09:46,000
double quotes and then delete Das
10638
09:09:44,398 --> 09:09:48,278
too-
10639
09:09:46,000 --> 09:09:51,278
button let's
10640
09:09:48,278 --> 09:09:57,520
save and then inside our
10641
09:09:51,278 --> 09:10:02,278
CSS at the bottom we style dot delete
10642
09:09:57,520 --> 09:10:04,480
Das too Das button curly
10643
09:10:02,278 --> 09:10:08,758
brackets and let's start with the
10644
09:10:04,480 --> 09:10:13,520
background color so we'll set background
10645
09:10:08,758 --> 09:10:16,598
Das color colon and for this design I
10646
09:10:13,520 --> 09:10:18,758
use the color dark
10647
09:10:16,598 --> 09:10:21,718
red and
10648
09:10:18,758 --> 09:10:24,122
save so that will style our delete
10649
09:10:21,718 --> 09:10:29,680
buttons now let's change change the text
10650
09:10:24,122 --> 09:10:31,800
color to white so we'll use color colon
10651
09:10:29,680 --> 09:10:36,558
white and
10652
09:10:31,800 --> 09:10:39,320
save now let's remove the Border using
10653
09:10:36,558 --> 09:10:41,000
border colon
10654
09:10:39,320 --> 09:10:45,000
none
10655
09:10:41,000 --> 09:10:51,360
save and let's also make the text bigger
10656
09:10:45,000 --> 09:10:53,758
using font Das size colon 15
10657
09:10:51,360 --> 09:10:58,918
pixels save
10658
09:10:53,758 --> 09:11:00,758
let's add this pointer icon using cursor
10659
09:10:58,918 --> 09:11:04,758
colon
10660
09:11:00,758 --> 09:11:08,078
pointer save and let's add some padding
10661
09:11:04,758 --> 09:11:11,320
at the top and bottom of the button so
10662
09:11:08,078 --> 09:11:17,278
we'll add
10663
09:11:11,320 --> 09:11:25,078
padding-top colon 10 pixels and padding
10664
09:11:17,278 --> 09:11:27,160
Dash bottom colon 10 pixels and Save
10665
09:11:25,078 --> 09:11:29,960
so that's all the Styles we need for the
10666
09:11:27,160 --> 09:11:33,598
delete button and we can also close the
10667
09:11:29,960 --> 09:11:36,200
console to see the entire list however
10668
09:11:33,598 --> 09:11:38,598
now we have another problem which is
10669
09:11:36,200 --> 09:11:41,758
this text and this button are not
10670
09:11:38,598 --> 09:11:44,200
vertically aligned in the center to
10671
09:11:41,758 --> 09:11:47,398
vertically align in the center we're
10672
09:11:44,200 --> 09:11:48,398
going to go back to the grid Styles so
10673
09:11:47,398 --> 09:11:51,040
we'll scroll
10674
09:11:48,398 --> 09:11:54,520
up to the to-do
10675
09:11:51,040 --> 09:11:59,558
grid and CSS grid has another property
10676
09:11:54,520 --> 09:12:03,758
for vertical alignment and that is align
10677
09:11:59,558 --> 09:12:08,040
Das items Colon
10678
09:12:03,758 --> 09:12:09,160
Center to vertically align in the center
10679
09:12:08,040 --> 09:12:12,200
if we
10680
09:12:09,160 --> 09:12:15,598
save now the text is aligned with the
10681
09:12:12,200 --> 09:12:18,360
button but now we have a new problem our
10682
09:12:15,598 --> 09:12:22,040
add button is no longer stretching to be
10683
09:12:18,360 --> 09:12:24,200
the same as the inputs so by default
10684
09:12:22,040 --> 09:12:27,238
align items is
10685
09:12:24,200 --> 09:12:29,960
stretch that's why this button stretches
10686
09:12:27,238 --> 09:12:32,598
to match the inputs and now that we
10687
09:12:29,960 --> 09:12:35,360
changed it to align center it's no
10688
09:12:32,598 --> 09:12:39,000
longer going to stretch so to solve this
10689
09:12:35,360 --> 09:12:43,122
problem we just have to make this grid
10690
09:12:39,000 --> 09:12:49,320
stretch so down here in the to-do input
10691
09:12:43,122 --> 09:12:51,558
grid Styles we'll change align Das items
10692
09:12:49,320 --> 09:12:53,718
back to
10693
09:12:51,558 --> 09:12:56,398
stretch and Save
10694
09:12:53,718 --> 09:13:00,238
save and that will cause this Grid at
10695
09:12:56,398 --> 09:13:02,480
the top to stretch vertically again and
10696
09:13:00,238 --> 09:13:06,000
that's it that's all the styling that we
10697
09:13:02,480 --> 09:13:08,598
need and now we finished this to-do list
10698
09:13:06,000 --> 09:13:11,078
project in the rest of this lesson we're
10699
09:13:08,598 --> 09:13:11,960
going to learn more details about arrays
10700
09:13:11,078 --> 09:13:15,078
and
10701
09:13:11,960 --> 09:13:16,278
Loops so I'm going to put this back in
10702
09:13:15,078 --> 09:13:19,160
the same
10703
09:13:16,278 --> 09:13:22,480
window and I'll rearrange this
10704
09:13:19,160 --> 09:13:24,840
window and now let's go back to 11
10705
09:13:22,480 --> 09:13:28,598
arrays and loops.
10706
09:13:24,840 --> 09:13:31,480
HTML and we'll open the tab for that
10707
09:13:28,598 --> 09:13:33,758
file and we can also close these other
10708
09:13:31,480 --> 09:13:36,840
files for
10709
09:13:33,758 --> 09:13:39,122
now and first let's comment out the
10710
09:13:36,840 --> 09:13:41,160
previous code
10711
09:13:39,122 --> 09:13:45,840
using
10712
09:13:41,160 --> 09:13:50,278
slashstar and at the bottom star
10713
09:13:45,840 --> 09:13:52,320
slash and we'll scroll down and
10714
09:13:50,278 --> 09:13:55,718
save the first detail we're going to
10715
09:13:52,320 --> 09:13:58,238
learn is that that arrays are references
10716
09:13:55,718 --> 09:14:01,758
so in the object lesson we learned that
10717
09:13:58,238 --> 09:14:05,480
objects are references arrays work the
10718
09:14:01,758 --> 09:14:07,238
same way so for example if we create an
10719
09:14:05,480 --> 09:14:15,558
array
10720
09:14:07,238 --> 09:14:18,680
const array 1 equals the array 1 2
10721
09:14:15,558 --> 09:14:23,320
3 this variable doesn't actually contain
10722
09:14:18,680 --> 09:14:25,718
the values 1 2 3 this array is saved
10723
09:14:23,320 --> 09:14:28,558
somewhere in the computer's memory and
10724
09:14:25,718 --> 09:14:31,718
this variable only contains a reference
10725
09:14:28,558 --> 09:14:34,718
that points to where this array is in
10726
09:14:31,718 --> 09:14:37,598
memory and that means if we create a
10727
09:14:34,718 --> 09:14:43,558
copy of this variable
10728
09:14:37,598 --> 09:14:47,718
const array 2 equals array
10729
09:14:43,558 --> 09:14:50,840
1 array 2 doesn't contain a copy of the
10730
09:14:47,718 --> 09:14:53,598
values it actually just contains a copy
10731
09:14:50,840 --> 09:14:57,398
of the reference so now both of these
10732
09:14:53,598 --> 09:15:00,520
variables are pointing to the same array
10733
09:14:57,398 --> 09:15:03,840
so if we did array
10734
09:15:00,520 --> 09:15:07,758
2. push
10735
09:15:03,840 --> 09:15:07,758
for and then we
10736
09:15:08,360 --> 09:15:14,718
console.log array 1 and we
10737
09:15:15,160 --> 09:15:20,398
console.log array
10738
09:15:17,918 --> 09:15:23,278
two and
10739
09:15:20,398 --> 09:15:27,918
save it will show us that even though we
10740
09:15:23,278 --> 09:15:31,078
added four to array two array 1 and two
10741
09:15:27,918 --> 09:15:34,438
were both modified and that's because
10742
09:15:31,078 --> 09:15:37,878
arrays are references so both of these
10743
09:15:34,438 --> 09:15:40,878
point to the same array in memory to
10744
09:15:37,878 --> 09:15:43,480
avoid this Behavior we can create a copy
10745
09:15:40,878 --> 09:15:48,398
of the values in the array using a
10746
09:15:43,480 --> 09:15:49,680
method called slice so here if we did
10747
09:15:48,398 --> 09:15:53,360
array
10748
09:15:49,680 --> 09:15:56,238
1. slice instead
10749
09:15:53,360 --> 09:15:59,480
this will make a copy of the values in
10750
09:15:56,238 --> 09:16:04,078
Array one and now these two variables
10751
09:15:59,480 --> 09:16:07,758
point to two different arrays if we
10752
09:16:04,078 --> 09:16:09,520
save now you'll see that this line only
10753
09:16:07,758 --> 09:16:11,598
affected array
10754
09:16:09,520 --> 09:16:14,480
two the second detail we're going to
10755
09:16:11,598 --> 09:16:17,800
learn is a shortcut called
10756
09:16:14,480 --> 09:16:20,800
destructuring so at the bottom here
10757
09:16:17,800 --> 09:16:29,078
let's create a new array
10758
09:16:20,800 --> 09:16:32,278
const array 3 3 equals the array 1 2
10759
09:16:29,078 --> 09:16:35,398
3 and let's say we want to get the first
10760
09:16:32,278 --> 09:16:38,480
value and the second value out of this
10761
09:16:35,398 --> 09:16:42,680
array one way to do this is to use the
10762
09:16:38,480 --> 09:16:44,718
index like this another way is to use a
10763
09:16:42,680 --> 09:16:47,480
shortcut called
10764
09:16:44,718 --> 09:16:51,078
destructuring so here we're going to
10765
09:16:47,480 --> 09:16:53,800
replace this with square brackets and
10766
09:16:51,078 --> 09:16:58,320
now we can type some variable name
10767
09:16:53,800 --> 09:17:01,000
if we type first value it will take the
10768
09:16:58,320 --> 09:17:05,918
first value and save it in a variable
10769
09:17:01,000 --> 09:17:09,360
called first value if we type comma and
10770
09:17:05,918 --> 09:17:13,398
second value it will take the second
10771
09:17:09,360 --> 09:17:16,520
value and save it in this variable so
10772
09:17:13,398 --> 09:17:20,398
this is an easier way to get values out
10773
09:17:16,520 --> 09:17:22,960
of an array and save them inside a
10774
09:17:20,398 --> 09:17:26,640
variable next we're going to learn more
10775
09:17:22,960 --> 09:17:30,840
details about loops so Loops have two
10776
09:17:26,640 --> 09:17:35,360
features called break and continue break
10777
09:17:30,840 --> 09:17:37,680
lets us exit a loop early for example
10778
09:17:35,360 --> 09:17:41,480
let's create some new lines and let's
10779
09:17:37,680 --> 09:17:45,040
create a loop that counts from 1 to 10
10780
09:17:41,480 --> 09:17:48,960
so as usual we can use a four
10781
09:17:45,040 --> 09:17:53,960
Loop let I =
10782
09:17:48,960 --> 09:17:56,718
1 I less than or equal to 10
10783
09:17:53,960 --> 09:17:59,238
and I
10784
09:17:56,718 --> 09:18:04,480
++ and we'll
10785
09:17:59,238 --> 09:18:08,640
console. log I and
10786
09:18:04,480 --> 09:18:12,800
save so this will count from 1 to
10787
09:18:08,640 --> 09:18:16,278
10 so now let's say that when I is 8 we
10788
09:18:12,800 --> 09:18:24,480
want to stop this Loop early so first
10789
09:18:16,278 --> 09:18:27,278
let's check if I is equal to 8
10790
09:18:24,480 --> 09:18:31,438
if it is equal to 8 we're going to stop
10791
09:18:27,278 --> 09:18:33,840
this Loop by typing break and
10792
09:18:31,438 --> 09:18:37,680
semicolon if we
10793
09:18:33,840 --> 09:18:40,758
save once this reaches eight break will
10794
09:18:37,680 --> 09:18:44,160
cause this Loop to stop and now it only
10795
09:18:40,758 --> 09:18:47,598
counts up to eight so that's the break
10796
09:18:44,160 --> 09:18:50,398
feature of a loop it lets us stop a loop
10797
09:18:47,598 --> 09:18:53,320
early the next feature is called
10798
09:18:50,398 --> 09:18:56,438
continue continue lets us skip one
10799
09:18:53,320 --> 09:18:59,398
iteration of the loop or one run of the
10800
09:18:56,438 --> 09:19:03,800
loop for example let's say we want to
10801
09:18:59,398 --> 09:19:10,360
skip the number three so at the top we
10802
09:19:03,800 --> 09:19:15,840
can check if I is equal to
10803
09:19:10,360 --> 09:19:18,400
three and if it is we can use the code
10804
09:19:15,840 --> 09:19:21,360
continue this will skip the rest of this
10805
09:19:18,400 --> 09:19:26,320
code and go back up to the top of the
10806
09:19:21,360 --> 09:19:31,160
loop and do i = 4 if we
10807
09:19:26,320 --> 09:19:34,000
save this will skip three in the loop so
10808
09:19:31,160 --> 09:19:36,756
continue let us Skip One iteration of
10809
09:19:34,000 --> 09:19:39,880
the loop so now let's say that we want
10810
09:19:36,756 --> 09:19:42,560
to skip a number if it's divisible by
10811
09:19:39,880 --> 09:19:45,800
three divisible by three means the
10812
09:19:42,560 --> 09:19:49,960
number can be divided evenly into three
10813
09:19:45,800 --> 09:19:54,320
for example 3 and six are both divisible
10814
09:19:49,960 --> 09:19:57,120
by three but s is not divisible by three
10815
09:19:54,320 --> 09:19:59,596
because there's one remaining this is
10816
09:19:57,120 --> 09:20:01,720
called the remainder and we can
10817
09:19:59,596 --> 09:20:05,240
calculate the remainder using the
10818
09:20:01,720 --> 09:20:07,640
remainder operator which looks like this
10819
09:20:05,240 --> 09:20:11,520
so to check if a number is divisible by
10820
09:20:07,640 --> 09:20:15,436
three we can check if the remainder is
10821
09:20:11,520 --> 09:20:19,756
zero so here we're going to replace this
10822
09:20:15,436 --> 09:20:25,520
with I remainder 3 and we'll check if
10823
09:20:19,756 --> 09:20:29,480
the remainder is equal to to Z if we
10824
09:20:25,520 --> 09:20:32,436
save this will skip three and six
10825
09:20:29,480 --> 09:20:36,120
because they're both divisible by
10826
09:20:32,436 --> 09:20:39,720
three next let's use continue in a while
10827
09:20:36,120 --> 09:20:42,520
loop so at the end here we'll create
10828
09:20:39,720 --> 09:20:46,720
some new lines and let's say we want to
10829
09:20:42,520 --> 09:20:51,480
count from 1 to 10 using a while loop so
10830
09:20:46,720 --> 09:20:55,756
we'll create a loop variable let I equal
10831
09:20:51,480 --> 09:21:01,160
1 and we'll create a while
10832
09:20:55,756 --> 09:21:05,960
loop I less than or equal to 10 curly
10833
09:21:01,160 --> 09:21:10,360
brackets and the increment step
10834
09:21:05,960 --> 09:21:15,080
i++ and inside the loop we just
10835
09:21:10,360 --> 09:21:18,916
console. log I and
10836
09:21:15,080 --> 09:21:22,120
save so this will count from 1 to 10
10837
09:21:18,916 --> 09:21:25,880
again and let's say we want to not count
10838
09:21:22,120 --> 09:21:32,200
numbers that are divisible by three so 3
10839
09:21:25,880 --> 09:21:39,080
6 and 9 so at the top here we can check
10840
09:21:32,200 --> 09:21:42,160
if I remainder 3 is equal to zero and
10841
09:21:39,080 --> 09:21:43,840
curly brackets and we might just try to
10842
09:21:42,160 --> 09:21:46,960
do
10843
09:21:43,840 --> 09:21:49,200
continue however in a while loop
10844
09:21:46,960 --> 09:21:51,880
continue will actually skip the
10845
09:21:49,200 --> 09:21:54,276
increment step and this will cause an
10846
09:21:51,880 --> 09:21:57,200
infinite Loop Loop so when using
10847
09:21:54,276 --> 09:22:00,680
continue in a while loop we have to do
10848
09:21:57,200 --> 09:22:04,520
this increment step manually so before
10849
09:22:00,680 --> 09:22:09,880
continue we have to do I
10850
09:22:04,520 --> 09:22:12,436
++ to avoid an infinite Loop if we
10851
09:22:09,880 --> 09:22:18,000
save it will skip the numbers that are
10852
09:22:12,436 --> 09:22:20,756
divisible by three which is 3 6 and 9 so
10853
09:22:18,000 --> 09:22:23,756
remember in a while loop if we use
10854
09:22:20,756 --> 09:22:26,840
continue always do the increment step
10855
09:22:23,756 --> 09:22:29,436
manually in a for Loop however the
10856
09:22:26,840 --> 09:22:31,160
increment step is done automatically
10857
09:22:29,436 --> 09:22:33,680
after every
10858
09:22:31,160 --> 09:22:36,200
iteration all right the last detail
10859
09:22:33,680 --> 09:22:39,240
we're going to learn is how to use loops
10860
09:22:36,200 --> 09:22:42,200
with functions so let's say we have an
10861
09:22:39,240 --> 09:22:45,160
array of numbers and we want to create a
10862
09:22:42,200 --> 09:22:48,040
copy of this array where each number is
10863
09:22:45,160 --> 09:22:51,520
doubled so we already have the code for
10864
09:22:48,040 --> 09:22:53,200
this we can scroll up and the code for
10865
09:22:51,520 --> 09:22:55,680
this is here
10866
09:22:53,200 --> 09:22:58,520
so let's actually make a copy of this
10867
09:22:55,680 --> 09:23:00,480
code from before we'll
10868
09:22:58,520 --> 09:23:03,320
rightclick
10869
09:23:00,480 --> 09:23:06,400
copy and scroll down
10870
09:23:03,320 --> 09:23:10,240
here and at the
10871
09:23:06,400 --> 09:23:14,320
bottom right click and
10872
09:23:10,240 --> 09:23:15,596
paste at the top let's create an array
10873
09:23:14,320 --> 09:23:23,360
called
10874
09:23:15,596 --> 09:23:25,320
nums so const nums equals array and one
10875
09:23:23,360 --> 09:23:27,640
1 and
10876
09:23:25,320 --> 09:23:30,560
three if we
10877
09:23:27,640 --> 09:23:32,596
save this will create an array where
10878
09:23:30,560 --> 09:23:35,160
each number is
10879
09:23:32,596 --> 09:23:38,040
doubled now what if we wanted to use
10880
09:23:35,160 --> 09:23:41,640
this loop on a different array other
10881
09:23:38,040 --> 09:23:44,960
than one one and three we can do that
10882
09:23:41,640 --> 09:23:49,756
using a function so let's create a
10883
09:23:44,960 --> 09:23:54,120
function around this Loop we'll create
10884
09:23:49,756 --> 09:23:58,276
function let's name it dou full
10885
09:23:54,120 --> 09:24:01,240
array brackets and curly bracket we'll
10886
09:23:58,276 --> 09:24:05,240
remove the closed curly bracket and at
10887
09:24:01,240 --> 09:24:06,436
the bottom We'll add it back and we'll
10888
09:24:05,240 --> 09:24:08,720
select these
10889
09:24:06,436 --> 09:24:12,520
lines and press
10890
09:24:08,720 --> 09:24:15,596
tab so now instead of doing this loop on
10891
09:24:12,520 --> 09:24:20,080
the same array every time we can turn
10892
09:24:15,596 --> 09:24:23,276
this into a parameter so at the top here
10893
09:24:20,080 --> 09:24:26,960
we'll create a parameter called
10894
09:24:23,276 --> 09:24:29,840
nums and we're going to delete this
10895
09:24:26,960 --> 09:24:34,000
line and we're going to Loop over this
10896
09:24:29,840 --> 09:24:39,000
parameter instead so at the bottom we
10897
09:24:34,000 --> 09:24:40,240
can call our function using double array
10898
09:24:39,000 --> 09:24:42,960
and
10899
09:24:40,240 --> 09:24:47,080
brackets and between the brackets we're
10900
09:24:42,960 --> 09:24:53,480
going to save an array into nums so
10901
09:24:47,080 --> 09:24:56,800
square bracket 1 1 and 3 if we
10902
09:24:53,480 --> 09:24:59,400
save this will do the same thing as
10903
09:24:56,800 --> 09:25:02,276
before but now because it's in a
10904
09:24:59,400 --> 09:25:06,680
function we can use this loop with any
10905
09:25:02,276 --> 09:25:11,916
array not just one one and three so at
10906
09:25:06,680 --> 09:25:18,200
the end we can do double array
10907
09:25:11,916 --> 09:25:19,276
brackets and an array 2 2 five this time
10908
09:25:18,200 --> 09:25:22,436
and
10909
09:25:19,276 --> 09:25:25,916
save and it will create an array where
10910
09:25:22,436 --> 09:25:29,840
these numbers are doubled so using a
10911
09:25:25,916 --> 09:25:32,436
function we can reuse this Loop for any
10912
09:25:29,840 --> 09:25:34,916
value another feature of using a
10913
09:25:32,436 --> 09:25:38,320
function with a loop is that we can
10914
09:25:34,916 --> 09:25:41,520
break out of this Loop using a return
10915
09:25:38,320 --> 09:25:44,840
instead so first let's actually use a
10916
09:25:41,520 --> 09:25:47,640
return in this function instead of
10917
09:25:44,840 --> 09:25:52,320
console.log we're going to
10918
09:25:47,640 --> 09:25:52,320
return nums doubled
10919
09:25:52,880 --> 09:25:59,040
and here we're going to console.log the
10920
09:25:56,040 --> 09:25:59,040
result
10921
09:26:01,640 --> 09:26:05,960
console.log and
10922
09:26:08,720 --> 09:26:14,080
console.log and
10923
09:26:11,040 --> 09:26:17,276
save so this does the same thing as
10924
09:26:14,080 --> 09:26:20,200
before except we're returning the result
10925
09:26:17,276 --> 09:26:22,800
and console. logging outside of the
10926
09:26:20,200 --> 09:26:25,240
function now let's say that if we see
10927
09:26:22,800 --> 09:26:29,880
the number zero we want to stop this
10928
09:26:25,240 --> 09:26:35,800
Loop early to do that we can click here
10929
09:26:29,880 --> 09:26:39,800
and check if num is equal to
10930
09:26:35,800 --> 09:26:42,640
zero and if it is we can break out of
10931
09:26:39,800 --> 09:26:45,080
this Loop now when we're inside a
10932
09:26:42,640 --> 09:26:48,276
function we can also use a return
10933
09:26:45,080 --> 09:26:53,680
statement to break out of this Loop so
10934
09:26:48,276 --> 09:26:56,756
we can also do return nums
10935
09:26:53,680 --> 09:26:59,680
doubled so a return statement will end
10936
09:26:56,756 --> 09:27:01,800
this function immediately so this is
10937
09:26:59,680 --> 09:27:06,120
another way of ending the
10938
09:27:01,800 --> 09:27:10,040
loop so down here if we add the number
10939
09:27:06,120 --> 09:27:12,916
zero and then five and
10940
09:27:10,040 --> 09:27:16,480
save you'll notice that the loop stops
10941
09:27:12,916 --> 09:27:19,320
when we see the number zero so return is
10942
09:27:16,480 --> 09:27:22,436
another way of breaking out of a loop
10943
09:27:19,320 --> 09:27:25,200
when it's inside a function and that's
10944
09:27:22,436 --> 09:27:28,000
the end of this lesson in this lesson we
10945
09:27:25,200 --> 09:27:31,480
learned about arrays which represent a
10946
09:27:28,000 --> 09:27:34,520
list of values we learned about loops
10947
09:27:31,480 --> 09:27:37,240
which let us run some code over and over
10948
09:27:34,520 --> 09:27:39,120
just like a loop we learned a Technique
10949
09:27:37,240 --> 09:27:41,596
we can use with loops called the
10950
09:27:39,120 --> 09:27:44,596
accumulator pattern and we used it to
10951
09:27:41,596 --> 09:27:47,000
create a to-do list project we learned
10952
09:27:44,596 --> 09:27:49,800
that arrays are references and the
10953
09:27:47,000 --> 09:27:53,040
destructuring shortcut and we learned
10954
09:27:49,800 --> 09:27:56,560
more features of Loops like break
10955
09:27:53,040 --> 09:27:59,200
continue and using Loops inside a
10956
09:27:56,560 --> 09:28:03,960
function here are some exercises to help
10957
09:27:59,200 --> 09:28:03,960
you practice arrays and loops
10958
09:28:29,480 --> 09:28:34,240
in this lesson we're going to learn some
10959
09:28:31,480 --> 09:28:36,240
Advanced features of functions and we're
10960
09:28:34,240 --> 09:28:37,320
going to use them to improve our
10961
09:28:36,240 --> 09:28:40,560
previous
10962
09:28:37,320 --> 09:28:43,800
projects first let's create a new file
10963
09:28:40,560 --> 09:28:47,640
for this lesson we'll go to our code
10964
09:28:43,800 --> 09:28:51,320
editor and click here to show our files
10965
09:28:47,640 --> 09:28:53,880
and click here to create a new file and
10966
09:28:51,320 --> 09:28:58,160
we'll name this
10967
09:28:53,880 --> 09:28:59,800
12- Advanced D
10968
09:28:58,160 --> 09:29:02,520
functions.
10969
09:28:59,800 --> 09:29:06,680
HTML and press
10970
09:29:02,520 --> 09:29:09,880
enter now let's copy 11 arrays and Loops
10971
09:29:06,680 --> 09:29:14,120
into this file so we'll click here
10972
09:29:09,880 --> 09:29:16,160
control a or command a and then
10973
09:29:14,120 --> 09:29:18,916
rightclick
10974
09:29:16,160 --> 09:29:24,040
copy and in
10975
09:29:18,916 --> 09:29:24,040
here right click and paste
10976
09:29:24,120 --> 09:29:30,040
and we can close this for now and let's
10977
09:29:27,320 --> 09:29:31,640
prepare this file for this lesson so
10978
09:29:30,040 --> 09:29:36,756
we'll scroll
10979
09:29:31,640 --> 09:29:38,960
up and change the title to
10980
09:29:36,756 --> 09:29:41,640
Advanced
10981
09:29:38,960 --> 09:29:44,916
functions and let's remove all the
10982
09:29:41,640 --> 09:29:44,916
JavaScript code from
10983
09:29:45,640 --> 09:29:52,560
before and now let's save and open this
10984
09:29:49,680 --> 09:29:55,960
file in the browser by right click
10985
09:29:52,560 --> 09:29:58,756
clicking open with live
10986
09:29:55,960 --> 09:30:01,080
server and let's also open the console
10987
09:29:58,756 --> 09:30:03,040
on this page so we'll
10988
09:30:01,080 --> 09:30:06,000
rightclick
10989
09:30:03,040 --> 09:30:08,480
inspect and open the
10990
09:30:06,000 --> 09:30:10,756
console and now we can close the
10991
09:30:08,480 --> 09:30:15,120
previous
10992
09:30:10,756 --> 09:30:15,120
tabs as well as the previous
10993
09:30:16,000 --> 09:30:21,640
files and now we're ready to begin so
10994
09:30:19,596 --> 09:30:22,520
first we're going to review how to use
10995
09:30:21,640 --> 09:30:25,480
fun
10996
09:30:22,520 --> 09:30:29,080
functions inside the script element
10997
09:30:25,480 --> 09:30:32,720
let's create a function using the word
10998
09:30:29,080 --> 09:30:36,960
function will give it a name
10999
09:30:32,720 --> 09:30:41,960
greeting brackets and curly brackets and
11000
09:30:36,960 --> 09:30:41,960
inside the function we'll type the code
11001
09:30:42,400 --> 09:30:49,360
console.log the string
11002
09:30:45,960 --> 09:30:52,960
hello so this is a function and it lets
11003
09:30:49,360 --> 09:30:56,080
us reuse code to run the code inside
11004
09:30:52,960 --> 09:31:00,880
this function we can type the function
11005
09:30:56,080 --> 09:31:03,160
name which is greeing and then
11006
09:31:00,880 --> 09:31:06,000
brackets if we
11007
09:31:03,160 --> 09:31:09,680
save this line of code we'll run the
11008
09:31:06,000 --> 09:31:12,680
code inside the function and display
11009
09:31:09,680 --> 09:31:15,240
hello this is known as calling the
11010
09:31:12,680 --> 09:31:17,560
function or running the
11011
09:31:15,240 --> 09:31:19,520
function so now that we understand
11012
09:31:17,560 --> 09:31:22,840
functions we're going to learn an
11013
09:31:19,520 --> 09:31:26,596
advanced feature of functions which is
11014
09:31:22,840 --> 09:31:29,200
functions are values so we learned many
11015
09:31:26,596 --> 09:31:32,640
types of values in this course like
11016
09:31:29,200 --> 09:31:36,680
numbers strings and booleans and we can
11017
09:31:32,640 --> 09:31:39,276
save a value in a variable for example
11018
09:31:36,680 --> 09:31:45,520
let's create some new lines and we'll
11019
09:31:39,276 --> 09:31:49,840
create a variable const num equal
11020
09:31:45,520 --> 09:31:52,200
2 so this will save the value two inside
11021
09:31:49,840 --> 09:31:55,400
the variable num
11022
09:31:52,200 --> 09:31:58,360
now functions are also values and this
11023
09:31:55,400 --> 09:32:01,800
means just like a number we can save a
11024
09:31:58,360 --> 09:32:05,080
function inside a variable so let's give
11025
09:32:01,800 --> 09:32:06,520
it a try we'll create a new line and
11026
09:32:05,080 --> 09:32:11,000
type
11027
09:32:06,520 --> 09:32:14,360
const function one and we'll make this
11028
09:32:11,000 --> 09:32:16,040
equal to a function this time so we'll
11029
09:32:14,360 --> 09:32:19,200
just type
11030
09:32:16,040 --> 09:32:22,520
function and a name
11031
09:32:19,200 --> 09:32:25,480
greeting brackets and curly
11032
09:32:22,520 --> 09:32:27,000
brackets and inside the function we'll
11033
09:32:25,480 --> 09:32:31,960
type
11034
09:32:27,000 --> 09:32:35,520
console. log the string hello
11035
09:32:31,960 --> 09:32:37,276
2 and we'll put a semicolon at the end
11036
09:32:35,520 --> 09:32:40,916
since we're saving in a
11037
09:32:37,276 --> 09:32:43,400
variable so this variable now contains a
11038
09:32:40,916 --> 09:32:46,080
function we're using the exact same
11039
09:32:43,400 --> 09:32:48,720
syntax as before except we're just
11040
09:32:46,080 --> 09:32:52,800
taking this function and saving it in a
11041
09:32:48,720 --> 09:32:55,080
variable because functions are values
11042
09:32:52,800 --> 09:32:59,000
so now that this function is inside this
11043
09:32:55,080 --> 09:33:02,080
variable let's actually console.log it
11044
09:32:59,000 --> 09:33:02,080
so we
11045
09:33:02,520 --> 09:33:10,040
console.log function one and
11046
09:33:07,596 --> 09:33:13,240
save and this will show us that the
11047
09:33:10,040 --> 09:33:14,240
variable function one actually contains
11048
09:33:13,240 --> 09:33:17,800
this
11049
09:33:14,240 --> 09:33:21,720
function now on a new line we can also
11050
09:33:17,800 --> 09:33:21,720
do console.log
11051
09:33:21,840 --> 09:33:31,520
and check the type of function one and
11052
09:33:28,840 --> 09:33:35,080
save and it will tell us that the type
11053
09:33:31,520 --> 09:33:38,240
of this variable is a function so as you
11054
09:33:35,080 --> 09:33:42,040
can see a function is just another type
11055
09:33:38,240 --> 09:33:44,960
of value and we can save it in a
11056
09:33:42,040 --> 09:33:46,200
variable we can also run the function
11057
09:33:44,960 --> 09:33:49,960
inside this
11058
09:33:46,200 --> 09:33:53,840
variable by typing the variable name
11059
09:33:49,960 --> 09:33:56,720
function 1 and because this contains a
11060
09:33:53,840 --> 09:33:58,040
function we can actually just call it
11061
09:33:56,720 --> 09:34:01,080
using
11062
09:33:58,040 --> 09:34:05,080
brackets so this will run the code
11063
09:34:01,080 --> 09:34:07,000
inside this function if we save it
11064
09:34:05,080 --> 09:34:09,916
displays hello
11065
09:34:07,000 --> 09:34:13,240
to now let's do some Cleanup in this
11066
09:34:09,916 --> 09:34:16,160
code in JavaScript as long as there's a
11067
09:34:13,240 --> 09:34:20,200
way to access a function this function
11068
09:34:16,160 --> 09:34:23,240
name is not needed so here we can access
11069
09:34:20,200 --> 09:34:25,596
this function using this variable so
11070
09:34:23,240 --> 09:34:29,160
this function name is not needed and we
11071
09:34:25,596 --> 09:34:32,000
can actually just delete it like this
11072
09:34:29,160 --> 09:34:34,640
and now this is called an anonymous
11073
09:34:32,000 --> 09:34:35,596
function which means a function without
11074
09:34:34,640 --> 09:34:38,640
a
11075
09:34:35,596 --> 09:34:40,436
name now an interesting thing to know is
11076
09:34:38,640 --> 09:34:43,596
that the function syntax that we've been
11077
09:34:40,436 --> 09:34:47,240
using this entire course up here is
11078
09:34:43,596 --> 09:34:50,000
actually a shortcut for this code now
11079
09:34:47,240 --> 09:34:53,040
even though this syntax uses VAR and we
11080
09:34:50,000 --> 09:34:55,916
usually don't recommend VAR this syntax
11081
09:34:53,040 --> 09:34:59,160
actually has a couple advantages number
11082
09:34:55,916 --> 09:35:02,160
one it's easier to read and number two
11083
09:34:59,160 --> 09:35:05,160
it gives us a feature called hoisting
11084
09:35:02,160 --> 09:35:08,916
which means we can call this function
11085
09:35:05,160 --> 09:35:11,880
greeting brackets before we create it in
11086
09:35:08,916 --> 09:35:14,720
the code so using hoisting we don't have
11087
09:35:11,880 --> 09:35:17,320
to worry about what order we write this
11088
09:35:14,720 --> 09:35:19,436
code hoisting doesn't work when we
11089
09:35:17,320 --> 09:35:23,360
create our function and save it in a
11090
09:35:19,436 --> 09:35:26,200
variable like this so in JavaScript
11091
09:35:23,360 --> 09:35:29,360
functions are values and just like any
11092
09:35:26,200 --> 09:35:32,480
other value we can save it in a
11093
09:35:29,360 --> 09:35:35,880
variable now let's think what else can
11094
09:35:32,480 --> 09:35:39,756
we do with a value well we can save a
11095
09:35:35,880 --> 09:35:40,680
value in an object for example let's
11096
09:35:39,756 --> 09:35:44,400
scroll
11097
09:35:40,680 --> 09:35:47,320
down and create some new lines and we'll
11098
09:35:44,400 --> 09:35:52,840
create an object
11099
09:35:47,320 --> 09:35:55,840
const object 1 equals curly
11100
09:35:52,840 --> 09:36:00,200
brackets and inside this object we'll
11101
09:35:55,840 --> 09:36:04,040
have a property num with the value
11102
09:36:00,200 --> 09:36:07,116
two so this saves the number two inside
11103
09:36:04,040 --> 09:36:10,240
this object now because functions are
11104
09:36:07,116 --> 09:36:14,320
values we can also save a function
11105
09:36:10,240 --> 09:36:18,560
inside this object so we'll type comma
11106
09:36:14,320 --> 09:36:21,690
and then a property fun colon and we'll
11107
09:36:18,560 --> 09:36:23,916
create a function this time function
11108
09:36:21,690 --> 09:36:27,756
[Music]
11109
09:36:23,916 --> 09:36:30,436
greeting brackets and curly brackets and
11110
09:36:27,756 --> 09:36:36,160
inside we type
11111
09:36:30,436 --> 09:36:40,320
console. log the string hello
11112
09:36:36,160 --> 09:36:44,160
3 so this saves a function inside this
11113
09:36:40,320 --> 09:36:46,840
object under the property fun now to
11114
09:36:44,160 --> 09:36:53,240
access this function we just use the dot
11115
09:36:46,840 --> 09:36:57,000
notation as normal so object one dot
11116
09:36:53,240 --> 09:36:59,880
fun and because this value is a function
11117
09:36:57,000 --> 09:37:02,200
we can call it using
11118
09:36:59,880 --> 09:37:05,240
brackets if we
11119
09:37:02,200 --> 09:37:10,276
save this will run the code inside the
11120
09:37:05,240 --> 09:37:13,200
function and display hello 3 so remember
11121
09:37:10,276 --> 09:37:16,116
this is called a method when we have a
11122
09:37:13,200 --> 09:37:19,276
function saved inside an
11123
09:37:16,116 --> 09:37:22,200
object again as long as there's a way to
11124
09:37:19,276 --> 09:37:25,880
access this function for example using
11125
09:37:22,200 --> 09:37:29,640
object one. fun then we don't need this
11126
09:37:25,880 --> 09:37:31,400
function name so we'll delete it and use
11127
09:37:29,640 --> 09:37:34,480
an anonymous
11128
09:37:31,400 --> 09:37:38,160
function now let's think what else can
11129
09:37:34,480 --> 09:37:43,200
we do with a value we can pass a value
11130
09:37:38,160 --> 09:37:46,320
into a function for example down here
11131
09:37:43,200 --> 09:37:47,840
let's create a function
11132
09:37:46,320 --> 09:37:51,680
function
11133
09:37:47,840 --> 09:37:54,720
display brackets and curly brackets and
11134
09:37:51,680 --> 09:37:57,436
we'll give this function a parameter so
11135
09:37:54,720 --> 09:37:59,276
in here we'll create a parameter and
11136
09:37:57,436 --> 09:38:02,520
name it
11137
09:37:59,276 --> 09:38:08,200
param and inside the function we can use
11138
09:38:02,520 --> 09:38:08,200
a parameter just like a variable so we
11139
09:38:08,240 --> 09:38:14,800
console.log the
11140
09:38:11,200 --> 09:38:17,680
param and then down here let's call this
11141
09:38:14,800 --> 09:38:21,960
function using
11142
09:38:17,680 --> 09:38:24,880
display brackets and two
11143
09:38:21,960 --> 09:38:27,720
this will take the value two save it
11144
09:38:24,880 --> 09:38:30,916
inside Pam and then we can use it just
11145
09:38:27,720 --> 09:38:34,520
like a variable if we
11146
09:38:30,916 --> 09:38:38,160
save this will display two in the
11147
09:38:34,520 --> 09:38:42,080
console so this is known as passing a
11148
09:38:38,160 --> 09:38:45,756
value into a function now because
11149
09:38:42,080 --> 09:38:49,200
functions are values we can also pass a
11150
09:38:45,756 --> 09:38:52,040
function into a function so let's give
11151
09:38:49,200 --> 09:38:55,276
it a try down here
11152
09:38:52,040 --> 09:38:59,916
we'll create a new function
11153
09:38:55,276 --> 09:39:02,520
function run brackets and curly
11154
09:38:59,916 --> 09:39:06,160
brackets and this function will also
11155
09:39:02,520 --> 09:39:10,116
have a parameter let's call it
11156
09:39:06,160 --> 09:39:13,200
param and down here we'll call this
11157
09:39:10,116 --> 09:39:16,000
function run
11158
09:39:13,200 --> 09:39:18,840
brackets and between the brackets we're
11159
09:39:16,000 --> 09:39:21,756
going to give it a function this time so
11160
09:39:18,840 --> 09:39:25,080
we'll type function
11161
09:39:21,756 --> 09:39:29,080
brackets and curly brackets and inside
11162
09:39:25,080 --> 09:39:29,080
the function we'll type
11163
09:39:29,276 --> 09:39:37,916
console.log the string hello
11164
09:39:34,000 --> 09:39:42,400
4 so this will take this function and
11165
09:39:37,916 --> 09:39:46,040
save it inside Pam and now up here we
11166
09:39:42,400 --> 09:39:47,800
can use Pam just like a variable so we
11167
09:39:46,040 --> 09:39:52,040
can type
11168
09:39:47,800 --> 09:39:55,596
Pam and because Pam contains a function
11169
09:39:52,040 --> 09:39:57,840
we can actually just call it using
11170
09:39:55,596 --> 09:40:01,360
brackets if we
11171
09:39:57,840 --> 09:40:04,276
save this code will run the function
11172
09:40:01,360 --> 09:40:08,480
that we created down here and display
11173
09:40:04,276 --> 09:40:11,080
hello 4 so this is called passing a
11174
09:40:08,480 --> 09:40:13,520
function into another
11175
09:40:11,080 --> 09:40:17,840
function the function that we're passing
11176
09:40:13,520 --> 09:40:21,436
in is called a callback function or a
11177
09:40:17,840 --> 09:40:24,756
callback so to summarize functions are
11178
09:40:21,436 --> 09:40:26,840
values anything we can do with a value
11179
09:40:24,756 --> 09:40:29,400
we can also do with a
11180
09:40:26,840 --> 09:40:33,116
function now let's do some practical
11181
09:40:29,400 --> 09:40:35,200
examples using functions as values we're
11182
09:40:33,116 --> 09:40:39,040
going to learn a feature of JavaScript
11183
09:40:35,200 --> 09:40:41,680
called set timeout set timeout allows us
11184
09:40:39,040 --> 09:40:44,436
to run a function in the
11185
09:40:41,680 --> 09:40:48,320
future first we'll comment out the
11186
09:40:44,436 --> 09:40:51,596
previous code using
11187
09:40:48,320 --> 09:40:55,080
slashstar and at the bottom
11188
09:40:51,596 --> 09:40:58,400
star slash and let's create some new
11189
09:40:55,080 --> 09:41:02,360
lines and we're going to type the code
11190
09:40:58,400 --> 09:41:05,916
set capital T time
11191
09:41:02,360 --> 09:41:10,000
out so set timeout is a built-in
11192
09:41:05,916 --> 09:41:14,080
function so we can type brackets to call
11193
09:41:10,000 --> 09:41:17,160
this function Now set timeout takes two
11194
09:41:14,080 --> 09:41:19,560
parameters inside these brackets the
11195
09:41:17,160 --> 09:41:22,276
first parameter is a function that we
11196
09:41:19,560 --> 09:41:24,800
want to run in the future
11197
09:41:22,276 --> 09:41:29,040
let's create a
11198
09:41:24,800 --> 09:41:33,756
function brackets and curly brackets and
11199
09:41:29,040 --> 09:41:33,756
inside this function let's type
11200
09:41:33,960 --> 09:41:42,080
console.log the string time
11201
09:41:38,436 --> 09:41:45,680
out so here we're using a function as a
11202
09:41:42,080 --> 09:41:49,480
value and we're passing it into another
11203
09:41:45,680 --> 09:41:52,116
function at the end we'll type a comma
11204
09:41:49,480 --> 09:41:54,800
and we'll give set timeout a second
11205
09:41:52,116 --> 09:41:57,360
parameter the second parameter is how
11206
09:41:54,800 --> 09:42:00,320
long to wait before running this
11207
09:41:57,360 --> 09:42:03,200
function so this is a number in
11208
09:42:00,320 --> 09:42:08,240
milliseconds 1,000 milliseconds is equal
11209
09:42:03,200 --> 09:42:12,000
to 1 second so if we type 3,000
11210
09:42:08,240 --> 09:42:15,520
milliseconds this is equal to 3 seconds
11211
09:42:12,000 --> 09:42:19,116
so set timeout will wait for 3 seconds
11212
09:42:15,520 --> 09:42:21,640
and then call this function if we
11213
09:42:19,116 --> 09:42:24,080
save after 3 seconds
11214
09:42:21,640 --> 09:42:28,040
it's going to display timeout in the
11215
09:42:24,080 --> 09:42:30,160
console so that's set timeout we give it
11216
09:42:28,040 --> 09:42:32,960
a function and it will call this
11217
09:42:30,160 --> 09:42:35,360
function after a certain amount of
11218
09:42:32,960 --> 09:42:38,160
time so now we're going to learn an
11219
09:42:35,360 --> 09:42:44,916
important concept called a synchronous
11220
09:42:38,160 --> 09:42:44,916
code so after set timeout let's type
11221
09:42:45,000 --> 09:42:52,560
console.log the string next
11222
09:42:49,436 --> 09:42:54,960
line and Save
11223
09:42:52,560 --> 09:42:57,720
so notice that it displays next line
11224
09:42:54,960 --> 09:43:00,436
first and then after 3 seconds it
11225
09:42:57,720 --> 09:43:04,116
displays timeout so what's happening
11226
09:43:00,436 --> 09:43:07,436
here why are they reversed set timeout
11227
09:43:04,116 --> 09:43:10,560
sets up a timer and after 3 seconds it
11228
09:43:07,436 --> 09:43:12,800
will call this function however it
11229
09:43:10,560 --> 09:43:15,960
doesn't actually wait for the 3 seconds
11230
09:43:12,800 --> 09:43:18,756
to finish it just sets up the timer and
11231
09:43:15,960 --> 09:43:22,200
immediately goes to the next line so
11232
09:43:18,756 --> 09:43:25,436
that's why this line is displayed first
11233
09:43:22,200 --> 09:43:27,880
so this is called asynchronous code
11234
09:43:25,436 --> 09:43:30,596
asynchronous code means the computer
11235
09:43:27,880 --> 09:43:33,520
won't wait for this line to finish
11236
09:43:30,596 --> 09:43:36,480
before going on to the next line so for
11237
09:43:33,520 --> 09:43:39,640
set timeout it'll just set up the timer
11238
09:43:36,480 --> 09:43:42,080
and then immediately go to the next line
11239
09:43:39,640 --> 09:43:43,916
synchronous code on the other hand means
11240
09:43:42,080 --> 09:43:47,560
the computer will wait for one line to
11241
09:43:43,916 --> 09:43:49,116
finish before going to the next line so
11242
09:43:47,560 --> 09:43:53,160
all the code we've written in this
11243
09:43:49,116 --> 09:43:56,000
course so far has been synchronous code
11244
09:43:53,160 --> 09:43:59,680
in addition all the code inside this
11245
09:43:56,000 --> 09:44:02,880
function is also synchronous code so if
11246
09:43:59,680 --> 09:44:02,880
we added
11247
09:44:02,916 --> 09:44:09,756
console.log the string time out
11248
09:44:07,560 --> 09:44:12,916
to and
11249
09:44:09,756 --> 09:44:16,160
save the code inside the function will
11250
09:44:12,916 --> 09:44:18,560
still run line by line it will wait for
11251
09:44:16,160 --> 09:44:21,720
each line to finish before going to the
11252
09:44:18,560 --> 09:44:24,916
next line and after 3 seconds it will
11253
09:44:21,720 --> 09:44:28,116
display timeout followed by timeout
11254
09:44:24,916 --> 09:44:30,960
2 so don't worry all the code that we
11255
09:44:28,116 --> 09:44:34,560
normally write will be synchronous code
11256
09:44:30,960 --> 09:44:37,360
it will run line by line as usual the
11257
09:44:34,560 --> 09:44:39,320
only time that code becomes asynchronous
11258
09:44:37,360 --> 09:44:42,756
is when we use certain features of
11259
09:44:39,320 --> 09:44:45,756
JavaScript like set timeout so set
11260
09:44:42,756 --> 09:44:48,160
timeout is the only part that is
11261
09:44:45,756 --> 09:44:50,720
asynchronous now the advantage of set
11262
09:44:48,160 --> 09:44:52,880
timeout being asynchronous is that it
11263
09:44:50,720 --> 09:44:55,840
does doesn't block our code for 3
11264
09:44:52,880 --> 09:44:57,520
seconds waiting for this timer to finish
11265
09:44:55,840 --> 09:44:59,840
it just sets up the timer in the
11266
09:44:57,520 --> 09:45:02,596
background and then goes to the next
11267
09:44:59,840 --> 09:45:04,960
line of code so this allows our code to
11268
09:45:02,596 --> 09:45:07,320
do other things while this timer is
11269
09:45:04,960 --> 09:45:09,960
running in the background and this is
11270
09:45:07,320 --> 09:45:12,360
similar to real life if you set up a
11271
09:45:09,960 --> 09:45:14,520
timer on your alarm clock you're not
11272
09:45:12,360 --> 09:45:16,720
going to stop and wait for the timer to
11273
09:45:14,520 --> 09:45:19,800
finish you're going to go and do
11274
09:45:16,720 --> 09:45:22,596
something else asynchronous code is the
11275
09:45:19,800 --> 09:45:24,596
exact same concept
11276
09:45:22,596 --> 09:45:28,080
next we're going to learn a similar
11277
09:45:24,596 --> 09:45:31,756
function to set timeout called set
11278
09:45:28,080 --> 09:45:36,596
interval so at the bottom let's type the
11279
09:45:31,756 --> 09:45:39,360
code set capital I
11280
09:45:36,596 --> 09:45:42,080
interval and set interval is another
11281
09:45:39,360 --> 09:45:43,720
built-in function so we can call it
11282
09:45:42,080 --> 09:45:46,640
using
11283
09:45:43,720 --> 09:45:50,000
brackets and set interval takes these
11284
09:45:46,640 --> 09:45:52,200
same two parameters as set timeout the
11285
09:45:50,000 --> 09:45:56,560
first parameter is a function that we
11286
09:45:52,200 --> 09:46:00,436
want to run in the future so let's type
11287
09:45:56,560 --> 09:46:03,160
function brackets and curly brackets and
11288
09:46:00,436 --> 09:46:08,916
inside we'll type
11289
09:46:03,160 --> 09:46:08,916
console. log the string
11290
09:46:09,160 --> 09:46:15,436
interval now let's add a comma and the
11291
09:46:12,596 --> 09:46:18,200
second parameter is also a number in
11292
09:46:15,436 --> 09:46:21,916
milliseconds so we'll type 3,000
11293
09:46:18,200 --> 09:46:24,560
milliseconds or 3 seconds so set
11294
09:46:21,916 --> 09:46:27,276
interval will run this function 3
11295
09:46:24,560 --> 09:46:30,200
seconds in the future but this time it
11296
09:46:27,276 --> 09:46:32,756
will keep running the function every 3
11297
09:46:30,200 --> 09:46:36,400
seconds if we
11298
09:46:32,756 --> 09:46:39,200
save in the console every 3 seconds it
11299
09:46:36,400 --> 09:46:42,916
will run the function and display
11300
09:46:39,200 --> 09:46:48,200
interval so set interval is also
11301
09:46:42,916 --> 09:46:51,756
asynchronous below it if we type
11302
09:46:48,200 --> 09:46:53,320
console.log the string next
11303
09:46:51,756 --> 09:46:55,360
line
11304
09:46:53,320 --> 09:46:58,200
two and
11305
09:46:55,360 --> 09:47:01,000
save it will set up the interval and
11306
09:46:58,200 --> 09:47:04,400
then immediately go to the next line and
11307
09:47:01,000 --> 09:47:07,480
display next line two so that's set
11308
09:47:04,400 --> 09:47:10,000
interval we give it a function and it
11309
09:47:07,480 --> 09:47:13,520
will keep running this function after a
11310
09:47:10,000 --> 09:47:16,840
certain period of time so now let's do a
11311
09:47:13,520 --> 09:47:19,520
project using what we learned so far
11312
09:47:16,840 --> 09:47:21,720
let's go to our browser and we'll create
11313
09:47:19,520 --> 09:47:26,720
a new tab at the top
11314
09:47:21,720 --> 09:47:28,240
top and here let's type
11315
09:47:26,720 --> 09:47:36,116
superimple
11316
09:47:28,240 --> 09:47:38,720
dodev slash projects slash Advanced Das
11317
09:47:36,116 --> 09:47:41,800
functions and press
11318
09:47:38,720 --> 09:47:43,960
enter so this is basically the rock
11319
09:47:41,800 --> 09:47:47,116
paper scissors game that we created
11320
09:47:43,960 --> 09:47:50,480
earlier except this time it has an extra
11321
09:47:47,116 --> 09:47:51,276
button called autop playay if we click
11322
09:47:50,480 --> 09:47:54,320
this Buton
11323
09:47:51,276 --> 09:47:55,436
button every second the computer will
11324
09:47:54,320 --> 09:47:58,000
play by
11325
09:47:55,436 --> 09:47:59,800
itself so this feature will help us
11326
09:47:58,000 --> 09:48:02,800
practice using set
11327
09:47:59,800 --> 09:48:06,360
interval so first let's make a copy of
11328
09:48:02,800 --> 09:48:09,916
the project files we'll go into our code
11329
09:48:06,360 --> 09:48:13,916
editor and click this icon to show our
11330
09:48:09,916 --> 09:48:17,596
files and let's make a copy of 10 rock
11331
09:48:13,916 --> 09:48:20,960
paper scissors for this lesson so we'll
11332
09:48:17,596 --> 09:48:25,640
rightclick copy
11333
09:48:20,960 --> 09:48:29,640
and down here rightclick and
11334
09:48:25,640 --> 09:48:32,360
paste and I'll stop this for now so here
11335
09:48:29,640 --> 09:48:34,480
we're going to change the name by right
11336
09:48:32,360 --> 09:48:38,680
clicking
11337
09:48:34,480 --> 09:48:42,080
rename we'll remove copy at the end and
11338
09:48:38,680 --> 09:48:43,916
at the beginning we'll change it to 12
11339
09:48:42,080 --> 09:48:47,436
and press
11340
09:48:43,916 --> 09:48:50,916
enter and let's also make a copy of the
11341
09:48:47,436 --> 09:48:54,560
JavaScript and CSS files so we'll click
11342
09:48:50,916 --> 09:48:58,040
this file and right click
11343
09:48:54,560 --> 09:48:59,960
copy and then click the folder right
11344
09:48:58,040 --> 09:49:03,400
click
11345
09:48:59,960 --> 09:49:05,240
paste and we'll rename this file
11346
09:49:03,400 --> 09:49:09,400
rightclick
11347
09:49:05,240 --> 09:49:12,880
rename remove copy at the end and at the
11348
09:49:09,400 --> 09:49:15,756
beginning change it to 12 and press
11349
09:49:12,880 --> 09:49:21,756
enter and let's also make a copy of the
11350
09:49:15,756 --> 09:49:26,276
CSS file select it rightclick copy
11351
09:49:21,756 --> 09:49:30,436
click the folder right click and
11352
09:49:26,276 --> 09:49:34,720
paste and right click
11353
09:49:30,436 --> 09:49:38,756
rename remove copy and at the front
11354
09:49:34,720 --> 09:49:42,640
change it to 12 and press
11355
09:49:38,756 --> 09:49:44,160
enter now let's scroll down to 12 rock
11356
09:49:42,640 --> 09:49:47,160
paper
11357
09:49:44,160 --> 09:49:50,360
scissors and I'll close this for
11358
09:49:47,160 --> 09:49:54,720
now and inside the head let's change
11359
09:49:50,360 --> 09:49:56,116
this to load 12 rock paper scissors and
11360
09:49:54,720 --> 09:49:59,360
we'll scroll to the
11361
09:49:56,116 --> 09:50:03,360
bottom and here instead of the lesson 10
11362
09:49:59,360 --> 09:50:07,240
file we'll load The Lesson 12 Javascript
11363
09:50:03,360 --> 09:50:09,240
file let's save and we'll open this in
11364
09:50:07,240 --> 09:50:12,436
the browser by
11365
09:50:09,240 --> 09:50:16,080
right-clicking open with live
11366
09:50:12,436 --> 09:50:18,880
server so now we're ready to begin let's
11367
09:50:16,080 --> 09:50:20,840
go back to superimple
11368
09:50:18,880 --> 09:50:24,240
dodev and the first thing thing we're
11369
09:50:20,840 --> 09:50:26,840
going to create is this autoplay button
11370
09:50:24,240 --> 09:50:30,276
so beside the reset score button which
11371
09:50:26,840 --> 09:50:34,960
is here we're going to create a new
11372
09:50:30,276 --> 09:50:38,800
button less than button greater than and
11373
09:50:34,960 --> 09:50:40,800
inside we'll have the text auto
11374
09:50:38,800 --> 09:50:43,800
play let's
11375
09:50:40,800 --> 09:50:47,640
save and go back to our
11376
09:50:43,800 --> 09:50:50,840
Tab and now we have this button so next
11377
09:50:47,640 --> 09:50:52,436
let's style this button with CSS so
11378
09:50:50,840 --> 09:50:56,916
we'll give it a
11379
09:50:52,436 --> 09:50:59,520
class class equals
11380
09:50:56,916 --> 09:51:01,596
auto-play Das
11381
09:50:59,520 --> 09:51:06,000
button and
11382
09:51:01,596 --> 09:51:08,640
save and now let's open the CSS
11383
09:51:06,000 --> 09:51:11,480
file I'm going to take this file and
11384
09:51:08,640 --> 09:51:14,880
then drag it to the bottom so I can see
11385
09:51:11,480 --> 09:51:18,840
it side by side so I'll close this for
11386
09:51:14,880 --> 09:51:21,400
now and rearrange this a little bit and
11387
09:51:18,840 --> 09:51:23,756
then down here and we're going to style
11388
09:51:21,400 --> 09:51:25,916
the autop playay button so let's just
11389
09:51:23,756 --> 09:51:29,640
make the style the same as the reset
11390
09:51:25,916 --> 09:51:33,880
score button so in the CSS we'll scroll
11391
09:51:29,640 --> 09:51:37,360
down to the reset score button Styles so
11392
09:51:33,880 --> 09:51:40,040
we'll add a comma at the end and type
11393
09:51:37,360 --> 09:51:44,040
dot
11394
09:51:40,040 --> 09:51:46,720
auto-play dasb button so now these
11395
09:51:44,040 --> 09:51:50,320
Styles will apply to the class reset
11396
09:51:46,720 --> 09:51:51,436
score button and the auto playay button
11397
09:51:50,320 --> 09:51:55,756
if if we
11398
09:51:51,436 --> 09:51:58,680
save now we styled our project so next
11399
09:51:55,756 --> 09:52:03,916
let's make this button interactive so at
11400
09:51:58,680 --> 09:52:06,320
the top here we'll add an onclick
11401
09:52:03,916 --> 09:52:09,276
attribute and then in here we're going
11402
09:52:06,320 --> 09:52:11,436
to run some JavaScript code let's
11403
09:52:09,276 --> 09:52:13,840
actually create a function so we can
11404
09:52:11,436 --> 09:52:18,880
separate the JavaScript into its own
11405
09:52:13,840 --> 09:52:21,276
file so we'll run a function called auto
11406
09:52:18,880 --> 09:52:23,756
play and
11407
09:52:21,276 --> 09:52:26,680
brackets so now let's
11408
09:52:23,756 --> 09:52:29,360
save and right now this function doesn't
11409
09:52:26,680 --> 09:52:32,436
exist so we have to create this function
11410
09:52:29,360 --> 09:52:35,520
in the Javascript file so for me the
11411
09:52:32,436 --> 09:52:37,916
file is right here I'll select it and
11412
09:52:35,520 --> 09:52:41,880
then drag it down here so I can see it
11413
09:52:37,916 --> 09:52:43,756
side by side so let's scroll down and
11414
09:52:41,880 --> 09:52:47,276
I'm going to create it just above the
11415
09:52:43,756 --> 09:52:51,720
play game function so here we'll create
11416
09:52:47,276 --> 09:52:55,960
some new lines and type function
11417
09:52:51,720 --> 09:52:59,000
auto play brackets and curly
11418
09:52:55,960 --> 09:53:02,200
brackets and now inside this function we
11419
09:52:59,000 --> 09:53:05,276
want to play the game every second so we
11420
09:53:02,200 --> 09:53:10,756
can use set interval to run some code
11421
09:53:05,276 --> 09:53:12,320
every second so let's type set
11422
09:53:10,756 --> 09:53:15,160
interval
11423
09:53:12,320 --> 09:53:18,880
brackets and inside the brackets will
11424
09:53:15,160 --> 09:53:21,520
give it a function that we want to run
11425
09:53:18,880 --> 09:53:24,480
so brackets and curly
11426
09:53:21,520 --> 09:53:27,840
brackets and then at the end let's type
11427
09:53:24,480 --> 09:53:30,596
a comma and we'll give it
11428
09:53:27,840 --> 09:53:34,560
1,000 so this means it will run this
11429
09:53:30,596 --> 09:53:37,560
function every 1,000 milliseconds or 1
11430
09:53:34,560 --> 09:53:39,640
second and now inside this function
11431
09:53:37,560 --> 09:53:42,596
we're going to automatically play the
11432
09:53:39,640 --> 09:53:46,116
game and to play the game we can use
11433
09:53:42,596 --> 09:53:51,360
this function right here play game so
11434
09:53:46,116 --> 09:53:53,640
here we'll type play game
11435
09:53:51,360 --> 09:53:57,200
brackets now we need to provide this
11436
09:53:53,640 --> 09:53:59,880
function with a Player move and remember
11437
09:53:57,200 --> 09:54:03,880
we have another function pick computer
11438
09:53:59,880 --> 09:54:08,400
move which will give us a random move so
11439
09:54:03,880 --> 09:54:09,916
above this line let's create a variable
11440
09:54:08,400 --> 09:54:14,200
const
11441
09:54:09,916 --> 09:54:18,960
Player move and we'll make it equal and
11442
09:54:14,200 --> 09:54:21,200
we'll pick a random move using pick
11443
09:54:18,960 --> 09:54:22,720
computer move
11444
09:54:21,200 --> 09:54:25,360
and
11445
09:54:22,720 --> 09:54:28,240
brackets and finally we'll take this
11446
09:54:25,360 --> 09:54:32,200
move that we picked and pass it into
11447
09:54:28,240 --> 09:54:35,480
this function so Player
11448
09:54:32,200 --> 09:54:39,880
move so now when we click this button it
11449
09:54:35,480 --> 09:54:43,276
should play the game every second let's
11450
09:54:39,880 --> 09:54:46,200
save and click
11451
09:54:43,276 --> 09:54:49,480
autoplay and it works the computer is
11452
09:54:46,200 --> 09:54:51,276
playing against itself every second so
11453
09:54:49,480 --> 09:54:54,596
now let's make this button button stop
11454
09:54:51,276 --> 09:54:57,916
playing when we click it again so at the
11455
09:54:54,596 --> 09:55:01,040
top let's create a variable to keep
11456
09:54:57,916 --> 09:55:07,756
track of whether or not we're playing so
11457
09:55:01,040 --> 09:55:11,320
we use let is auto playing and at the
11458
09:55:07,756 --> 09:55:13,400
start we'll make it equal to
11459
09:55:11,320 --> 09:55:17,080
false and
11460
09:55:13,400 --> 09:55:20,756
save and now inside this function we'll
11461
09:55:17,080 --> 09:55:21,680
check using an if statement brackets and
11462
09:55:20,756 --> 09:55:24,880
curly
11463
09:55:21,680 --> 09:55:30,880
brackets and inside this condition let's
11464
09:55:24,880 --> 09:55:33,000
check if we're not playing so not is
11465
09:55:30,880 --> 09:55:36,040
auto
11466
09:55:33,000 --> 09:55:38,880
playing so if we're not playing then we
11467
09:55:36,040 --> 09:55:42,116
want to start playing the game which is
11468
09:55:38,880 --> 09:55:45,916
this code down here so let's select this
11469
09:55:42,116 --> 09:55:51,840
code and then right click
11470
09:55:45,916 --> 09:55:55,040
cut and in here right click and
11471
09:55:51,840 --> 09:55:57,160
paste and also after we start playing
11472
09:55:55,040 --> 09:56:03,520
the game we're going to change this
11473
09:55:57,160 --> 09:56:07,160
variable to true so is auto playing and
11474
09:56:03,520 --> 09:56:10,840
we'll make it equal to true because now
11475
09:56:07,160 --> 09:56:12,840
we are autop playing so now let's add
11476
09:56:10,840 --> 09:56:16,360
the else Branch to this
11477
09:56:12,840 --> 09:56:19,640
statement else curly
11478
09:56:16,360 --> 09:56:23,596
brackets so now we need to stop this
11479
09:56:19,640 --> 09:56:26,320
interval so how do we do that the answer
11480
09:56:23,596 --> 09:56:29,880
is that set interval actually returns a
11481
09:56:26,320 --> 09:56:33,800
number and this number is like an ID we
11482
09:56:29,880 --> 09:56:37,040
can use this ID to stop the interval so
11483
09:56:33,800 --> 09:56:39,960
at the front let's create a variable to
11484
09:56:37,040 --> 09:56:41,960
save this ID
11485
09:56:39,960 --> 09:56:45,480
const
11486
09:56:41,960 --> 09:56:48,276
interval ID and
11487
09:56:45,480 --> 09:56:51,276
equals however there's another problem
11488
09:56:48,276 --> 09:56:54,320
here every time we run the function
11489
09:56:51,276 --> 09:56:57,360
we're going to get a different ID so in
11490
09:56:54,320 --> 09:57:00,080
order to save the ID from last time we
11491
09:56:57,360 --> 09:57:03,596
need to put this variable outside the
11492
09:57:00,080 --> 09:57:08,080
function so let's select this and remove
11493
09:57:03,596 --> 09:57:12,480
it for now and we'll scroll up and here
11494
09:57:08,080 --> 09:57:16,436
we'll create the variable let
11495
09:57:12,480 --> 09:57:19,960
interval ID and we'll leave it undefined
11496
09:57:16,436 --> 09:57:22,840
to start and now down here we're going
11497
09:57:19,960 --> 09:57:25,880
to save the return value into this
11498
09:57:22,840 --> 09:57:30,276
variable by typing
11499
09:57:25,880 --> 09:57:33,240
interval ID equals set
11500
09:57:30,276 --> 09:57:36,720
interval and now at the bottom we're
11501
09:57:33,240 --> 09:57:40,040
going to use the interval ID to stop the
11502
09:57:36,720 --> 09:57:42,880
interval let's scroll down and to stop
11503
09:57:40,040 --> 09:57:47,436
an interval we can use a function called
11504
09:57:42,880 --> 09:57:50,840
clear interval so we'll type clear
11505
09:57:47,436 --> 09:57:52,080
capital I interval
11506
09:57:50,840 --> 09:57:54,800
and
11507
09:57:52,080 --> 09:57:57,040
brackets and between the brackets we're
11508
09:57:54,800 --> 09:58:00,596
going to give it an ID that we want to
11509
09:57:57,040 --> 09:58:02,640
stop so we'll give it this interval
11510
09:58:00,596 --> 09:58:04,320
ID
11511
09:58:02,640 --> 09:58:07,800
interval
11512
09:58:04,320 --> 09:58:11,200
ID and then at the bottom let's also
11513
09:58:07,800 --> 09:58:17,756
change is autop playing to false because
11514
09:58:11,200 --> 09:58:20,436
we just stopped it so is auto playing
11515
09:58:17,756 --> 09:58:21,680
equals false
11516
09:58:20,436 --> 09:58:25,080
and
11517
09:58:21,680 --> 09:58:27,840
save so now if we try out this
11518
09:58:25,080 --> 09:58:30,640
button it will start playing the game by
11519
09:58:27,840 --> 09:58:34,040
itself every second and if we click the
11520
09:58:30,640 --> 09:58:37,360
button again it will stop playing the
11521
09:58:34,040 --> 09:58:40,520
game so that's how we stop an interval
11522
09:58:37,360 --> 09:58:44,960
we need to save the ID and then call
11523
09:58:40,520 --> 09:58:47,160
clear interval with this ID so now I'll
11524
09:58:44,960 --> 09:58:50,800
clean up the code a little by removing
11525
09:58:47,160 --> 09:58:53,080
this extra line and Save
11526
09:58:50,800 --> 09:58:57,116
and now we're finished with this
11527
09:58:53,080 --> 09:59:00,436
feature so next let's go back to our
11528
09:58:57,116 --> 09:59:04,596
Advanced functions file so I'll click up
11529
09:59:00,436 --> 09:59:06,480
here and then at the bottom I'll open 12
11530
09:59:04,596 --> 09:59:10,240
Advanced
11531
09:59:06,480 --> 09:59:12,400
functions and hide the files for now and
11532
09:59:10,240 --> 09:59:16,080
we're going to learn some more features
11533
09:59:12,400 --> 09:59:20,400
of functions as values so let's actually
11534
09:59:16,080 --> 09:59:23,000
close the other files that we opened
11535
09:59:20,400 --> 09:59:25,080
and first let's comment out the previous
11536
09:59:23,000 --> 09:59:29,720
code with
11537
09:59:25,080 --> 09:59:33,240
slashstar and at the bottom star
11538
09:59:29,720 --> 09:59:37,800
slash let's scroll down and
11539
09:59:33,240 --> 09:59:40,880
save and let's open the tab for this
11540
09:59:37,800 --> 09:59:44,560
file so now we're going to learn another
11541
09:59:40,880 --> 09:59:47,756
way to Loop through an array first let's
11542
09:59:44,560 --> 09:59:50,916
create an array we'll type square
11543
09:59:47,756 --> 09:59:54,840
brackets and inside the array we'll have
11544
09:59:50,916 --> 10:00:00,000
the string make
11545
09:59:54,840 --> 10:00:02,200
dinner and another string wash
11546
10:00:00,000 --> 10:00:06,276
dishes and another
11547
10:00:02,200 --> 10:00:09,160
string watch
11548
10:00:06,276 --> 10:00:11,840
YouTube so in the previous lesson we
11549
10:00:09,160 --> 10:00:15,596
learned how to Loop through an array
11550
10:00:11,840 --> 10:00:18,436
using a for Loop or a while loop another
11551
10:00:15,596 --> 10:00:22,720
way to Loop through an array is using a
11552
10:00:18,436 --> 10:00:27,596
method of the array called four each so
11553
10:00:22,720 --> 10:00:31,200
at the bottom let's type dot for capital
11554
10:00:27,596 --> 10:00:34,916
E each and
11555
10:00:31,200 --> 10:00:37,680
brackets so this is the four each method
11556
10:00:34,916 --> 10:00:40,520
and it allows us to Loop through this
11557
10:00:37,680 --> 10:00:43,756
array inside these brackets we're going
11558
10:00:40,520 --> 10:00:45,720
to give for each a function so we'll
11559
10:00:43,756 --> 10:00:50,040
type
11560
10:00:45,720 --> 10:00:53,240
function brackets and curly brackets so
11561
10:00:50,040 --> 10:00:54,436
again we're just passing a function into
11562
10:00:53,240 --> 10:00:57,400
another
11563
10:00:54,436 --> 10:00:59,520
function however this function will be a
11564
10:00:57,400 --> 10:01:03,560
little different we're going to give it
11565
10:00:59,520 --> 10:01:06,360
a parameter so up here let's create a
11566
10:01:03,560 --> 10:01:09,880
parameter called
11567
10:01:06,360 --> 10:01:12,840
value so what four each does is that it
11568
10:01:09,880 --> 10:01:15,480
Loops through the array and for each of
11569
10:01:12,840 --> 10:01:19,360
these values it will save the value in
11570
10:01:15,480 --> 10:01:21,840
the parameter and run the function so
11571
10:01:19,360 --> 10:01:21,840
let's
11572
10:01:22,840 --> 10:01:27,320
console.log
11573
10:01:24,880 --> 10:01:30,756
value and
11574
10:01:27,320 --> 10:01:34,360
save so this will Loop through the array
11575
10:01:30,756 --> 10:01:37,116
and display each value in the console so
11576
10:01:34,360 --> 10:01:40,040
let's go through this step bystep so
11577
10:01:37,116 --> 10:01:43,320
it'll take the first value save it in
11578
10:01:40,040 --> 10:01:45,840
this parameter and run the function then
11579
10:01:43,320 --> 10:01:49,000
it will take the second value save it in
11580
10:01:45,840 --> 10:01:51,436
the parameter and run the function then
11581
10:01:49,000 --> 10:01:54,240
it will take the Third value save it in
11582
10:01:51,436 --> 10:01:57,080
the parameter and run the
11583
10:01:54,240 --> 10:01:59,160
function so the for each method is
11584
10:01:57,080 --> 10:02:02,040
actually the preferred way to Loop
11585
10:01:59,160 --> 10:02:05,880
through an array because this is easier
11586
10:02:02,040 --> 10:02:09,320
to read than a for Loop like this and
11587
10:02:05,880 --> 10:02:12,400
for each also has another feature we can
11588
10:02:09,320 --> 10:02:15,276
give this function a second parameter so
11589
10:02:12,400 --> 10:02:17,276
we can type comma and the second
11590
10:02:15,276 --> 10:02:20,240
parameter is the
11591
10:02:17,276 --> 10:02:23,840
index or the position of the value in
11592
10:02:20,240 --> 10:02:26,880
the array so for the first value index
11593
10:02:23,840 --> 10:02:29,800
will be zero for the second value index
11594
10:02:26,880 --> 10:02:35,080
will be one third value index will be
11595
10:02:29,800 --> 10:02:38,080
two and so on so above this line let's
11596
10:02:35,080 --> 10:02:38,080
also
11597
10:02:38,200 --> 10:02:42,880
console.log the
11598
10:02:40,640 --> 10:02:45,680
index and
11599
10:02:42,880 --> 10:02:47,680
save and this will also display the
11600
10:02:45,680 --> 10:02:50,960
index of each
11601
10:02:47,680 --> 10:02:54,240
value all right now let's do a practical
11602
10:02:50,960 --> 10:02:56,040
example using the for each method we're
11603
10:02:54,240 --> 10:02:58,560
going to go back to the to-do list
11604
10:02:56,040 --> 10:03:01,360
project that we created in the previous
11605
10:02:58,560 --> 10:03:02,640
lesson so we'll click up here to show
11606
10:03:01,360 --> 10:03:06,960
our
11607
10:03:02,640 --> 10:03:09,880
files and let's scroll up and let's open
11608
10:03:06,960 --> 10:03:13,000
11 too
11609
10:03:09,880 --> 10:03:15,480
list.js so in this code we used a for
11610
10:03:13,000 --> 10:03:18,160
Loop to display the to-do list on the
11611
10:03:15,480 --> 10:03:21,800
page we're going to switch this to using
11612
10:03:18,160 --> 10:03:24,000
a for each method instead said so first
11613
10:03:21,800 --> 10:03:27,596
let's actually make a copy of the files
11614
10:03:24,000 --> 10:03:32,916
for this project we'll click up
11615
10:03:27,596 --> 10:03:34,880
here and let's click 11 to-do list and
11616
10:03:32,916 --> 10:03:37,680
rightclick
11617
10:03:34,880 --> 10:03:41,640
copy and let's click the script
11618
10:03:37,680 --> 10:03:45,320
folder rightclick and
11619
10:03:41,640 --> 10:03:47,680
paste and now we'll rename this by
11620
10:03:45,320 --> 10:03:51,240
right-clicking
11621
10:03:47,680 --> 10:03:56,240
rename remove copy from the end and
11622
10:03:51,240 --> 10:03:59,720
change the beginning to 12 and press
11623
10:03:56,240 --> 10:04:02,916
enter let's also make a copy of the CSS
11624
10:03:59,720 --> 10:04:07,800
and HTML file for this project so we'll
11625
10:04:02,916 --> 10:04:12,040
click the CSS file right click
11626
10:04:07,800 --> 10:04:13,640
copy click the Styles folder right click
11627
10:04:12,040 --> 10:04:17,596
and
11628
10:04:13,640 --> 10:04:20,400
paste rightclick
11629
10:04:17,596 --> 10:04:23,880
rename remove copy
11630
10:04:20,400 --> 10:04:25,000
and at the front change it to 12 and
11631
10:04:23,880 --> 10:04:28,480
press
11632
10:04:25,000 --> 10:04:30,880
enter and finally we'll scroll down
11633
10:04:28,480 --> 10:04:32,436
click 11 Todo list.
11634
10:04:30,880 --> 10:04:34,276
HTML
11635
10:04:32,436 --> 10:04:39,520
rightclick
11636
10:04:34,276 --> 10:04:43,080
copy and then down here right click and
11637
10:04:39,520 --> 10:04:46,756
paste right click
11638
10:04:43,080 --> 10:04:51,436
rename remove copy at the end and at the
11639
10:04:46,756 --> 10:04:54,680
beginning change it to 12 and and press
11640
10:04:51,436 --> 10:04:57,720
enter now we can hide these
11641
10:04:54,680 --> 10:05:00,756
files and we can close the lesson 11
11642
10:04:57,720 --> 10:05:04,756
files and now here we're going to change
11643
10:05:00,756 --> 10:05:07,596
the CSS file that we load to 12 to-do
11644
10:05:04,756 --> 10:05:09,520
list and we'll scroll down and we'll
11645
10:05:07,596 --> 10:05:14,320
also change the Javascript file that we
11646
10:05:09,520 --> 10:05:17,520
load to 12 to-do list now let's
11647
10:05:14,320 --> 10:05:20,000
save and we'll open this in the browser
11648
10:05:17,520 --> 10:05:22,560
by right clicking
11649
10:05:20,000 --> 10:05:26,040
open with live
11650
10:05:22,560 --> 10:05:29,276
server okay now let's go back to the JS
11651
10:05:26,040 --> 10:05:30,240
file so I'll take this file and drag it
11652
10:05:29,276 --> 10:05:33,276
to the
11653
10:05:30,240 --> 10:05:36,400
bottom and I'll rearrange the windows
11654
10:05:33,276 --> 10:05:38,680
here we're going to scroll down and
11655
10:05:36,400 --> 10:05:42,360
we'll change this for Loop to use a for
11656
10:05:38,680 --> 10:05:45,400
each method so first let's type above
11657
10:05:42,360 --> 10:05:48,560
this for Loop and we'll type the array
11658
10:05:45,400 --> 10:05:53,596
that we want to Loop through which is
11659
10:05:48,560 --> 10:05:57,400
Todo list and we'll type Dot and use the
11660
10:05:53,596 --> 10:05:59,916
four each method and
11661
10:05:57,400 --> 10:06:02,160
brackets inside the brackets we'll give
11662
10:05:59,916 --> 10:06:05,756
it a function that we want to run for
11663
10:06:02,160 --> 10:06:09,080
each to do so we'll type
11664
10:06:05,756 --> 10:06:12,400
function brackets and curly
11665
10:06:09,080 --> 10:06:14,720
brackets and this function can have two
11666
10:06:12,400 --> 10:06:18,000
parameters the first parameter will
11667
10:06:14,720 --> 10:06:19,560
contain each value in the array so we'll
11668
10:06:18,000 --> 10:06:20,960
call it too
11669
10:06:19,560 --> 10:06:24,560
[Music]
11670
10:06:20,960 --> 10:06:27,080
object we'll type a comma and the second
11671
10:06:24,560 --> 10:06:30,360
parameter contains each index in the
11672
10:06:27,080 --> 10:06:33,680
array so we'll just call it
11673
10:06:30,360 --> 10:06:35,720
index and now inside this Loop we
11674
10:06:33,680 --> 10:06:39,116
basically want to do everything that we
11675
10:06:35,720 --> 10:06:40,000
did here so let's just make a copy of
11676
10:06:39,116 --> 10:06:43,720
this
11677
10:06:40,000 --> 10:06:48,200
code right click
11678
10:06:43,720 --> 10:06:51,000
copy and then up here inside for each
11679
10:06:48,200 --> 10:06:54,916
right click and and
11680
10:06:51,000 --> 10:06:57,840
paste so now if we scroll up we already
11681
10:06:54,916 --> 10:07:00,080
have the to-do object up here so we
11682
10:06:57,840 --> 10:07:04,160
don't need to get it from the array like
11683
10:07:00,080 --> 10:07:07,320
before so we can remove this line and
11684
10:07:04,160 --> 10:07:07,320
let's also remove these
11685
10:07:08,160 --> 10:07:12,680
comments the other thing we have to
11686
10:07:10,160 --> 10:07:16,040
change is that previously we were using
11687
10:07:12,680 --> 10:07:19,520
I for the index but now the index is
11688
10:07:16,040 --> 10:07:21,916
called index so we just change this to
11689
10:07:19,520 --> 10:07:25,000
to
11690
10:07:21,916 --> 10:07:28,080
index so that's how we use a for each
11691
10:07:25,000 --> 10:07:30,880
method instead of a for Loop if we
11692
10:07:28,080 --> 10:07:33,800
compare this code to the four Loop that
11693
10:07:30,880 --> 10:07:36,480
we had before the for each method is
11694
10:07:33,800 --> 10:07:39,160
easier to read so for the rest of this
11695
10:07:36,480 --> 10:07:42,520
course we're going to prefer to use four
11696
10:07:39,160 --> 10:07:45,880
each instead of a for Loop so we're
11697
10:07:42,520 --> 10:07:45,880
going to remove this for
11698
10:07:48,160 --> 10:07:56,360
Loop let's scroll back up and
11699
10:07:52,520 --> 10:07:58,680
save and the project still works so
11700
10:07:56,360 --> 10:08:01,916
that's a practical example of using the
11701
10:07:58,680 --> 10:08:05,560
for each method now let's go back and
11702
10:08:01,916 --> 10:08:08,680
learn some more details about for each
11703
10:08:05,560 --> 10:08:12,960
we'll close the Javascript file for now
11704
10:08:08,680 --> 10:08:15,880
and go back to Advanced functions. HTML
11705
10:08:12,960 --> 10:08:18,720
and open the tab for this
11706
10:08:15,880 --> 10:08:21,200
file so in the previous lesson we
11707
10:08:18,720 --> 10:08:23,916
learned a feature of Loops called
11708
10:08:21,200 --> 10:08:26,840
continue continue lets us skip to the
11709
10:08:23,916 --> 10:08:29,756
next iteration or the next run of the
11710
10:08:26,840 --> 10:08:31,960
loop for each methods don't have
11711
10:08:29,756 --> 10:08:35,080
continue but we can do the same thing
11712
10:08:31,960 --> 10:08:38,160
with a return statement so let's say in
11713
10:08:35,080 --> 10:08:40,840
this Loop we don't like washing dishes
11714
10:08:38,160 --> 10:08:43,720
if the value is wash dishes we're going
11715
10:08:40,840 --> 10:08:47,880
to skip it and not display it in the
11716
10:08:43,720 --> 10:08:50,160
console so above we'll create an if
11717
10:08:47,880 --> 10:08:52,116
statement
11718
10:08:50,160 --> 10:08:57,720
and then inside the condition we'll
11719
10:08:52,116 --> 10:08:59,436
check if value is equal to the string
11720
10:08:57,720 --> 10:09:02,520
wash
11721
10:08:59,436 --> 10:09:06,680
dishes and then in the curly brackets if
11722
10:09:02,520 --> 10:09:09,520
it is equal will return and
11723
10:09:06,680 --> 10:09:12,080
semicolon so this return statement will
11724
10:09:09,520 --> 10:09:15,000
end this function early and it will go
11725
10:09:12,080 --> 10:09:17,916
on to the next function so it basically
11726
10:09:15,000 --> 10:09:20,000
does the same thing as continue in a for
11727
10:09:17,916 --> 10:09:23,880
Loop if we
11728
10:09:20,000 --> 10:09:26,680
save you'll notice that it skipped wash
11729
10:09:23,880 --> 10:09:29,800
dishes in the previous lesson we also
11730
10:09:26,680 --> 10:09:32,960
learned a feature of Loops called break
11731
10:09:29,800 --> 10:09:35,116
break lets us exit a loop early
11732
10:09:32,960 --> 10:09:38,596
unfortunately there's not an easy way to
11733
10:09:35,116 --> 10:09:42,000
break in a 4 each Loop so if we need to
11734
10:09:38,596 --> 10:09:46,160
use break to exit this Loop early then
11735
10:09:42,000 --> 10:09:46,160
it's better to use a regular for
11736
10:09:46,200 --> 10:09:51,480
Loop let's take a break before
11737
10:09:48,520 --> 10:09:53,320
continuing with the rest of this lesson
11738
10:09:51,480 --> 10:09:58,080
here are some exercises that will help
11739
10:09:53,320 --> 10:09:58,080
you practice what we learned so far
11740
10:10:25,400 --> 10:10:31,320
so next we're going to move on and learn
11741
10:10:28,116 --> 10:10:34,080
a shorter way to write functions called
11742
10:10:31,320 --> 10:10:36,680
Arrow functions so let's go to the
11743
10:10:34,080 --> 10:10:41,520
bottom of this code we'll create some
11744
10:10:36,680 --> 10:10:46,640
new lines and let's create a variable
11745
10:10:41,520 --> 10:10:50,276
const and we'll name the variable Arrow
11746
10:10:46,640 --> 10:10:55,400
function and we'll make it equal to to
11747
10:10:50,276 --> 10:10:57,240
brackets equal greater than or an arrow
11748
10:10:55,400 --> 10:10:59,960
and then curly
11749
10:10:57,240 --> 10:11:03,436
brackets inside the curly brackets we'll
11750
10:10:59,960 --> 10:11:03,436
type some code
11751
10:11:03,640 --> 10:11:11,116
console.log brackets and the string
11752
10:11:07,880 --> 10:11:14,916
hello and we'll put a semicolon at the
11753
10:11:11,116 --> 10:11:18,360
end so this is an arrow function it
11754
10:11:14,916 --> 10:11:21,240
works the same way as a regular function
11755
10:11:18,360 --> 10:11:25,480
for example we can call this Arrow
11756
10:11:21,240 --> 10:11:27,160
function by typing the variable name
11757
10:11:25,480 --> 10:11:29,480
Arrow
11758
10:11:27,160 --> 10:11:31,800
function and
11759
10:11:29,480 --> 10:11:35,000
brackets if we
11760
10:11:31,800 --> 10:11:39,116
save this line of code will run the code
11761
10:11:35,000 --> 10:11:42,400
inside this Arrow function and display
11762
10:11:39,116 --> 10:11:45,800
hello so Arrow functions mostly work the
11763
10:11:42,400 --> 10:11:48,360
same way as regular functions so to
11764
10:11:45,800 --> 10:11:51,480
compare them let's actually type above
11765
10:11:48,360 --> 10:11:53,240
this code we'll create some new lines
11766
10:11:51,480 --> 10:11:54,800
and type
11767
10:11:53,240 --> 10:11:56,756
const
11768
10:11:54,800 --> 10:12:00,840
regular
11769
10:11:56,756 --> 10:12:06,756
function equals the word
11770
10:12:00,840 --> 10:12:06,756
function brackets and curly brackets
11771
10:12:07,040 --> 10:12:14,640
console.log string
11772
10:12:10,840 --> 10:12:17,160
hello so these two syntaxes do the same
11773
10:12:14,640 --> 10:12:19,800
thing the difference is that instead of
11774
10:12:17,160 --> 10:12:22,040
using the word function an arrow
11775
10:12:19,800 --> 10:12:25,116
function just uses an
11776
10:12:22,040 --> 10:12:27,756
arrow now parameters work the same way
11777
10:12:25,116 --> 10:12:30,640
in an arrow function we just type the
11778
10:12:27,756 --> 10:12:33,720
parameter between these round brackets
11779
10:12:30,640 --> 10:12:37,116
so here let's type
11780
10:12:33,720 --> 10:12:40,360
param and here as
11781
10:12:37,116 --> 10:12:43,756
well if we want multiple parameters it
11782
10:12:40,360 --> 10:12:49,960
also works the same way up here we can
11783
10:12:43,756 --> 10:12:54,756
type comma param 2 and down here comma
11784
10:12:49,960 --> 10:12:58,360
Pam 2 and finally return statements also
11785
10:12:54,756 --> 10:13:02,520
work the same way so in this function we
11786
10:12:58,360 --> 10:13:06,520
can return five and in the arrow
11787
10:13:02,520 --> 10:13:09,436
function we can also return
11788
10:13:06,520 --> 10:13:12,400
five so now let's learn some differences
11789
10:13:09,436 --> 10:13:14,960
between these two Arrow functions have a
11790
10:13:12,400 --> 10:13:19,560
few shortcuts that regular functions
11791
10:13:14,960 --> 10:13:22,960
don't have for example at the bottom
11792
10:13:19,560 --> 10:13:27,040
let's create an arrow function using
11793
10:13:22,960 --> 10:13:30,000
const and we'll name it one
11794
10:13:27,040 --> 10:13:35,160
perm and make it equal to an arrow
11795
10:13:30,000 --> 10:13:37,960
function brackets arrow and curly
11796
10:13:35,160 --> 10:13:41,160
brackets now in this Arrow function
11797
10:13:37,960 --> 10:13:46,720
we're going to give it one parameter
11798
10:13:41,160 --> 10:13:46,720
param and inside the function will
11799
10:13:46,960 --> 10:13:53,800
console.log param plus
11800
10:13:50,680 --> 10:13:56,840
one so when an arrow function only has
11801
10:13:53,800 --> 10:14:00,400
one parameter these round brackets are
11802
10:13:56,840 --> 10:14:08,520
optional so we can actually remove
11803
10:14:00,400 --> 10:14:13,080
them if we do one param brackets 2 if we
11804
10:14:08,520 --> 10:14:16,436
save it will display 2 + 1 which is
11805
10:14:13,080 --> 10:14:22,276
3 let's learn another shortcut we'll
11806
10:14:16,436 --> 10:14:25,520
create some new lines and type const one
11807
10:14:22,276 --> 10:14:30,680
line and make it equal to an arrow
11808
10:14:25,520 --> 10:14:37,916
function brackets arrow and curly
11809
10:14:30,680 --> 10:14:41,560
brackets and inside will return 2 +
11810
10:14:37,916 --> 10:14:45,520
3 so when an arrow function only has one
11811
10:14:41,560 --> 10:14:47,960
line like this we can actually put it on
11812
10:14:45,520 --> 10:14:50,520
the same line as the
11813
10:14:47,960 --> 10:14:53,080
arrow and now that everything's on the
11814
10:14:50,520 --> 10:14:56,560
same line the curly brackets are
11815
10:14:53,080 --> 10:15:00,680
actually optional so we can remove them
11816
10:14:56,560 --> 10:15:00,680
and we can also remove the return
11817
10:15:01,276 --> 10:15:06,840
statement so this is a oneline arrow
11818
10:15:04,160 --> 10:15:09,400
function if we just have an arrow it
11819
10:15:06,840 --> 10:15:14,520
will automatically return the result on
11820
10:15:09,400 --> 10:15:19,720
the right so at the bottom we can
11821
10:15:14,520 --> 10:15:21,720
console. log and call the one line
11822
10:15:19,720 --> 10:15:24,080
function with
11823
10:15:21,720 --> 10:15:27,320
brackets if we
11824
10:15:24,080 --> 10:15:30,596
save this function will return to plus
11825
10:15:27,320 --> 10:15:33,560
three and it will display five in the
11826
10:15:30,596 --> 10:15:35,640
console so that's Arrow functions it's a
11827
10:15:33,560 --> 10:15:38,240
shorter way of writing a regular
11828
10:15:35,640 --> 10:15:40,756
function and it has a few
11829
10:15:38,240 --> 10:15:44,116
shortcuts for now let's get some
11830
10:15:40,756 --> 10:15:47,916
practice using Arrow functions so let's
11831
10:15:44,116 --> 10:15:51,080
scroll up in this code to the for each
11832
10:15:47,916 --> 10:15:54,240
method so let's use an arrow function
11833
10:15:51,080 --> 10:15:55,680
here instead we just have to remove the
11834
10:15:54,240 --> 10:15:58,916
word
11835
10:15:55,680 --> 10:16:04,116
function and after the round brackets
11836
10:15:58,916 --> 10:16:08,040
add an arrow equals greater than if we
11837
10:16:04,116 --> 10:16:11,080
save the loop still works so when we're
11838
10:16:08,040 --> 10:16:14,040
passing a function into another function
11839
10:16:11,080 --> 10:16:15,916
like for each it's recommended to use
11840
10:16:14,040 --> 10:16:19,080
Arrow functions because it makes our
11841
10:16:15,916 --> 10:16:21,480
code easier to read so now let's use use
11842
10:16:19,080 --> 10:16:24,080
Arrow functions in some of our previous
11843
10:16:21,480 --> 10:16:27,400
projects we'll start with the rock paper
11844
10:16:24,080 --> 10:16:28,840
scissors game let's open our files by
11845
10:16:27,400 --> 10:16:32,756
clicking
11846
10:16:28,840 --> 10:16:35,276
here and we'll find the 12 rock paper
11847
10:16:32,756 --> 10:16:38,480
scissors. JS
11848
10:16:35,276 --> 10:16:41,880
file and then inside this file we're
11849
10:16:38,480 --> 10:16:45,000
going to scroll down to the autoplay
11850
10:16:41,880 --> 10:16:48,320
function so here we're passing a
11851
10:16:45,000 --> 10:16:50,720
function into another function so it's
11852
10:16:48,320 --> 10:16:53,596
recommended to use an arrow
11853
10:16:50,720 --> 10:16:57,960
function let's remove the word
11854
10:16:53,596 --> 10:17:01,276
function and add an arrow so now this
11855
10:16:57,960 --> 10:17:04,360
code is a little easier to read now what
11856
10:17:01,276 --> 10:17:07,116
about this function up here function
11857
10:17:04,360 --> 10:17:10,116
autoplay should we also switch this to
11858
10:17:07,116 --> 10:17:13,680
an arrow function so this situation is
11859
10:17:10,116 --> 10:17:15,800
more personal preference so above this
11860
10:17:13,680 --> 10:17:19,520
let's actually create an arrow function
11861
10:17:15,800 --> 10:17:26,160
version of this const
11862
10:17:19,520 --> 10:17:27,596
auto play equals brackets and arrow and
11863
10:17:26,160 --> 10:17:30,840
curly
11864
10:17:27,596 --> 10:17:33,960
brackets so even though we could create
11865
10:17:30,840 --> 10:17:36,080
an arrow function version of this I
11866
10:17:33,960 --> 10:17:39,916
actually prefer the regular function
11867
10:17:36,080 --> 10:17:43,756
syntax here for two reasons number one I
11868
10:17:39,916 --> 10:17:46,560
think this is easier to read than this
11869
10:17:43,756 --> 10:17:49,436
and number two this function syntax
11870
10:17:46,560 --> 10:17:52,200
enables hoisting which means we can call
11871
10:17:49,436 --> 10:17:54,436
this function before we create it and we
11872
10:17:52,200 --> 10:17:57,560
don't have to worry about which order we
11873
10:17:54,436 --> 10:18:00,596
write the code so for these reasons I
11874
10:17:57,560 --> 10:18:03,480
actually prefer this situation to use a
11875
10:18:00,596 --> 10:18:06,360
regular function syntax and not an arrow
11876
10:18:03,480 --> 10:18:08,800
function so we'll comment out the arrow
11877
10:18:06,360 --> 10:18:11,200
function using double
11878
10:18:08,800 --> 10:18:13,756
slash and double
11879
10:18:11,200 --> 10:18:17,200
slash now let's
11880
10:18:13,756 --> 10:18:20,160
save and let's open the tab for this
11881
10:18:17,200 --> 10:18:22,080
project and we'll give give it a try so
11882
10:18:20,160 --> 10:18:24,680
click
11883
10:18:22,080 --> 10:18:27,800
autoplay and this still works after
11884
10:18:24,680 --> 10:18:30,880
replacing with an arrow
11885
10:18:27,800 --> 10:18:34,436
function next let's go to the to-do list
11886
10:18:30,880 --> 10:18:37,916
project and switch to Arrow functions so
11887
10:18:34,436 --> 10:18:42,400
we'll go to our code editor and find the
11888
10:18:37,916 --> 10:18:45,200
to-do list project which is
11889
10:18:42,400 --> 10:18:48,880
here and let's scroll
11890
10:18:45,200 --> 10:18:51,520
down so inside render to-do list we're
11891
10:18:48,880 --> 10:18:54,480
using four each and we're passing this
11892
10:18:51,520 --> 10:18:56,680
function into another function so it's
11893
10:18:54,480 --> 10:18:59,916
recommended to use an arrow function
11894
10:18:56,680 --> 10:19:02,916
here so we'll remove the word
11895
10:18:59,916 --> 10:19:04,960
function and after the brackets We'll
11896
10:19:02,916 --> 10:19:08,000
add an
11897
10:19:04,960 --> 10:19:10,520
arrow and again I'll leave this function
11898
10:19:08,000 --> 10:19:13,960
syntax as a regular function because
11899
10:19:10,520 --> 10:19:15,276
it's easier to read and enables hoisting
11900
10:19:13,960 --> 10:19:19,400
so let's
11901
10:19:15,276 --> 10:19:21,200
save and go back to our to-do list
11902
10:19:19,400 --> 10:19:26,400
and everything still
11903
10:19:21,200 --> 10:19:29,040
works next let's go back to 12 Advanced
11904
10:19:26,400 --> 10:19:32,720
functions.
11905
10:19:29,040 --> 10:19:36,276
HTML and we'll scroll to the
11906
10:19:32,720 --> 10:19:39,040
bottom and we'll open the tab for this
11907
10:19:36,276 --> 10:19:41,360
file and we'll review another place we
11908
10:19:39,040 --> 10:19:45,720
could use Arrow functions which is
11909
10:19:41,360 --> 10:19:49,960
inside an object so at the bottom here
11910
10:19:45,720 --> 10:19:53,640
let's create a new object con
11911
10:19:49,960 --> 10:19:57,040
object 2 equals
11912
10:19:53,640 --> 10:20:01,360
object and then inside let's type the
11913
10:19:57,040 --> 10:20:06,000
property method colon and an arrow
11914
10:20:01,360 --> 10:20:08,960
function brackets arrow and curly
11915
10:20:06,000 --> 10:20:11,520
brackets so even though we could save an
11916
10:20:08,960 --> 10:20:15,596
arrow function inside an object like
11917
10:20:11,520 --> 10:20:19,080
this objects already have a shortcut for
11918
10:20:15,596 --> 10:20:20,596
functions so at the bottom we could just
11919
10:20:19,080 --> 10:20:23,960
type
11920
10:20:20,596 --> 10:20:26,916
method brackets and curly
11921
10:20:23,960 --> 10:20:30,116
brackets so this syntax is called the
11922
10:20:26,916 --> 10:20:32,400
shorthand method syntax so this
11923
10:20:30,116 --> 10:20:35,520
shorthand method syntax is actually
11924
10:20:32,400 --> 10:20:38,520
easier to read than an arrow function so
11925
10:20:35,520 --> 10:20:41,520
when saving a function in an object it's
11926
10:20:38,520 --> 10:20:44,080
actually recommended to use this syntax
11927
10:20:41,520 --> 10:20:46,160
instead there's also another difference
11928
10:20:44,080 --> 10:20:48,400
between regular functions and arrow
11929
10:20:46,160 --> 10:20:50,640
functions but we'll learn about it later
11930
10:20:48,400 --> 10:20:52,116
in in this course because it's a more
11931
10:20:50,640 --> 10:20:54,436
advanced
11932
10:20:52,116 --> 10:20:56,640
feature now let's move on and we're
11933
10:20:54,436 --> 10:20:59,360
going to learn another Improvement we
11934
10:20:56,640 --> 10:21:03,160
can make to our projects so let's
11935
10:20:59,360 --> 10:21:08,560
comment out this code we'll scroll up
11936
10:21:03,160 --> 10:21:12,680
and type SL star and at the
11937
10:21:08,560 --> 10:21:15,160
bottom star slash and
11938
10:21:12,680 --> 10:21:19,040
save and next we're actually going to
11939
10:21:15,160 --> 10:21:21,040
scroll up to the very top of this file
11940
10:21:19,040 --> 10:21:25,480
and we're going to create a button on
11941
10:21:21,040 --> 10:21:29,680
the page so inside the body we'll type
11942
10:21:25,480 --> 10:21:33,276
less than button greater than and inside
11943
10:21:29,680 --> 10:21:36,040
the button we'll have the text
11944
10:21:33,276 --> 10:21:38,756
click now let's say that we want to run
11945
10:21:36,040 --> 10:21:43,720
some JavaScript code when we click this
11946
10:21:38,756 --> 10:21:46,560
button so here we can type on click
11947
10:21:43,720 --> 10:21:48,720
equals double quotes and write some
11948
10:21:46,560 --> 10:21:51,240
JavaScript inside this double quotes
11949
10:21:48,720 --> 10:21:54,320
quot now we're going to learn a better
11950
10:21:51,240 --> 10:21:58,000
way of doing this called add event
11951
10:21:54,320 --> 10:21:59,880
listener to use add event listener first
11952
10:21:58,000 --> 10:22:03,276
we're going to get this button and put
11953
10:21:59,880 --> 10:22:07,240
it into our JavaScript using document.
11954
10:22:03,276 --> 10:22:10,240
query selector so let's add a class to
11955
10:22:07,240 --> 10:22:12,360
this button so we can select it and
11956
10:22:10,240 --> 10:22:14,160
we'll set it to
11957
10:22:12,360 --> 10:22:17,400
js-
11958
10:22:14,160 --> 10:22:20,320
button and now inside the script element
11959
10:22:17,400 --> 10:22:23,436
we're going to use
11960
10:22:20,320 --> 10:22:29,680
document. query
11961
10:22:23,436 --> 10:22:31,756
selector brackets and the string do
11962
10:22:29,680 --> 10:22:34,400
js-
11963
10:22:31,756 --> 10:22:37,756
button so now let's save this button in
11964
10:22:34,400 --> 10:22:40,520
a variable so we can use it later at the
11965
10:22:37,756 --> 10:22:46,560
front we'll type
11966
10:22:40,520 --> 10:22:50,160
const button element equals this
11967
10:22:46,560 --> 10:22:53,916
result now every HT H ml element has a
11968
10:22:50,160 --> 10:22:56,800
method called add event listener add
11969
10:22:53,916 --> 10:22:59,560
event listener let us run some code when
11970
10:22:56,800 --> 10:23:02,040
we interact with the element so it sort
11971
10:22:59,560 --> 10:23:06,520
of does the same thing as
11972
10:23:02,040 --> 10:23:08,040
onclick so at the bottom let's type
11973
10:23:06,520 --> 10:23:14,200
button
11974
10:23:08,040 --> 10:23:15,720
element dot add capital E Event capital
11975
10:23:14,200 --> 10:23:19,436
L
11976
10:23:15,720 --> 10:23:22,880
listener and brackets
11977
10:23:19,436 --> 10:23:25,720
so add event listener has two parameters
11978
10:23:22,880 --> 10:23:28,320
the first parameter is the event or what
11979
10:23:25,720 --> 10:23:32,360
type of interaction we want to listen
11980
10:23:28,320 --> 10:23:34,360
for so between these brackets let's type
11981
10:23:32,360 --> 10:23:37,560
the string
11982
10:23:34,360 --> 10:23:40,596
click so this will run some code when we
11983
10:23:37,560 --> 10:23:44,000
click the button the way to find these
11984
10:23:40,596 --> 10:23:46,640
event names is to look at this attribute
11985
10:23:44,000 --> 10:23:49,960
the word after on is the
11986
10:23:46,640 --> 10:23:52,400
event next the second parameter is a
11987
10:23:49,960 --> 10:23:57,080
function that we want to run when we
11988
10:23:52,400 --> 10:23:59,436
click this element so we'll type a comma
11989
10:23:57,080 --> 10:24:01,960
and because we're passing a function
11990
10:23:59,436 --> 10:24:05,360
into another function we're going to use
11991
10:24:01,960 --> 10:24:08,480
an arrow function so we'll type
11992
10:24:05,360 --> 10:24:13,360
brackets arrow and curly
11993
10:24:08,480 --> 10:24:18,880
brackets so inside here let's just do
11994
10:24:13,360 --> 10:24:20,520
console. log string click
11995
10:24:18,880 --> 10:24:24,520
and
11996
10:24:20,520 --> 10:24:28,116
save and now when we click this button
11997
10:24:24,520 --> 10:24:32,040
it will run this function and display
11998
10:24:28,116 --> 10:24:35,840
click so this code does the same thing
11999
10:24:32,040 --> 10:24:38,360
as the onclick attribute however add
12000
10:24:35,840 --> 10:24:42,080
event listener has some advantages over
12001
10:24:38,360 --> 10:24:45,436
using an attribute first it lets us add
12002
10:24:42,080 --> 10:24:48,480
multiple event listeners for an event
12003
10:24:45,436 --> 10:24:51,840
for example let's add another click
12004
10:24:48,480 --> 10:24:54,080
event listener we can select this
12005
10:24:51,840 --> 10:24:56,320
code and
12006
10:24:54,080 --> 10:24:59,320
rightclick
12007
10:24:56,320 --> 10:25:03,000
copy and then down
12008
10:24:59,320 --> 10:25:07,160
here rightclick and
12009
10:25:03,000 --> 10:25:09,400
paste and let's change this to log click
12010
10:25:07,160 --> 10:25:11,960
to if we
12011
10:25:09,400 --> 10:25:15,916
save and click the
12012
10:25:11,960 --> 10:25:18,436
button it will run both these functions
12013
10:25:15,916 --> 10:25:22,040
so add event listener let us add
12014
10:25:18,436 --> 10:25:24,276
multiple listeners to one event another
12015
10:25:22,040 --> 10:25:27,276
advantage of doing this is that we can
12016
10:25:24,276 --> 10:25:29,520
remove an event listener using a method
12017
10:25:27,276 --> 10:25:34,960
called remove event
12018
10:25:29,520 --> 10:25:36,640
listener so under this code we can type
12019
10:25:34,960 --> 10:25:42,520
button
12020
10:25:36,640 --> 10:25:46,320
element do remove capital E Event
12021
10:25:42,520 --> 10:25:49,840
capital L listener and
12022
10:25:46,320 --> 10:25:50,960
brackets and remove EV listener also has
12023
10:25:49,840 --> 10:25:53,720
two
12024
10:25:50,960 --> 10:25:58,520
parameters the first parameter is the
12025
10:25:53,720 --> 10:26:01,800
event so in this case it is the string
12026
10:25:58,520 --> 10:26:04,480
click and we'll type a comma and the
12027
10:26:01,800 --> 10:26:06,756
second parameter is the function that we
12028
10:26:04,480 --> 10:26:09,680
want to remove so that when we click
12029
10:26:06,756 --> 10:26:13,040
this button it will no longer run that
12030
10:26:09,680 --> 10:26:15,480
function now we can't just type a copy
12031
10:26:13,040 --> 10:26:18,560
of this function we need to use this
12032
10:26:15,480 --> 10:26:21,640
exact function inside remove event
12033
10:26:18,560 --> 10:26:25,160
listener to do that we'll save this in a
12034
10:26:21,640 --> 10:26:26,276
variable first so above this let's
12035
10:26:25,160 --> 10:26:27,880
create a
12036
10:26:26,276 --> 10:26:31,040
variable
12037
10:26:27,880 --> 10:26:34,960
const event
12038
10:26:31,040 --> 10:26:38,436
listener equals and we'll select this
12039
10:26:34,960 --> 10:26:44,276
code right click
12040
10:26:38,436 --> 10:26:47,720
copy and in here right click and
12041
10:26:44,276 --> 10:26:48,756
paste and now we'll replace this with
12042
10:26:47,720 --> 10:26:52,116
the VAR
12043
10:26:48,756 --> 10:26:55,360
variable event
12044
10:26:52,116 --> 10:26:56,320
listener and down here we'll remove this
12045
10:26:55,360 --> 10:27:00,240
same
12046
10:26:56,320 --> 10:27:02,320
variable event
12047
10:27:00,240 --> 10:27:06,160
listener if we
12048
10:27:02,320 --> 10:27:09,756
save and click the button again it will
12049
10:27:06,160 --> 10:27:12,240
only display click two because we added
12050
10:27:09,756 --> 10:27:14,436
this event listener and then we removed
12051
10:27:12,240 --> 10:27:17,596
it so it will no longer run this
12052
10:27:14,436 --> 10:27:18,720
function when we click the button so as
12053
10:27:17,596 --> 10:27:21,320
you can see
12054
10:27:18,720 --> 10:27:24,400
add event listener gives us more control
12055
10:27:21,320 --> 10:27:27,680
over event listeners we can add multiple
12056
10:27:24,400 --> 10:27:30,840
listeners to an event and we can also
12057
10:27:27,680 --> 10:27:32,840
remove a listener from an event so
12058
10:27:30,840 --> 10:27:35,640
because of these advantages the best
12059
10:27:32,840 --> 10:27:39,116
practice is to use add event listener
12060
10:27:35,640 --> 10:27:41,640
instead of an onclick attribute so let's
12061
10:27:39,116 --> 10:27:44,840
go back into our projects and switch to
12062
10:27:41,640 --> 10:27:47,756
using add event listener we'll start
12063
10:27:44,840 --> 10:27:49,276
with the rock paper scissors project so
12064
10:27:47,756 --> 10:27:52,596
we'll open our
12065
10:27:49,276 --> 10:27:55,840
files and we'll open 12 rock paper
12066
10:27:52,596 --> 10:28:00,360
scissors and click here and
12067
10:27:55,840 --> 10:28:04,520
save and we'll scroll up to 12 rockpaper
12068
10:28:00,360 --> 10:28:07,436
scissors. JS and for the video I'll drag
12069
10:28:04,520 --> 10:28:08,880
this down to the bottom and I'll hide
12070
10:28:07,436 --> 10:28:12,640
the files for
12071
10:28:08,880 --> 10:28:15,880
now and then rearrange the
12072
10:28:12,640 --> 10:28:18,240
windows and finally open the tab for
12073
10:28:15,880 --> 10:28:22,116
this file
12074
10:28:18,240 --> 10:28:27,160
now let's go to the HTML we'll scroll up
12075
10:28:22,116 --> 10:28:30,596
to these move buttons which is up
12076
10:28:27,160 --> 10:28:32,596
here so here we're using the onclick
12077
10:28:30,596 --> 10:28:36,360
attribute and we're going to switch it
12078
10:28:32,596 --> 10:28:38,320
to add event listener so first let's get
12079
10:28:36,360 --> 10:28:41,160
this button into our
12080
10:28:38,320 --> 10:28:43,640
JavaScript We'll add a class so we can
12081
10:28:41,160 --> 10:28:45,640
select it
12082
10:28:43,640 --> 10:28:48,160
js-
12083
10:28:45,640 --> 10:28:49,160
rock- button
12084
10:28:48,160 --> 10:28:51,360
and
12085
10:28:49,160 --> 10:28:54,756
save and then down
12086
10:28:51,360 --> 10:28:58,200
here let's go below the autoplay
12087
10:28:54,756 --> 10:29:01,040
function right here and we'll use add
12088
10:28:58,200 --> 10:29:04,436
event listener so we'll get this button
12089
10:29:01,040 --> 10:29:08,080
into our JavaScript using
12090
10:29:04,436 --> 10:29:13,200
document do query
12091
10:29:08,080 --> 10:29:14,880
selector brackets and a string dot
12092
10:29:13,200 --> 10:29:16,756
js-
12093
10:29:14,880 --> 10:29:21,756
ro-
12094
10:29:16,756 --> 10:29:23,640
button and we're going to use dot add
12095
10:29:21,756 --> 10:29:25,400
event
12096
10:29:23,640 --> 10:29:29,320
listener
12097
10:29:25,400 --> 10:29:32,960
brackets so we're going to listen for a
12098
10:29:29,320 --> 10:29:36,276
click and a comma and we'll give it a
12099
10:29:32,960 --> 10:29:38,680
function that we want to run so a common
12100
10:29:36,276 --> 10:29:44,640
mistake here is to actually run the
12101
10:29:38,680 --> 10:29:46,680
function for example play game brackets
12102
10:29:44,640 --> 10:29:49,200
and the string
12103
10:29:46,680 --> 10:29:53,320
Rock so we're supposed to give a
12104
10:29:49,200 --> 10:29:56,400
function to add event listener however
12105
10:29:53,320 --> 10:29:59,436
this doesn't result in a function this
12106
10:29:56,400 --> 10:30:02,916
will actually run play game and give us
12107
10:29:59,436 --> 10:30:05,080
the return value which is undefined so
12108
10:30:02,916 --> 10:30:06,960
this code will actually result in
12109
10:30:05,080 --> 10:30:10,160
undefined and then we're giving
12110
10:30:06,960 --> 10:30:11,360
undefined to add event listener so it
12111
10:30:10,160 --> 10:30:14,276
won't
12112
10:30:11,360 --> 10:30:17,360
work so in order to give add event
12113
10:30:14,276 --> 10:30:18,680
listener a function we need to create a
12114
10:30:17,360 --> 10:30:21,040
function here
12115
10:30:18,680 --> 10:30:25,756
so let's remove this code and we'll
12116
10:30:21,040 --> 10:30:27,200
create a function using brackets arrow
12117
10:30:25,756 --> 10:30:30,436
and curly
12118
10:30:27,200 --> 10:30:33,436
brackets and then inside this function
12119
10:30:30,436 --> 10:30:40,116
we're going to call play game so we'll
12120
10:30:33,436 --> 10:30:43,436
type play game brackets and
12121
10:30:40,116 --> 10:30:46,596
rock so now when we click the rock
12122
10:30:43,436 --> 10:30:49,840
button it will run this function and
12123
10:30:46,596 --> 10:30:51,680
play the game so let's remove the
12124
10:30:49,840 --> 10:30:55,320
onclick
12125
10:30:51,680 --> 10:30:58,360
attribute and save the
12126
10:30:55,320 --> 10:31:01,116
HTML and also save the
12127
10:30:58,360 --> 10:31:04,436
JavaScript and then go to our project
12128
10:31:01,116 --> 10:31:06,756
and click the rock button you can see
12129
10:31:04,436 --> 10:31:10,116
that it works except this time we're
12130
10:31:06,756 --> 10:31:12,160
using add event listener so let's do the
12131
10:31:10,116 --> 10:31:14,480
same thing for the paper and the
12132
10:31:12,160 --> 10:31:16,840
scissors button feel free to pause the
12133
10:31:14,480 --> 10:31:20,400
video if you want to try it
12134
10:31:16,840 --> 10:31:23,320
yourself so we'll scroll down here and
12135
10:31:20,400 --> 10:31:25,800
let's add a class to the paper button so
12136
10:31:23,320 --> 10:31:27,720
we can select it
12137
10:31:25,800 --> 10:31:31,680
js-
12138
10:31:27,720 --> 10:31:35,160
paper- button and then in our JavaScript
12139
10:31:31,680 --> 10:31:37,160
we'll make a copy of this code so right
12140
10:31:35,160 --> 10:31:40,276
click
12141
10:31:37,160 --> 10:31:44,680
copy and then down
12142
10:31:40,276 --> 10:31:47,276
here right click and
12143
10:31:44,680 --> 10:31:48,800
paste and now we're going to replace the
12144
10:31:47,276 --> 10:31:50,520
rock button
12145
10:31:48,800 --> 10:31:53,360
with
12146
10:31:50,520 --> 10:31:56,360
paper and when we click this button
12147
10:31:53,360 --> 10:31:58,596
we're going to play the game with
12148
10:31:56,360 --> 10:32:03,000
paper now let's
12149
10:31:58,596 --> 10:32:06,320
save and we'll remove the onclick
12150
10:32:03,000 --> 10:32:09,960
attribute and save the
12151
10:32:06,320 --> 10:32:11,276
HTML if we click the paper button it
12152
10:32:09,960 --> 10:32:14,276
works as
12153
10:32:11,276 --> 10:32:18,560
before finally let's do the scissors
12154
10:32:14,276 --> 10:32:22,200
button so we'll add a class Js
12155
10:32:18,560 --> 10:32:25,200
s- scissors dasb
12156
10:32:22,200 --> 10:32:30,080
button and then inside our JavaScript
12157
10:32:25,200 --> 10:32:33,840
we'll make a copy of this rightclick
12158
10:32:30,080 --> 10:32:37,640
copy and then down here create some new
12159
10:32:33,840 --> 10:32:41,596
lines rightclick and
12160
10:32:37,640 --> 10:32:45,840
paste and now switch to the scissors
12161
10:32:41,596 --> 10:32:48,840
button and play game with
12162
10:32:45,840 --> 10:32:51,916
scissors let's save
12163
10:32:48,840 --> 10:32:54,160
and remove the onclick
12164
10:32:51,916 --> 10:32:56,960
attribute save the
12165
10:32:54,160 --> 10:32:59,680
HTML and try the scissors
12166
10:32:56,960 --> 10:33:02,480
button so everything still
12167
10:32:59,680 --> 10:33:05,596
works and I'll leave switching the reset
12168
10:33:02,480 --> 10:33:06,596
score button and the autop playay button
12169
10:33:05,596 --> 10:33:09,240
as
12170
10:33:06,596 --> 10:33:11,840
exercises so now let's try add event
12171
10:33:09,240 --> 10:33:14,960
listener with a different event we'll
12172
10:33:11,840 --> 10:33:17,240
use it with key down so let's say that
12173
10:33:14,960 --> 10:33:19,880
in our project we want to make it so we
12174
10:33:17,240 --> 10:33:23,436
can play the the game with our keyboard
12175
10:33:19,880 --> 10:33:26,840
if we Type R it will play Rock if we
12176
10:33:23,436 --> 10:33:29,240
type P it will play paper and if we Type
12177
10:33:26,840 --> 10:33:31,756
S it will play
12178
10:33:29,240 --> 10:33:34,200
scissors let's go into our
12179
10:33:31,756 --> 10:33:36,596
JavaScript and we'll scroll
12180
10:33:34,200 --> 10:33:39,480
down and we're going to add an event
12181
10:33:36,596 --> 10:33:41,916
listener to the body this time so that
12182
10:33:39,480 --> 10:33:44,800
if we type anywhere on the page we can
12183
10:33:41,916 --> 10:33:49,560
run some code so we're going to get the
12184
10:33:44,800 --> 10:33:51,276
body element using document
12185
10:33:49,560 --> 10:33:57,756
body and
12186
10:33:51,276 --> 10:34:00,520
then add event listener and
12187
10:33:57,756 --> 10:34:04,916
brackets this time the first parameter
12188
10:34:00,520 --> 10:34:08,276
or the event will be the string key
12189
10:34:04,916 --> 10:34:12,080
down and let's type comma and give it a
12190
10:34:08,276 --> 10:34:14,480
function that we want to run brackets
12191
10:34:12,080 --> 10:34:19,640
arrow and curly
12192
10:34:14,480 --> 10:34:19,640
brackets inside here let's just type
12193
10:34:20,200 --> 10:34:28,880
console.log key down for now and
12194
10:34:25,640 --> 10:34:31,240
save so now if we go to the project and
12195
10:34:28,880 --> 10:34:33,840
we open the console
12196
10:34:31,240 --> 10:34:35,880
rightclick and click
12197
10:34:33,840 --> 10:34:39,520
inspect click the
12198
10:34:35,880 --> 10:34:41,960
console and then click on the page if we
12199
10:34:39,520 --> 10:34:44,960
type a key on our
12200
10:34:41,960 --> 10:34:48,680
keyboard it will run this function and
12201
10:34:44,960 --> 10:34:52,000
display key down so now we have to check
12202
10:34:48,680 --> 10:34:54,360
what key was pressed and play the game
12203
10:34:52,000 --> 10:34:57,240
so how do we know which key that we
12204
10:34:54,360 --> 10:35:00,436
pressed earlier in this course we used
12205
10:34:57,240 --> 10:35:03,160
the attribute on key down and we learned
12206
10:35:00,436 --> 10:35:05,916
that it gets a special object called
12207
10:35:03,160 --> 10:35:09,520
event and the event object contains
12208
10:35:05,916 --> 10:35:12,240
which key was pressed add event listener
12209
10:35:09,520 --> 10:35:14,640
also provides this event object but it
12210
10:35:12,240 --> 10:35:17,800
provides it as a parameter to this
12211
10:35:14,640 --> 10:35:20,480
function so inside the round brackets
12212
10:35:17,800 --> 10:35:23,320
let's add a parameter
12213
10:35:20,480 --> 10:35:26,000
event now every time we type on our
12214
10:35:23,320 --> 10:35:29,520
keyboard add event listener will save
12215
10:35:26,000 --> 10:35:32,240
the event object in here and run the
12216
10:35:29,520 --> 10:35:34,000
function and this event object contains
12217
10:35:32,240 --> 10:35:37,240
the key that we
12218
10:35:34,000 --> 10:35:42,840
pressed so in the console.log let's
12219
10:35:37,240 --> 10:35:46,160
display event. key this time and
12220
10:35:42,840 --> 10:35:48,436
save now if we click on the page and
12221
10:35:46,160 --> 10:35:53,680
type R
12222
10:35:48,436 --> 10:35:57,080
event. key will contain R if we press P
12223
10:35:53,680 --> 10:36:00,000
event. key will contain P so that's how
12224
10:35:57,080 --> 10:36:03,640
we know which key we pressed so now
12225
10:36:00,000 --> 10:36:06,596
let's close this and instead of
12226
10:36:03,640 --> 10:36:10,200
console.log we'll create an if statement
12227
10:36:06,596 --> 10:36:12,360
to check which key we pressed so if
12228
10:36:10,200 --> 10:36:17,276
brackets and curly
12229
10:36:12,360 --> 10:36:18,560
brackets and here we'll check if event.
12230
10:36:17,276 --> 10:36:23,916
key
12231
10:36:18,560 --> 10:36:27,240
is equal to the string R if it is we're
12232
10:36:23,916 --> 10:36:30,160
going to play the game with rock so
12233
10:36:27,240 --> 10:36:31,360
inside here we can just run this play
12234
10:36:30,160 --> 10:36:36,560
game
12235
10:36:31,360 --> 10:36:40,116
function play game and brackets and
12236
10:36:36,560 --> 10:36:44,080
inside we'll type the string
12237
10:36:40,116 --> 10:36:48,480
Rock now let's check if we pressed P so
12238
10:36:44,080 --> 10:36:51,840
we'll add another Branch else if
12239
10:36:48,480 --> 10:36:55,840
brackets and curly brackets and in the
12240
10:36:51,840 --> 10:37:01,680
second condition we'll check if event.
12241
10:36:55,840 --> 10:37:05,116
key is equal to the string P if it is
12242
10:37:01,680 --> 10:37:10,960
we'll play the game with paper so inside
12243
10:37:05,116 --> 10:37:14,916
here we'll run play game brackets and
12244
10:37:10,960 --> 10:37:18,840
the string paper and finally we'll check
12245
10:37:14,916 --> 10:37:23,840
if we pressed s so at the end We'll add
12246
10:37:18,840 --> 10:37:28,240
another else if brackets curly brackets
12247
10:37:23,840 --> 10:37:34,436
and inside here we'll check if event.
12248
10:37:28,240 --> 10:37:37,040
key is equal to the string s if it is
12249
10:37:34,436 --> 10:37:40,880
we'll play the
12250
10:37:37,040 --> 10:37:43,160
game with the string
12251
10:37:40,880 --> 10:37:48,200
scissors now let's
12252
10:37:43,160 --> 10:37:51,240
save click our page and type R
12253
10:37:48,200 --> 10:37:55,200
and it plays the game with rock if we
12254
10:37:51,240 --> 10:37:58,800
type P it will play the game with paper
12255
10:37:55,200 --> 10:37:59,680
and if we Type S it will play the game
12256
10:37:58,800 --> 10:38:02,520
with
12257
10:37:59,680 --> 10:38:04,880
scissors so that's an example of using
12258
10:38:02,520 --> 10:38:08,640
add event listener with a different type
12259
10:38:04,880 --> 10:38:11,080
of event with a key down if we need the
12260
10:38:08,640 --> 10:38:14,320
event object we can get it using a
12261
10:38:11,080 --> 10:38:16,116
parameter up here so those are all the
12262
10:38:14,320 --> 10:38:18,400
features we're going to create for our
12263
10:38:16,116 --> 10:38:20,400
rock paper scissors project
12264
10:38:18,400 --> 10:38:23,960
now let's move on to the to-do list
12265
10:38:20,400 --> 10:38:27,160
project and switch to add event listener
12266
10:38:23,960 --> 10:38:32,240
we'll go into our code editor click up
12267
10:38:27,160 --> 10:38:35,756
here and find 12 to-do list.
12268
10:38:32,240 --> 10:38:38,640
HTML we'll also scroll up to the scripts
12269
10:38:35,756 --> 10:38:41,800
folder find 12 to-do
12270
10:38:38,640 --> 10:38:43,960
list.js and open this file and I'm going
12271
10:38:41,800 --> 10:38:46,916
to put it at the bottom here so I can
12272
10:38:43,960 --> 10:38:47,880
see it side by side I'll close this for
12273
10:38:46,916 --> 10:38:50,000
now
12274
10:38:47,880 --> 10:38:54,000
and close rock paper
12275
10:38:50,000 --> 10:38:57,116
scissors and then open the tab for this
12276
10:38:54,000 --> 10:39:00,840
project okay so let's start by switching
12277
10:38:57,116 --> 10:39:04,240
the add button to use add event listener
12278
10:39:00,840 --> 10:39:07,240
we'll go into our HTML and find the add
12279
10:39:04,240 --> 10:39:10,116
button which is here and we're going to
12280
10:39:07,240 --> 10:39:12,160
add a class so we can select it in
12281
10:39:10,116 --> 10:39:13,880
JavaScript
12282
10:39:12,160 --> 10:39:18,520
js-
12283
10:39:13,880 --> 10:39:21,320
add- too dasb button
12284
10:39:18,520 --> 10:39:22,400
now let's go to our JavaScript and
12285
10:39:21,320 --> 10:39:25,756
scroll
12286
10:39:22,400 --> 10:39:28,480
down above the add Todo
12287
10:39:25,756 --> 10:39:31,436
function we'll get this button into our
12288
10:39:28,480 --> 10:39:34,560
JavaScript using
12289
10:39:31,436 --> 10:39:39,320
document. query
12290
10:39:34,560 --> 10:39:42,436
selector brackets and then a string Dot
12291
10:39:39,320 --> 10:39:48,240
and the class we want to get
12292
10:39:42,436 --> 10:39:55,200
js- add- too dasb button
12293
10:39:48,240 --> 10:39:57,720
and then after this we use do add event
12294
10:39:55,200 --> 10:40:00,240
listener
12295
10:39:57,720 --> 10:40:05,560
brackets inside these brackets we'll
12296
10:40:00,240 --> 10:40:07,840
give it the event the string click comma
12297
10:40:05,560 --> 10:40:12,400
and then a function to run when this
12298
10:40:07,840 --> 10:40:13,520
event happens so brackets arrow and
12299
10:40:12,400 --> 10:40:16,320
curly
12300
10:40:13,520 --> 10:40:19,596
brackets and in here we just want to do
12301
10:40:16,320 --> 10:40:25,720
the same thing as the onclick attribute
12302
10:40:19,596 --> 10:40:26,640
which is ADD too and call this function
12303
10:40:25,720 --> 10:40:30,320
let's
12304
10:40:26,640 --> 10:40:32,916
save and then in the HTML let's remove
12305
10:40:30,320 --> 10:40:35,200
the onclick
12306
10:40:32,916 --> 10:40:38,720
attribute and
12307
10:40:35,200 --> 10:40:39,596
save and let's try it out so we'll type
12308
10:40:38,720 --> 10:40:42,360
A
12309
10:40:39,596 --> 10:40:45,040
too watch
12310
10:40:42,360 --> 10:40:48,680
YouTube select a due
12311
10:40:45,040 --> 10:40:51,520
date and then click add
12312
10:40:48,680 --> 10:40:53,720
and the add button still works as before
12313
10:40:51,520 --> 10:40:56,560
but we're just using add event
12314
10:40:53,720 --> 10:40:59,916
listener next let's switch all the
12315
10:40:56,560 --> 10:41:03,240
delete buttons let's scroll up to where
12316
10:40:59,916 --> 10:41:06,596
we create these delete buttons which is
12317
10:41:03,240 --> 10:41:08,800
here and first We'll add a class to all
12318
10:41:06,596 --> 10:41:09,756
the delete buttons so we can select them
12319
10:41:08,800 --> 10:41:11,720
in
12320
10:41:09,756 --> 10:41:18,596
JavaScript
12321
10:41:11,720 --> 10:41:20,560
js- delete Das too dasb button
12322
10:41:18,596 --> 10:41:23,596
and now we're going to use document.
12323
10:41:20,560 --> 10:41:26,720
Query selector and add an event listener
12324
10:41:23,596 --> 10:41:29,840
to all of these buttons however there's
12325
10:41:26,720 --> 10:41:33,240
two problems here first is that at this
12326
10:41:29,840 --> 10:41:35,560
point in the code this is just a string
12327
10:41:33,240 --> 10:41:39,040
we haven't actually put this button on
12328
10:41:35,560 --> 10:41:41,640
the page yet we do that down here in
12329
10:41:39,040 --> 10:41:45,436
this line of code we put the HTML that
12330
10:41:41,640 --> 10:41:48,000
we generated onto the page so in order
12331
10:41:45,436 --> 10:41:51,360
to add an event listener we need to put
12332
10:41:48,000 --> 10:41:56,240
the HTML on the page first so we have to
12333
10:41:51,360 --> 10:41:58,400
do it after this code so down here we're
12334
10:41:56,240 --> 10:42:01,560
going to type
12335
10:41:58,400 --> 10:42:06,640
document. query
12336
10:42:01,560 --> 10:42:09,200
selector brackets and the string Dot and
12337
10:42:06,640 --> 10:42:15,080
we'll select this class
12338
10:42:09,200 --> 10:42:17,800
js- delete Das too
12339
10:42:15,080 --> 10:42:20,240
Dutton however there's also a second
12340
10:42:17,800 --> 10:42:22,200
problem here which is we're going to
12341
10:42:20,240 --> 10:42:25,560
have multiple delete
12342
10:42:22,200 --> 10:42:28,640
buttons and query selector only gives us
12343
10:42:25,560 --> 10:42:31,000
the first one so how do we select all
12344
10:42:28,640 --> 10:42:34,720
the buttons on the page that match this
12345
10:42:31,000 --> 10:42:37,436
criteria instead of just the first one
12346
10:42:34,720 --> 10:42:40,276
to do that the document object has
12347
10:42:37,436 --> 10:42:41,840
another method called query
12348
10:42:40,276 --> 10:42:45,400
selector
12349
10:42:41,840 --> 10:42:47,756
all so query selector all will give us
12350
10:42:45,400 --> 10:42:52,080
all the elements on the page that have
12351
10:42:47,756 --> 10:42:55,360
the class JS delete Todo button so down
12352
10:42:52,080 --> 10:42:57,880
here let's console.log this result to
12353
10:42:55,360 --> 10:42:59,520
see what it looks like
12354
10:42:57,880 --> 10:43:03,960
[Music]
12355
10:42:59,520 --> 10:43:05,160
console.log brackets and close bracket
12356
10:43:03,960 --> 10:43:08,560
and
12357
10:43:05,160 --> 10:43:10,360
save and then here
12358
10:43:08,560 --> 10:43:12,960
rightclick
12359
10:43:10,360 --> 10:43:17,160
inspect and the
12360
10:43:12,960 --> 10:43:20,320
console and expand this you'll see that
12361
10:43:17,160 --> 10:43:23,720
document. query selector all gives us a
12362
10:43:20,320 --> 10:43:27,800
list of elements and this list works
12363
10:43:23,720 --> 10:43:31,080
just like an array this is index zero or
12364
10:43:27,800 --> 10:43:34,200
the first button and this is index one
12365
10:43:31,080 --> 10:43:36,916
which is the second button so now let's
12366
10:43:34,200 --> 10:43:36,916
remove
12367
10:43:37,960 --> 10:43:42,400
console.log and add event listeners to
12368
10:43:40,880 --> 10:43:45,080
all of these
12369
10:43:42,400 --> 10:43:47,756
buttons to do that we're going to Loop
12370
10:43:45,080 --> 10:43:50,960
through this list of delete buttons
12371
10:43:47,756 --> 10:43:53,960
so again this list works like an array
12372
10:43:50,960 --> 10:43:58,000
so we can use a for each method to Loop
12373
10:43:53,960 --> 10:44:06,360
through it so at the end let's type
12374
10:43:58,000 --> 10:44:09,840
enter and tab and then dot for each and
12375
10:44:06,360 --> 10:44:12,480
brackets as usual we'll give for each a
12376
10:44:09,840 --> 10:44:16,596
function that we want to run for each of
12377
10:44:12,480 --> 10:44:18,800
these values so we'll type brackets
12378
10:44:16,596 --> 10:44:21,480
Arrow and curly
12379
10:44:18,800 --> 10:44:24,240
brackets and now every time we Loop
12380
10:44:21,480 --> 10:44:27,200
through the list for each will give us
12381
10:44:24,240 --> 10:44:29,960
two parameters the first one is the
12382
10:44:27,200 --> 10:44:35,080
value in the list which is a delete
12383
10:44:29,960 --> 10:44:38,116
button element so let's name it delete
12384
10:44:35,080 --> 10:44:42,320
button and we'll type comma and the
12385
10:44:38,116 --> 10:44:45,320
second parameter is the index so
12386
10:44:42,320 --> 10:44:49,040
index so now we want to add an event
12387
10:44:45,320 --> 10:44:56,596
listener to each delete button so inside
12388
10:44:49,040 --> 10:45:00,276
here we'll type delete button dot add
12389
10:44:56,596 --> 10:45:02,680
event listener and
12390
10:45:00,276 --> 10:45:05,436
brackets inside these brackets we'll
12391
10:45:02,680 --> 10:45:10,520
tell it what event we want to listen to
12392
10:45:05,436 --> 10:45:13,000
which is the string click and comma and
12393
10:45:10,520 --> 10:45:17,680
then a function that we want to run when
12394
10:45:13,000 --> 10:45:19,276
this event happens so brackets Arrow and
12395
10:45:17,680 --> 10:45:22,160
curly
12396
10:45:19,276 --> 10:45:24,680
brackets so now when we click a delete
12397
10:45:22,160 --> 10:45:28,436
button we want to do the same thing as
12398
10:45:24,680 --> 10:45:29,560
this onclick attribute above so let's
12399
10:45:28,436 --> 10:45:31,480
select this
12400
10:45:29,560 --> 10:45:33,520
code we'll
12401
10:45:31,480 --> 10:45:36,436
rightclick
12402
10:45:33,520 --> 10:45:40,400
copy and then down
12403
10:45:36,436 --> 10:45:42,840
here right click and
12404
10:45:40,400 --> 10:45:45,916
paste and now we can remove these
12405
10:45:42,840 --> 10:45:48,640
characters because we're not in a string
12406
10:45:45,916 --> 10:45:51,880
anymore and that's all we need to
12407
10:45:48,640 --> 10:45:55,000
do so to summarize we used query
12408
10:45:51,880 --> 10:45:57,640
selector all to get a list of all the
12409
10:45:55,000 --> 10:46:01,320
delete buttons on the page and then we
12410
10:45:57,640 --> 10:46:04,000
looped through the list using four each
12411
10:46:01,320 --> 10:46:06,520
and for each delete button we added a
12412
10:46:04,000 --> 10:46:09,756
click event listener and ran the same
12413
10:46:06,520 --> 10:46:14,916
code that we did before so now we can
12414
10:46:09,756 --> 10:46:18,400
scroll up and remove this onclick
12415
10:46:14,916 --> 10:46:22,040
attribute and Save
12416
10:46:18,400 --> 10:46:23,756
go back to the page close a console and
12417
10:46:22,040 --> 10:46:26,400
try out the delete
12418
10:46:23,756 --> 10:46:29,040
button and you can see that it still
12419
10:46:26,400 --> 10:46:31,596
works so that's how we switch the to-do
12420
10:46:29,040 --> 10:46:34,436
list project to use add event
12421
10:46:31,596 --> 10:46:35,640
listener so now we're finished improving
12422
10:46:34,436 --> 10:46:38,240
all of our
12423
10:46:35,640 --> 10:46:39,960
projects in the rest of this lesson
12424
10:46:38,240 --> 10:46:42,040
we're going to learn more features that
12425
10:46:39,960 --> 10:46:45,756
use functions as
12426
10:46:42,040 --> 10:46:47,360
values so let's close this for now and
12427
10:46:45,756 --> 10:46:51,320
we'll go back to
12428
10:46:47,360 --> 10:46:54,800
12 Advanced functions.
12429
10:46:51,320 --> 10:46:57,880
HTML and we'll open the tab for this
12430
10:46:54,800 --> 10:47:02,116
file and let's also comment out this
12431
10:46:57,880 --> 10:47:05,480
JavaScript code using
12432
10:47:02,116 --> 10:47:07,560
slashstar and star
12433
10:47:05,480 --> 10:47:10,680
slash let's
12434
10:47:07,560 --> 10:47:12,080
save and now let's scroll to the bottom
12435
10:47:10,680 --> 10:47:15,840
of this
12436
10:47:12,080 --> 10:47:18,640
code and create some new
12437
10:47:15,840 --> 10:47:22,080
lines so in this lesson we learned the
12438
10:47:18,640 --> 10:47:24,200
array method for each which lets us Loop
12439
10:47:22,080 --> 10:47:27,000
through an array now we're going to
12440
10:47:24,200 --> 10:47:30,800
learn two more array methods called
12441
10:47:27,000 --> 10:47:33,560
filter and map so let's start with
12442
10:47:30,800 --> 10:47:36,520
Filter let's say we have an array of
12443
10:47:33,560 --> 10:47:39,880
numbers and we want to create a copy of
12444
10:47:36,520 --> 10:47:43,116
this array with all the negative numbers
12445
10:47:39,880 --> 10:47:49,240
removed so let's go up here and create
12446
10:47:43,116 --> 10:47:54,756
an array of the number one comma -3
12447
10:47:49,240 --> 10:47:56,880
comma 5 and type the method do
12448
10:47:54,756 --> 10:48:00,080
filter and
12449
10:47:56,880 --> 10:48:03,840
brackets so Filter Works the same way as
12450
10:48:00,080 --> 10:48:08,000
for each we give it a function so
12451
10:48:03,840 --> 10:48:11,680
bracket arrow and curly bracket and this
12452
10:48:08,000 --> 10:48:14,200
function has two parameters the
12453
10:48:11,680 --> 10:48:16,800
value and the
12454
10:48:14,200 --> 10:48:19,800
index so filter will take the first
12455
10:48:16,800 --> 10:48:21,960
first value save it in here and run the
12456
10:48:19,800 --> 10:48:25,200
function then it will take the second
12457
10:48:21,960 --> 10:48:28,240
value save it in here run the function
12458
10:48:25,200 --> 10:48:31,040
and the third value save it and run the
12459
10:48:28,240 --> 10:48:33,480
function now the only difference is that
12460
10:48:31,040 --> 10:48:37,160
this time this inner function will
12461
10:48:33,480 --> 10:48:39,960
return a value so we'll type
12462
10:48:37,160 --> 10:48:42,320
return and we're going to return a
12463
10:48:39,960 --> 10:48:46,200
Boolean like
12464
10:48:42,320 --> 10:48:49,000
true so now the return value matters so
12465
10:48:46,200 --> 10:48:52,400
what filter does is it creates a new
12466
10:48:49,000 --> 10:48:55,480
array if the inner function returns true
12467
10:48:52,400 --> 10:48:58,000
it will put this value in the new array
12468
10:48:55,480 --> 10:49:01,480
if the inner function returns false it
12469
10:48:58,000 --> 10:49:04,520
will not put this value in the new array
12470
10:49:01,480 --> 10:49:07,680
for example at the front let's
12471
10:49:04,520 --> 10:49:10,200
console.log the result of this so we'll
12472
10:49:07,680 --> 10:49:14,320
type
12473
10:49:10,200 --> 10:49:17,960
console.log Open Bracket and down here
12474
10:49:14,320 --> 10:49:20,400
close bracket and Save
12475
10:49:17,960 --> 10:49:23,596
so in this example the inner function
12476
10:49:20,400 --> 10:49:26,880
always returns true so all three values
12477
10:49:23,596 --> 10:49:31,916
will be in the new array if we change
12478
10:49:26,880 --> 10:49:35,320
the return value to false every time and
12479
10:49:31,916 --> 10:49:36,560
save all three values will not be added
12480
10:49:35,320 --> 10:49:39,720
to the new
12481
10:49:36,560 --> 10:49:42,320
array so now let's use this to solve our
12482
10:49:39,720 --> 10:49:45,560
problem we want to remove the negative
12483
10:49:42,320 --> 10:49:47,880
numbers from this array so inside this
12484
10:49:45,560 --> 10:49:50,276
inner function we're going to return
12485
10:49:47,880 --> 10:49:52,800
true if the number is positive and
12486
10:49:50,276 --> 10:49:57,756
return false if the number is
12487
10:49:52,800 --> 10:50:00,240
negative so we'll check if value is
12488
10:49:57,756 --> 10:50:05,960
greater than or equal to
12489
10:50:00,240 --> 10:50:07,680
zero curly brackets will return true and
12490
10:50:05,960 --> 10:50:09,756
include it in the new
12491
10:50:07,680 --> 10:50:14,880
array
12492
10:50:09,756 --> 10:50:19,240
else will return false and not include
12493
10:50:14,880 --> 10:50:20,240
it in the new array so let's remove this
12494
10:50:19,240 --> 10:50:23,436
and
12495
10:50:20,240 --> 10:50:26,916
save so now only values that are greater
12496
10:50:23,436 --> 10:50:29,596
than zero will be in the new copy so
12497
10:50:26,916 --> 10:50:32,800
using this we can sort of filter out
12498
10:50:29,596 --> 10:50:34,880
values based on a criteria that's why
12499
10:50:32,800 --> 10:50:38,436
this method is called
12500
10:50:34,880 --> 10:50:43,240
filter now we can shorten this logic by
12501
10:50:38,436 --> 10:50:47,520
using this code return value greater
12502
10:50:43,240 --> 10:50:49,960
than or equal to zero so this comparison
12503
10:50:47,520 --> 10:50:52,840
will return true if it's greater than or
12504
10:50:49,960 --> 10:50:55,436
equal to zero and it will return false
12505
10:50:52,840 --> 10:50:59,276
otherwise so this line does the same
12506
10:50:55,436 --> 10:51:03,400
thing as this code up here so we can
12507
10:50:59,276 --> 10:51:05,880
comment this out with slashstar and star
12508
10:51:03,400 --> 10:51:09,040
slash and
12509
10:51:05,880 --> 10:51:12,080
save and as always we can return a
12510
10:51:09,040 --> 10:51:13,560
truthy or falsy value instead of just
12511
10:51:12,080 --> 10:51:15,916
true or
12512
10:51:13,560 --> 10:51:19,640
false the last array method we're going
12513
10:51:15,916 --> 10:51:22,720
to learn is called map so let's create
12514
10:51:19,640 --> 10:51:25,880
some new lines and scroll
12515
10:51:22,720 --> 10:51:33,116
down and let's say we have an array of
12516
10:51:25,880 --> 10:51:35,756
numbers again like the array 1 1 3 and
12517
10:51:33,116 --> 10:51:37,640
we want to make a copy of this array
12518
10:51:35,756 --> 10:51:41,040
with each number
12519
10:51:37,640 --> 10:51:43,756
doubled so at the end we'll
12520
10:51:41,040 --> 10:51:46,560
type map
12521
10:51:43,756 --> 10:51:49,880
brackets and Map works just like for
12522
10:51:46,560 --> 10:51:54,000
each and filter between the brackets
12523
10:51:49,880 --> 10:51:57,040
we'll give it a function bracket arrow
12524
10:51:54,000 --> 10:51:58,520
and curly brackets and this function
12525
10:51:57,040 --> 10:52:01,596
will get two
12526
10:51:58,520 --> 10:52:05,080
parameters the first parameter is each
12527
10:52:01,596 --> 10:52:08,800
value in the array and the second
12528
10:52:05,080 --> 10:52:12,360
parameter comma is the
12529
10:52:08,800 --> 10:52:14,520
index so map will take the first value
12530
10:52:12,360 --> 10:52:16,960
save it in this parameter and run the
12531
10:52:14,520 --> 10:52:18,680
function take the second value
12532
10:52:16,960 --> 10:52:22,200
save it in this parameter run the
12533
10:52:18,680 --> 10:52:24,960
function third value save it and run the
12534
10:52:22,200 --> 10:52:27,840
function and inside this function we're
12535
10:52:24,960 --> 10:52:31,276
going to return a
12536
10:52:27,840 --> 10:52:34,360
value so what map does is it creates a
12537
10:52:31,276 --> 10:52:37,720
new array and then whatever we return
12538
10:52:34,360 --> 10:52:38,880
will be added to the new array so if we
12539
10:52:37,720 --> 10:52:43,320
return
12540
10:52:38,880 --> 10:52:46,320
10 and then we console.log this result
12541
10:52:43,320 --> 10:52:46,320
console.log
12542
10:52:47,080 --> 10:52:52,720
and close bracket and
12543
10:52:49,756 --> 10:52:54,800
save it will create an array where each
12544
10:52:52,720 --> 10:52:57,680
value becomes
12545
10:52:54,800 --> 10:53:00,880
10 now the interesting thing is that we
12546
10:52:57,680 --> 10:53:08,240
can actually use the value itself in the
12547
10:53:00,880 --> 10:53:11,080
return so here if we did value + 10 and
12548
10:53:08,240 --> 10:53:14,596
save it will take each value in the
12549
10:53:11,080 --> 10:53:17,116
original array add a 10 and put it in
12550
10:53:14,596 --> 10:53:20,240
the new array
12551
10:53:17,116 --> 10:53:23,880
so map will transform an array into
12552
10:53:20,240 --> 10:53:26,116
another array based on the return value
12553
10:53:23,880 --> 10:53:28,880
so if we want to return an array where
12554
10:53:26,116 --> 10:53:34,560
each number is doubled we just have to
12555
10:53:28,880 --> 10:53:38,080
multiply each value by two and save and
12556
10:53:34,560 --> 10:53:40,680
this will give us 2
12557
10:53:38,080 --> 10:53:43,000
26 next we're going to review some
12558
10:53:40,680 --> 10:53:44,480
shortcuts of Arrow functions to make
12559
10:53:43,000 --> 10:53:48,240
this code more
12560
10:53:44,480 --> 10:53:51,800
compact first let's make a copy of this
12561
10:53:48,240 --> 10:53:54,000
code rightclick
12562
10:53:51,800 --> 10:53:57,680
copy and down
12563
10:53:54,000 --> 10:54:00,596
here rightclick and
12564
10:53:57,680 --> 10:54:03,400
paste so notice in the inner function
12565
10:54:00,596 --> 10:54:06,000
we're not using index so let's just
12566
10:54:03,400 --> 10:54:08,800
remove it for now and now that this
12567
10:54:06,000 --> 10:54:11,720
Arrow function only has one parameter
12568
10:54:08,800 --> 10:54:14,720
these round brackets are optional so we
12569
10:54:11,720 --> 10:54:18,400
can also remove these to make the code
12570
10:54:14,720 --> 10:54:21,080
more compact another shortcut is if we
12571
10:54:18,400 --> 10:54:24,800
only have one line of code in an arrow
12572
10:54:21,080 --> 10:54:26,000
function we can put the code on one line
12573
10:54:24,800 --> 10:54:29,276
like
12574
10:54:26,000 --> 10:54:32,080
this and now the curly brackets and the
12575
10:54:29,276 --> 10:54:35,960
return are optional so we can actually
12576
10:54:32,080 --> 10:54:35,960
just remove all of this
12577
10:54:36,436 --> 10:54:42,840
code so if we have just an arrow it will
12578
10:54:39,916 --> 10:54:45,320
automatically return this result on the
12579
10:54:42,840 --> 10:54:47,040
right and we don't have to type return
12580
10:54:45,320 --> 10:54:49,640
ourselves
12581
10:54:47,040 --> 10:54:52,596
so this code does the same thing as the
12582
10:54:49,640 --> 10:54:55,916
code above but as you can see these
12583
10:54:52,596 --> 10:54:59,560
shortcuts make our code very Compact and
12584
10:54:55,916 --> 10:55:01,560
clean so let's save and this will give
12585
10:54:59,560 --> 10:55:03,400
us the same
12586
10:55:01,560 --> 10:55:05,520
result the last thing we're going to
12587
10:55:03,400 --> 10:55:08,916
learn in this lesson is a feature of
12588
10:55:05,520 --> 10:55:11,596
functions called a closure a closure
12589
10:55:08,916 --> 10:55:15,000
means if a function has access to a
12590
10:55:11,596 --> 10:55:18,756
value it will always have access to that
12591
10:55:15,000 --> 10:55:20,840
value so let's take a look at an example
12592
10:55:18,756 --> 10:55:24,276
we're going to go back to the to-do list
12593
10:55:20,840 --> 10:55:28,480
project so we'll click up here and then
12594
10:55:24,276 --> 10:55:31,916
scroll up to 12 to-do
12595
10:55:28,480 --> 10:55:35,720
list.js and close this and then open the
12596
10:55:31,916 --> 10:55:40,116
tab for the to-do list which is here and
12597
10:55:35,720 --> 10:55:43,080
let's scroll down to the query selector
12598
10:55:40,116 --> 10:55:46,000
all so we're going to focus on this
12599
10:55:43,080 --> 10:55:50,160
inner function here so notice that this
12600
10:55:46,000 --> 10:55:52,640
fun function uses index from above now
12601
10:55:50,160 --> 10:55:55,680
the interesting thing about index is
12602
10:55:52,640 --> 10:55:59,400
that as soon as this for each ends index
12603
10:55:55,680 --> 10:56:02,880
gets deleted for example if we add some
12604
10:55:59,400 --> 10:56:04,436
new lines and we try to
12605
10:56:02,880 --> 10:56:06,040
console.
12606
10:56:04,436 --> 10:56:08,240
log
12607
10:56:06,040 --> 10:56:12,040
index and
12608
10:56:08,240 --> 10:56:13,800
save and then go into our project
12609
10:56:12,040 --> 10:56:17,880
rightclick
12610
10:56:13,800 --> 10:56:20,160
inspect and the con
12611
10:56:17,880 --> 10:56:23,000
it'll tell us that the index is not
12612
10:56:20,160 --> 10:56:25,960
defined so as soon as we end the for
12613
10:56:23,000 --> 10:56:29,640
each Loop index doesn't exist
12614
10:56:25,960 --> 10:56:36,320
anymore however if we move this into the
12615
10:56:29,640 --> 10:56:36,320
inner function so inside here and we
12616
10:56:36,520 --> 10:56:40,756
console.log
12617
10:56:38,240 --> 10:56:44,680
index and
12618
10:56:40,756 --> 10:56:48,560
save and we click a delete button it
12619
10:56:44,680 --> 10:56:50,596
will tell us that the index is zero so
12620
10:56:48,560 --> 10:56:53,480
even though index gets deleted right
12621
10:56:50,596 --> 10:56:57,596
away down here if we click one of these
12622
10:56:53,480 --> 10:57:01,480
buttons later on it still has access to
12623
10:56:57,596 --> 10:57:04,360
Index this feature is called a closure
12624
10:57:01,480 --> 10:57:07,640
if a function has access to a value it
12625
10:57:04,360 --> 10:57:10,640
will always have access to that value
12626
10:57:07,640 --> 10:57:13,840
the value like index gets packaged
12627
10:57:10,640 --> 10:57:16,800
together or enclosed with the function
12628
10:57:13,840 --> 10:57:19,640
that's why we call it a closure
12629
10:57:16,800 --> 10:57:22,320
so even if the value index gets deleted
12630
10:57:19,640 --> 10:57:25,596
after the loop we can click the delete
12631
10:57:22,320 --> 10:57:28,200
button 5 seconds later or even 5 minutes
12632
10:57:25,596 --> 10:57:29,756
later and this function will always have
12633
10:57:28,200 --> 10:57:32,436
access to
12634
10:57:29,756 --> 10:57:34,840
index so closures are something that
12635
10:57:32,436 --> 10:57:37,000
naturally happens as we write JavaScript
12636
10:57:34,840 --> 10:57:39,720
code and it's nice to know how this
12637
10:57:37,000 --> 10:57:41,800
feature works there are some Advanced
12638
10:57:39,720 --> 10:57:44,000
Techniques that we can do with closures
12639
10:57:41,800 --> 10:57:46,160
but they're not used that often so I
12640
10:57:44,000 --> 10:57:49,276
won't be covering them in this course
12641
10:57:46,160 --> 10:57:50,840
but maybe in a different video now let's
12642
10:57:49,276 --> 10:57:53,520
remove
12643
10:57:50,840 --> 10:57:56,520
console.log and
12644
10:57:53,520 --> 10:57:59,000
save and that's the end of this lesson
12645
10:57:56,520 --> 10:58:02,400
in this lesson we learned that functions
12646
10:57:59,000 --> 10:58:04,840
are values we learned set time out and
12647
10:58:02,400 --> 10:58:07,560
set interval which lets us run a
12648
10:58:04,840 --> 10:58:10,436
function in the future we learned an
12649
10:58:07,560 --> 10:58:13,480
array method called for each which is a
12650
10:58:10,436 --> 10:58:16,160
cleaner way of looping through an array
12651
10:58:13,480 --> 10:58:18,960
we used four each Arrow functions and
12652
10:58:16,160 --> 10:58:21,680
and add event listener to improve our
12653
10:58:18,960 --> 10:58:25,640
projects we learned two more array
12654
10:58:21,680 --> 10:58:28,160
methods filter and map and we learned a
12655
10:58:25,640 --> 10:58:30,756
feature of functions called
12656
10:58:28,160 --> 10:58:32,720
closures here are some exercises to help
12657
10:58:30,756 --> 10:58:35,720
you practice what we learned in this
12658
10:58:32,720 --> 10:58:35,720
lesson
12659
10:59:00,960 --> 10:59:05,560
in this lesson we're going to start the
12660
10:59:03,240 --> 10:59:08,480
Amazon Project and we're also going to
12661
10:59:05,560 --> 10:59:11,520
learn a very useful technology called
12662
10:59:08,480 --> 10:59:14,840
git so first let's take a look at the
12663
10:59:11,520 --> 10:59:16,880
Amazon Project to see how it works we're
12664
10:59:14,840 --> 10:59:20,116
going to go to our browser
12665
10:59:16,880 --> 10:59:25,640
and create a new tab at the top and
12666
10:59:20,116 --> 10:59:32,680
we're going to type super simple dodev
12667
10:59:25,640 --> 10:59:32,680
SL projects SL Amazon and press
12668
10:59:33,040 --> 10:59:38,596
enter so this is going to be the project
12669
10:59:36,200 --> 10:59:41,040
we're going to build in this course this
12670
10:59:38,596 --> 10:59:43,596
is an e-commerce website that looks like
12671
10:59:41,040 --> 10:59:46,436
Amazon where we can see a list of
12672
10:59:43,596 --> 10:59:49,640
products on the homepage and then we can
12673
10:59:46,436 --> 10:59:51,680
add these products to a cart by clicking
12674
10:59:49,640 --> 10:59:54,560
add to
12675
10:59:51,680 --> 10:59:57,436
cart and then we can see our cart by
12676
10:59:54,560 --> 10:59:57,436
clicking the top
12677
10:59:58,596 --> 11:00:04,200
right and on this page it will show us
12678
11:00:01,596 --> 11:00:07,200
which products are in our cart and it
12679
11:00:04,200 --> 11:00:11,360
will also show us the cost of our order
12680
11:00:07,200 --> 11:00:13,720
including shipping and taxes and once
12681
11:00:11,360 --> 11:00:17,040
we're ready to create an order we can
12682
11:00:13,720 --> 11:00:19,276
click this button to create the order
12683
11:00:17,040 --> 11:00:22,840
and it will take us to this page which
12684
11:00:19,276 --> 11:00:25,640
shows us a list of our past orders we
12685
11:00:22,840 --> 11:00:27,560
can also track our order by clicking
12686
11:00:25,640 --> 11:00:30,400
this track package
12687
11:00:27,560 --> 11:00:32,960
button and it will take us to this page
12688
11:00:30,400 --> 11:00:35,520
which tells us the progress of our order
12689
11:00:32,960 --> 11:00:36,520
whether it's preparing it's shipped and
12690
11:00:35,520 --> 11:00:39,116
it's
12691
11:00:36,520 --> 11:00:41,916
delivered so that's an overview of the
12692
11:00:39,116 --> 11:00:44,596
project we're going to built this is a
12693
11:00:41,916 --> 11:00:46,960
complex multi-page website where the
12694
11:00:44,596 --> 11:00:50,160
different pages interact with each other
12695
11:00:46,960 --> 11:00:52,160
to create a full app the first thing
12696
11:00:50,160 --> 11:00:54,916
we're going to do is to download the
12697
11:00:52,160 --> 11:00:57,116
starting code for this project we're
12698
11:00:54,916 --> 11:01:01,800
going to create a new
12699
11:00:57,116 --> 11:01:04,800
tab and here we're going to type
12700
11:01:01,800 --> 11:01:04,800
github.com
12701
11:01:05,680 --> 11:01:13,800
slup
12702
11:01:07,200 --> 11:01:17,840
simple Dev SL JavaScript D Amazon d
12703
11:01:13,800 --> 11:01:17,840
project and press enter
12704
11:01:19,840 --> 11:01:25,840
you can also find the starting code in
12705
11:01:21,800 --> 11:01:28,360
the description by clicking
12706
11:01:25,840 --> 11:01:30,596
here and then going to the links for
12707
11:01:28,360 --> 11:01:30,596
this
12708
11:01:35,916 --> 11:01:42,640
lesson and on this page we can see the
12709
11:01:38,960 --> 11:01:46,240
starting code for the Amazon Project so
12710
11:01:42,640 --> 11:01:48,320
this code contains all the HTML and CSS
12711
11:01:46,240 --> 11:01:50,240
that we need the reason we're going to
12712
11:01:48,320 --> 11:01:52,596
use some starting code instead of
12713
11:01:50,240 --> 11:01:55,520
writing all of this ourselves is because
12714
11:01:52,596 --> 11:01:59,240
this course is focused on JavaScript not
12715
11:01:55,520 --> 11:02:01,276
HTML and CSS if we were to write all of
12716
11:01:59,240 --> 11:02:03,520
this code ourselves it would just take
12717
11:02:01,276 --> 11:02:06,200
up too much time and it would be an
12718
11:02:03,520 --> 11:02:08,200
entire course by itself if you want to
12719
11:02:06,200 --> 11:02:11,840
learn how to create this code you can
12720
11:02:08,200 --> 11:02:13,400
check out my HTML and CSS full course
12721
11:02:11,840 --> 11:02:16,000
which would teach you all the skills
12722
11:02:13,400 --> 11:02:18,240
that you need but for this JavaScript
12723
11:02:16,000 --> 11:02:21,040
course we're going to start with the
12724
11:02:18,240 --> 11:02:24,240
HTML and CSS here and we're just going
12725
11:02:21,040 --> 11:02:27,240
to focus on adding JavaScript to this
12726
11:02:24,240 --> 11:02:29,960
website so now let's download all of
12727
11:02:27,240 --> 11:02:33,040
this code we can do that by clicking
12728
11:02:29,960 --> 11:02:36,000
this green code button here and then
12729
11:02:33,040 --> 11:02:36,000
click download
12730
11:02:36,240 --> 11:02:40,320
zip once that's finished downloading
12731
11:02:38,840 --> 11:02:43,880
we're going to go to our downloads
12732
11:02:40,320 --> 11:02:47,240
folder so for me it's this folder right
12733
11:02:43,880 --> 11:02:50,240
here called downloads
12734
11:02:47,240 --> 11:02:51,840
and then we're going to unzip this file
12735
11:02:50,240 --> 11:02:54,520
by double clicking
12736
11:02:51,840 --> 11:02:56,880
it and this will give us a folder that
12737
11:02:54,520 --> 11:03:01,480
contains all the code so we're going to
12738
11:02:56,880 --> 11:03:01,480
select this folder and move it to our
12739
11:03:03,520 --> 11:03:09,640
desktop next let's go to our desktop so
12740
11:03:07,116 --> 11:03:11,276
we're going to close this for now and
12741
11:03:09,640 --> 11:03:14,116
I'll hide the
12742
11:03:11,276 --> 11:03:16,560
browser and on the desktop we're going
12743
11:03:14,116 --> 11:03:19,116
to select the folder that we downloaded
12744
11:03:16,560 --> 11:03:24,276
and we're going to rename this so at the
12745
11:03:19,116 --> 11:03:27,000
end we'll remove Main and press enter to
12746
11:03:24,276 --> 11:03:29,276
rename it to JavaScript Amazon
12747
11:03:27,000 --> 11:03:33,160
Project next we're going to take this
12748
11:03:29,276 --> 11:03:34,960
folder and open it in our code editor so
12749
11:03:33,160 --> 11:03:38,200
let's open vs
12750
11:03:34,960 --> 11:03:41,040
code and we're going to click
12751
11:03:38,200 --> 11:03:42,916
file open
12752
11:03:41,040 --> 11:03:45,480
folder and we're going to find the
12753
11:03:42,916 --> 11:03:47,880
folder that we downloaded for me it's on
12754
11:03:45,480 --> 11:03:51,360
the desktop and it's this folder right
12755
11:03:47,880 --> 11:03:54,200
here so we'll click this folder and then
12756
11:03:51,360 --> 11:03:56,436
click select
12757
11:03:54,200 --> 11:03:57,840
folder and then we can close this
12758
11:03:56,436 --> 11:04:00,680
welcome
12759
11:03:57,840 --> 11:04:03,320
message okay so now we have our starting
12760
11:04:00,680 --> 11:04:07,240
code and we're going to set up the
12761
11:04:03,320 --> 11:04:10,880
project so first let's open our browser
12762
11:04:07,240 --> 11:04:13,436
again and we can close the GitHub
12763
11:04:10,880 --> 11:04:16,040
page as well as the tabs for the
12764
11:04:13,436 --> 11:04:17,320
previous lessons so we'll close these
12765
11:04:16,040 --> 11:04:20,000
tabs right
12766
11:04:17,320 --> 11:04:21,080
here but we'll leave the final Amazon
12767
11:04:20,000 --> 11:04:24,840
Project
12768
11:04:21,080 --> 11:04:27,320
open next let's go back to vs
12769
11:04:24,840 --> 11:04:29,640
code and we're going to open this
12770
11:04:27,320 --> 11:04:32,360
project in our browser so we're going to
12771
11:04:29,640 --> 11:04:35,840
select this file amazon.
12772
11:04:32,360 --> 11:04:39,680
HTML so this file corresponds to the
12773
11:04:35,840 --> 11:04:40,960
homepage here so let's select this file
12774
11:04:39,680 --> 11:04:45,916
and then
12775
11:04:40,960 --> 11:04:47,276
rightclick open with live server
12776
11:04:45,916 --> 11:04:51,436
so I'm just going to rearrange my
12777
11:04:47,276 --> 11:04:55,000
windows here so we can see these side by
12778
11:04:51,436 --> 11:04:57,000
side and now we're ready to begin so
12779
11:04:55,000 --> 11:05:00,360
let's take a look at the code that we
12780
11:04:57,000 --> 11:05:03,596
have to start with as I mentioned all we
12781
11:05:00,360 --> 11:05:06,080
have here is the HTML and CSS for this
12782
11:05:03,596 --> 11:05:07,800
website there's currently no JavaScript
12783
11:05:06,080 --> 11:05:10,520
at all on this
12784
11:05:07,800 --> 11:05:12,800
page so one thing you'll notice is that
12785
11:05:10,520 --> 11:05:17,000
we can actually create almost all of the
12786
11:05:12,800 --> 11:05:19,040
website using just HTML and CSS we
12787
11:05:17,000 --> 11:05:21,520
actually don't even need JavaScript to
12788
11:05:19,040 --> 11:05:24,320
create all of this we're able to create
12789
11:05:21,520 --> 11:05:27,360
the header at the top as well as three
12790
11:05:24,320 --> 11:05:30,916
products to start with and this shows
12791
11:05:27,360 --> 11:05:33,520
that HTML and CSS can pretty much create
12792
11:05:30,916 --> 11:05:36,276
everything that we see visually on the
12793
11:05:33,520 --> 11:05:39,160
website where JavaScript comes in is
12794
11:05:36,276 --> 11:05:42,080
that JavaScript makes this website
12795
11:05:39,160 --> 11:05:45,596
interactive so right now if we click the
12796
11:05:42,080 --> 11:05:48,000
add to card button it looks pretty nice
12797
11:05:45,596 --> 11:05:49,560
but it doesn't actually do anything and
12798
11:05:48,000 --> 11:05:52,480
that's because we haven't added
12799
11:05:49,560 --> 11:05:55,240
JavaScript yet so the role of JavaScript
12800
11:05:52,480 --> 11:05:58,640
is to make our website interactive after
12801
11:05:55,240 --> 11:06:01,200
we created all the content and The
12802
11:05:58,640 --> 11:06:03,560
Styling now before we begin adding
12803
11:06:01,200 --> 11:06:05,240
JavaScript to this website we're
12804
11:06:03,560 --> 11:06:07,960
actually going to take some time and
12805
11:06:05,240 --> 11:06:11,880
learn another very useful technology
12806
11:06:07,960 --> 11:06:15,320
called git so git is a technology that
12807
11:06:11,880 --> 11:06:18,360
lets us track changes in our code for
12808
11:06:15,320 --> 11:06:20,320
examp example do not follow along here
12809
11:06:18,360 --> 11:06:24,276
but let's say that I'm working on this
12810
11:06:20,320 --> 11:06:26,960
website and I go into my code editor and
12811
11:06:24,276 --> 11:06:29,480
I change some code here so let's say
12812
11:06:26,960 --> 11:06:32,640
that I add some code
12813
11:06:29,480 --> 11:06:34,720
here and then in this file I'm going to
12814
11:06:32,640 --> 11:06:39,756
delete some code so I just select some
12815
11:06:34,720 --> 11:06:42,480
code and delete it and then
12816
11:06:39,756 --> 11:06:46,756
save and then in this file I'm going to
12817
11:06:42,480 --> 11:06:46,756
change some code at the bottom
12818
11:06:47,116 --> 11:06:52,360
so now let's say that I made a mistake
12819
11:06:50,116 --> 11:06:55,436
and I want to undo all the changes that
12820
11:06:52,360 --> 11:06:57,400
I just made so how would I do that how
12821
11:06:55,436 --> 11:07:00,640
would I remember all the code that I
12822
11:06:57,400 --> 11:07:02,840
changed in the different files so right
12823
11:07:00,640 --> 11:07:05,200
now this is really difficult and this is
12824
11:07:02,840 --> 11:07:07,680
a problem that we run into in bigger
12825
11:07:05,200 --> 11:07:09,680
projects we're changing lots of code in
12826
11:07:07,680 --> 11:07:13,200
different files and it's really hard to
12827
11:07:09,680 --> 11:07:16,436
keep track of what code has changed and
12828
11:07:13,200 --> 11:07:19,116
this is where git comes in git lets us
12829
11:07:16,436 --> 11:07:21,040
track changes in our code and it helps
12830
11:07:19,116 --> 11:07:23,680
us solve this
12831
11:07:21,040 --> 11:07:27,080
problem so here's what it looks like if
12832
11:07:23,680 --> 11:07:30,040
I have git set up in my project I can go
12833
11:07:27,080 --> 11:07:33,596
into this section of VSS code this
12834
11:07:30,040 --> 11:07:36,520
section is for git and then here git
12835
11:07:33,596 --> 11:07:38,720
will tell me which files I changed and
12836
11:07:36,520 --> 11:07:41,400
if I click these files it will tell me
12837
11:07:38,720 --> 11:07:45,040
which lines I changed and exactly which
12838
11:07:41,400 --> 11:07:46,000
code I changed if I want to I can click
12839
11:07:45,040 --> 11:07:49,520
this button
12840
11:07:46,000 --> 11:07:52,720
to reverse all the changes in this
12841
11:07:49,520 --> 11:07:56,360
file I can also click here to reverse
12842
11:07:52,720 --> 11:08:00,116
all the changes in all the
12843
11:07:56,360 --> 11:08:03,200
files so as you can see kit helps us
12844
11:08:00,116 --> 11:08:06,520
track changes in our code and it lets us
12845
11:08:03,200 --> 11:08:09,596
easily undo our changes if we need
12846
11:08:06,520 --> 11:08:12,240
to and this technology is really useful
12847
11:08:09,596 --> 11:08:14,240
in bigger projects like this Amazon
12848
11:08:12,240 --> 11:08:17,400
Project where we're going to be changing
12849
11:08:14,240 --> 11:08:19,640
lots of code in in many different files
12850
11:08:17,400 --> 11:08:22,596
so before we start this project we're
12851
11:08:19,640 --> 11:08:25,520
going to learn how to set up and use
12852
11:08:22,596 --> 11:08:29,800
git the first thing we need to do is to
12853
11:08:25,520 --> 11:08:33,000
install git to do that we can go to this
12854
11:08:29,800 --> 11:08:35,800
section of vs code called Source
12855
11:08:33,000 --> 11:08:39,276
control now if this section looks like
12856
11:08:35,800 --> 11:08:42,520
this with a button initialize repository
12857
11:08:39,276 --> 11:08:45,436
that means you already have git
12858
11:08:42,520 --> 11:08:49,276
installed otherwise if you're on Windows
12859
11:08:45,436 --> 11:08:53,720
you can click this button and then click
12860
11:08:49,276 --> 11:08:56,200
open or you can go to this website
12861
11:08:53,720 --> 11:08:58,080
directly and then click this link to
12862
11:08:56,200 --> 11:09:01,000
download
12863
11:08:58,080 --> 11:09:04,040
git once it's finished downloading we're
12864
11:09:01,000 --> 11:09:06,400
going to run the installer and then just
12865
11:09:04,040 --> 11:09:09,400
go with the default
12866
11:09:06,400 --> 11:09:10,680
options if you're using a Mac you can
12867
11:09:09,400 --> 11:09:13,080
click up
12868
11:09:10,680 --> 11:09:17,000
here and then type
12869
11:09:13,080 --> 11:09:19,756
terminal and press enter
12870
11:09:17,000 --> 11:09:21,080
and inside here you're going to type git
12871
11:09:19,756 --> 11:09:24,200
and press
12872
11:09:21,080 --> 11:09:26,840
enter and then click this link and
12873
11:09:24,200 --> 11:09:26,840
install
12874
11:09:30,520 --> 11:09:37,880
git all right after installing git we're
12875
11:09:34,116 --> 11:09:37,880
going to restart vs
12876
11:09:39,640 --> 11:09:43,720
code and make sure you have the Amazon
12877
11:09:42,240 --> 11:09:47,320
Project
12878
11:09:43,720 --> 11:09:50,436
open and now if if we go into the git
12879
11:09:47,320 --> 11:09:52,840
section it should look like this with
12880
11:09:50,436 --> 11:09:55,320
the button initialize
12881
11:09:52,840 --> 11:09:58,360
repository so now that we've installed
12882
11:09:55,320 --> 11:10:01,116
git we're going to set up git in our
12883
11:09:58,360 --> 11:10:04,640
Amazon Project we can do that by
12884
11:10:01,116 --> 11:10:04,640
clicking initialize
12885
11:10:05,596 --> 11:10:10,400
repository if this button doesn't work
12886
11:10:07,840 --> 11:10:15,720
for you you can also try going to the
12887
11:10:10,400 --> 11:10:19,320
terminal menu and click new terminal
12888
11:10:15,720 --> 11:10:22,880
and then inside this terminal type kit
12889
11:10:19,320 --> 11:10:22,880
in it and press
12890
11:10:25,040 --> 11:10:31,916
enter so a repository is just a folder
12891
11:10:29,000 --> 11:10:34,560
where changes are being tracked by
12892
11:10:31,916 --> 11:10:37,116
clicking initialize repository this
12893
11:10:34,560 --> 11:10:40,240
turns the current folder which is
12894
11:10:37,116 --> 11:10:42,756
Javascript Amazon Project into a
12895
11:10:40,240 --> 11:10:45,436
repository and now all the changes
12896
11:10:42,756 --> 11:10:48,680
inside this folder will be tracked by
12897
11:10:45,436 --> 11:10:52,080
git so to start off git will tell us
12898
11:10:48,680 --> 11:10:54,400
that all of these files are new files
12899
11:10:52,080 --> 11:10:56,960
and that's because we just set up this
12900
11:10:54,400 --> 11:10:59,080
repository so all of these files are
12901
11:10:56,960 --> 11:11:01,200
considered new changes that we're
12902
11:10:59,080 --> 11:11:05,080
starting to keep track
12903
11:11:01,200 --> 11:11:08,720
of next we need to configure a username
12904
11:11:05,080 --> 11:11:11,840
and email with Git now don't worry this
12905
11:11:08,720 --> 11:11:14,400
information is not used anywhere online
12906
11:11:11,840 --> 11:11:17,436
this is just forget to add an author to
12907
11:11:14,400 --> 11:11:20,000
the changes that we make so to configure
12908
11:11:17,436 --> 11:11:21,040
a username and email we're going to go
12909
11:11:20,000 --> 11:11:25,200
to the
12910
11:11:21,040 --> 11:11:26,880
top and open the terminal menu and click
12911
11:11:25,200 --> 11:11:29,960
new
12912
11:11:26,880 --> 11:11:35,880
terminal and then inside
12913
11:11:29,960 --> 11:11:39,000
here we're going to type get config
12914
11:11:35,880 --> 11:11:41,680
user.name and double
12915
11:11:39,000 --> 11:11:43,680
quotes now if this looks familiar to you
12916
11:11:41,680 --> 11:11:46,436
and you've already done this before you
12917
11:11:43,680 --> 11:11:49,160
can skip this step and and the next
12918
11:11:46,436 --> 11:11:51,240
step so between these double quotes
12919
11:11:49,160 --> 11:11:58,160
we'll pick a username that we want to
12920
11:11:51,240 --> 11:12:00,200
use so for me I'll use super simple Dev
12921
11:11:58,160 --> 11:12:03,640
and press
12922
11:12:00,200 --> 11:12:10,756
enter and we'll also configure an email
12923
11:12:03,640 --> 11:12:13,480
by typing get config user. Emil double
12924
11:12:10,756 --> 11:12:19,680
quotes and between these double quotes
12925
11:12:13,480 --> 11:12:21,276
we'll put an email so I'll put Simon at
12926
11:12:19,680 --> 11:12:24,680
superimple
12927
11:12:21,276 --> 11:12:27,160
dodev and press
12928
11:12:24,680 --> 11:12:31,880
enter so now that we configured a
12929
11:12:27,160 --> 11:12:31,880
username and email we can close this
12930
11:12:33,276 --> 11:12:39,320
terminal next we're going to save these
12931
11:12:36,200 --> 11:12:43,000
changes into git so that git will start
12932
11:12:39,320 --> 11:12:44,916
tracking any new changes that we make to
12933
11:12:43,000 --> 11:12:47,756
save these changes we're just going to
12934
11:12:44,916 --> 11:12:50,596
type type a message here describing what
12935
11:12:47,756 --> 11:12:55,000
we changed so let's just type the
12936
11:12:50,596 --> 11:12:57,840
message add the starting
12937
11:12:55,000 --> 11:13:00,480
files and then we're going to click
12938
11:12:57,840 --> 11:13:02,756
commit and if this popup shows up we're
12939
11:13:00,480 --> 11:13:05,960
going to click
12940
11:13:02,756 --> 11:13:09,520
yes so that will take all of our changes
12941
11:13:05,960 --> 11:13:12,720
and save them into git so now that we've
12942
11:13:09,520 --> 11:13:14,800
saved those changes into git any new
12943
11:13:12,720 --> 11:13:18,160
changes that we add will start showing
12944
11:13:14,800 --> 11:13:20,596
up here so let's do an example and let's
12945
11:13:18,160 --> 11:13:23,680
change some code in a couple different
12946
11:13:20,596 --> 11:13:27,400
files for practice so let's click this
12947
11:13:23,680 --> 11:13:29,840
icon up here to show our code and let's
12948
11:13:27,400 --> 11:13:33,840
go into amazon.
12949
11:13:29,840 --> 11:13:37,756
HTML and we'll just change this title to
12950
11:13:33,840 --> 11:13:42,000
intro to git and
12951
11:13:37,756 --> 11:13:45,160
save and then let's go into checkout.
12952
11:13:42,000 --> 11:13:49,276
HTML and at the top let's actually
12953
11:13:45,160 --> 11:13:51,436
remove the title and save and then let's
12954
11:13:49,276 --> 11:13:54,880
open orders.
12955
11:13:51,436 --> 11:13:57,400
HTML and at the top let's just add
12956
11:13:54,880 --> 11:13:59,756
something to the title like
12957
11:13:57,400 --> 11:14:02,800
page if we
12958
11:13:59,756 --> 11:14:04,880
save and then go into the source control
12959
11:14:02,800 --> 11:14:07,596
section or the git
12960
11:14:04,880 --> 11:14:09,880
section it will tell us all the changes
12961
11:14:07,596 --> 11:14:12,960
that we just made in our code in the
12962
11:14:09,880 --> 11:14:16,080
three different files if we click one of
12963
11:14:12,960 --> 11:14:19,116
these files it will actually tell us
12964
11:14:16,080 --> 11:14:21,840
exactly which code that we
12965
11:14:19,116 --> 11:14:23,960
changed now if your git section looks
12966
11:14:21,840 --> 11:14:26,560
like this where the changes are on top
12967
11:14:23,960 --> 11:14:28,800
of each other instead of side by side if
12968
11:14:26,560 --> 11:14:31,160
you want to you can change this by
12969
11:14:28,800 --> 11:14:34,320
clicking these three dots here making
12970
11:14:31,160 --> 11:14:36,916
sure that inline view is unchecked and
12971
11:14:34,320 --> 11:14:39,640
also unchecking use inline view when
12972
11:14:36,916 --> 11:14:39,640
space is
12973
11:14:40,040 --> 11:14:45,436
limited so now it's very easy to undo
12974
11:14:43,360 --> 11:14:47,916
this code we can just take the code on
12975
11:14:45,436 --> 11:14:51,240
the left and then copy paste it on the
12976
11:14:47,916 --> 11:14:54,116
right to undo this change we can also
12977
11:14:51,240 --> 11:14:56,400
click here to undo all the changes in
12978
11:14:54,116 --> 11:14:56,400
this
12979
11:14:56,480 --> 11:15:03,320
file and up here we can also click this
12980
11:15:00,040 --> 11:15:05,680
button to undo all the changes in all
12981
11:15:03,320 --> 11:15:09,240
the different
12982
11:15:05,680 --> 11:15:12,276
files so that's an intro to Git it helps
12983
11:15:09,240 --> 11:15:14,680
us keep track of changes in our code and
12984
11:15:12,276 --> 11:15:16,960
it's very useful for bigger projects
12985
11:15:14,680 --> 11:15:19,160
like this Amazon Project where we're
12986
11:15:16,960 --> 11:15:21,640
going to be changing lots of code in
12987
11:15:19,160 --> 11:15:24,000
many different files if you want to
12988
11:15:21,640 --> 11:15:26,880
learn about git in more detail you can
12989
11:15:24,000 --> 11:15:29,160
check out my git and GitHub full course
12990
11:15:26,880 --> 11:15:32,116
in the video
12991
11:15:29,160 --> 11:15:35,640
description so now that we've setup git
12992
11:15:32,116 --> 11:15:38,480
let's start the Amazon Project so first
12993
11:15:35,640 --> 11:15:40,680
make sure that this section is empty and
12994
11:15:38,480 --> 11:15:42,480
we've reversed all the changes that we
12995
11:15:40,680 --> 11:15:45,720
made when practicing
12996
11:15:42,480 --> 11:15:46,960
git next let's click the this icon to
12997
11:15:45,720 --> 11:15:51,916
show our
12998
11:15:46,960 --> 11:15:51,916
files and let's remove the previous
12999
11:15:51,960 --> 11:15:58,200
code and we're going to start in the
13000
11:15:54,436 --> 11:15:58,200
amazon. HTML
13001
11:15:59,596 --> 11:16:06,320
file and let's close the git page and
13002
11:16:03,520 --> 11:16:09,520
then open the tab for this file it
13003
11:16:06,320 --> 11:16:12,560
should say amazon. HTML up
13004
11:16:09,520 --> 11:16:15,880
here so we'll start by creating the list
13005
11:16:12,560 --> 11:16:18,840
of products on the homepage so right now
13006
11:16:15,880 --> 11:16:21,720
we start with three products if we go to
13007
11:16:18,840 --> 11:16:24,436
the final project we're going to add the
13008
11:16:21,720 --> 11:16:25,756
rest of the products that you see here
13009
11:16:24,436 --> 11:16:28,200
and we're also going to make this
13010
11:16:25,756 --> 11:16:31,320
interactive so that when we click the
13011
11:16:28,200 --> 11:16:33,480
add to card button it will add this
13012
11:16:31,320 --> 11:16:36,680
product to our
13013
11:16:33,480 --> 11:16:39,520
cart so let's go back to our
13014
11:16:36,680 --> 11:16:42,800
project and in order to create this
13015
11:16:39,520 --> 11:16:44,916
we're going to learn the main idea of
13016
11:16:42,800 --> 11:16:47,880
JavaScript so when using JavaScript
13017
11:16:44,916 --> 11:16:51,320
script we usually do a three-step
13018
11:16:47,880 --> 11:16:54,840
process the first step is to save the
13019
11:16:51,320 --> 11:16:58,480
data and then we generate the
13020
11:16:54,840 --> 11:17:01,040
HTML and finally we make it
13021
11:16:58,480 --> 11:17:03,320
interactive let's go through each step
13022
11:17:01,040 --> 11:17:06,040
to create this list of
13023
11:17:03,320 --> 11:17:08,596
products so right now we have three
13024
11:17:06,040 --> 11:17:11,080
products on our page to start with and
13025
11:17:08,596 --> 11:17:14,840
we're going to add more products to this
13026
11:17:11,080 --> 11:17:17,276
page so let's start by finding the HTML
13027
11:17:14,840 --> 11:17:19,200
for one of these products because we can
13028
11:17:17,276 --> 11:17:21,596
always just copy and paste this to
13029
11:17:19,200 --> 11:17:24,040
create another one now we're going to
13030
11:17:21,596 --> 11:17:27,080
learn a very important skill for bigger
13031
11:17:24,040 --> 11:17:29,800
projects which is how to find the code
13032
11:17:27,080 --> 11:17:32,080
for something on this page so let's say
13033
11:17:29,800 --> 11:17:35,320
that we want to find the code for one of
13034
11:17:32,080 --> 11:17:38,200
these products we're going to
13035
11:17:35,320 --> 11:17:40,880
rightclick and click
13036
11:17:38,200 --> 11:17:43,116
inspect and this will bring up the
13037
11:17:40,880 --> 11:17:46,956
console and I'm actually going to click
13038
11:17:43,116 --> 11:17:49,320
these three dots and click this icon to
13039
11:17:46,956 --> 11:17:52,276
move the console to a separate window so
13040
11:17:49,320 --> 11:17:54,240
that we can see the whole web page so
13041
11:17:52,276 --> 11:17:55,640
now we're going to click this icon in
13042
11:17:54,240 --> 11:17:58,596
the top
13043
11:17:55,640 --> 11:18:00,800
left and we're going to hover over and
13044
11:17:58,596 --> 11:18:03,480
click the thing that we want to get the
13045
11:18:00,800 --> 11:18:06,560
code for so I want to get the code for
13046
11:18:03,480 --> 11:18:07,680
this entire first product so I'll click
13047
11:18:06,560 --> 11:18:10,040
in this
13048
11:18:07,680 --> 11:18:13,596
space and this will tell us that the
13049
11:18:10,040 --> 11:18:15,840
code for the product is this code a div
13050
11:18:13,596 --> 11:18:18,040
with the class product -
13051
11:18:15,840 --> 11:18:21,080
container so now we're going to take
13052
11:18:18,040 --> 11:18:24,640
this class and then search for it in our
13053
11:18:21,080 --> 11:18:27,880
code editor so let's open vs
13054
11:18:24,640 --> 11:18:31,756
code and we're going to type contrl f on
13055
11:18:27,880 --> 11:18:34,956
Windows or command F on Mac to search
13056
11:18:31,756 --> 11:18:38,040
for code in this file so we're going to
13057
11:18:34,956 --> 11:18:40,480
search for the class that we saw earlier
13058
11:18:38,040 --> 11:18:43,040
which is
13059
11:18:40,480 --> 11:18:45,596
product-
13060
11:18:43,040 --> 11:18:49,276
container and this will take us to the
13061
11:18:45,596 --> 11:18:51,916
code for one of these products so we can
13062
11:18:49,276 --> 11:18:54,680
actually click the arrow on the left to
13063
11:18:51,916 --> 11:18:57,080
collapse this code and we'll see another
13064
11:18:54,680 --> 11:18:59,480
product container which corresponds to
13065
11:18:57,080 --> 11:19:02,160
the second product we can click this
13066
11:18:59,480 --> 11:19:04,840
Arrow again and we'll see a third
13067
11:19:02,160 --> 11:19:05,956
product container which corresponds to
13068
11:19:04,840 --> 11:19:08,756
the third
13069
11:19:05,956 --> 11:19:11,756
product so that's how we find the code
13070
11:19:08,756 --> 11:19:14,160
for something on the page now to add
13071
11:19:11,756 --> 11:19:17,640
another product to this page one thing
13072
11:19:14,160 --> 11:19:20,596
we can do is to take this HTML and just
13073
11:19:17,640 --> 11:19:24,200
make a copy of it at the bottom of the
13074
11:19:20,596 --> 11:19:26,680
page however this is not a good idea
13075
11:19:24,200 --> 11:19:29,916
because if we add lots of products we're
13076
11:19:26,680 --> 11:19:33,560
going to be copying this HTML over and
13077
11:19:29,916 --> 11:19:36,880
over and if we expand this you can see
13078
11:19:33,560 --> 11:19:38,720
that each product has a lot of HTML code
13079
11:19:36,880 --> 11:19:41,080
so we don't want to be copying all of
13080
11:19:38,720 --> 11:19:42,800
this over and over again it's going to
13081
11:19:41,080 --> 11:19:45,916
be a lot of code and it's going to be
13082
11:19:42,800 --> 11:19:49,840
hard to manage in instead another
13083
11:19:45,916 --> 11:19:52,800
strategy is to generate this HTML code
13084
11:19:49,840 --> 11:19:56,116
using JavaScript so let's learn how to
13085
11:19:52,800 --> 11:19:58,840
do that before we can do that we need to
13086
11:19:56,116 --> 11:20:02,160
add JavaScript to this page so we're
13087
11:19:58,840 --> 11:20:04,436
going to create a Javascript file so
13088
11:20:02,160 --> 11:20:08,160
let's click up here to show our
13089
11:20:04,436 --> 11:20:11,360
files and first let's create a new
13090
11:20:08,160 --> 11:20:14,840
folder to contain all of our JavaScript
13091
11:20:11,360 --> 11:20:17,436
code so let's name this folder SC
13092
11:20:14,840 --> 11:20:21,000
scripts and press
13093
11:20:17,436 --> 11:20:23,240
enter next let's click on our folder and
13094
11:20:21,000 --> 11:20:27,680
we're going to click this icon to create
13095
11:20:23,240 --> 11:20:32,720
a new file and we'll name this file
13096
11:20:27,680 --> 11:20:36,360
amazon. JS and press enter so this will
13097
11:20:32,720 --> 11:20:40,720
be the Javascript file for this HTML
13098
11:20:36,360 --> 11:20:43,560
file next inside this Javascript file
13099
11:20:40,720 --> 11:20:45,480
let's type the code
13100
11:20:43,560 --> 11:20:47,080
console.
13101
11:20:45,480 --> 11:20:50,360
log
13102
11:20:47,080 --> 11:20:51,840
hello just to make sure that this works
13103
11:20:50,360 --> 11:20:54,436
and
13104
11:20:51,840 --> 11:20:58,040
save next we're going to load this
13105
11:20:54,436 --> 11:21:01,160
Javascript file in our HTML file so
13106
11:20:58,040 --> 11:21:04,360
let's go back to amazon.
13107
11:21:01,160 --> 11:21:07,040
HTML and then at the bottom of the code
13108
11:21:04,360 --> 11:21:10,320
we're going to scroll down and then
13109
11:21:07,040 --> 11:21:14,756
right above the closing tag for the body
13110
11:21:10,320 --> 11:21:16,520
we're going to add a script element
13111
11:21:14,756 --> 11:21:21,160
and we're going to give this element an
13112
11:21:16,520 --> 11:21:23,596
attribute SRC or Source equals double
13113
11:21:21,160 --> 11:21:26,916
quotes and we're going to load this
13114
11:21:23,596 --> 11:21:30,680
Javascript file so this Javascript file
13115
11:21:26,916 --> 11:21:33,080
is in a folder called scripts so here
13116
11:21:30,680 --> 11:21:36,276
we're going to type the folder name
13117
11:21:33,080 --> 11:21:39,720
scripts and then a forward slash to go
13118
11:21:36,276 --> 11:21:43,080
into the folder and we'll load the file
13119
11:21:39,720 --> 11:21:46,040
amazon. JS and
13120
11:21:43,080 --> 11:21:49,400
save so now let let's go back to the
13121
11:21:46,040 --> 11:21:51,080
page and we'll open the console right
13122
11:21:49,400 --> 11:21:53,480
click
13123
11:21:51,080 --> 11:21:56,956
inspect and then click the
13124
11:21:53,480 --> 11:21:59,116
console and it should display hello so
13125
11:21:56,956 --> 11:22:03,040
now we're loading JavaScript on this
13126
11:21:59,116 --> 11:22:05,916
page so let's open up vs code
13127
11:22:03,040 --> 11:22:10,276
again and we're going to generate all of
13128
11:22:05,916 --> 11:22:13,040
this HTML using JavaScript instead so
13129
11:22:10,276 --> 11:22:17,720
the first step in our process is to save
13130
11:22:13,040 --> 11:22:21,040
the data what does this mean data means
13131
11:22:17,720 --> 11:22:24,200
information so in this case the data is
13132
11:22:21,040 --> 11:22:27,680
the information about our products for
13133
11:22:24,200 --> 11:22:31,640
example the products name the price
13134
11:22:27,680 --> 11:22:34,116
ratings and the image so right now the
13135
11:22:31,640 --> 11:22:36,756
information about the products or the
13136
11:22:34,116 --> 11:22:41,160
data is inside our
13137
11:22:36,756 --> 11:22:44,080
HTML so in our code if we click here to
13138
11:22:41,160 --> 11:22:44,956
expand this element you can see that the
13139
11:22:44,080 --> 11:22:48,080
inform
13140
11:22:44,956 --> 11:22:51,360
about the products for example the name
13141
11:22:48,080 --> 11:22:54,680
and the image is inside the
13142
11:22:51,360 --> 11:22:57,560
HTML so what we need to do is to take
13143
11:22:54,680 --> 11:23:00,080
this data and save it inside our
13144
11:22:57,560 --> 11:23:03,800
JavaScript so that our JavaScript can
13145
11:23:00,080 --> 11:23:06,596
use it so let's go to our Javascript
13146
11:23:03,800 --> 11:23:09,916
file and I'm just going to put it down
13147
11:23:06,596 --> 11:23:13,000
here so we can see it side by
13148
11:23:09,916 --> 11:23:14,956
side and we're going to move this data
13149
11:23:13,000 --> 11:23:16,720
into our JavaScript
13150
11:23:14,956 --> 11:23:19,436
so let's remove
13151
11:23:16,720 --> 11:23:23,880
console.log and let's create a variable
13152
11:23:19,436 --> 11:23:25,680
to save the data so we'll type const and
13153
11:23:23,880 --> 11:23:27,720
let's name it
13154
11:23:25,680 --> 11:23:30,360
products and make it
13155
11:23:27,720 --> 11:23:34,000
equal and now we want to create
13156
11:23:30,360 --> 11:23:36,756
something that closely matches our data
13157
11:23:34,000 --> 11:23:39,800
so in this case we have a list of
13158
11:23:36,756 --> 11:23:43,240
products so in here we're going to
13159
11:23:39,800 --> 11:23:46,320
create an array because an array
13160
11:23:43,240 --> 11:23:46,320
represents a list
13161
11:23:46,400 --> 11:23:53,320
and now each product in the list has
13162
11:23:49,116 --> 11:23:56,800
many values like an image a name and a
13163
11:23:53,320 --> 11:24:00,200
price so we're going to use an object to
13164
11:23:56,800 --> 11:24:04,040
represent each product because an object
13165
11:24:00,200 --> 11:24:07,800
lets us group multiple values
13166
11:24:04,040 --> 11:24:11,720
together so inside this array we're
13167
11:24:07,800 --> 11:24:14,916
going to create an object using curly
13168
11:24:11,720 --> 11:24:16,880
brackets and now inside this object
13169
11:24:14,916 --> 11:24:20,080
we're going to save the data for the
13170
11:24:16,880 --> 11:24:23,320
first product so first let's find the
13171
11:24:20,080 --> 11:24:26,200
data in our HTML we're going to search
13172
11:24:23,320 --> 11:24:30,560
for the product's name by typing contrl
13173
11:24:26,200 --> 11:24:33,400
F or command F and we'll search for
13174
11:24:30,560 --> 11:24:35,880
black and
13175
11:24:33,400 --> 11:24:39,000
gray and this will take us to the code
13176
11:24:35,880 --> 11:24:41,596
for the first product so this is the
13177
11:24:39,000 --> 11:24:44,200
name of the first product so let's
13178
11:24:41,596 --> 11:24:47,200
actually scroll up and we're going to
13179
11:24:44,200 --> 11:24:49,040
get get the image for the first product
13180
11:24:47,200 --> 11:24:52,240
and we're going to take this and save it
13181
11:24:49,040 --> 11:24:55,276
in our JavaScript so let's select this
13182
11:24:52,240 --> 11:24:57,276
code we're going to
13183
11:24:55,276 --> 11:25:00,520
rightclick
13184
11:24:57,276 --> 11:25:05,596
copy and then inside this object let's
13185
11:25:00,520 --> 11:25:09,436
create a property called image colon and
13186
11:25:05,596 --> 11:25:13,520
then here right click and
13187
11:25:09,436 --> 11:25:16,360
paste and let's save this as a string so
13188
11:25:13,520 --> 11:25:19,480
at the front we'll type a single quote
13189
11:25:16,360 --> 11:25:22,720
and at the end we'll type a single
13190
11:25:19,480 --> 11:25:23,596
quote so we just saved the image inside
13191
11:25:22,720 --> 11:25:26,160
our
13192
11:25:23,596 --> 11:25:29,240
JavaScript let's move on and save the
13193
11:25:26,160 --> 11:25:32,840
name inside our JavaScript so we'll
13194
11:25:29,240 --> 11:25:34,000
scroll down we'll select this code and
13195
11:25:32,840 --> 11:25:35,916
then
13196
11:25:34,000 --> 11:25:40,080
rightclick
13197
11:25:35,916 --> 11:25:43,956
copy and in this object we'll type comma
13198
11:25:40,080 --> 11:25:45,480
and a property called name col in a
13199
11:25:43,956 --> 11:25:50,200
string
13200
11:25:45,480 --> 11:25:50,200
and we'll right click and
13201
11:25:50,756 --> 11:25:57,160
paste next we're going to save the
13202
11:25:53,320 --> 11:26:00,916
rating into our JavaScript so we'll type
13203
11:25:57,160 --> 11:26:02,480
comma and let's create a property called
13204
11:26:00,916 --> 11:26:05,080
rating
13205
11:26:02,480 --> 11:26:08,436
colon for the rating there's actually
13206
11:26:05,080 --> 11:26:11,200
two parts the stars and the number of
13207
11:26:08,436 --> 11:26:14,240
ratings that it has so let's actually
13208
11:26:11,200 --> 11:26:16,360
group these two values into an object
13209
11:26:14,240 --> 11:26:20,116
because these values are related to each
13210
11:26:16,360 --> 11:26:22,000
other so in here we'll make the rating
13211
11:26:20,116 --> 11:26:26,720
and
13212
11:26:22,000 --> 11:26:30,160
object and each rating will have the
13213
11:26:26,720 --> 11:26:33,956
stars and for the socks it's
13214
11:26:30,160 --> 11:26:35,040
4.5 comma and the rating will also have
13215
11:26:33,956 --> 11:26:39,640
a
13216
11:26:35,040 --> 11:26:43,560
count and for the first product it's
13217
11:26:39,640 --> 11:26:44,840
87 next let's save the price into our
13218
11:26:43,560 --> 11:26:49,560
JavaScript
13219
11:26:44,840 --> 11:26:52,276
so we'll create another property called
13220
11:26:49,560 --> 11:26:55,000
price and for the first product the
13221
11:26:52,276 --> 11:26:55,000
price is
13222
11:26:55,756 --> 11:27:01,320
$10.90 however JavaScript has problems
13223
11:26:58,916 --> 11:27:04,720
doing math with decimal numbers or
13224
11:27:01,320 --> 11:27:07,436
floats like this so a best practice when
13225
11:27:04,720 --> 11:27:10,560
calculating money is to calculate in
13226
11:27:07,436 --> 11:27:13,200
cents instead of dollars so for this
13227
11:27:10,560 --> 11:27:17,800
reason we're going to save the price as
13228
11:27:13,200 --> 11:27:22,596
cents so we'll save it as
13229
11:27:17,800 --> 11:27:25,640
1,90 as a reminder $1 is equal to 100
13230
11:27:22,596 --> 11:27:28,840
cents and because we're saving in cents
13231
11:27:25,640 --> 11:27:31,080
it's helpful to rename this property to
13232
11:27:28,840 --> 11:27:34,916
price cents
13233
11:27:31,080 --> 11:27:37,956
instead so now if we scroll up we just
13234
11:27:34,916 --> 11:27:41,436
saved all the information or the data
13235
11:27:37,956 --> 11:27:45,000
about the first product into our
13236
11:27:41,436 --> 11:27:49,200
JavaScript next let's go to the end here
13237
11:27:45,000 --> 11:27:51,200
and type comma and create another object
13238
11:27:49,200 --> 11:27:54,720
and we're going to save the data for the
13239
11:27:51,200 --> 11:27:56,520
second product into this object so feel
13240
11:27:54,720 --> 11:27:58,640
free to pause the video if you want to
13241
11:27:56,520 --> 11:28:01,956
try it yourself
13242
11:27:58,640 --> 11:28:05,916
first so again let's find this product
13243
11:28:01,956 --> 11:28:09,200
in our HTML we'll go to our HTML and
13244
11:28:05,916 --> 11:28:12,320
type contrl f or command F to search for
13245
11:28:09,200 --> 11:28:15,320
code and we'll search for the name
13246
11:28:12,320 --> 11:28:15,320
intermediate
13247
11:28:15,400 --> 11:28:21,320
size basketball so now this is the code
13248
11:28:18,956 --> 11:28:24,276
for the second product we're going to
13249
11:28:21,320 --> 11:28:26,880
scroll up a bit and find the image for
13250
11:28:24,276 --> 11:28:29,880
this product and we're going to select
13251
11:28:26,880 --> 11:28:33,436
it rightclick
13252
11:28:29,880 --> 11:28:36,956
copy and then inside the second object
13253
11:28:33,436 --> 11:28:38,520
we'll create an image property just like
13254
11:28:36,956 --> 11:28:42,276
we did up
13255
11:28:38,520 --> 11:28:46,240
here and we'll save it as a string and
13256
11:28:42,276 --> 11:28:49,436
we're going to rightclick and
13257
11:28:46,240 --> 11:28:53,680
paste and let's type comma and we'll
13258
11:28:49,436 --> 11:28:57,800
save the name inside the second object
13259
11:28:53,680 --> 11:29:01,800
so we'll scroll down and select the
13260
11:28:57,800 --> 11:29:06,000
name and then right click
13261
11:29:01,800 --> 11:29:08,956
copy and then down here create a string
13262
11:29:06,000 --> 11:29:12,276
and rightclick and
13263
11:29:08,956 --> 11:29:15,000
paste and we'll type a comma and we'll
13264
11:29:12,276 --> 11:29:16,756
save the rating
13265
11:29:15,000 --> 11:29:19,360
colon
13266
11:29:16,756 --> 11:29:21,720
object and we'll save the number of
13267
11:29:19,360 --> 11:29:24,956
stars which is
13268
11:29:21,720 --> 11:29:28,756
four and the number of ratings that it
13269
11:29:24,956 --> 11:29:32,800
has count colon
13270
11:29:28,756 --> 11:29:36,800
127 and finally we'll type a comma and
13271
11:29:32,800 --> 11:29:41,200
we'll save the price of the product in
13272
11:29:36,800 --> 11:29:41,200
cents colon
13273
11:29:41,596 --> 11:29:47,080
295 so now the data for these second
13274
11:29:44,320 --> 11:29:50,116
product is saved inside our
13275
11:29:47,080 --> 11:29:53,756
JavaScript let's go to the end and type
13276
11:29:50,116 --> 11:29:55,596
comma and create another object and
13277
11:29:53,756 --> 11:29:58,840
we're going to save the data for the
13278
11:29:55,596 --> 11:30:02,040
third product inside again feel free to
13279
11:29:58,840 --> 11:30:04,840
pause the video to try it yourself first
13280
11:30:02,040 --> 11:30:08,240
so let's save the image we'll find the
13281
11:30:04,840 --> 11:30:11,800
code for this product in our HTML so up
13282
11:30:08,240 --> 11:30:15,400
here we'll typ contrl F or command
13283
11:30:11,800 --> 11:30:17,480
F and we'll search for the product name
13284
11:30:15,400 --> 11:30:20,320
which is
13285
11:30:17,480 --> 11:30:23,560
adults plain cotton
13286
11:30:20,320 --> 11:30:25,800
t-shirt and scroll up and we're going to
13287
11:30:23,560 --> 11:30:31,040
save the image first so let's select
13288
11:30:25,800 --> 11:30:34,480
this right click copy and then down here
13289
11:30:31,040 --> 11:30:38,640
create an image property colon and a
13290
11:30:34,480 --> 11:30:41,840
string and then right click and
13291
11:30:38,640 --> 11:30:45,756
paste and we'll create a comma and let's
13292
11:30:41,840 --> 11:30:48,116
save the name in our Javas script next
13293
11:30:45,756 --> 11:30:51,240
create a string and then we'll scroll
13294
11:30:48,116 --> 11:30:53,040
down here we'll select the
13295
11:30:51,240 --> 11:30:54,756
name right
13296
11:30:53,040 --> 11:30:59,720
click
13297
11:30:54,756 --> 11:31:03,800
copy and then in here right click and
13298
11:30:59,720 --> 11:31:07,640
paste and comma and we'll save the
13299
11:31:03,800 --> 11:31:11,720
rating colon and object and we have the
13300
11:31:07,640 --> 11:31:15,160
number of stars for this one it's
13301
11:31:11,720 --> 11:31:20,080
4.5 colon and the
13302
11:31:15,160 --> 11:31:20,080
count and for this one it is
13303
11:31:20,480 --> 11:31:27,756
56 and lastly type a comma and we'll
13304
11:31:24,640 --> 11:31:31,880
save the price in
13305
11:31:27,756 --> 11:31:35,956
cents colon
13306
11:31:31,880 --> 11:31:39,080
799 and now let's save our Javascript
13307
11:31:35,956 --> 11:31:41,276
file now one really important thing is
13308
11:31:39,080 --> 11:31:44,560
to make sure that in each of these
13309
11:31:41,276 --> 11:31:47,080
objects we have the same property so we
13310
11:31:44,560 --> 11:31:49,840
have the image property the name
13311
11:31:47,080 --> 11:31:52,360
property and the same rating property
13312
11:31:49,840 --> 11:31:54,800
with the same structure we want all of
13313
11:31:52,360 --> 11:31:57,360
our objects to have the same structure
13314
11:31:54,800 --> 11:31:58,596
so that our code can handle each product
13315
11:31:57,360 --> 11:32:01,680
the
13316
11:31:58,596 --> 11:32:04,840
same so that's what it means to save the
13317
11:32:01,680 --> 11:32:07,080
data we create something in JavaScript
13318
11:32:04,840 --> 11:32:10,800
that closely matches the data that we
13319
11:32:07,080 --> 11:32:13,480
have on the Page by the way this is
13320
11:32:10,800 --> 11:32:15,680
called a data structure because its
13321
11:32:13,480 --> 11:32:18,840
structure structures or organizes the
13322
11:32:15,680 --> 11:32:21,640
data and this represents a list of
13323
11:32:18,840 --> 11:32:24,560
products so we usually use a combination
13324
11:32:21,640 --> 11:32:26,080
of objects and arrays to create a data
13325
11:32:24,560 --> 11:32:28,720
structure in
13326
11:32:26,080 --> 11:32:32,360
JavaScript so now that we've saved the
13327
11:32:28,720 --> 11:32:35,880
data the next step is to use this data
13328
11:32:32,360 --> 11:32:38,436
to generate the HTML instead of writing
13329
11:32:35,880 --> 11:32:41,840
the HTML
13330
11:32:38,436 --> 11:32:45,000
manually to generate the HTML we can
13331
11:32:41,840 --> 11:32:47,276
Loop through this array and for each of
13332
11:32:45,000 --> 11:32:48,080
these products we're going to create
13333
11:32:47,276 --> 11:32:51,116
some
13334
11:32:48,080 --> 11:32:55,116
HTML so let's go ahead and loop through
13335
11:32:51,116 --> 11:32:56,240
this array first we'll scroll down to
13336
11:32:55,116 --> 11:32:58,680
the
13337
11:32:56,240 --> 11:33:02,360
bottom and we'll type the name of the
13338
11:32:58,680 --> 11:33:05,480
array which is products and then we'll
13339
11:33:02,360 --> 11:33:11,756
Loop through this array using a for each
13340
11:33:05,480 --> 11:33:15,320
method so we'll type Dot 4 Capital each
13341
11:33:11,756 --> 11:33:19,360
brackets and inside we create a function
13342
11:33:15,320 --> 11:33:22,276
using brackets arrow and curly
13343
11:33:19,360 --> 11:33:24,400
brackets and we'll give it a parameter
13344
11:33:22,276 --> 11:33:26,640
called
13345
11:33:24,400 --> 11:33:29,116
Product so I'm going to move this back
13346
11:33:26,640 --> 11:33:32,680
to the top here so we can see more of
13347
11:33:29,116 --> 11:33:35,596
the code so the way that for each works
13348
11:33:32,680 --> 11:33:37,880
is that it takes each object saves it in
13349
11:33:35,596 --> 11:33:40,720
this parameter called Product and then
13350
11:33:37,880 --> 11:33:43,436
runs the function so it takes the first
13351
11:33:40,720 --> 11:33:45,756
object saves it in product runs the
13352
11:33:43,436 --> 11:33:48,640
function function takes a second object
13353
11:33:45,756 --> 11:33:51,840
saves a product runs a function and so
13354
11:33:48,640 --> 11:33:56,320
on so for each of these products or each
13355
11:33:51,840 --> 11:33:59,276
of these objects we want to create some
13356
11:33:56,320 --> 11:34:03,436
HTML so inside this function let's
13357
11:33:59,276 --> 11:34:06,956
create a variable const
13358
11:34:03,436 --> 11:34:09,720
HTML equals and we'll create a template
13359
11:34:06,956 --> 11:34:12,160
string using back
13360
11:34:09,720 --> 11:34:14,040
ticks and now inside this template
13361
11:34:12,160 --> 11:34:17,160
string we're basically going going to
13362
11:34:14,040 --> 11:34:21,040
copy all the HTML for one of these
13363
11:34:17,160 --> 11:34:24,640
products so let's go back to our HTML
13364
11:34:21,040 --> 11:34:27,320
file and how do we find the HTML for one
13365
11:34:24,640 --> 11:34:28,680
product so we learned this earlier we
13366
11:34:27,320 --> 11:34:31,040
can
13367
11:34:28,680 --> 11:34:34,116
rightclick
13368
11:34:31,040 --> 11:34:36,880
inspect and then click the top left
13369
11:34:34,116 --> 11:34:41,360
icon and click the element we want to
13370
11:34:36,880 --> 11:34:43,880
get the HTML for so this HTML represents
13371
11:34:41,360 --> 11:34:47,916
one product and we can search for this
13372
11:34:43,880 --> 11:34:50,080
class product- container in our code so
13373
11:34:47,916 --> 11:34:54,080
we'll go back to our vs
13374
11:34:50,080 --> 11:34:57,360
code inside the HTML file we can contrl
13375
11:34:54,080 --> 11:35:03,240
f or command F to search for code and
13376
11:34:57,360 --> 11:35:05,800
we'll search for the class product Das
13377
11:35:03,240 --> 11:35:08,560
container and let's go to the first
13378
11:35:05,800 --> 11:35:12,040
result so we'll go to the first result
13379
11:35:08,560 --> 11:35:15,436
which is here and let's copy all of the
13380
11:35:12,040 --> 11:35:17,560
code inside this ele element one trick
13381
11:35:15,436 --> 11:35:21,080
we can do is to click the arrow on the
13382
11:35:17,560 --> 11:35:24,880
left to collapse it and then we'll
13383
11:35:21,080 --> 11:35:26,840
select all this code and we'll
13384
11:35:24,880 --> 11:35:30,800
rightclick
13385
11:35:26,840 --> 11:35:33,916
copy and then inside our Javascript file
13386
11:35:30,800 --> 11:35:37,080
inside the string we're just going to
13387
11:35:33,916 --> 11:35:39,240
rightclick and paste the
13388
11:35:37,080 --> 11:35:42,520
HTML and if we need to fix the
13389
11:35:39,240 --> 11:35:46,520
formatting we can select all of this
13390
11:35:42,520 --> 11:35:49,916
code and then press tab a few times to
13391
11:35:46,520 --> 11:35:52,880
add some indexs and here we can remove
13392
11:35:49,916 --> 11:35:56,000
the indent and let's
13393
11:35:52,880 --> 11:35:59,320
save so now we're basically looping
13394
11:35:56,000 --> 11:36:02,200
through the array of products and for
13395
11:35:59,320 --> 11:36:05,000
each product we're creating all of the
13396
11:36:02,200 --> 11:36:08,520
HTML that we had before so we're
13397
11:36:05,000 --> 11:36:11,360
generating this HTML using
13398
11:36:08,520 --> 11:36:14,360
JavaScript now let's console.log this
13399
11:36:11,360 --> 11:36:16,800
HTML to make sure that it's working
13400
11:36:14,360 --> 11:36:21,000
we'll scroll down to the
13401
11:36:16,800 --> 11:36:24,400
bottom and here let's
13402
11:36:21,000 --> 11:36:26,756
console.log the HTML that we just
13403
11:36:24,400 --> 11:36:30,240
created if we
13404
11:36:26,756 --> 11:36:32,800
save and then go back to our page right
13405
11:36:30,240 --> 11:36:35,240
click and
13406
11:36:32,800 --> 11:36:38,160
inspect and click the
13407
11:36:35,240 --> 11:36:41,360
console you can see in the console that
13408
11:36:38,160 --> 11:36:44,200
we just generated all this HTML and we
13409
11:36:41,360 --> 11:36:46,080
generated three of these
13410
11:36:44,200 --> 11:36:49,840
let's go back to our
13411
11:36:46,080 --> 11:36:49,840
code and scroll
13412
11:36:50,596 --> 11:36:56,640
up now one problem here is that in the
13413
11:36:54,000 --> 11:36:59,240
HTML that we generate we don't want to
13414
11:36:56,640 --> 11:37:01,880
have the name black and gray socks every
13415
11:36:59,240 --> 11:37:03,916
time for the second product we want to
13416
11:37:01,880 --> 11:37:06,160
have a different name and a different
13417
11:37:03,916 --> 11:37:09,360
image and for the third product we want
13418
11:37:06,160 --> 11:37:12,400
to have a different name and a different
13419
11:37:09,360 --> 11:37:15,160
image so how do we create slightly
13420
11:37:12,400 --> 11:37:17,520
different HTML for each
13421
11:37:15,160 --> 11:37:20,160
product to do that we're going to
13422
11:37:17,520 --> 11:37:24,080
replace this part of the code with
13423
11:37:20,160 --> 11:37:26,956
whatever the image property is so for
13424
11:37:24,080 --> 11:37:30,320
here we're going to delete it and we're
13425
11:37:26,956 --> 11:37:34,040
going to insert the property image into
13426
11:37:30,320 --> 11:37:37,596
this string so to insert values into a
13427
11:37:34,040 --> 11:37:40,956
template string like this we can use
13428
11:37:37,596 --> 11:37:43,800
Dollar open curly bracket Clos curly
13429
11:37:40,956 --> 11:37:47,080
bracket and then inside here we're going
13430
11:37:43,800 --> 11:37:50,400
to insert the
13431
11:37:47,080 --> 11:37:52,720
product. image property so it's going to
13432
11:37:50,400 --> 11:37:56,596
take whatever the image property is of
13433
11:37:52,720 --> 11:37:59,756
the product and put it inside this HTML
13434
11:37:56,596 --> 11:38:02,436
code same thing for the name instead of
13435
11:37:59,756 --> 11:38:05,720
black and gray socks every time we're
13436
11:38:02,436 --> 11:38:09,160
going to delete this and then insert a
13437
11:38:05,720 --> 11:38:12,956
value we're going to insert the
13438
11:38:09,160 --> 11:38:18,000
product Dot and we'll insert the name
13439
11:38:12,956 --> 11:38:20,640
property this time into this HTML so dot
13440
11:38:18,000 --> 11:38:23,916
name and we'll do the same thing for the
13441
11:38:20,640 --> 11:38:26,640
other pieces of data so for each product
13442
11:38:23,916 --> 11:38:30,080
the number of stars could be different
13443
11:38:26,640 --> 11:38:33,720
so instead of 4.5 every time let's
13444
11:38:30,080 --> 11:38:39,956
delete this and we're going to insert
13445
11:38:33,720 --> 11:38:41,800
the products rating and stars so
13446
11:38:39,956 --> 11:38:45,360
product.
13447
11:38:41,800 --> 11:38:45,360
rating. Stars
13448
11:38:46,680 --> 11:38:52,756
one thing we have to watch out here for
13449
11:38:49,160 --> 11:38:55,596
is that this image has to exist so right
13450
11:38:52,756 --> 11:38:58,800
now if we substitute the product.
13451
11:38:55,596 --> 11:39:03,080
ratings. Stars into this we will get
13452
11:38:58,800 --> 11:39:06,916
this image and if we go into our files
13453
11:39:03,080 --> 11:39:10,200
by clicking here and open the images
13454
11:39:06,916 --> 11:39:12,720
folder and then open the ratings
13455
11:39:10,200 --> 11:39:14,680
folder we can see that there's no image
13456
11:39:12,720 --> 11:39:17,400
called rating
13457
11:39:14,680 --> 11:39:18,640
-4.5 instead there's an image called
13458
11:39:17,400 --> 11:39:22,756
rating
13459
11:39:18,640 --> 11:39:26,400
-45 so if the rating is 4.5 we should
13460
11:39:22,756 --> 11:39:27,520
convert it into 45 so that this image
13461
11:39:26,400 --> 11:39:31,436
actually
13462
11:39:27,520 --> 11:39:34,360
exists similarly if the rating is four
13463
11:39:31,436 --> 11:39:38,596
we should convert it into 40 so that
13464
11:39:34,360 --> 11:39:43,596
this image actually exists so in here we
13465
11:39:38,596 --> 11:39:47,000
should actually multiply this by 10 so
13466
11:39:43,596 --> 11:39:48,956
that this points to an actual image that
13467
11:39:47,000 --> 11:39:52,840
exists
13468
11:39:48,956 --> 11:39:52,840
here next let's move
13469
11:39:53,240 --> 11:40:01,320
on and we'll work on replacing the count
13470
11:39:57,400 --> 11:40:05,916
so we'll remove this and dollar curly
13471
11:40:01,320 --> 11:40:11,756
brackets and we'll replace it with the
13472
11:40:05,916 --> 11:40:14,400
products. rating Dot and the count
13473
11:40:11,756 --> 11:40:17,276
property so
13474
11:40:14,400 --> 11:40:20,520
count and finally we're going to replace
13475
11:40:17,276 --> 11:40:23,720
the price for each product so in here
13476
11:40:20,520 --> 11:40:25,720
we're going to remove this and
13477
11:40:23,720 --> 11:40:28,596
substitute
13478
11:40:25,720 --> 11:40:31,680
product. price
13479
11:40:28,596 --> 11:40:34,400
sense and remember that this is a number
13480
11:40:31,680 --> 11:40:37,840
in cents but when we display it on the
13481
11:40:34,400 --> 11:40:41,640
page we want to display it as dollars so
13482
11:40:37,840 --> 11:40:45,000
we're going to divide this by 100
13483
11:40:41,640 --> 11:40:48,200
because there are 100 cents in each
13484
11:40:45,000 --> 11:40:51,040
dollar so now in the HTML that we're
13485
11:40:48,200 --> 11:40:55,116
generating we're actually inserting the
13486
11:40:51,040 --> 11:40:58,276
details about each product if we
13487
11:40:55,116 --> 11:40:59,596
save and then go back to the console
13488
11:40:58,276 --> 11:41:01,916
right click
13489
11:40:59,596 --> 11:41:05,000
inspect and
13490
11:41:01,916 --> 11:41:07,560
console and look at the HTML that we
13491
11:41:05,000 --> 11:41:10,680
generated you'll see that it's different
13492
11:41:07,560 --> 11:41:13,560
for each of the products so that's how
13493
11:41:10,680 --> 11:41:15,680
we use JavaScript to generate all the
13494
11:41:13,560 --> 11:41:18,680
HTML
13495
11:41:15,680 --> 11:41:21,956
here so now the last step is we're going
13496
11:41:18,680 --> 11:41:25,756
to combine all this HTML together into
13497
11:41:21,956 --> 11:41:28,080
one string and put it on the web page
13498
11:41:25,756 --> 11:41:31,596
let's go back into VSS
13499
11:41:28,080 --> 11:41:34,400
code and to combine all this HTML
13500
11:41:31,596 --> 11:41:37,040
together let's create a variable at the
13501
11:41:34,400 --> 11:41:41,916
top for combining all the strings
13502
11:41:37,040 --> 11:41:44,400
together so we'll type let let's call it
13503
11:41:41,916 --> 11:41:47,596
products cap Capital
13504
11:41:44,400 --> 11:41:51,200
HTML and make it equal to an empty
13505
11:41:47,596 --> 11:41:53,640
string to start and then each time we go
13506
11:41:51,200 --> 11:41:57,480
through the loop we're going to add this
13507
11:41:53,640 --> 11:42:00,160
HTML string up here so instead of
13508
11:41:57,480 --> 11:42:03,840
creating a new variable we're just going
13509
11:42:00,160 --> 11:42:08,840
to add products
13510
11:42:03,840 --> 11:42:13,200
HTML equals itself products
13511
11:42:08,840 --> 11:42:18,040
HTML plus this string and remember a
13512
11:42:13,200 --> 11:42:21,520
shortcut for this is to just type plus
13513
11:42:18,040 --> 11:42:24,756
equals so this is called the accumulator
13514
11:42:21,520 --> 11:42:27,680
pattern we Loop through an array and
13515
11:42:24,756 --> 11:42:31,080
each time we're adding to the result so
13516
11:42:27,680 --> 11:42:34,116
we're accumulating the result and now
13517
11:42:31,080 --> 11:42:37,276
that we combine all the HTML into this
13518
11:42:34,116 --> 11:42:40,000
variable we can scroll to the
13519
11:42:37,276 --> 11:42:43,360
bottom and let's remove this line
13520
11:42:40,000 --> 11:42:47,596
because this doesn't exist anymore
13521
11:42:43,360 --> 11:42:52,160
and then after the loop let's
13522
11:42:47,596 --> 11:42:54,680
console.log the products
13523
11:42:52,160 --> 11:42:58,560
HTML and
13524
11:42:54,680 --> 11:43:02,436
save and now if we go into our
13525
11:42:58,560 --> 11:43:04,640
console we combined all the HTML for all
13526
11:43:02,436 --> 11:43:07,320
the products
13527
11:43:04,640 --> 11:43:10,800
together and now the last step is to
13528
11:43:07,320 --> 11:43:13,756
take this HTML and put it on the page
13529
11:43:10,800 --> 11:43:16,200
and we can do that using the Dom
13530
11:43:13,756 --> 11:43:19,360
so let's go back into our
13531
11:43:16,200 --> 11:43:22,116
code and to use the Dom we're first
13532
11:43:19,360 --> 11:43:24,916
going to get an HTML element from the
13533
11:43:22,116 --> 11:43:29,240
page and put it inside our
13534
11:43:24,916 --> 11:43:32,520
JavaScript so first let's go to our HTML
13535
11:43:29,240 --> 11:43:34,800
file and remember that a product-
13536
11:43:32,520 --> 11:43:37,880
container represents one of these
13537
11:43:34,800 --> 11:43:41,956
products here so we're going to look for
13538
11:43:37,880 --> 11:43:45,160
this element here a div products- grid
13539
11:43:41,956 --> 11:43:47,436
so this element contains all of our
13540
11:43:45,160 --> 11:43:50,276
products so we're going to use the Dom
13541
11:43:47,436 --> 11:43:54,160
to take this element put it into our
13542
11:43:50,276 --> 11:43:56,756
JavaScript and replace all the HTML
13543
11:43:54,160 --> 11:43:59,200
inside so to put this element in our
13544
11:43:56,756 --> 11:44:03,200
JavaScript we're going to give it a
13545
11:43:59,200 --> 11:44:05,276
class so let's add a class
13546
11:44:03,200 --> 11:44:08,840
js-
13547
11:44:05,276 --> 11:44:12,276
products- grid and
13548
11:44:08,840 --> 11:44:13,596
save and let's go into our JavaScript so
13549
11:44:12,276 --> 11:44:15,916
I'm just going to move this this down to
13550
11:44:13,596 --> 11:44:17,956
the bottom again so we can see it side
13551
11:44:15,916 --> 11:44:21,520
by
13552
11:44:17,956 --> 11:44:24,596
side and then inside our JavaScript at
13553
11:44:21,520 --> 11:44:26,276
the bottom we're going to use the Dom by
13554
11:44:24,596 --> 11:44:31,000
typing
13555
11:44:26,276 --> 11:44:33,840
document. query selector brackets and a
13556
11:44:31,000 --> 11:44:37,360
string and we're going to type dot to
13557
11:44:33,840 --> 11:44:39,040
select a class and we're going to select
13558
11:44:37,360 --> 11:44:41,360
js-
13559
11:44:39,040 --> 11:44:44,000
products-
13560
11:44:41,360 --> 11:44:47,560
grid so the DOT means we're going to
13561
11:44:44,000 --> 11:44:49,560
look for a class called JS products grid
13562
11:44:47,560 --> 11:44:53,480
which is right here and it's going to
13563
11:44:49,560 --> 11:44:56,400
take this element and put it inside our
13564
11:44:53,480 --> 11:45:00,436
JavaScript and now we can change the
13565
11:44:56,400 --> 11:45:05,640
HTML inside the element to do that we'll
13566
11:45:00,436 --> 11:45:09,276
use the property do inner Capital
13567
11:45:05,640 --> 11:45:13,320
HTML and we'll change it to the products
13568
11:45:09,276 --> 11:45:16,436
HTML that we created Above So for
13569
11:45:13,320 --> 11:45:18,956
products Capital
13570
11:45:16,436 --> 11:45:21,436
HTML and
13571
11:45:18,956 --> 11:45:23,436
save so it's not going to look any
13572
11:45:21,436 --> 11:45:26,916
different but now we're actually
13573
11:45:23,436 --> 11:45:30,240
generating all the HTML with JavaScript
13574
11:45:26,916 --> 11:45:33,480
and then using the Dom to put this HTML
13575
11:45:30,240 --> 11:45:35,800
inside here so now we can actually
13576
11:45:33,480 --> 11:45:39,080
delete all of this because we're
13577
11:45:35,800 --> 11:45:39,080
generating this with
13578
11:45:40,320 --> 11:45:46,200
JavaScript if we save this file
13579
11:45:43,720 --> 11:45:48,880
our products will still be here because
13580
11:45:46,200 --> 11:45:51,116
even though we deleted the HTML we're
13581
11:45:48,880 --> 11:45:53,640
now generating it with
13582
11:45:51,116 --> 11:45:56,756
JavaScript now one problem that I see
13583
11:45:53,640 --> 11:45:59,040
here is that the price shows up with one
13584
11:45:56,756 --> 11:46:01,040
decimal but we actually wanted to show
13585
11:45:59,040 --> 11:46:04,116
up as
13586
11:46:01,040 --> 11:46:07,436
10.90 so let's scroll up to this part in
13587
11:46:04,116 --> 11:46:10,080
the code so we'll scroll up
13588
11:46:07,436 --> 11:46:12,560
here and look for Price
13589
11:46:10,080 --> 11:46:14,680
sense and the reason this happens is
13590
11:46:12,560 --> 11:46:18,040
because price sense is
13591
11:46:14,680 --> 11:46:20,436
1,90 so if we divide that by 100 the
13592
11:46:18,040 --> 11:46:23,200
result is actually
13593
11:46:20,436 --> 11:46:25,720
10.9 if we want to force this to show
13594
11:46:23,200 --> 11:46:29,000
two decimals like
13595
11:46:25,720 --> 11:46:33,240
10.90 we actually have a special method
13596
11:46:29,000 --> 11:46:35,520
that we can use with a number so here we
13597
11:46:33,240 --> 11:46:38,400
can add brackets around this to make
13598
11:46:35,520 --> 11:46:41,880
sure we calculate this number first and
13599
11:46:38,400 --> 11:46:47,520
numbers have a special method called dot
13600
11:46:41,880 --> 11:46:50,756
2 Capital fixed and brackets so to fixed
13601
11:46:47,520 --> 11:46:53,360
we'll convert a number into a string but
13602
11:46:50,756 --> 11:46:56,800
we can tell it how many decimals we want
13603
11:46:53,360 --> 11:47:00,680
between the brackets if we type two it
13604
11:46:56,800 --> 11:47:03,720
will show two decimals so if we save now
13605
11:47:00,680 --> 11:47:06,040
it shows correctly on the page if you're
13606
11:47:03,720 --> 11:47:08,840
wondering how to find this method you
13607
11:47:06,040 --> 11:47:11,040
can find it by searching in Google or
13608
11:47:08,840 --> 11:47:14,000
using an AI
13609
11:47:11,040 --> 11:47:16,400
tool okay let's let's take a break here
13610
11:47:14,000 --> 11:47:19,040
and take a look at git to see all the
13611
11:47:16,400 --> 11:47:21,480
changes that we made so I'm going to
13612
11:47:19,040 --> 11:47:23,520
expand this here and we're going to
13613
11:47:21,480 --> 11:47:25,596
click the git
13614
11:47:23,520 --> 11:47:28,400
section and it's going to tell us that
13615
11:47:25,596 --> 11:47:30,840
we changed two files if we click the
13616
11:47:28,400 --> 11:47:33,840
HTML
13617
11:47:30,840 --> 11:47:36,880
file git will tell us that we deleted
13618
11:47:33,840 --> 11:47:39,596
all of the HTML code for the products
13619
11:47:36,880 --> 11:47:42,880
which is correct if we open the
13620
11:47:39,596 --> 11:47:45,956
Javascript file it will tell us that we
13621
11:47:42,880 --> 11:47:48,480
added all of this new JavaScript code
13622
11:47:45,956 --> 11:47:50,276
including the data and the loop for
13623
11:47:48,480 --> 11:47:53,560
generating the
13624
11:47:50,276 --> 11:47:56,400
HTML so git helps us track all of the
13625
11:47:53,560 --> 11:47:58,436
changes that we made so now let's
13626
11:47:56,400 --> 11:48:01,680
actually take these changes and save
13627
11:47:58,436 --> 11:48:05,000
them into git so we can track new
13628
11:48:01,680 --> 11:48:07,880
changes at the top let's type a message
13629
11:48:05,000 --> 11:48:09,880
to describe the changes that we made so
13630
11:48:07,880 --> 11:48:14,240
let's type
13631
11:48:09,880 --> 11:48:16,480
generate HTML with
13632
11:48:14,240 --> 11:48:21,080
JavaScript and click
13633
11:48:16,480 --> 11:48:21,080
commit and yes if this shows
13634
11:48:25,160 --> 11:48:30,040
up so now let's talk about the benefit
13635
11:48:28,360 --> 11:48:34,320
of generating the
13636
11:48:30,040 --> 11:48:36,080
HTML so let's close git for now and I'll
13637
11:48:34,320 --> 11:48:39,040
move this to the side
13638
11:48:36,080 --> 11:48:41,916
here so the benefit of generating the
13639
11:48:39,040 --> 11:48:44,880
HTML is that if we want to add another
13640
11:48:41,916 --> 11:48:48,720
product we don't have to copy paste all
13641
11:48:44,880 --> 11:48:52,240
of this HTML again all we need to do is
13642
11:48:48,720 --> 11:48:55,916
to go up to the data and add the data
13643
11:48:52,240 --> 11:48:59,640
for a new product so let's do an example
13644
11:48:55,916 --> 11:49:02,956
and add a fourth product to our list so
13645
11:48:59,640 --> 11:49:05,596
at the end here let's type a comma and
13646
11:49:02,956 --> 11:49:09,116
create another
13647
11:49:05,596 --> 11:49:12,320
object and let's go to the final
13648
11:49:09,116 --> 11:49:14,560
project and we'll scroll down to this
13649
11:49:12,320 --> 11:49:17,720
four fourth product here so we're going
13650
11:49:14,560 --> 11:49:21,360
to take the data about this product and
13651
11:49:17,720 --> 11:49:26,400
save it in our JavaScript so first let's
13652
11:49:21,360 --> 11:49:28,276
create a property image colon string and
13653
11:49:26,400 --> 11:49:31,720
we're going to take this image and put
13654
11:49:28,276 --> 11:49:34,680
it in here to do that we can rightclick
13655
11:49:31,720 --> 11:49:37,000
the image
13656
11:49:34,680 --> 11:49:39,596
inspect and then we're going to copy
13657
11:49:37,000 --> 11:49:43,000
this Source attribute so we can double
13658
11:49:39,596 --> 11:49:44,596
click it and we can select this
13659
11:49:43,000 --> 11:49:46,436
attribute
13660
11:49:44,596 --> 11:49:49,840
rightclick
13661
11:49:46,436 --> 11:49:53,800
copy and then inside our JavaScript
13662
11:49:49,840 --> 11:49:57,400
we're going to right click and
13663
11:49:53,800 --> 11:49:59,880
paste and at the end we'll type a comma
13664
11:49:57,400 --> 11:50:03,000
and create the name
13665
11:49:59,880 --> 11:50:04,360
property and a string and we're going to
13666
11:50:03,000 --> 11:50:09,480
select this
13667
11:50:04,360 --> 11:50:11,436
name rightclick copy and then in here
13668
11:50:09,480 --> 11:50:15,756
right click
13669
11:50:11,436 --> 11:50:20,000
paste copy comma and a rating property
13670
11:50:15,756 --> 11:50:23,116
colon and object we have these Stars
13671
11:50:20,000 --> 11:50:26,916
which is five and the
13672
11:50:23,116 --> 11:50:26,916
count which is
13673
11:50:27,956 --> 11:50:38,200
2,197 and at the end we're going to add
13674
11:50:31,160 --> 11:50:38,200
the price in cents colon
13675
11:50:39,360 --> 11:50:46,116
1,899 so now if we save this JavaScript
13676
11:50:42,916 --> 11:50:49,560
file and then go back to our
13677
11:50:46,116 --> 11:50:52,320
project and we scroll down you'll notice
13678
11:50:49,560 --> 11:50:55,436
that it automatically added the fourth
13679
11:50:52,320 --> 11:50:58,596
product and all we had to do was to add
13680
11:50:55,436 --> 11:51:01,756
another object to our array and then our
13681
11:50:58,596 --> 11:51:04,720
Loop will handle generating all the HTML
13682
11:51:01,756 --> 11:51:08,240
for us so you can see that generating
13683
11:51:04,720 --> 11:51:11,756
the HTML with JavaScript is a lot easier
13684
11:51:08,240 --> 11:51:14,200
than copy pasting this HTML every time
13685
11:51:11,756 --> 11:51:17,000
and that's why we use this
13686
11:51:14,200 --> 11:51:19,560
technique next we're going to add the
13687
11:51:17,000 --> 11:51:22,400
rest of the products in the final
13688
11:51:19,560 --> 11:51:25,400
project now one thing we could do is to
13689
11:51:22,400 --> 11:51:27,916
manually copy this over one by one but
13690
11:51:25,400 --> 11:51:30,640
to make this easier inside the starting
13691
11:51:27,916 --> 11:51:35,080
code I've actually created a file that
13692
11:51:30,640 --> 11:51:37,116
contains all the data so if we scroll up
13693
11:51:35,080 --> 11:51:40,840
and close this for now and we're going
13694
11:51:37,116 --> 11:51:43,320
to go to this data folder and open it
13695
11:51:40,840 --> 11:51:46,956
and inside this folder I've provided a
13696
11:51:43,320 --> 11:51:49,756
Javascript file called products. JS and
13697
11:51:46,956 --> 11:51:52,436
in here it contains an array with the
13698
11:51:49,756 --> 11:51:55,880
data for all the products in the final
13699
11:51:52,436 --> 11:51:58,800
project so we don't have to create it
13700
11:51:55,880 --> 11:52:02,080
ourselves so now let's use this products
13701
11:51:58,800 --> 11:52:05,720
array in our code so first we need to
13702
11:52:02,080 --> 11:52:09,480
load this file on our page we can go to
13703
11:52:05,720 --> 11:52:11,000
our amazon. HTML file and then scroll
13704
11:52:09,480 --> 11:52:14,320
down to the
13705
11:52:11,000 --> 11:52:16,840
bottom and then at the bottom in the
13706
11:52:14,320 --> 11:52:19,916
script element we're going to add
13707
11:52:16,840 --> 11:52:23,160
another script element above it so we
13708
11:52:19,916 --> 11:52:26,840
type script and then the source is going
13709
11:52:23,160 --> 11:52:30,640
to be equal to this Javascript file so
13710
11:52:26,840 --> 11:52:33,596
we'll type the folder called data and
13711
11:52:30,640 --> 11:52:36,200
then a slash to go into the folder and
13712
11:52:33,596 --> 11:52:37,800
load the file
13713
11:52:36,200 --> 11:52:40,840
products.
13714
11:52:37,800 --> 11:52:43,436
JS so what this does is that it will run
13715
11:52:40,840 --> 11:52:46,276
the files one by one
13716
11:52:43,436 --> 11:52:48,840
first it will run the products. JS file
13717
11:52:46,276 --> 11:52:53,880
and create the array and then it will
13718
11:52:48,840 --> 11:52:57,640
run our amazon. JS file and generate the
13719
11:52:53,880 --> 11:53:02,116
HTML so back here let's
13720
11:52:57,640 --> 11:53:05,560
save and then go back into amazon.
13721
11:53:02,116 --> 11:53:08,080
JS so now instead of using our own
13722
11:53:05,560 --> 11:53:10,520
products array let's just use the
13723
11:53:08,080 --> 11:53:14,040
products array in this
13724
11:53:10,520 --> 11:53:16,956
file so we'll go back to to amazon.
13725
11:53:14,040 --> 11:53:20,000
JS and we're just going to delete this
13726
11:53:16,956 --> 11:53:23,240
array so over here we can click this
13727
11:53:20,000 --> 11:53:27,040
Arrow to collapse the code and I'm going
13728
11:53:23,240 --> 11:53:29,400
to select it and then just delete
13729
11:53:27,040 --> 11:53:33,200
it and
13730
11:53:29,400 --> 11:53:37,200
save so now this variable will be coming
13731
11:53:33,200 --> 11:53:40,480
from this file if we go back to our
13732
11:53:37,200 --> 11:53:44,360
project and scroll down you can see that
13733
11:53:40,480 --> 11:53:47,400
we created all the products in our final
13734
11:53:44,360 --> 11:53:49,640
project so the way this works is that
13735
11:53:47,400 --> 11:53:53,640
inside our amazon.
13736
11:53:49,640 --> 11:53:55,756
HTML we're loading two JavaScript files
13737
11:53:53,640 --> 11:53:58,560
this Javascript file creates all the
13738
11:53:55,756 --> 11:54:00,916
products and then this Javascript file
13739
11:53:58,560 --> 11:54:02,480
Loops through the products and creates
13740
11:54:00,916 --> 11:54:05,000
all the
13741
11:54:02,480 --> 11:54:07,800
HTML so keep in mind that script
13742
11:54:05,000 --> 11:54:10,880
elements are loaded one by one so the
13743
11:54:07,800 --> 11:54:13,200
order matters we have to first create
13744
11:54:10,880 --> 11:54:15,956
the products array and then we can use
13745
11:54:13,200 --> 11:54:18,756
it if these two were reversed then the
13746
11:54:15,956 --> 11:54:22,116
code wouldn't
13747
11:54:18,756 --> 11:54:26,080
work so this is how a real world website
13748
11:54:22,116 --> 11:54:29,080
is created we don't write all the HTML
13749
11:54:26,080 --> 11:54:31,756
manually instead we save the data for
13750
11:54:29,080 --> 11:54:35,116
the website in a data structure like
13751
11:54:31,756 --> 11:54:39,480
this and then we use JavaScript to
13752
11:54:35,116 --> 11:54:41,916
generate the HTML using the data so now
13753
11:54:39,480 --> 11:54:43,080
let's go into get and look at our most
13754
11:54:41,916 --> 11:54:45,560
recent
13755
11:54:43,080 --> 11:54:49,320
changes so here it will tell us that we
13756
11:54:45,560 --> 11:54:52,560
changed two files in the amazon. HTML
13757
11:54:49,320 --> 11:54:56,360
file we added a script element and then
13758
11:54:52,560 --> 11:54:59,680
in the amazon. JS file we deleted the
13759
11:54:56,360 --> 11:55:02,560
products array that we created on our
13760
11:54:59,680 --> 11:55:09,000
own so let's type a message to describe
13761
11:55:02,560 --> 11:55:14,240
our changes use products. JS file and
13762
11:55:09,000 --> 11:55:14,240
then click commit and yes
13763
11:55:14,956 --> 11:55:19,360
now one other thing I want to show you
13764
11:55:16,640 --> 11:55:23,840
about git is if we go back to our files
13765
11:55:19,360 --> 11:55:26,596
here and then open amazon. JS git has a
13766
11:55:23,840 --> 11:55:29,880
really useful feature called a history
13767
11:55:26,596 --> 11:55:33,520
so we can open this timeline section and
13768
11:55:29,880 --> 11:55:35,480
then click this filter icon and only
13769
11:55:33,520 --> 11:55:37,840
check git
13770
11:55:35,480 --> 11:55:40,240
history and now you can see that we
13771
11:55:37,840 --> 11:55:43,800
actually have a history of all of our
13772
11:55:40,240 --> 11:55:46,400
changes for this file so if we click the
13773
11:55:43,800 --> 11:55:49,916
first line in the history it will show
13774
11:55:46,400 --> 11:55:52,400
us that here we added all of the code
13775
11:55:49,916 --> 11:55:55,880
and then the second line in the history
13776
11:55:52,400 --> 11:55:58,840
we deleted this part of the code so this
13777
11:55:55,880 --> 11:56:02,480
gives us a step-by-step history of all
13778
11:55:58,840 --> 11:56:05,880
the changes in our code and in git this
13779
11:56:02,480 --> 11:56:08,080
is called a version history you can also
13780
11:56:05,880 --> 11:56:11,320
see that the messages that we created
13781
11:56:08,080 --> 11:56:13,680
when we commit show up here and these
13782
11:56:11,320 --> 11:56:16,400
messages help us us understand what was
13783
11:56:13,680 --> 11:56:19,000
changed in each version in the
13784
11:56:16,400 --> 11:56:21,276
history all right so let's close this
13785
11:56:19,000 --> 11:56:21,276
for
13786
11:56:21,680 --> 11:56:26,956
now and the last step in the process is
13787
11:56:24,560 --> 11:56:29,840
to make it
13788
11:56:26,956 --> 11:56:30,916
interactive so let's take a look at our
13789
11:56:29,840 --> 11:56:35,436
current
13790
11:56:30,916 --> 11:56:38,160
project so we'll go here and open this
13791
11:56:35,436 --> 11:56:41,756
tab and let's scroll
13792
11:56:38,160 --> 11:56:45,116
up so right now if we click the add to
13793
11:56:41,756 --> 11:56:46,956
cart button Buton it doesn't do anything
13794
11:56:45,116 --> 11:56:49,596
so we're going to add some JavaScript to
13795
11:56:46,956 --> 11:56:53,520
make this interactive and actually add
13796
11:56:49,596 --> 11:56:56,916
this product to a cart so first let's
13797
11:56:53,520 --> 11:57:01,200
find the add to cart button in our code
13798
11:56:56,916 --> 11:57:02,680
we'll go back to our amazon. JS file
13799
11:57:01,200 --> 11:57:05,720
close this for
13800
11:57:02,680 --> 11:57:08,800
now and to find the code we can actually
13801
11:57:05,720 --> 11:57:12,240
just search the text in the button so
13802
11:57:08,800 --> 11:57:14,680
inside here let's typ contrl F or
13803
11:57:12,240 --> 11:57:18,480
command F and we're going to search for
13804
11:57:14,680 --> 11:57:21,400
the text add to
13805
11:57:18,480 --> 11:57:24,080
cart and this will take us to the code
13806
11:57:21,400 --> 11:57:26,880
for this button so now we're going to
13807
11:57:24,080 --> 11:57:29,956
add an event listener to this button and
13808
11:57:26,880 --> 11:57:32,116
make it do something when we click it to
13809
11:57:29,956 --> 11:57:33,480
add an event listener we're first going
13810
11:57:32,116 --> 11:57:35,436
to add a
13811
11:57:33,480 --> 11:57:37,720
class
13812
11:57:35,436 --> 11:57:39,720
js-
13813
11:57:37,720 --> 11:57:41,840
add-2
13814
11:57:39,720 --> 11:57:45,720
dcart and then we're going to use the
13815
11:57:41,840 --> 11:57:48,200
dawn to add an event listener to this
13816
11:57:45,720 --> 11:57:51,596
button so down
13817
11:57:48,200 --> 11:57:55,240
here after we've put this HTML on the
13818
11:57:51,596 --> 11:57:58,240
page we're going to use
13819
11:57:55,240 --> 11:58:03,276
document. Query
13820
11:57:58,240 --> 11:58:06,400
selector all brackets and then a string
13821
11:58:03,276 --> 11:58:10,000
a DOT and we're going to select all the
13822
11:58:06,400 --> 11:58:15,520
js- add to cart so
13823
11:58:10,000 --> 11:58:18,480
js- add-2 to- cart so this will give us
13824
11:58:15,520 --> 11:58:21,436
a list of all the add to cart buttons on
13825
11:58:18,480 --> 11:58:25,320
the page and then we can Loop through
13826
11:58:21,436 --> 11:58:28,080
each of the buttons so we can type dot
13827
11:58:25,320 --> 11:58:30,560
for each
13828
11:58:28,080 --> 11:58:34,880
brackets and then in here we'll give it
13829
11:58:30,560 --> 11:58:38,240
a function bracket arrow and curly
13830
11:58:34,880 --> 11:58:40,596
brackets and a parameter so the
13831
11:58:38,240 --> 11:58:44,400
parameter is going to be the button
13832
11:58:40,596 --> 11:58:46,520
element that we got from the page so now
13833
11:58:44,400 --> 11:58:48,916
for each of these buttons we're going to
13834
11:58:46,520 --> 11:58:51,800
add an event listener so we can do
13835
11:58:48,916 --> 11:58:54,276
something when we click the button to do
13836
11:58:51,800 --> 11:58:58,040
that we'll type
13837
11:58:54,276 --> 11:59:01,596
button. add event
13838
11:58:58,040 --> 11:59:04,560
listener brackets and then the event
13839
11:59:01,596 --> 11:59:05,720
that we want to listen for which is the
13840
11:59:04,560 --> 11:59:08,200
click
13841
11:59:05,720 --> 11:59:11,276
event and then a function that we want
13842
11:59:08,200 --> 11:59:14,276
to run when we click this button so
13843
11:59:11,276 --> 11:59:16,596
brackets arrow and curly
13844
11:59:14,276 --> 11:59:19,200
brackets so for now let's just
13845
11:59:16,596 --> 11:59:23,520
console.log a message to make sure that
13846
11:59:19,200 --> 11:59:23,520
this is working so we'll
13847
11:59:23,916 --> 11:59:29,520
console.log added
13848
11:59:26,756 --> 11:59:32,276
product and
13849
11:59:29,520 --> 11:59:35,116
save and we can also remove this line
13850
11:59:32,276 --> 11:59:38,200
for now because we're not using it and
13851
11:59:35,116 --> 11:59:40,276
save again and then now on our page
13852
11:59:38,200 --> 11:59:44,000
we're going to click add it to
13853
11:59:40,276 --> 11:59:45,956
cart and then look inside our console so
13854
11:59:44,000 --> 11:59:48,276
rightclick
13855
11:59:45,956 --> 11:59:52,040
inspect and click the
13856
11:59:48,276 --> 11:59:53,720
console and it displays added product so
13857
11:59:52,040 --> 11:59:57,436
now whenever we click one of these
13858
11:59:53,720 --> 12:00:01,000
buttons it will display this message so
13859
11:59:57,436 --> 12:00:04,000
that means that our code here is working
13860
12:00:01,000 --> 12:00:07,360
correctly next we need to figure out how
13861
12:00:04,000 --> 12:00:10,436
to add the product to a cart and we need
13862
12:00:07,360 --> 12:00:13,360
to figure out what this looks like if we
13863
12:00:10,436 --> 12:00:16,800
think about a cart a cart is basically
13864
12:00:13,360 --> 12:00:19,320
just a list and inside this list we have
13865
12:00:16,800 --> 12:00:21,800
the product that we want to buy and the
13866
12:00:19,320 --> 12:00:24,080
quantity or the number of this product
13867
12:00:21,800 --> 12:00:28,200
that we want to buy so we can actually
13868
12:00:24,080 --> 12:00:30,080
represent this in JavaScript as an array
13869
12:00:28,200 --> 12:00:32,520
inside the array we can have some
13870
12:00:30,080 --> 12:00:35,116
objects and each object is going to
13871
12:00:32,520 --> 12:00:37,640
contain the product and a
13872
12:00:35,116 --> 12:00:41,116
quantity so we can use something like
13873
12:00:37,640 --> 12:00:44,400
this to represent our cart so let's go
13874
12:00:41,116 --> 12:00:46,596
ahead and create create this cart array
13875
12:00:44,400 --> 12:00:49,560
now to keep things cleaner let's
13876
12:00:46,596 --> 12:00:52,880
actually separate the cart into its own
13877
12:00:49,560 --> 12:00:55,480
file so we'll click up here to show our
13878
12:00:52,880 --> 12:00:58,596
files and then we'll go into the data
13879
12:00:55,480 --> 12:01:01,116
folder and click this folder and click
13880
12:00:58,596 --> 12:01:06,520
this icon to create a new
13881
12:01:01,116 --> 12:01:08,116
file and we'll name this file cart. JS
13882
12:01:06,520 --> 12:01:11,000
and press
13883
12:01:08,116 --> 12:01:14,200
enter so this file will contain all the
13884
12:01:11,000 --> 12:01:16,480
code related to the cart and the reason
13885
12:01:14,200 --> 12:01:19,360
we separate it is to keep our code
13886
12:01:16,480 --> 12:01:22,916
organized each file will focus on one
13887
12:01:19,360 --> 12:01:27,116
particular thing so inside
13888
12:01:22,916 --> 12:01:31,916
C.J let's create our cart so we can just
13889
12:01:27,116 --> 12:01:35,320
create a variable const cart and make it
13890
12:01:31,916 --> 12:01:39,080
equal to an array so we'll start off
13891
12:01:35,320 --> 12:01:42,200
with an MD cart and let's save this
13892
12:01:39,080 --> 12:01:43,480
file and now we need to load this file
13893
12:01:42,200 --> 12:01:47,436
into our
13894
12:01:43,480 --> 12:01:50,756
HTML so we can open amazon.
13895
12:01:47,436 --> 12:01:53,880
HTML and again we can just add another
13896
12:01:50,756 --> 12:01:56,880
script element so let's add it at the
13897
12:01:53,880 --> 12:01:59,560
top to make sure we load the cart before
13898
12:01:56,880 --> 12:02:01,880
running the rest of our code so we'll
13899
12:01:59,560 --> 12:02:04,720
type less than
13900
12:02:01,880 --> 12:02:07,880
script and the attribute
13901
12:02:04,720 --> 12:02:12,596
source and we'll load the data folder
13902
12:02:07,880 --> 12:02:13,800
slash to go inside cart. Js
13903
12:02:12,596 --> 12:02:17,400
and
13904
12:02:13,800 --> 12:02:20,116
save so now it will run this file at the
13905
12:02:17,400 --> 12:02:23,360
start and it will create an array
13906
12:02:20,116 --> 12:02:25,956
representing our cart so now that we
13907
12:02:23,360 --> 12:02:28,840
have a cart we need to figure out what
13908
12:02:25,956 --> 12:02:32,800
happens when we click a button how do we
13909
12:02:28,840 --> 12:02:36,116
add a product to this cart so let's go
13910
12:02:32,800 --> 12:02:40,000
back into amazon. JS and we'll figure
13911
12:02:36,116 --> 12:02:42,320
this out together so down here this is
13912
12:02:40,000 --> 12:02:45,160
the function that is run when we click
13913
12:02:42,320 --> 12:02:48,040
the button so in here we have to figure
13914
12:02:45,160 --> 12:02:51,320
out how to add this product to the
13915
12:02:48,040 --> 12:02:54,800
cart one way to do this is to just add
13916
12:02:51,320 --> 12:02:57,400
an object to the cart like this we have
13917
12:02:54,800 --> 12:03:00,596
the product's name and the quantity that
13918
12:02:57,400 --> 12:03:03,080
we want however when we click this
13919
12:03:00,596 --> 12:03:05,956
button how do we know which product
13920
12:03:03,080 --> 12:03:08,000
we're supposed to add to the cart to
13921
12:03:05,956 --> 12:03:11,320
solve this problem we're going to learn
13922
12:03:08,000 --> 12:03:12,840
a feature of HTML called a data
13923
12:03:11,320 --> 12:03:16,596
attribute
13924
12:03:12,840 --> 12:03:19,276
a data attribute is just another HTML
13925
12:03:16,596 --> 12:03:22,200
attribute except the purpose of a data
13926
12:03:19,276 --> 12:03:26,436
attribute is that it allows us to attach
13927
12:03:22,200 --> 12:03:30,520
any information to an HTML element so
13928
12:03:26,436 --> 12:03:33,560
let's do an example and create a data
13929
12:03:30,520 --> 12:03:36,916
attribute we're going to scroll up to
13930
12:03:33,560 --> 12:03:39,640
the add to card button here and then at
13931
12:03:36,916 --> 12:03:42,240
the end of the opening tag after the
13932
12:03:39,640 --> 12:03:46,320
class we'll type enter
13933
12:03:42,240 --> 12:03:48,560
and then we're going to type data Dash
13934
12:03:46,320 --> 12:03:51,480
and then we can type any name that we
13935
12:03:48,560 --> 12:03:55,596
want like
13936
12:03:51,480 --> 12:03:56,480
product-name and we'll make it equal to
13937
12:03:55,596 --> 12:03:59,436
double
13938
12:03:56,480 --> 12:04:01,916
quotes and then inside the double quotes
13939
12:03:59,436 --> 12:04:05,200
we're going to put the product's name
13940
12:04:01,916 --> 12:04:08,080
like a basketball or a t-shirt so to do
13941
12:04:05,200 --> 12:04:09,436
that we're going to insert using dollar
13942
12:04:08,080 --> 12:04:12,880
and curly
13943
12:04:09,436 --> 12:04:15,436
brackets product
13944
12:04:12,880 --> 12:04:19,320
AME and
13945
12:04:15,436 --> 12:04:22,400
save so now let's inspect the HTML on
13946
12:04:19,320 --> 12:04:25,596
the page we're going to rightclick on
13947
12:04:22,400 --> 12:04:28,400
this add to card button and
13948
12:04:25,596 --> 12:04:31,840
inspect and then in the elements tab it
13949
12:04:28,400 --> 12:04:33,436
will show us the HTML for the button and
13950
12:04:31,840 --> 12:04:36,800
now you can see that each of these
13951
12:04:33,436 --> 12:04:40,680
buttons now has a data attribute called
13952
12:04:36,800 --> 12:04:43,436
data- product-name and it's equal to the
13953
12:04:40,680 --> 12:04:45,800
product name
13954
12:04:43,436 --> 12:04:48,200
so before we continue let's learn the
13955
12:04:45,800 --> 12:04:51,520
syntax rules for the data
13956
12:04:48,200 --> 12:04:55,040
attribute a data attribute is just an
13957
12:04:51,520 --> 12:04:58,320
HTML attribute that means it follows the
13958
12:04:55,040 --> 12:05:01,240
same syntax rules we have an attribute
13959
12:04:58,320 --> 12:05:04,276
name on the left and an attribute value
13960
12:05:01,240 --> 12:05:08,200
on the right the one difference is that
13961
12:05:04,276 --> 12:05:10,840
data attributes have to start with data
13962
12:05:08,200 --> 12:05:14,320
Dash and then we can give it any name
13963
12:05:10,840 --> 12:05:16,436
that we want like product- name but we
13964
12:05:14,320 --> 12:05:21,276
have to make sure to separate the words
13965
12:05:16,436 --> 12:05:24,596
with a dash this is also known as Kabob
13966
12:05:21,276 --> 12:05:27,200
case so the purpose of a data attribute
13967
12:05:24,596 --> 12:05:30,320
is that we can attach any information to
13968
12:05:27,200 --> 12:05:32,840
an element so here we attached the
13969
12:05:30,320 --> 12:05:35,360
product name to this button but we can
13970
12:05:32,840 --> 12:05:39,360
also attach the product's image or the
13971
12:05:35,360 --> 12:05:41,956
price and so on so now that we attached
13972
12:05:39,360 --> 12:05:44,596
the product's name to this button when
13973
12:05:41,956 --> 12:05:47,000
we click this button we can actually get
13974
12:05:44,596 --> 12:05:49,160
the name and this will tell us which
13975
12:05:47,000 --> 12:05:51,880
product we should add to the
13976
12:05:49,160 --> 12:05:55,436
cart so let's see what this looks like
13977
12:05:51,880 --> 12:05:58,840
in our code so we'll go to our
13978
12:05:55,436 --> 12:06:01,000
code and then when we click the button
13979
12:05:58,840 --> 12:06:04,320
we're first going to get the product
13980
12:06:01,000 --> 12:06:07,360
name from the button to do that we're
13981
12:06:04,320 --> 12:06:12,880
going to type button and then the
13982
12:06:07,360 --> 12:06:15,640
property dot data set
13983
12:06:12,880 --> 12:06:18,240
so the data set property basically gives
13984
12:06:15,640 --> 12:06:20,720
us all the data attributes that are
13985
12:06:18,240 --> 12:06:23,800
attached to this button so now we're
13986
12:06:20,720 --> 12:06:26,200
able to get the product name so let's
13987
12:06:23,800 --> 12:06:28,956
console.log this to see what it looks
13988
12:06:26,200 --> 12:06:32,480
like
13989
12:06:28,956 --> 12:06:33,800
console.log Open Bracket close bracket
13990
12:06:32,480 --> 12:06:37,240
and
13991
12:06:33,800 --> 12:06:39,320
save and then in here let's click the
13992
12:06:37,240 --> 12:06:42,360
basketballs add to cart
13993
12:06:39,320 --> 12:06:45,000
button and we'll go into our console
13994
12:06:42,360 --> 12:06:47,916
right click
13995
12:06:45,000 --> 12:06:50,116
inspect and
13996
12:06:47,916 --> 12:06:52,480
console and I'm just going to move this
13997
12:06:50,116 --> 12:06:54,040
to the left so we can see it side by
13998
12:06:52,480 --> 12:06:56,756
side with our
13999
12:06:54,040 --> 12:06:59,640
code so this is what the data set
14000
12:06:56,756 --> 12:07:02,000
property looks like it gives us all the
14001
12:06:59,640 --> 12:07:04,520
data attributes that are attached to the
14002
12:07:02,000 --> 12:07:08,480
element so in our case we have the
14003
12:07:04,520 --> 12:07:11,756
product name now this works just like an
14004
12:07:08,480 --> 12:07:17,916
object so to access the product name we
14005
12:07:11,756 --> 12:07:20,360
just have to type dot product capital N
14006
12:07:17,916 --> 12:07:24,276
name so notice that the name gets
14007
12:07:20,360 --> 12:07:26,116
converted from Kebab case to camo case
14008
12:07:24,276 --> 12:07:29,400
so now if we
14009
12:07:26,116 --> 12:07:32,880
save and let's go back to our
14010
12:07:29,400 --> 12:07:35,840
website and click the add to cardart
14011
12:07:32,880 --> 12:07:38,720
button it will get that data attribute
14012
12:07:35,840 --> 12:07:42,320
from the button and display it in the
14013
12:07:38,720 --> 12:07:45,080
console if we click the socks at to cart
14014
12:07:42,320 --> 12:07:48,240
button this will tell us which product
14015
12:07:45,080 --> 12:07:50,916
we should add to the cart so now that we
14016
12:07:48,240 --> 12:07:55,200
have the product name let's actually put
14017
12:07:50,916 --> 12:07:58,720
this into our cart so let's go into our
14018
12:07:55,200 --> 12:08:03,040
code and here let's save the product
14019
12:07:58,720 --> 12:08:06,480
name in a variable called const
14020
12:08:03,040 --> 12:08:09,840
Product name
14021
12:08:06,480 --> 12:08:12,480
equals and then here we're going to add
14022
12:08:09,840 --> 12:08:14,956
this to the cart
14023
12:08:12,480 --> 12:08:17,360
so we already created a cart variable
14024
12:08:14,956 --> 12:08:20,840
here so we're just going to type the
14025
12:08:17,360 --> 12:08:24,360
variable cart and we're going to dot
14026
12:08:20,840 --> 12:08:26,560
push into the array and let's push an
14027
12:08:24,360 --> 12:08:28,400
object because we said we wanted a
14028
12:08:26,560 --> 12:08:31,040
product and the
14029
12:08:28,400 --> 12:08:35,800
quantity so we'll add an object
14030
12:08:31,040 --> 12:08:39,240
containing the product name which is
14031
12:08:35,800 --> 12:08:42,520
this variable product
14032
12:08:39,240 --> 12:08:43,916
name and a quantity
14033
12:08:42,520 --> 12:08:47,436
of
14034
12:08:43,916 --> 12:08:49,880
one and that's pretty much it we first
14035
12:08:47,436 --> 12:08:52,916
attached the product name to the button
14036
12:08:49,880 --> 12:08:56,240
using a data attribute and then when we
14037
12:08:52,916 --> 12:08:59,400
click the button we got the product name
14038
12:08:56,240 --> 12:09:03,436
out and then we add the product to the
14039
12:08:59,400 --> 12:09:06,080
cart so at the bottom let's
14040
12:09:03,436 --> 12:09:08,756
console.log thee cart to see what it
14041
12:09:06,080 --> 12:09:11,916
looks like if we
14042
12:09:08,756 --> 12:09:17,320
save and then go here and open the
14043
12:09:11,916 --> 12:09:20,240
console right click inspect
14044
12:09:17,320 --> 12:09:23,520
console and let's add a basketball to
14045
12:09:20,240 --> 12:09:27,360
our cart so we'll click here and then in
14046
12:09:23,520 --> 12:09:30,880
our cart we now have a basketball with a
14047
12:09:27,360 --> 12:09:33,436
quantity of one so now let's add another
14048
12:09:30,880 --> 12:09:36,520
product to our cart we'll go to the
14049
12:09:33,436 --> 12:09:39,880
t-shirt and click add to
14050
12:09:36,520 --> 12:09:44,080
cart and now we have two products in our
14051
12:09:39,880 --> 12:09:46,800
cart one b basketball and one
14052
12:09:44,080 --> 12:09:50,956
t-shirt so now we're successfully adding
14053
12:09:46,800 --> 12:09:54,596
products to a cart next let's try adding
14054
12:09:50,956 --> 12:09:58,040
one t-shirt again if we click add to
14055
12:09:54,596 --> 12:10:01,400
cart and unfortunately this doesn't look
14056
12:09:58,040 --> 12:10:04,160
quite right the T-shirt product is
14057
12:10:01,400 --> 12:10:07,160
repeated twice and each of them has a
14058
12:10:04,160 --> 12:10:10,040
quantity of one what we actually want to
14059
12:10:07,160 --> 12:10:12,040
do is we want one t-shirt product with a
14060
12:10:10,040 --> 12:10:13,560
quantity of two
14061
12:10:12,040 --> 12:10:16,800
because this is how we're going to
14062
12:10:13,560 --> 12:10:19,320
display it on the cart page so let's
14063
12:10:16,800 --> 12:10:23,160
figure out how to achieve this and we'll
14064
12:10:19,320 --> 12:10:26,360
do this step by step first we'll check
14065
12:10:23,160 --> 12:10:28,880
if the product is already in the cart if
14066
12:10:26,360 --> 12:10:31,916
it is in the cart we'll just increase
14067
12:10:28,880 --> 12:10:35,276
the quantity by one if it's not in the
14068
12:10:31,916 --> 12:10:38,680
cart We'll add it to the cart so let's
14069
12:10:35,276 --> 12:10:41,360
convert these steps into code so the
14070
12:10:38,680 --> 12:10:45,200
first step is to check if a product is
14071
12:10:41,360 --> 12:10:47,080
already in the cart so how do we do that
14072
12:10:45,200 --> 12:10:50,800
let's go back to our
14073
12:10:47,080 --> 12:10:53,720
code and one way to check this is we can
14074
12:10:50,800 --> 12:10:58,116
Loop through our cart and look for a
14075
12:10:53,720 --> 12:11:01,400
particular product name so up here let's
14076
12:10:58,116 --> 12:11:05,040
create some new lines and let's check if
14077
12:11:01,400 --> 12:11:09,400
this product name is already in the cart
14078
12:11:05,040 --> 12:11:14,520
array so we'll type cart and we'll Loop
14079
12:11:09,400 --> 12:11:17,240
through the cart using dot for each
14080
12:11:14,520 --> 12:11:20,916
brackets and then inside we'll give it a
14081
12:11:17,240 --> 12:11:24,080
function brackets arrow and curly
14082
12:11:20,916 --> 12:11:27,720
brackets and we'll give this a parameter
14083
12:11:24,080 --> 12:11:31,276
and let's just call it an item so an
14084
12:11:27,720 --> 12:11:33,720
item will contain a product name and a
14085
12:11:31,276 --> 12:11:36,480
quantity so we want to see if this
14086
12:11:33,720 --> 12:11:40,720
product name is already in the
14087
12:11:36,480 --> 12:11:42,400
card so we're going to check if the
14088
12:11:40,720 --> 12:11:46,640
product
14089
12:11:42,400 --> 12:11:51,480
name over here is equal to this item's
14090
12:11:46,640 --> 12:11:53,000
product name so we'll type equals the
14091
12:11:51,480 --> 12:11:56,756
item.
14092
12:11:53,000 --> 12:12:00,320
product name and curly
14093
12:11:56,756 --> 12:12:02,560
brackets so if the product names match
14094
12:12:00,320 --> 12:12:03,520
that means this product is already in
14095
12:12:02,560 --> 12:12:06,756
the
14096
12:12:03,520 --> 12:12:10,160
cart so let's save this matching item in
14097
12:12:06,756 --> 12:12:11,916
a variable so we can use it later so
14098
12:12:10,160 --> 12:12:15,040
we're going to create the variable
14099
12:12:11,916 --> 12:12:20,276
outside the for each Loop and outside of
14100
12:12:15,040 --> 12:12:23,400
its scope so we'll type let matching
14101
12:12:20,276 --> 12:12:26,680
capital I item and we'll make it
14102
12:12:23,400 --> 12:12:30,000
undefined to start and if we find a
14103
12:12:26,680 --> 12:12:33,276
matching item we're going to save it in
14104
12:12:30,000 --> 12:12:37,116
this variable so
14105
12:12:33,276 --> 12:12:40,116
matching item equals
14106
12:12:37,116 --> 12:12:43,200
item so this is how we figure out if a
14107
12:12:40,116 --> 12:12:46,160
product is already already in the cart
14108
12:12:43,200 --> 12:12:48,596
now the next step is If the product is
14109
12:12:46,160 --> 12:12:53,000
in the cart we'll just increase its
14110
12:12:48,596 --> 12:12:54,800
quantity by one so we'll type
14111
12:12:53,000 --> 12:12:59,480
if
14112
12:12:54,800 --> 12:13:02,200
matching item and curly brackets so we
14113
12:12:59,480 --> 12:13:04,956
can just type matching item here because
14114
12:13:02,200 --> 12:13:09,160
if we did find a matching item it will
14115
12:13:04,956 --> 12:13:11,480
be an object which is a truthy value so
14116
12:13:09,160 --> 12:13:15,880
in here we're going to increase the
14117
12:13:11,480 --> 12:13:17,400
matching items quantity by one using
14118
12:13:15,880 --> 12:13:22,640
matching
14119
12:13:17,400 --> 12:13:26,116
item. quantity and we'll plus equal
14120
12:13:22,640 --> 12:13:29,200
1 and finally If the product is not in
14121
12:13:26,116 --> 12:13:32,276
the cart We'll add it to the cart which
14122
12:13:29,200 --> 12:13:36,720
is basically what we do here so at the
14123
12:13:32,276 --> 12:13:41,276
end we can just type else if we did not
14124
12:13:36,720 --> 12:13:45,000
find a matching item curly brackets and
14125
12:13:41,276 --> 12:13:46,596
move this code so we'll select it right
14126
12:13:45,000 --> 12:13:52,560
click
14127
12:13:46,596 --> 12:13:57,520
cut and then in here rightclick and
14128
12:13:52,560 --> 12:14:00,756
paste and remove the new lines and
14129
12:13:57,520 --> 12:14:01,720
save so now let's go into our project
14130
12:14:00,756 --> 12:14:04,956
we'll
14131
12:14:01,720 --> 12:14:07,880
rightclick inspect the
14132
12:14:04,956 --> 12:14:10,640
console and let's click the add to card
14133
12:14:07,880 --> 12:14:11,680
button for the basketball so we'll click
14134
12:14:10,640 --> 12:14:14,160
this
14135
12:14:11,680 --> 12:14:17,480
and then in our cart we have a
14136
12:14:14,160 --> 12:14:19,916
basketball with a quantity of
14137
12:14:17,480 --> 12:14:23,720
one let's add a
14138
12:14:19,916 --> 12:14:26,840
T-shirt and now we have one T-shirt with
14139
12:14:23,720 --> 12:14:28,596
a quantity of one and if we click add to
14140
12:14:26,840 --> 12:14:31,956
cart on the T-shirt
14141
12:14:28,596 --> 12:14:34,800
again now we have a t-shirt with a
14142
12:14:31,956 --> 12:14:37,560
quantity of two so that's how we solve
14143
12:14:34,800 --> 12:14:40,000
the problem of combining the quantities
14144
12:14:37,560 --> 12:14:41,880
together now there's one last problem
14145
12:14:40,000 --> 12:14:43,916
that we have to solve here
14146
12:14:41,880 --> 12:14:46,720
which is it's not good to use the
14147
12:14:43,916 --> 12:14:49,240
product name to identify the product in
14148
12:14:46,720 --> 12:14:51,756
the cart because in an e-commerce
14149
12:14:49,240 --> 12:14:54,400
website we might actually have two
14150
12:14:51,756 --> 12:14:57,640
products that have the same name but
14151
12:14:54,400 --> 12:15:01,160
from different brands so to fix this we
14152
12:14:57,640 --> 12:15:04,320
should give each product an ID and this
14153
12:15:01,160 --> 12:15:08,596
ID should be unique so no two products
14154
12:15:04,320 --> 12:15:11,000
will have the same ID so let's use an ID
14155
12:15:08,596 --> 12:15:14,956
to identify these products instead of
14156
12:15:11,000 --> 12:15:19,000
using the name we'll go back to our
14157
12:15:14,956 --> 12:15:21,800
code and if we open our files here and
14158
12:15:19,000 --> 12:15:24,276
go to data products.
14159
12:15:21,800 --> 12:15:27,800
JS you'll notice that I've actually
14160
12:15:24,276 --> 12:15:31,080
added an ID for each of these products
14161
12:15:27,800 --> 12:15:33,040
and this ID is unique so I added it here
14162
12:15:31,080 --> 12:15:35,116
to save us a bit of work so we don't
14163
12:15:33,040 --> 12:15:38,360
have to create the IDS
14164
12:15:35,116 --> 12:15:44,000
ourselves so now let's just use this ID
14165
12:15:38,360 --> 12:15:47,956
in our code so we'll go back to amazon.
14166
12:15:44,000 --> 12:15:50,436
JS and then in here instead of using the
14167
12:15:47,956 --> 12:15:54,680
product name we're going to use the
14168
12:15:50,436 --> 12:15:57,160
products ID to identify it in the cart
14169
12:15:54,680 --> 12:16:00,520
but first we need to attach the ID to
14170
12:15:57,160 --> 12:16:03,640
the button so we'll scroll up and
14171
12:16:00,520 --> 12:16:07,596
instead of a data- product name
14172
12:16:03,640 --> 12:16:10,320
attribute we're going to use a data
14173
12:16:07,596 --> 12:16:11,756
product-id attribute and we're going to
14174
12:16:10,320 --> 12:16:14,240
save the
14175
12:16:11,756 --> 12:16:17,200
products ID
14176
12:16:14,240 --> 12:16:21,436
instead and now down here we're going to
14177
12:16:17,200 --> 12:16:26,320
grab the ID from the button to do that
14178
12:16:21,436 --> 12:16:29,000
we'll change this to product ID so
14179
12:16:26,320 --> 12:16:32,480
remember this gets converted from Kebab
14180
12:16:29,000 --> 12:16:35,956
case to cam case and we'll rename this
14181
12:16:32,480 --> 12:16:35,956
variable product
14182
12:16:36,640 --> 12:16:46,360
ID and then here we'll compare product
14183
12:16:41,160 --> 12:16:50,116
ID is equal to the items product
14184
12:16:46,360 --> 12:16:53,640
ID and lastly when we add to the cart
14185
12:16:50,116 --> 12:16:55,956
we're just going to add the product ID
14186
12:16:53,640 --> 12:16:55,956
to the
14187
12:16:57,160 --> 12:17:03,436
cart and
14188
12:17:00,200 --> 12:17:08,520
save so now if we go to our website and
14189
12:17:03,436 --> 12:17:08,520
click add to cart and check our
14190
12:17:09,436 --> 12:17:16,756
console and expand this you can see that
14191
12:17:13,480 --> 12:17:18,956
we're saving the product ID so that two
14192
12:17:16,756 --> 12:17:21,000
products with the same name will be able
14193
12:17:18,956 --> 12:17:24,360
to be added to the
14194
12:17:21,000 --> 12:17:26,560
cart okay so that's how we make the add
14195
12:17:24,360 --> 12:17:28,916
to cart button
14196
12:17:26,560 --> 12:17:32,436
interactive and now we finished all
14197
12:17:28,916 --> 12:17:35,520
three steps first we save the data for
14198
12:17:32,436 --> 12:17:38,596
the website in our JavaScript and then
14199
12:17:35,520 --> 12:17:41,916
we use this data to generate the
14200
12:17:38,596 --> 12:17:45,320
HTML and finally we made it
14201
12:17:41,916 --> 12:17:48,000
interactive and this is the main idea of
14202
12:17:45,320 --> 12:17:51,240
JavaScript this is generally how we use
14203
12:17:48,000 --> 12:17:53,916
JavaScript on a real
14204
12:17:51,240 --> 12:17:57,000
website now let's go back to git so
14205
12:17:53,916 --> 12:18:00,116
we'll open our code editor and open the
14206
12:17:57,000 --> 12:18:03,680
git section and review the changes that
14207
12:18:00,116 --> 12:18:08,116
we made so we'll expand it and then in
14208
12:18:03,680 --> 12:18:11,436
the HTML file we just added the cart. JS
14209
12:18:08,116 --> 12:18:15,436
file and then in here we just created
14210
12:18:11,436 --> 12:18:19,200
the cart array and in our amazon. JS
14211
12:18:15,436 --> 12:18:22,956
file we basically added a data attribute
14212
12:18:19,200 --> 12:18:25,596
to the button and then down here we made
14213
12:18:22,956 --> 12:18:27,160
the button interactive by adding an
14214
12:18:25,596 --> 12:18:30,080
event
14215
12:18:27,160 --> 12:18:33,160
listener so now let's save these changes
14216
12:18:30,080 --> 12:18:34,320
into git we'll type a message to
14217
12:18:33,160 --> 12:18:39,360
describe our
14218
12:18:34,320 --> 12:18:41,680
changes make add to cart button
14219
12:18:39,360 --> 12:18:44,400
Interactive
14220
12:18:41,680 --> 12:18:44,400
and click
14221
12:18:46,080 --> 12:18:52,480
commit all right so let's close this for
14222
12:18:49,880 --> 12:18:55,160
now and the last feature we're going to
14223
12:18:52,480 --> 12:18:58,360
create in this lesson is we're going to
14224
12:18:55,160 --> 12:19:01,596
make this cart quantity in the top right
14225
12:18:58,360 --> 12:19:04,756
interactive so we'll do this step by
14226
12:19:01,596 --> 12:19:07,360
step first we need to calculate the
14227
12:19:04,756 --> 12:19:10,160
quantity or the total number of products
14228
12:19:07,360 --> 12:19:11,200
in our cart and then we're going to put
14229
12:19:10,160 --> 12:19:14,360
that quantity
14230
12:19:11,200 --> 12:19:17,436
on the page here so how do we calculate
14231
12:19:14,360 --> 12:19:20,000
the total quantity of the cart so
14232
12:19:17,436 --> 12:19:23,480
remember that the cart is an array of
14233
12:19:20,000 --> 12:19:25,916
objects and each object has a quantity
14234
12:19:23,480 --> 12:19:28,756
so to calculate the total quantity we
14235
12:19:25,916 --> 12:19:32,596
can Loop through this array and add the
14236
12:19:28,756 --> 12:19:36,916
quantities together let's go into our
14237
12:19:32,596 --> 12:19:38,360
code and we'll open amazon. JS and let's
14238
12:19:36,916 --> 12:19:42,200
scroll to the
14239
12:19:38,360 --> 12:19:44,560
bottom so here after we update our cart
14240
12:19:42,200 --> 12:19:47,680
we're going to calculate the total
14241
12:19:44,560 --> 12:19:50,116
quantity so let's create some new lines
14242
12:19:47,680 --> 12:19:53,720
and as we saw earlier we can Loop
14243
12:19:50,116 --> 12:19:59,680
through the cart array so we'll type
14244
12:19:53,720 --> 12:20:03,560
cart dot for each brackets and a
14245
12:19:59,680 --> 12:20:05,916
function arrow and curly brackets and
14246
12:20:03,560 --> 12:20:08,756
we'll give this a parameter
14247
12:20:05,916 --> 12:20:11,240
item so this is going to Loop through
14248
12:20:08,756 --> 12:20:13,916
each object in the cart
14249
12:20:11,240 --> 12:20:16,480
next we need a variable to store the
14250
12:20:13,916 --> 12:20:20,400
total quantity so let's create a
14251
12:20:16,480 --> 12:20:22,596
variable up here we'll type let and name
14252
12:20:20,400 --> 12:20:26,080
it cart
14253
12:20:22,596 --> 12:20:28,680
quantity and make it equal to zero to
14254
12:20:26,080 --> 12:20:31,400
start and then as we Loop through this
14255
12:20:28,680 --> 12:20:35,400
array we're going to add the items
14256
12:20:31,400 --> 12:20:40,040
quantity to this variable up here so
14257
12:20:35,400 --> 12:20:42,160
here we can type cart quantity plus
14258
12:20:40,040 --> 12:20:44,480
equals the
14259
12:20:42,160 --> 12:20:46,720
items.
14260
12:20:44,480 --> 12:20:49,596
quantity so this will add up all the
14261
12:20:46,720 --> 12:20:53,480
quantities and save it in this
14262
12:20:49,596 --> 12:20:56,800
variable so at the bottom let's
14263
12:20:53,480 --> 12:20:59,840
console.log the cart quantity to make
14264
12:20:56,800 --> 12:21:03,240
sure that this is working so we'll
14265
12:20:59,840 --> 12:21:08,360
save and go back to our page and open
14266
12:21:03,240 --> 12:21:11,596
the console right click inspect and
14267
12:21:08,360 --> 12:21:15,116
console when we click add to cart on the
14268
12:21:11,596 --> 12:21:18,080
basketball the quantity will be one if
14269
12:21:15,116 --> 12:21:22,080
we click add to cart on the T-shirt the
14270
12:21:18,080 --> 12:21:25,040
quantity will be two if we click again
14271
12:21:22,080 --> 12:21:28,116
the quantity will be three so looking at
14272
12:21:25,040 --> 12:21:31,400
the cart it basically added one
14273
12:21:28,116 --> 12:21:34,240
basketball and two T-shirts to get a
14274
12:21:31,400 --> 12:21:37,956
total of three so that's how we can
14275
12:21:34,240 --> 12:21:40,160
calculate the total quantity of the cart
14276
12:21:37,956 --> 12:21:42,360
so now that we have the total quantity
14277
12:21:40,160 --> 12:21:46,596
we're going going to put it on the page
14278
12:21:42,360 --> 12:21:49,276
here and we can do this using the Dom so
14279
12:21:46,596 --> 12:21:52,916
let's go back to our
14280
12:21:49,276 --> 12:21:55,436
code and to use the Dom we first need an
14281
12:21:52,916 --> 12:21:58,520
HTML element where we're going to put
14282
12:21:55,436 --> 12:22:01,480
this quantity so let's find the HTML
14283
12:21:58,520 --> 12:22:03,840
element for this number here we can go
14284
12:22:01,480 --> 12:22:08,000
back to our page we're going to
14285
12:22:03,840 --> 12:22:11,040
rightclick this number and then
14286
12:22:08,000 --> 12:22:12,320
inspect and then we can click this icon
14287
12:22:11,040 --> 12:22:16,240
in the top
14288
12:22:12,320 --> 12:22:19,040
left hover over this number and click
14289
12:22:16,240 --> 12:22:22,360
it so this will tell us that the code
14290
12:22:19,040 --> 12:22:25,756
for the number is this code right here a
14291
12:22:22,360 --> 12:22:27,480
div with a class cart quantity so now
14292
12:22:25,756 --> 12:22:30,956
we're going to search for this class
14293
12:22:27,480 --> 12:22:32,560
cart quantity in our code so let's go
14294
12:22:30,956 --> 12:22:36,436
back to our
14295
12:22:32,560 --> 12:22:39,320
code and let's go to the amazon. HTML
14296
12:22:36,436 --> 12:22:43,000
file because the header is still in this
14297
12:22:39,320 --> 12:22:46,000
file and we'll type contrl f or command
14298
12:22:43,000 --> 12:22:49,040
F to search for code and we'll search
14299
12:22:46,000 --> 12:22:51,240
for cart Das
14300
12:22:49,040 --> 12:22:54,916
quantity and it will tell us that it's
14301
12:22:51,240 --> 12:22:58,400
this line right here so next to use the
14302
12:22:54,916 --> 12:23:01,400
Dom we need to get this element into our
14303
12:22:58,400 --> 12:23:04,276
JavaScript to do that we're going to add
14304
12:23:01,400 --> 12:23:05,756
a class to this element so let's add the
14305
12:23:04,276 --> 12:23:11,320
class
14306
12:23:05,756 --> 12:23:14,480
js- cart D quantity and say
14307
12:23:11,320 --> 12:23:16,800
save now let's go back to our JavaScript
14308
12:23:14,480 --> 12:23:20,756
file and I'm just going to move it down
14309
12:23:16,800 --> 12:23:20,756
here so we can see it side by
14310
12:23:22,520 --> 12:23:28,800
side and we'll scroll down after we
14311
12:23:26,480 --> 12:23:31,520
calculate the quantity let's get this
14312
12:23:28,800 --> 12:23:35,480
element into our JavaScript using the
14313
12:23:31,520 --> 12:23:38,116
Dom so at the bottom we'll type
14314
12:23:35,480 --> 12:23:41,800
document. query
14315
12:23:38,116 --> 12:23:44,756
selector brackets and a string we start
14316
12:23:41,800 --> 12:23:48,320
with a DOT and the class
14317
12:23:44,756 --> 12:23:50,436
js- cart D
14318
12:23:48,320 --> 12:23:54,360
quantity and now that we have this
14319
12:23:50,436 --> 12:23:59,880
element we can change the HTML inside
14320
12:23:54,360 --> 12:24:04,320
using the property do inner Capital
14321
12:23:59,880 --> 12:24:08,160
HTML and we'll make it equal to the cart
14322
12:24:04,320 --> 12:24:09,116
quantity that we calculated above so
14323
12:24:08,160 --> 12:24:12,640
let's
14324
12:24:09,116 --> 12:24:14,520
save and go back to our website and
14325
12:24:12,640 --> 12:24:15,800
let's click the add to card button for
14326
12:24:14,520 --> 12:24:17,800
the
14327
12:24:15,800 --> 12:24:20,956
basketball now it will update the
14328
12:24:17,800 --> 12:24:23,680
quantity to be one let's click the add
14329
12:24:20,956 --> 12:24:26,560
to cart for the T-shirt it will update
14330
12:24:23,680 --> 12:24:29,596
the quantity again and it will be two if
14331
12:24:26,560 --> 12:24:32,800
we click it again it will increase to
14332
12:24:29,596 --> 12:24:34,360
three so now the cart quantity up here
14333
12:24:32,800 --> 12:24:37,116
is
14334
12:24:34,360 --> 12:24:38,880
interactive the last thing we need to do
14335
12:24:37,116 --> 12:24:42,160
is we'll go back to our
14336
12:24:38,880 --> 12:24:45,640
HTML and in instead of starting at three
14337
12:24:42,160 --> 12:24:47,040
the card quantity should start at zero
14338
12:24:45,640 --> 12:24:50,320
so let's
14339
12:24:47,040 --> 12:24:53,480
save and now the cart quantity starts at
14340
12:24:50,320 --> 12:24:56,956
zero if we click add to cart it will
14341
12:24:53,480 --> 12:24:59,756
increase to one so that's how we create
14342
12:24:56,956 --> 12:25:02,240
this cart quantity feature in the final
14343
12:24:59,756 --> 12:25:04,756
project so now we're finished all the
14344
12:25:02,240 --> 12:25:07,956
features that we're going to do in this
14345
12:25:04,756 --> 12:25:09,596
lesson let's go back to our JavaScript
14346
12:25:07,956 --> 12:25:10,916
and I'm just going to move it back up
14347
12:25:09,596 --> 12:25:13,400
here
14348
12:25:10,916 --> 12:25:15,480
and let's clean up this code by removing
14349
12:25:13,400 --> 12:25:17,480
these console.
14350
12:25:15,480 --> 12:25:20,640
logs and
14351
12:25:17,480 --> 12:25:22,840
save and finally let's check git one
14352
12:25:20,640 --> 12:25:26,840
more time to see the changes that we
14353
12:25:22,840 --> 12:25:28,200
made so we can expand this and go to the
14354
12:25:26,840 --> 12:25:32,200
git
14355
12:25:28,200 --> 12:25:35,160
section if we click amazon. HTML it will
14356
12:25:32,200 --> 12:25:38,560
tell us we added this class and if we
14357
12:25:35,160 --> 12:25:40,840
click amazon. JS it will show us the
14358
12:25:38,560 --> 12:25:44,756
code that we added for C calculating the
14359
12:25:40,840 --> 12:25:47,956
card quantity and putting it on the
14360
12:25:44,756 --> 12:25:49,480
page so finally let's type a message to
14361
12:25:47,956 --> 12:25:56,080
describe our
14362
12:25:49,480 --> 12:25:59,560
changes make the cart quantity
14363
12:25:56,080 --> 12:25:59,560
interactive and
14364
12:26:00,040 --> 12:26:06,560
commit so now we can close
14365
12:26:03,040 --> 12:26:09,160
this and that's the end of this lesson
14366
12:26:06,560 --> 12:26:10,756
in this lesson we started the final
14367
12:26:09,160 --> 12:26:13,400
Amazon Project
14368
12:26:10,756 --> 12:26:17,040
we set up and learned how to use git to
14369
12:26:13,400 --> 12:26:20,480
track changes we learned the main idea
14370
12:26:17,040 --> 12:26:23,756
of JavaScript which is save the data
14371
12:26:20,480 --> 12:26:26,200
generate the HTML and make it
14372
12:26:23,756 --> 12:26:29,360
interactive we created a list of
14373
12:26:26,200 --> 12:26:32,756
products on the homepage we made the add
14374
12:26:29,360 --> 12:26:36,200
to cart button interactive and we made
14375
12:26:32,756 --> 12:26:36,200
the cart quantity
14376
12:26:37,800 --> 12:26:42,040
interactive thanks for watching this
14377
12:26:39,680 --> 12:26:43,756
course so so far if you want to support
14378
12:26:42,040 --> 12:26:46,080
this channel you can check out the
14379
12:26:43,756 --> 12:26:48,160
premium version of my courses just like
14380
12:26:46,080 --> 12:26:50,640
this one where you can get a certificate
14381
12:26:48,160 --> 12:26:53,000
of completion and a Better Learning
14382
12:26:50,640 --> 12:26:56,436
platform if you're interested in extra
14383
12:26:53,000 --> 12:26:58,560
videos from me more in-depth videos and
14384
12:26:56,436 --> 12:27:01,560
behind the scenes content you can check
14385
12:26:58,560 --> 12:27:04,000
out these links here you can also
14386
12:27:01,560 --> 12:27:06,436
support the channel by liking the video
14387
12:27:04,000 --> 12:27:09,080
subscribing and sharing this video with
14388
12:27:06,436 --> 12:27:11,956
others thanks again and let's continue
14389
12:27:09,080 --> 12:27:13,916
with the course
14390
12:27:11,956 --> 12:27:18,840
here are some exercises to help you
14391
12:27:13,916 --> 12:27:18,840
practice what we learned in this lesson
14392
12:28:04,000 --> 12:28:08,640
in this lesson we're going to learn a
14393
12:28:05,840 --> 12:28:11,276
feature of JavaScript called modules
14394
12:28:08,640 --> 12:28:14,240
which is a better way to organize our
14395
12:28:11,276 --> 12:28:17,360
code so first let's take a look at a
14396
12:28:14,240 --> 12:28:19,880
problem that we have in our current code
14397
12:28:17,360 --> 12:28:22,480
we're going to go to our files here and
14398
12:28:19,880 --> 12:28:24,680
we're going to open amazon.
14399
12:28:22,480 --> 12:28:28,596
HTML and then we're going to scroll to
14400
12:28:24,680 --> 12:28:31,560
the bottom of this file to our script
14401
12:28:28,596 --> 12:28:33,956
tags so right now we're using three
14402
12:28:31,560 --> 12:28:37,000
script tags to run all of our
14403
12:28:33,956 --> 12:28:40,200
JavaScript so this runs all the code in
14404
12:28:37,000 --> 12:28:43,480
cart. JS and then it runs all the code
14405
12:28:40,200 --> 12:28:47,040
in products. JS and finally it runs all
14406
12:28:43,480 --> 12:28:49,640
the code in amazon. JS so this is
14407
12:28:47,040 --> 12:28:52,840
basically the same thing as combining
14408
12:28:49,640 --> 12:28:56,160
all the files together into one big file
14409
12:28:52,840 --> 12:28:58,160
and then running all of our code however
14410
12:28:56,160 --> 12:29:01,436
there's a big problem with using script
14411
12:28:58,160 --> 12:29:04,756
tags like this and that problem is it
14412
12:29:01,436 --> 12:29:07,480
can cause naming conflicts so in our
14413
12:29:04,756 --> 12:29:10,800
situation here we created a variable
14414
12:29:07,480 --> 12:29:12,680
named cart in cart. Js
14415
12:29:10,800 --> 12:29:16,240
this means we can't use the variable
14416
12:29:12,680 --> 12:29:19,240
name cart in any of our other files so
14417
12:29:16,240 --> 12:29:22,400
for example if we went to amazon.
14418
12:29:19,240 --> 12:29:25,360
JS and then we scroll to the top
14419
12:29:22,400 --> 12:29:28,116
here and let's say that we try to create
14420
12:29:25,360 --> 12:29:32,276
another variable named cart so at the
14421
12:29:28,116 --> 12:29:34,680
top we type const cart equals square
14422
12:29:32,276 --> 12:29:37,596
brackets and
14423
12:29:34,680 --> 12:29:40,000
save and now if we go back to our
14424
12:29:37,596 --> 12:29:44,116
project you'll notice that the website
14425
12:29:40,000 --> 12:29:46,800
stops working and if we rightclick
14426
12:29:44,116 --> 12:29:49,116
inspect and open the
14427
12:29:46,800 --> 12:29:51,720
console it will tell us that we got an
14428
12:29:49,116 --> 12:29:54,480
error and it says that cart has already
14429
12:29:51,720 --> 12:29:56,560
been declared so this is happening
14430
12:29:54,480 --> 12:29:59,800
because we created a variable called
14431
12:29:56,560 --> 12:30:02,840
cart in cart. JS and then later in
14432
12:29:59,800 --> 12:30:05,160
amazon. JS we created another variable
14433
12:30:02,840 --> 12:30:06,840
named cart now we can't have two
14434
12:30:05,160 --> 12:30:09,520
variables with the same name in
14435
12:30:06,840 --> 12:30:12,116
JavaScript and this causes an error and
14436
12:30:09,520 --> 12:30:14,840
it causes our website to break so this
14437
12:30:12,116 --> 12:30:17,040
is called a naming conflict when we have
14438
12:30:14,840 --> 12:30:20,160
two variables with the same
14439
12:30:17,040 --> 12:30:23,480
name so the big problem with script tags
14440
12:30:20,160 --> 12:30:23,480
is if we go back to our
14441
12:30:25,160 --> 12:30:30,040
code you can see here that it's really
14442
12:30:27,756 --> 12:30:32,800
hard to tell which variables have been
14443
12:30:30,040 --> 12:30:35,360
created in other files and it's really
14444
12:30:32,800 --> 12:30:38,680
easy to accidentally create a naming
14445
12:30:35,360 --> 12:30:40,956
conflict like this so that's the problem
14446
12:30:38,680 --> 12:30:44,000
with using script tags like this and
14447
12:30:40,956 --> 12:30:46,116
running our code one file at a time it's
14448
12:30:44,000 --> 12:30:48,200
very easy to get naming
14449
12:30:46,116 --> 12:30:50,520
conflicts so now we're going to learn
14450
12:30:48,200 --> 12:30:53,000
how to solve this problem using a
14451
12:30:50,520 --> 12:30:56,480
feature of JavaScript called
14452
12:30:53,000 --> 12:30:59,720
modules so a module basically contains a
14453
12:30:56,480 --> 12:31:02,200
variable inside a file so now this
14454
12:30:59,720 --> 12:31:05,560
variable is not going to cause conflicts
14455
12:31:02,200 --> 12:31:08,200
with anything outside the file for
14456
12:31:05,560 --> 12:31:10,596
example in our project we created a
14457
12:31:08,200 --> 12:31:13,596
variable called cart and we want to
14458
12:31:10,596 --> 12:31:16,680
contain this variable inside the cart.
14459
12:31:13,596 --> 12:31:20,200
JS file so that it doesn't conflict with
14460
12:31:16,680 --> 12:31:23,956
the cart variable inside the amazon. JS
14461
12:31:20,200 --> 12:31:27,000
file so we can do this using a module so
14462
12:31:23,956 --> 12:31:30,956
now let's learn how to create our first
14463
12:31:27,000 --> 12:31:34,436
module we're going to go back to amazon.
14464
12:31:30,956 --> 12:31:36,560
HTML and then here to create a module
14465
12:31:34,436 --> 12:31:39,436
we're simply going to delete this line
14466
12:31:36,560 --> 12:31:43,596
of code that uses a script tag to load
14467
12:31:39,436 --> 12:31:46,200
cart. JS so we'll delete it and
14468
12:31:43,596 --> 12:31:50,116
save and you'll see that the website is
14469
12:31:46,200 --> 12:31:52,720
working again so how does this work when
14470
12:31:50,116 --> 12:31:56,596
we use a script tag it will run all the
14471
12:31:52,720 --> 12:31:58,956
code inside cart. JS so this code will
14472
12:31:56,596 --> 12:32:02,000
create a card variable and this will
14473
12:31:58,956 --> 12:32:04,360
cause a naming Conflict by removing the
14474
12:32:02,000 --> 12:32:07,800
script tag we're no longer running the
14475
12:32:04,360 --> 12:32:10,480
code inside cart. JS so we're no longer
14476
12:32:07,800 --> 12:32:13,916
creating a cart variable and it will no
14477
12:32:10,480 --> 12:32:13,916
longer cause a naming
14478
12:32:13,956 --> 12:32:21,596
conflict so to create a module we simply
14479
12:32:17,160 --> 12:32:24,596
do two steps number one we create a file
14480
12:32:21,596 --> 12:32:27,520
and write our code inside the file and
14481
12:32:24,596 --> 12:32:31,240
number two don't load the file with a
14482
12:32:27,520 --> 12:32:33,800
script tag by doing this any variables
14483
12:32:31,240 --> 12:32:36,640
we create inside the file will be
14484
12:32:33,800 --> 12:32:39,360
contained inside the file and it won't
14485
12:32:36,640 --> 12:32:42,360
cause naming conflicts so that's
14486
12:32:39,360 --> 12:32:45,480
basically how we create a
14487
12:32:42,360 --> 12:32:49,320
module okay so now we run into another
14488
12:32:45,480 --> 12:32:52,560
problem in our code if we open amazon.
14489
12:32:49,320 --> 12:32:55,116
JS we created this card variable as an
14490
12:32:52,560 --> 12:32:57,880
example but what we actually want to do
14491
12:32:55,116 --> 12:33:00,880
is to keep the cart variable inside
14492
12:32:57,880 --> 12:33:03,560
cart. JS because we want to keep all the
14493
12:33:00,880 --> 12:33:07,520
code that's related to the cart inside
14494
12:33:03,560 --> 12:33:07,520
this file so in
14495
12:33:10,880 --> 12:33:15,596
and if we
14496
12:33:11,880 --> 12:33:18,116
save and then go back to our project and
14497
12:33:15,596 --> 12:33:20,800
click add to cart you'll notice that it
14498
12:33:18,116 --> 12:33:23,756
no longer works so let's look at the
14499
12:33:20,800 --> 12:33:26,200
console again to see what error we get
14500
12:33:23,756 --> 12:33:28,560
we'll right click
14501
12:33:26,200 --> 12:33:31,000
inspect and open the
14502
12:33:28,560 --> 12:33:34,276
console and it's going to tell us that
14503
12:33:31,000 --> 12:33:37,520
cart is not defined so the problem that
14504
12:33:34,276 --> 12:33:40,916
we have here is that in this file we're
14505
12:33:37,520 --> 12:33:43,320
using the variable cart but now because
14506
12:33:40,916 --> 12:33:46,080
we're not loading cart. JS using a
14507
12:33:43,320 --> 12:33:48,956
script tag the cart variable doesn't
14508
12:33:46,080 --> 12:33:54,200
exist anymore it's contained inside
14509
12:33:48,956 --> 12:33:54,200
cart. JS and we can't access it from the
14510
12:33:54,436 --> 12:34:00,400
outside so now we're going to learn how
14511
12:33:56,840 --> 12:34:03,040
to get a variable out of a file or a
14512
12:34:00,400 --> 12:34:06,276
module to do that we're going to do
14513
12:34:03,040 --> 12:34:09,276
three steps the first step is to add a
14514
12:34:06,276 --> 12:34:12,360
type equals module attribute the second
14515
12:34:09,276 --> 12:34:16,116
step is to export and the third step is
14516
12:34:12,360 --> 12:34:19,276
to import let's learn these steps one by
14517
12:34:16,116 --> 12:34:22,160
one so the first step is to add a type
14518
12:34:19,276 --> 12:34:24,840
equals module attribute we're going to
14519
12:34:22,160 --> 12:34:27,160
open amazon.
14520
12:34:24,840 --> 12:34:31,080
HTML and we're going to scroll to the
14521
12:34:27,160 --> 12:34:33,956
bottom and here in the last script tag
14522
12:34:31,080 --> 12:34:37,160
where we load amazon. JS we're going to
14523
12:34:33,956 --> 12:34:42,000
add an HTML attribute here so we're
14524
12:34:37,160 --> 12:34:43,596
going to type type equal equal module
14525
12:34:42,000 --> 12:34:47,080
and
14526
12:34:43,596 --> 12:34:49,916
save so the type equals module attribute
14527
12:34:47,080 --> 12:34:53,116
basically lets this file get variables
14528
12:34:49,916 --> 12:34:56,800
out of other files it basically enables
14529
12:34:53,116 --> 12:35:00,200
this feature now the second step is to
14530
12:34:56,800 --> 12:35:02,840
export so we're going to go to cart.
14531
12:35:00,200 --> 12:35:05,800
JS and now we're going to choose which
14532
12:35:02,840 --> 12:35:08,880
variables can be accessed outside of
14533
12:35:05,800 --> 12:35:11,520
this file so for example we want to
14534
12:35:08,880 --> 12:35:14,720
access the VAR variable cart outside of
14535
12:35:11,520 --> 12:35:16,680
this file to do that in front of the
14536
12:35:14,720 --> 12:35:22,360
variable we're just going to type the
14537
12:35:16,680 --> 12:35:24,916
word export and space and save so now
14538
12:35:22,360 --> 12:35:26,000
this variable can be used outside of
14539
12:35:24,916 --> 12:35:29,800
cart.
14540
12:35:26,000 --> 12:35:32,320
JS the last step is to
14541
12:35:29,800 --> 12:35:34,840
import so we're going to go to the place
14542
12:35:32,320 --> 12:35:37,040
where we're going to use this variable
14543
12:35:34,840 --> 12:35:40,400
which is inside amazon.
14544
12:35:37,040 --> 12:35:42,880
JS and now at the top we're going to
14545
12:35:40,400 --> 12:35:47,320
tell the computer which variable we want
14546
12:35:42,880 --> 12:35:50,320
to get from another file so we'll type
14547
12:35:47,320 --> 12:35:53,040
import open curly bracket close curly
14548
12:35:50,320 --> 12:35:55,160
bracket and between these brackets we're
14549
12:35:53,040 --> 12:35:58,800
going to give the name of the variable
14550
12:35:55,160 --> 12:36:00,560
we want to get which is the cart
14551
12:35:58,800 --> 12:36:03,320
variable and then we'll tell the
14552
12:36:00,560 --> 12:36:07,160
computer which file we want to get this
14553
12:36:03,320 --> 12:36:10,840
variable from so we'll type
14554
12:36:07,160 --> 12:36:13,436
from single quotes and and
14555
12:36:10,840 --> 12:36:16,116
semicolon and now inside these quotes
14556
12:36:13,436 --> 12:36:19,560
we're going to locate the file using a
14557
12:36:16,116 --> 12:36:22,320
file path so let's open up our files
14558
12:36:19,560 --> 12:36:25,880
here so it's easy to see what files we
14559
12:36:22,320 --> 12:36:29,080
have so right now we're in amazon. JS
14560
12:36:25,880 --> 12:36:31,400
and we want to locate cart. JS so the
14561
12:36:29,080 --> 12:36:33,480
first step is we actually need to get
14562
12:36:31,400 --> 12:36:35,596
out of the scripts folder we're in the
14563
12:36:33,480 --> 12:36:38,640
scripts folder and we need to get out of
14564
12:36:35,596 --> 12:36:40,560
it and into the data folder so to get
14565
12:36:38,640 --> 12:36:45,080
out of the current Cent folder that this
14566
12:36:40,560 --> 12:36:47,200
file is in we're going to type dot dot
14567
12:36:45,080 --> 12:36:50,360
so dot dot basically represents the
14568
12:36:47,200 --> 12:36:52,116
folder outside of this current folder
14569
12:36:50,360 --> 12:36:54,840
which is this folder right here
14570
12:36:52,116 --> 12:36:57,720
JavaScript Amazon projects and then
14571
12:36:54,840 --> 12:37:00,956
we're going to type a forward slash to
14572
12:36:57,720 --> 12:37:02,596
go outside of the scripts folder so now
14573
12:37:00,956 --> 12:37:06,040
that we're outside of this folder we're
14574
12:37:02,596 --> 12:37:08,880
going to go into the data folder so here
14575
12:37:06,040 --> 12:37:11,276
we're going to type data and then a
14576
12:37:08,880 --> 12:37:15,800
slash to go into this folder and we're
14577
12:37:11,276 --> 12:37:18,640
going to locate the file cart. JS
14578
12:37:15,800 --> 12:37:21,680
C.J and
14579
12:37:18,640 --> 12:37:24,596
save so what this code does is that it's
14580
12:37:21,680 --> 12:37:28,320
going to take the variable cart out of
14581
12:37:24,596 --> 12:37:31,400
the file cart. JS and we use this file
14582
12:37:28,320 --> 12:37:34,000
path here to locate that file so as a
14583
12:37:31,400 --> 12:37:36,360
reminder dot dot means to go outside of
14584
12:37:34,000 --> 12:37:38,756
the current folder outside of scripts
14585
12:37:36,360 --> 12:37:41,240
into here and then we go into the data
14586
12:37:38,756 --> 12:37:44,436
folder and then inside the data folder
14587
12:37:41,240 --> 12:37:44,436
we find cart.
14588
12:37:45,160 --> 12:37:52,320
JS so those are the three steps to get a
14589
12:37:48,200 --> 12:37:55,000
variable out of a module first we add a
14590
12:37:52,320 --> 12:37:58,596
type equals module attribute to enable
14591
12:37:55,000 --> 12:38:01,480
this feature and then we export the
14592
12:37:58,596 --> 12:38:04,720
variables that we want to get out and
14593
12:38:01,480 --> 12:38:06,436
finally we import the variables when we
14594
12:38:04,720 --> 12:38:08,756
need
14595
12:38:06,436 --> 12:38:12,200
them now there's two more things that we
14596
12:38:08,756 --> 12:38:14,116
need to know about modules number one we
14597
12:38:12,200 --> 12:38:15,840
have to put all of our Imports at the
14598
12:38:14,116 --> 12:38:19,080
top of the
14599
12:38:15,840 --> 12:38:22,560
file and number two in order for modules
14600
12:38:19,080 --> 12:38:25,080
to work we need to use live server so
14601
12:38:22,560 --> 12:38:27,000
for example if I open the folder that
14602
12:38:25,080 --> 12:38:31,520
contains amazon.
14603
12:38:27,000 --> 12:38:34,756
HTML so I open JavaScript Amazon Project
14604
12:38:31,520 --> 12:38:38,360
and then I select this HTML file and
14605
12:38:34,756 --> 12:38:41,956
rightclick open with Google
14606
12:38:38,360 --> 12:38:44,240
Chrome the website won't work and that's
14607
12:38:41,956 --> 12:38:47,680
because modules don't work if we open
14608
12:38:44,240 --> 12:38:49,240
the HTML file directly like this so
14609
12:38:47,680 --> 12:38:52,360
let's close this for
14610
12:38:49,240 --> 12:38:55,200
now and to get modules to work we need
14611
12:38:52,360 --> 12:38:57,160
to open our code editor and then
14612
12:38:55,200 --> 12:39:01,480
rightclick the HTML
14613
12:38:57,160 --> 12:39:01,480
file and open with live
14614
12:39:01,720 --> 12:39:07,040
server so in this course in order for
14615
12:39:04,436 --> 12:39:11,320
modules to work we need to use live
14616
12:39:07,040 --> 12:39:11,320
server to open our HTML files
14617
12:39:11,916 --> 12:39:17,520
so now that we learned how to use a
14618
12:39:13,956 --> 12:39:20,400
module let's talk about the benefits of
14619
12:39:17,520 --> 12:39:23,720
modules the first big benefit is that it
14620
12:39:20,400 --> 12:39:26,040
helps us avoid naming conflicts the only
14621
12:39:23,720 --> 12:39:28,800
time that this causes naming conflicts
14622
12:39:26,040 --> 12:39:32,040
is if we import this variable and we
14623
12:39:28,800 --> 12:39:34,240
have another variable named cart inside
14624
12:39:32,040 --> 12:39:37,436
this file like
14625
12:39:34,240 --> 12:39:40,480
this so this will again create a naming
14626
12:39:37,436 --> 12:39:43,160
conflict if I save this the website will
14627
12:39:40,480 --> 12:39:45,520
stop working but at least now we have
14628
12:39:43,160 --> 12:39:47,916
control over when naming conflicts
14629
12:39:45,520 --> 12:39:50,720
happen they will only happen if we
14630
12:39:47,916 --> 12:39:52,720
import the same variable name now
14631
12:39:50,720 --> 12:39:55,880
modules have another feature that allows
14632
12:39:52,720 --> 12:39:58,680
us to avoid this problem as well so
14633
12:39:55,880 --> 12:40:02,756
after the variable name that we import
14634
12:39:58,680 --> 12:40:07,756
we can type as and then a different name
14635
12:40:02,756 --> 12:40:10,800
such as my cart and save so this will
14636
12:40:07,756 --> 12:40:13,720
basically take the input and rename it
14637
12:40:10,800 --> 12:40:16,840
to my cart so that this will no longer
14638
12:40:13,720 --> 12:40:18,756
conflict with this variable name so as
14639
12:40:16,840 --> 12:40:21,160
you can see modules have a lot of
14640
12:40:18,756 --> 12:40:23,560
features that help us avoid naming
14641
12:40:21,160 --> 12:40:26,400
conflicts when we have lots of files in
14642
12:40:23,560 --> 12:40:29,360
our project so now I'm just going to
14643
12:40:26,400 --> 12:40:32,520
delete this and put the code back
14644
12:40:29,360 --> 12:40:35,240
because that was just an example and
14645
12:40:32,520 --> 12:40:37,240
save so the second big benefit of
14646
12:40:35,240 --> 12:40:40,840
modules is that we don't have to worry
14647
12:40:37,240 --> 12:40:42,596
about the order of our files
14648
12:40:40,840 --> 12:40:45,116
before when we loaded everything with
14649
12:40:42,596 --> 12:40:48,840
script tags we had to make sure that we
14650
12:40:45,116 --> 12:40:51,276
load C.J first because we need the cart
14651
12:40:48,840 --> 12:40:53,596
variable to be created and then we can
14652
12:40:51,276 --> 12:40:56,520
use it in amazon.
14653
12:40:53,596 --> 12:40:58,720
JS so the order of our script tags
14654
12:40:56,520 --> 12:41:01,040
really matter and it becomes really hard
14655
12:40:58,720 --> 12:41:02,560
to manage when we have lots of files in
14656
12:41:01,040 --> 12:41:05,680
a big
14657
12:41:02,560 --> 12:41:08,480
project but now with modules we can just
14658
12:41:05,680 --> 12:41:10,560
import the variables that we need and we
14659
12:41:08,480 --> 12:41:12,040
don't have to worry about the order that
14660
12:41:10,560 --> 12:41:15,480
we're loading our
14661
12:41:12,040 --> 12:41:18,040
files so as you can see modules are a
14662
12:41:15,480 --> 12:41:20,880
better way to organize our code
14663
12:41:18,040 --> 12:41:24,116
especially in bigger projects so now
14664
12:41:20,880 --> 12:41:26,720
let's use git and save our changes so
14665
12:41:24,116 --> 12:41:29,436
we'll go to the git section here and it
14666
12:41:26,720 --> 12:41:32,680
will tell us we changed three files in
14667
12:41:29,436 --> 12:41:36,880
amazon. JS we removed the script tag and
14668
12:41:32,680 --> 12:41:39,916
added type equals module in cart. JS we
14669
12:41:36,880 --> 12:41:43,800
exported the cart variable and in
14670
12:41:39,916 --> 12:41:47,000
amazon. JS we imported the cart variable
14671
12:41:43,800 --> 12:41:50,400
from cart. JS so now let's save these
14672
12:41:47,000 --> 12:41:52,276
into get so here we'll type a message
14673
12:41:50,400 --> 12:41:58,520
use
14674
12:41:52,276 --> 12:42:00,916
modules and import cart from cart. JS
14675
12:41:58,520 --> 12:42:00,916
and
14676
12:42:03,240 --> 12:42:09,436
commit now that we learned modules let's
14677
12:42:06,276 --> 12:42:12,436
use them in more places in our project
14678
12:42:09,436 --> 12:42:15,200
so let's close this for now and we're
14679
12:42:12,436 --> 12:42:17,916
going to open amazon.
14680
12:42:15,200 --> 12:42:21,680
HTML and next we're going to turn
14681
12:42:17,916 --> 12:42:23,840
products. JS into a module as well so
14682
12:42:21,680 --> 12:42:26,000
we'll start off by deleting the script
14683
12:42:23,840 --> 12:42:29,080
tag because the script tag will just
14684
12:42:26,000 --> 12:42:31,880
load all the code onto the page so we'll
14685
12:42:29,080 --> 12:42:35,160
delete this and
14686
12:42:31,880 --> 12:42:38,756
save so notice that our website stops
14687
12:42:35,160 --> 12:42:40,880
working and now inside amazon. JS we
14688
12:42:38,756 --> 12:42:43,756
need to to access products from
14689
12:42:40,880 --> 12:42:47,080
products. JS so again we're going to do
14690
12:42:43,756 --> 12:42:49,680
three steps the first step is to add a
14691
12:42:47,080 --> 12:42:51,956
type equals module attribute which we
14692
12:42:49,680 --> 12:42:55,276
already have so we don't need to do this
14693
12:42:51,956 --> 12:42:58,080
again the second step is to export the
14694
12:42:55,276 --> 12:43:00,200
variables that we want to get out so in
14695
12:42:58,080 --> 12:43:04,436
this case we want to get the products
14696
12:43:00,200 --> 12:43:07,720
variable out of the products. JS file so
14697
12:43:04,436 --> 12:43:09,320
let's open our files and open products.
14698
12:43:07,720 --> 12:43:11,436
Js
14699
12:43:09,320 --> 12:43:14,916
and we'll scroll to the
14700
12:43:11,436 --> 12:43:17,756
top so to get the products variable out
14701
12:43:14,916 --> 12:43:22,756
of this file in front of the variable
14702
12:43:17,756 --> 12:43:26,040
we're going to type export and space and
14703
12:43:22,756 --> 12:43:29,720
save and the last step is to import the
14704
12:43:26,040 --> 12:43:33,720
variable that we need so inside amazon.
14705
12:43:29,720 --> 12:43:37,080
JS we need the products variable so at
14706
12:43:33,720 --> 12:43:39,720
the top we're going to type
14707
12:43:37,080 --> 12:43:41,640
import curly brackets
14708
12:43:39,720 --> 12:43:44,000
and then inside here we're going to type
14709
12:43:41,640 --> 12:43:46,080
the variable name that we want to get
14710
12:43:44,000 --> 12:43:48,276
which is
14711
12:43:46,080 --> 12:43:53,116
products and we're going to get this
14712
12:43:48,276 --> 12:43:55,160
variable from single quotes semicolon
14713
12:43:53,116 --> 12:43:58,400
and then inside here we're going to
14714
12:43:55,160 --> 12:44:01,956
locate the products. JS file so we're
14715
12:43:58,400 --> 12:44:04,400
going to type dot dot and slash to go
14716
12:44:01,956 --> 12:44:06,400
outside of the current folder so outside
14717
12:44:04,400 --> 12:44:09,956
of the scripts folder and then we're
14718
12:44:06,400 --> 12:44:13,240
going to go into the data folder so type
14719
12:44:09,956 --> 12:44:16,360
data and a slash to go into the folder
14720
12:44:13,240 --> 12:44:19,880
and we're going to locate the file
14721
12:44:16,360 --> 12:44:22,400
products. JS and
14722
12:44:19,880 --> 12:44:25,080
save so now that we're importing this
14723
12:44:22,400 --> 12:44:27,240
variable from this file the rest of our
14724
12:44:25,080 --> 12:44:28,596
code will work and our website will
14725
12:44:27,240 --> 12:44:32,200
start working
14726
12:44:28,596 --> 12:44:35,400
again so that's how we turn products. JS
14727
12:44:32,200 --> 12:44:37,360
into a module as well so let's go into
14728
12:44:35,400 --> 12:44:41,480
get and take a look at our
14729
12:44:37,360 --> 12:44:45,840
changes so in amazon. HTML we deleted
14730
12:44:41,480 --> 12:44:48,240
the script tag and then in products. JS
14731
12:44:45,840 --> 12:44:52,320
we exported the variables that we wanted
14732
12:44:48,240 --> 12:44:54,800
to get out and then in amazon. JS we
14733
12:44:52,320 --> 12:44:56,916
imported the variables that we need from
14734
12:44:54,800 --> 12:44:59,720
the
14735
12:44:56,916 --> 12:45:05,000
file so let's type a message and save
14736
12:44:59,720 --> 12:45:10,916
these changes into git import products
14737
12:45:05,000 --> 12:45:10,916
from products. JS and
14738
12:45:13,276 --> 12:45:19,756
commit let's close
14739
12:45:15,800 --> 12:45:22,640
this and let's open amazon.
14740
12:45:19,756 --> 12:45:25,116
HTML now the last thing is you might be
14741
12:45:22,640 --> 12:45:28,956
wondering should we also delete this
14742
12:45:25,116 --> 12:45:31,840
script tag that loads amazon. JS and the
14743
12:45:28,956 --> 12:45:35,520
answer is no because we still need one
14744
12:45:31,840 --> 12:45:37,640
Javascript file to load our code so this
14745
12:45:35,520 --> 12:45:39,560
file will import from all the other
14746
12:45:37,640 --> 12:45:41,880
files that we created
14747
12:45:39,560 --> 12:45:43,200
and this is how we organize our code in
14748
12:45:41,880 --> 12:45:48,276
a real
14749
12:45:43,200 --> 12:45:48,276
website so this file is called the entry
14750
12:45:48,320 --> 12:45:52,756
point so now that we've seen some
14751
12:45:50,400 --> 12:45:56,480
examples of modules we're going to use
14752
12:45:52,756 --> 12:45:59,080
modules to organize our code better so
14753
12:45:56,480 --> 12:46:01,320
let's go into amazon.
14754
12:45:59,080 --> 12:46:04,480
JS and then we're going to scroll down
14755
12:46:01,320 --> 12:46:06,276
to the code for the add to card button
14756
12:46:04,480 --> 12:46:09,680
so inside this file we're going to
14757
12:46:06,276 --> 12:46:12,640
scroll down here all the way down to
14758
12:46:09,680 --> 12:46:15,840
this code here so this is a code that we
14759
12:46:12,640 --> 12:46:17,436
run when we click add it to cart and
14760
12:46:15,840 --> 12:46:20,040
you'll notice that we're running a lot
14761
12:46:17,436 --> 12:46:22,200
of code here when we click that button
14762
12:46:20,040 --> 12:46:25,040
we're running code that adds the product
14763
12:46:22,200 --> 12:46:27,160
to the cart and we're also running code
14764
12:46:25,040 --> 12:46:29,360
that calculates the quantity and updates
14765
12:46:27,160 --> 12:46:31,520
the page so a best practice in
14766
12:46:29,360 --> 12:46:33,956
programming is that when we have a lot
14767
12:46:31,520 --> 12:46:35,840
of code here that does different things
14768
12:46:33,956 --> 12:46:38,200
it's better to split these up into
14769
12:46:35,840 --> 12:46:42,240
smaller functions to make our code
14770
12:46:38,200 --> 12:46:45,560
easier to read so here this part of the
14771
12:46:42,240 --> 12:46:48,240
code takes the product ID and then adds
14772
12:46:45,560 --> 12:46:51,436
it to the cart so it makes sense to
14773
12:46:48,240 --> 12:46:54,756
split this into its own function so
14774
12:46:51,436 --> 12:46:57,400
let's scroll up and at the top here
14775
12:46:54,756 --> 12:47:01,320
let's create a function for this code so
14776
12:46:57,400 --> 12:47:06,640
we'll type function and let's call it
14777
12:47:01,320 --> 12:47:08,116
add to cart brackets and curly brackets
14778
12:47:06,640 --> 12:47:10,956
and then we're just going to move all
14779
12:47:08,116 --> 12:47:12,560
this code into the function so we'll
14780
12:47:10,956 --> 12:47:14,956
select this
14781
12:47:12,560 --> 12:47:16,596
code and then
14782
12:47:14,956 --> 12:47:19,240
rightclick
14783
12:47:16,596 --> 12:47:23,276
cut and then inside this
14784
12:47:19,240 --> 12:47:25,880
function rightclick and
14785
12:47:23,276 --> 12:47:30,000
paste and then down here we're going to
14786
12:47:25,880 --> 12:47:33,596
run this function inside here so when we
14787
12:47:30,000 --> 12:47:37,160
click add to cart we're going to run add
14788
12:47:33,596 --> 12:47:40,320
to cart function that we just created
14789
12:47:37,160 --> 12:47:42,720
and Save
14790
12:47:40,320 --> 12:47:44,436
so now let's give this a try so we'll
14791
12:47:42,720 --> 12:47:47,116
click add to
14792
12:47:44,436 --> 12:47:49,160
cart and unfortunately it doesn't work
14793
12:47:47,116 --> 12:47:51,956
anymore so let's take a look at the
14794
12:47:49,160 --> 12:47:54,480
console to see if there's any errors
14795
12:47:51,956 --> 12:47:56,956
we'll rightclick
14796
12:47:54,480 --> 12:47:59,400
inspect and then open the
14797
12:47:56,956 --> 12:48:02,756
console and it's telling us that product
14798
12:47:59,400 --> 12:48:03,840
ID is not defined so if we look at our
14799
12:48:02,756 --> 12:48:07,000
code
14800
12:48:03,840 --> 12:48:09,436
here and scroll up in the function
14801
12:48:07,000 --> 12:48:11,640
you'll notice that we're using product
14802
12:48:09,436 --> 12:48:14,240
but it's no longer anywhere in the
14803
12:48:11,640 --> 12:48:16,320
function and that's because product ID
14804
12:48:14,240 --> 12:48:18,400
is outside the
14805
12:48:16,320 --> 12:48:20,596
function so we actually want to keep
14806
12:48:18,400 --> 12:48:23,596
this code outside because it's using
14807
12:48:20,596 --> 12:48:25,956
this button so instead we're going to
14808
12:48:23,596 --> 12:48:29,520
take product ID and put it into a
14809
12:48:25,956 --> 12:48:31,916
function using a parameter so at the top
14810
12:48:29,520 --> 12:48:34,276
of the function we're going to add a
14811
12:48:31,916 --> 12:48:36,916
parameter product
14812
12:48:34,276 --> 12:48:39,756
ID and then when we call this function
14813
12:48:36,916 --> 12:48:42,360
we're going to pass it the product
14814
12:48:39,756 --> 12:48:45,400
ID so we're going to take this value put
14815
12:48:42,360 --> 12:48:48,240
it into the function and save it in here
14816
12:48:45,400 --> 12:48:51,040
and then the function can run as normal
14817
12:48:48,240 --> 12:48:53,916
so now if we save and then go to our
14818
12:48:51,040 --> 12:48:56,720
project and click add to cart you can
14819
12:48:53,916 --> 12:49:01,200
see that it's working
14820
12:48:56,720 --> 12:49:03,360
again next let's go back and scroll
14821
12:49:01,200 --> 12:49:06,040
down and we're going to put the rest of
14822
12:49:03,360 --> 12:49:08,800
our code into its own function as well
14823
12:49:06,040 --> 12:49:11,400
to make it more organized so at the top
14824
12:49:08,800 --> 12:49:13,116
here let's create some new lines and
14825
12:49:11,400 --> 12:49:16,116
create a
14826
12:49:13,116 --> 12:49:19,436
function and this code updates the card
14827
12:49:16,116 --> 12:49:23,200
quantity on the page
14828
12:49:19,436 --> 12:49:28,040
here so let's name this function
14829
12:49:23,200 --> 12:49:30,596
update cart quantity brackets and curly
14830
12:49:28,040 --> 12:49:34,160
brackets and we'll move this code into
14831
12:49:30,596 --> 12:49:38,800
the function so let's select this code
14832
12:49:34,160 --> 12:49:40,880
and then rightclick cut and then in here
14833
12:49:38,800 --> 12:49:44,400
rightclick and
14834
12:49:40,880 --> 12:49:50,116
paste and then down here we'll call the
14835
12:49:44,400 --> 12:49:53,000
function using update cart quantity and
14836
12:49:50,116 --> 12:49:56,160
brackets and
14837
12:49:53,000 --> 12:49:58,560
save so as you can see by splitting up
14838
12:49:56,160 --> 12:50:01,640
our code into smaller functions it makes
14839
12:49:58,560 --> 12:50:04,200
our code a lot easier to read when we
14840
12:50:01,640 --> 12:50:06,680
click add to cart it's really easy to
14841
12:50:04,200 --> 12:50:09,116
understand what's going on first we're
14842
12:50:06,680 --> 12:50:11,080
going to add a product to our cart and
14843
12:50:09,116 --> 12:50:14,360
then we're going to update the card
14844
12:50:11,080 --> 12:50:17,436
quantity so now let's save and then go
14845
12:50:14,360 --> 12:50:20,080
back to our project and try it out and
14846
12:50:17,436 --> 12:50:22,276
you can see that everything is working
14847
12:50:20,080 --> 12:50:25,040
again so we're going to do two more
14848
12:50:22,276 --> 12:50:27,560
things to better organize our code so
14849
12:50:25,040 --> 12:50:30,276
let's go back to our code and the first
14850
12:50:27,560 --> 12:50:33,360
thing is we're going to scroll up to the
14851
12:50:30,276 --> 12:50:35,436
add to cart function and I made a small
14852
12:50:33,360 --> 12:50:37,840
mistake in the previous lesson I
14853
12:50:35,436 --> 12:50:41,956
actually want to rename this parameter
14854
12:50:37,840 --> 12:50:44,000
from item to cart item instead to make
14855
12:50:41,956 --> 12:50:47,840
it a little more clear so we're just
14856
12:50:44,000 --> 12:50:53,160
going to rename this to cart item and
14857
12:50:47,840 --> 12:50:56,040
here as well we name it to cart item and
14858
12:50:53,160 --> 12:50:57,400
save and we'll scroll down here and
14859
12:50:56,040 --> 12:51:00,756
we're going to do the same thing for
14860
12:50:57,400 --> 12:51:06,720
this parameter so we'll rename it to
14861
12:51:00,756 --> 12:51:09,720
cart item and then here cart item and
14862
12:51:06,720 --> 12:51:09,720
Save
14863
12:51:10,276 --> 12:51:14,680
and the last thing we'll do is let's
14864
12:51:12,436 --> 12:51:17,320
scroll up to the add to cart
14865
12:51:14,680 --> 12:51:20,080
function so you'll notice that this code
14866
12:51:17,320 --> 12:51:22,720
manages our cart so it's actually a best
14867
12:51:20,080 --> 12:51:26,276
practice to move this function into
14868
12:51:22,720 --> 12:51:29,116
cart. JS because cart. JS contains all
14869
12:51:26,276 --> 12:51:31,560
the code that's related to the cart a
14870
12:51:29,116 --> 12:51:34,880
best practice is to group related code
14871
12:51:31,560 --> 12:51:38,240
together into its own
14872
12:51:34,880 --> 12:51:41,160
file so here let's take the function add
14873
12:51:38,240 --> 12:51:43,520
to cart we'll select it and then
14874
12:51:41,160 --> 12:51:47,640
rightclick
14875
12:51:43,520 --> 12:51:52,200
cut and then inside cart. JS we're going
14876
12:51:47,640 --> 12:51:54,756
to rightclick and paste and just move
14877
12:51:52,200 --> 12:51:56,840
that function into this file because
14878
12:51:54,756 --> 12:51:59,680
this file contains all the code that's
14879
12:51:56,840 --> 12:52:02,276
related to the cart so now that this
14880
12:51:59,680 --> 12:52:05,400
function is inside the file we need to
14881
12:52:02,276 --> 12:52:08,560
access it from amazon.
14882
12:52:05,400 --> 12:52:12,360
JS and we can do that using modules
14883
12:52:08,560 --> 12:52:16,480
using the features export and import so
14884
12:52:12,360 --> 12:52:19,160
inside cart. JS in front of the function
14885
12:52:16,480 --> 12:52:22,560
we're going to export it so we can use
14886
12:52:19,160 --> 12:52:26,276
it in other files so let's save this
14887
12:52:22,560 --> 12:52:28,400
file and then inside amazon. JS we're
14888
12:52:26,276 --> 12:52:30,840
going to scroll to the
14889
12:52:28,400 --> 12:52:34,200
top and you'll notice that we're already
14890
12:52:30,840 --> 12:52:35,956
importing something from cart. JS so we
14891
12:52:34,200 --> 12:52:38,756
actually don't need to write import
14892
12:52:35,956 --> 12:52:42,240
again here we can actually import
14893
12:52:38,756 --> 12:52:45,240
multiple things from this file by typing
14894
12:52:42,240 --> 12:52:47,680
comma and space and then something else
14895
12:52:45,240 --> 12:52:49,800
that we want to import so in our case
14896
12:52:47,680 --> 12:52:54,956
we're going to import the function add
14897
12:52:49,800 --> 12:52:58,596
to cart so here we'll type comma add to
14898
12:52:54,956 --> 12:53:01,040
cart so now it will import both the cart
14899
12:52:58,596 --> 12:53:03,756
and the add to cart function from this
14900
12:53:01,040 --> 12:53:05,520
file so Imports can import multiple
14901
12:53:03,756 --> 12:53:09,200
things from a
14902
12:53:05,520 --> 12:53:12,840
file Imports have another syntax import
14903
12:53:09,200 --> 12:53:16,200
Star as this Imports everything from a
14904
12:53:12,840 --> 12:53:18,640
file and groups it together inside this
14905
12:53:16,200 --> 12:53:22,880
object and then we can access each
14906
12:53:18,640 --> 12:53:22,880
import as a property or a
14907
12:53:24,680 --> 12:53:29,000
method so lastly I'm just going to
14908
12:53:26,880 --> 12:53:31,276
scroll down to my code
14909
12:53:29,000 --> 12:53:34,916
here and I'm just going to remove this
14910
12:53:31,276 --> 12:53:34,916
extra new line and
14911
12:53:34,956 --> 12:53:39,880
save now you might be wondering if we
14912
12:53:37,320 --> 12:53:41,640
should move update cart quantity into
14913
12:53:39,880 --> 12:53:44,640
cart. JS as
14914
12:53:41,640 --> 12:53:46,800
well so this function actually handles
14915
12:53:44,640 --> 12:53:48,916
updating the web page rather than
14916
12:53:46,800 --> 12:53:52,040
managing the cart so we're going to keep
14917
12:53:48,916 --> 12:53:55,160
this function inside this file for
14918
12:53:52,040 --> 12:53:58,800
now so now let's go into get and save
14919
12:53:55,160 --> 12:54:02,360
our changes so we'll go here and inside
14920
12:53:58,800 --> 12:54:05,320
cart. JS we moved the add to cart
14921
12:54:02,360 --> 12:54:08,800
function and then we exported it and
14922
12:54:05,320 --> 12:54:10,000
then inside amazon. JS we imported the
14923
12:54:08,800 --> 12:54:13,240
add to card
14924
12:54:10,000 --> 12:54:15,720
function and then down here we took the
14925
12:54:13,240 --> 12:54:18,756
big block of code that we had before and
14926
12:54:15,720 --> 12:54:21,840
we separated it into two functions add
14927
12:54:18,756 --> 12:54:24,800
to cart and update cart quantity and
14928
12:54:21,840 --> 12:54:27,360
this made our code a lot easier to
14929
12:54:24,800 --> 12:54:32,480
read so now let's type a message
14930
12:54:27,360 --> 12:54:38,436
describing our changes move add to cart
14931
12:54:32,480 --> 12:54:38,436
into cart. JS and commit
14932
12:54:41,436 --> 12:54:45,480
next we're going to create the checkout
14933
12:54:43,436 --> 12:54:47,640
page in our final project and we're
14934
12:54:45,480 --> 12:54:51,080
going to use modules to organize our
14935
12:54:47,640 --> 12:54:53,240
code again so let's open the final
14936
12:54:51,080 --> 12:54:55,240
project and we're going to click this
14937
12:54:53,240 --> 12:54:57,956
cart icon in the top
14938
12:54:55,240 --> 12:55:00,596
right and this will take us to another
14939
12:54:57,956 --> 12:55:02,480
page which is the checkout page so on
14940
12:55:00,596 --> 12:55:03,840
this page we can see the products that
14941
12:55:02,480 --> 12:55:05,916
are in our
14942
12:55:03,840 --> 12:55:08,756
cart so if you're wondering how that
14943
12:55:05,916 --> 12:55:12,080
cart icon works it basically uses is an
14944
12:55:08,756 --> 12:55:14,800
HTML element called a link element which
14945
12:55:12,080 --> 12:55:18,040
looks like this link elements have a
14946
12:55:14,800 --> 12:55:21,200
special attribute called href when we
14947
12:55:18,040 --> 12:55:23,680
click a link element whatever is inside
14948
12:55:21,200 --> 12:55:27,840
the href attribute it will open it in
14949
12:55:23,680 --> 12:55:30,560
the page so if we put youtube.com inside
14950
12:55:27,840 --> 12:55:33,916
the href and we click the link it will
14951
12:55:30,560 --> 12:55:37,240
open youtube.com in our browser if we
14952
12:55:33,916 --> 12:55:39,880
put a file like checkout. HTML inside
14953
12:55:37,240 --> 12:55:44,480
href it will look for a file called
14954
12:55:39,880 --> 12:55:44,480
checkout. HTML and open that
14955
12:55:44,596 --> 12:55:50,680
file so in our project if we look at our
14956
12:55:48,240 --> 12:55:53,520
code and open our
14957
12:55:50,680 --> 12:55:56,436
files inside amazon.
14958
12:55:53,520 --> 12:55:59,200
HTML we're basically just using a link
14959
12:55:56,436 --> 12:56:03,116
element or an a element and this has an
14960
12:55:59,200 --> 12:56:05,040
hre of checkout. HTML so what this does
14961
12:56:03,116 --> 12:56:08,640
is it's going to look for a file called
14962
12:56:05,040 --> 12:56:13,160
checkout. HTML beside the current file
14963
12:56:08,640 --> 12:56:15,400
amazon. HTML so here's amazon. HTML and
14964
12:56:13,160 --> 12:56:17,720
it's going to look for checkout. HTML
14965
12:56:15,400 --> 12:56:20,436
beside it and then open that in our
14966
12:56:17,720 --> 12:56:23,200
browser which is how that cart icon
14967
12:56:20,436 --> 12:56:26,880
works so in our browser at the top you
14968
12:56:23,200 --> 12:56:28,680
can see that it opened checkout. HTML so
14969
12:56:26,880 --> 12:56:30,916
that's basically how a link element
14970
12:56:28,680 --> 12:56:33,680
works and how we can navigate from one
14971
12:56:30,916 --> 12:56:36,756
page to another you can learn more about
14972
12:56:33,680 --> 12:56:39,116
link elements in my HTML and CSS full
14973
12:56:36,756 --> 12:56:41,360
course but for now now we're going to
14974
12:56:39,116 --> 12:56:42,436
learn how to build the checkout page
14975
12:56:41,360 --> 12:56:44,800
using
14976
12:56:42,436 --> 12:56:48,320
JavaScript so first let's take a look at
14977
12:56:44,800 --> 12:56:50,436
the code for this page so again the code
14978
12:56:48,320 --> 12:56:53,680
is inside checkout.
14979
12:56:50,436 --> 12:56:56,480
HTML so in our code editor we're going
14980
12:56:53,680 --> 12:56:59,756
to open checkout.
14981
12:56:56,480 --> 12:57:02,640
HTML and this is a code for the page
14982
12:56:59,756 --> 12:57:05,880
that we saw earlier that contains our
14983
12:57:02,640 --> 12:57:08,200
cart so just like with the homepage
14984
12:57:05,880 --> 12:57:10,480
instead of writing all this HTML
14985
12:57:08,200 --> 12:57:12,360
manually we're going to use JavaScript
14986
12:57:10,480 --> 12:57:15,640
to generate this
14987
12:57:12,360 --> 12:57:18,360
HTML so first we need to add JavaScript
14988
12:57:15,640 --> 12:57:19,640
to this page so let's scroll down to the
14989
12:57:18,360 --> 12:57:23,200
very bottom
14990
12:57:19,640 --> 12:57:26,200
here and right before the end of the
14991
12:57:23,200 --> 12:57:28,480
body we're going to create a script
14992
12:57:26,200 --> 12:57:30,276
element to load some
14993
12:57:28,480 --> 12:57:33,956
JavaScript and we'll give it an
14994
12:57:30,276 --> 12:57:36,680
attribute Source equals double quotes
14995
12:57:33,956 --> 12:57:38,640
and then a file we want to load so let's
14996
12:57:36,680 --> 12:57:42,756
create a new Javascript file file for
14997
12:57:38,640 --> 12:57:45,320
this page so inside our scripts folder
14998
12:57:42,756 --> 12:57:48,320
let's click amazon. JS and then click
14999
12:57:45,320 --> 12:57:53,360
this icon to create a new file and let's
15000
12:57:48,320 --> 12:57:55,480
name this file checkout. JS and press
15001
12:57:53,360 --> 12:57:57,956
enter and now we're going to load this
15002
12:57:55,480 --> 12:58:01,840
page inside checkout.
15003
12:57:57,956 --> 12:58:04,596
HTML so here in the source attribute
15004
12:58:01,840 --> 12:58:07,080
we're going to locate this file so first
15005
12:58:04,596 --> 12:58:08,640
we need to go into this scripts folder
15006
12:58:07,080 --> 12:58:11,436
so we'll type
15007
12:58:08,640 --> 12:58:15,320
scripts and then a slash to go into the
15008
12:58:11,436 --> 12:58:17,276
folder and then we'll load the file
15009
12:58:15,320 --> 12:58:20,240
checkout.
15010
12:58:17,276 --> 12:58:25,400
JS and next we're going to add another
15011
12:58:20,240 --> 12:58:27,956
attribute type equals double quotes
15012
12:58:25,400 --> 12:58:30,840
module so remember from earlier in the
15013
12:58:27,956 --> 12:58:33,916
lesson this attribute enables module
15014
12:58:30,840 --> 12:58:38,276
features for this file so now this file
15015
12:58:33,916 --> 12:58:39,680
can import from other JavaScript files
15016
12:58:38,276 --> 12:58:44,160
so now let's
15017
12:58:39,680 --> 12:58:46,720
save and let's open checkout. JS and
15018
12:58:44,160 --> 12:58:49,000
we'll start creating this page with
15019
12:58:46,720 --> 12:58:51,680
JavaScript so let's go back to our page
15020
12:58:49,000 --> 12:58:54,756
first and take a look at the structure
15021
12:58:51,680 --> 12:58:57,640
of this page so you can see on this page
15022
12:58:54,756 --> 12:59:00,000
we actually have two sections we have
15023
12:58:57,640 --> 12:59:03,040
the cart section on the left which shows
15024
12:59:00,000 --> 12:59:05,520
the products in our cart and we also
15025
12:59:03,040 --> 12:59:08,480
have the payment section on the right
15026
12:59:05,520 --> 12:59:10,800
which calculates the cost of our order
15027
12:59:08,480 --> 12:59:14,276
so let's use JavaScript to create the
15028
12:59:10,800 --> 12:59:17,160
cart section first so remember the main
15029
12:59:14,276 --> 12:59:19,596
idea of JavaScript is first we're going
15030
12:59:17,160 --> 12:59:22,800
to save the data and then we're going to
15031
12:59:19,596 --> 12:59:23,756
generate the HTML and finally we'll make
15032
12:59:22,800 --> 12:59:26,160
it
15033
12:59:23,756 --> 12:59:28,436
interactive let's start by saving the
15034
12:59:26,160 --> 12:59:31,200
data that we need for this section of
15035
12:59:28,436 --> 12:59:33,916
the page so for this section we're
15036
12:59:31,200 --> 12:59:36,200
basically displaying a list of products
15037
12:59:33,916 --> 12:59:38,320
along with the quantity of each product
15038
12:59:36,200 --> 12:59:40,680
that we want to buy and and if you
15039
12:59:38,320 --> 12:59:43,400
remember we already created a data
15040
12:59:40,680 --> 12:59:46,800
structure to represent this which is our
15041
12:59:43,400 --> 12:59:49,240
cart inside our cart we have the ID of
15042
12:59:46,800 --> 12:59:52,160
the product as well as the quantity that
15043
12:59:49,240 --> 12:59:55,756
we want to buy so we can just reuse this
15044
12:59:52,160 --> 12:59:57,480
data structure to create this section so
15045
12:59:55,756 --> 13:00:01,116
let's go into our
15046
12:59:57,480 --> 13:00:04,240
code and we're going to open cart.
15047
13:00:01,116 --> 13:00:06,720
JS so inside here we have an array
15048
13:00:04,240 --> 13:00:08,720
called cart that's supposed to represent
15049
13:00:06,720 --> 13:00:12,200
our data here
15050
13:00:08,720 --> 13:00:14,596
so right now our card is empty so to
15051
13:00:12,200 --> 13:00:16,840
make it easier for us to develop we're
15052
13:00:14,596 --> 13:00:20,520
just going to add some default values
15053
13:00:16,840 --> 13:00:23,640
into this array so inside here let's
15054
13:00:20,520 --> 13:00:26,640
create an object and put one product
15055
13:00:23,640 --> 13:00:29,520
into our card first so looking at this
15056
13:00:26,640 --> 13:00:32,880
page the product that we want to put is
15057
13:00:29,520 --> 13:00:34,840
the socks so we'll go back into our code
15058
13:00:32,880 --> 13:00:38,000
and I'll rearrange my windows so we can
15059
13:00:34,840 --> 13:00:40,596
see it side by side and we're going to
15060
13:00:38,000 --> 13:00:42,880
get the product ID for the socks here so
15061
13:00:40,596 --> 13:00:46,000
we're going to go into products.
15062
13:00:42,880 --> 13:00:47,956
JS and then here's the socks we just
15063
13:00:46,000 --> 13:00:51,480
going to take this
15064
13:00:47,956 --> 13:00:54,080
ID right click
15065
13:00:51,480 --> 13:00:57,240
copy and then inside the
15066
13:00:54,080 --> 13:01:00,800
cart and remember we structured our data
15067
13:00:57,240 --> 13:01:02,436
so that each card item has a product ID
15068
13:01:00,800 --> 13:01:05,040
as well as a
15069
13:01:02,436 --> 13:01:07,400
quantity so here we're going to create
15070
13:01:05,040 --> 13:01:08,640
the same structure that our current code
15071
13:01:07,400 --> 13:01:11,436
uses
15072
13:01:08,640 --> 13:01:16,880
so we're going to give each object a
15073
13:01:11,436 --> 13:01:19,040
product ID colon and single quotes and
15074
13:01:16,880 --> 13:01:22,680
we're just going to rightclick and
15075
13:01:19,040 --> 13:01:25,000
paste the ID that we copied earlier and
15076
13:01:22,680 --> 13:01:26,520
then we'll type a comma and we'll give
15077
13:01:25,000 --> 13:01:30,160
it a
15078
13:01:26,520 --> 13:01:33,240
quantity colon and for the first item
15079
13:01:30,160 --> 13:01:35,160
we're going to give it a quantity of two
15080
13:01:33,240 --> 13:01:38,436
so we'll just create a cart that kind of
15081
13:01:35,160 --> 13:01:41,560
matches what we see on this page
15082
13:01:38,436 --> 13:01:44,880
next let's create a second card item to
15083
13:01:41,560 --> 13:01:48,560
represent the basketball so we'll type
15084
13:01:44,880 --> 13:01:53,200
comma curly brackets we'll give it a
15085
13:01:48,560 --> 13:01:55,240
product ID colon and single quotes and
15086
13:01:53,200 --> 13:01:59,200
then we're going to get the ID for this
15087
13:01:55,240 --> 13:02:01,880
basketball so inside products. JS we
15088
13:01:59,200 --> 13:02:04,436
going to scroll down to the basketball
15089
13:02:01,880 --> 13:02:08,360
here and we're going to copy this
15090
13:02:04,436 --> 13:02:10,040
ID right click copy
15091
13:02:08,360 --> 13:02:14,480
and then inside cart.
15092
13:02:10,040 --> 13:02:17,720
JS in here right click and
15093
13:02:14,480 --> 13:02:21,240
paste and we'll give this one a
15094
13:02:17,720 --> 13:02:23,840
quantity colon one and
15095
13:02:21,240 --> 13:02:25,756
save so what we're doing here is we're
15096
13:02:23,840 --> 13:02:28,720
just creating some default values that
15097
13:02:25,756 --> 13:02:31,116
we can use to write the code to generate
15098
13:02:28,720 --> 13:02:33,080
this page so this is just for
15099
13:02:31,116 --> 13:02:36,520
development when we're actually using
15100
13:02:33,080 --> 13:02:39,720
the website the cart will start off as
15101
13:02:36,520 --> 13:02:42,200
empty so so if we compare our data to
15102
13:02:39,720 --> 13:02:44,400
our page you might notice that there's a
15103
13:02:42,200 --> 13:02:47,756
few things that are missing such as the
15104
13:02:44,400 --> 13:02:50,160
product's image the name and the price
15105
13:02:47,756 --> 13:02:53,040
so how come we're not saving these into
15106
13:02:50,160 --> 13:02:55,560
our data and that's because we're using
15107
13:02:53,040 --> 13:02:58,116
a special technique we're just saving
15108
13:02:55,560 --> 13:03:00,756
the product's ID and then we can use
15109
13:02:58,116 --> 13:03:04,520
this ID to search for this product
15110
13:03:00,756 --> 13:03:07,400
inside the products array here so using
15111
13:03:04,520 --> 13:03:10,240
the ID we can find all the other details
15112
13:03:07,400 --> 13:03:13,436
of the product like the image the name
15113
13:03:10,240 --> 13:03:15,880
and the price so there's no need to save
15114
13:03:13,436 --> 13:03:19,560
this data twice inside the products
15115
13:03:15,880 --> 13:03:22,000
array and inside the cart array all we
15116
13:03:19,560 --> 13:03:24,916
have to do is save the ID of the product
15117
13:03:22,000 --> 13:03:27,720
that we want and then search for it so
15118
13:03:24,916 --> 13:03:31,320
this technique is called duplicating the
15119
13:03:27,720 --> 13:03:34,480
data or normalizing the data and this is
15120
13:03:31,320 --> 13:03:37,200
a very common technique in software
15121
13:03:34,480 --> 13:03:38,956
engineering okay so the one other thing
15122
13:03:37,200 --> 13:03:41,480
that we probably need to save in our
15123
13:03:38,956 --> 13:03:43,596
data is the delivery times and the
15124
13:03:41,480 --> 13:03:45,520
delivery options but we're going to
15125
13:03:43,596 --> 13:03:47,160
leave this for the next lesson because
15126
13:03:45,520 --> 13:03:48,200
it requires some more features that
15127
13:03:47,160 --> 13:03:51,400
we're going to
15128
13:03:48,200 --> 13:03:54,596
learn so for now we finished saving the
15129
13:03:51,400 --> 13:03:58,040
data that we need the next step is to
15130
13:03:54,596 --> 13:04:01,596
use this data to generate the
15131
13:03:58,040 --> 13:04:03,916
HTML so let's open checkout.
15132
13:04:01,596 --> 13:04:06,720
JS so I'm just going to drag it to the
15133
13:04:03,916 --> 13:04:09,640
bottom here so we can see it side by
15134
13:04:06,720 --> 13:04:09,640
side
15135
13:04:10,680 --> 13:04:16,080
so the first step we need to do is to
15136
13:04:12,796 --> 13:04:20,520
take the cart array and import it into
15137
13:04:16,080 --> 13:04:25,200
checkout. JS so we can use it so in here
15138
13:04:20,520 --> 13:04:29,320
let's import curly brackets the cart
15139
13:04:25,200 --> 13:04:31,880
array and we're going to import it from
15140
13:04:29,320 --> 13:04:33,880
single quotes and semicolon and we're
15141
13:04:31,880 --> 13:04:37,720
going to use a file path between the
15142
13:04:33,880 --> 13:04:41,200
quotes to locate cart. JS so let's open
15143
13:04:37,720 --> 13:04:44,080
our files again and to get from here to
15144
13:04:41,200 --> 13:04:47,680
here we need to go out of the scripts
15145
13:04:44,080 --> 13:04:51,276
folder so to do that we can type dot dot
15146
13:04:47,680 --> 13:04:53,240
and then slash to go to the outer folder
15147
13:04:51,276 --> 13:04:56,640
and then we're going to go to the data
15148
13:04:53,240 --> 13:04:59,480
folder so we'll type data slash to go
15149
13:04:56,640 --> 13:05:05,840
into this folder and we'll locate cart.
15150
13:04:59,480 --> 13:05:07,916
JS so cart. JS and save and next we're
15151
13:05:05,840 --> 13:05:10,956
going to Loop through this cart and
15152
13:05:07,916 --> 13:05:11,796
generate the HTML just like we did for
15153
13:05:10,956 --> 13:05:15,276
the
15154
13:05:11,796 --> 13:05:17,840
homepage so let's close this for now and
15155
13:05:15,276 --> 13:05:23,160
here we're going to create a loop over
15156
13:05:17,840 --> 13:05:26,200
the cart so we'll type cart. for each
15157
13:05:23,160 --> 13:05:28,200
brackets and a
15158
13:05:26,200 --> 13:05:31,560
function and then we'll give it a
15159
13:05:28,200 --> 13:05:34,400
parameter let's call it cart
15160
13:05:31,560 --> 13:05:36,560
item and then for each cart item here
15161
13:05:34,400 --> 13:05:39,796
we're going to generate this
15162
13:05:36,560 --> 13:05:43,360
HTML so in here let's create a template
15163
13:05:39,796 --> 13:05:45,400
string for the HTML using back ticks and
15164
13:05:43,360 --> 13:05:47,756
we'll create some new lines and then
15165
13:05:45,400 --> 13:05:51,520
here we're going to copy and paste the
15166
13:05:47,756 --> 13:05:53,756
HTML for one of these products so first
15167
13:05:51,520 --> 13:05:56,720
let's find the HTML for one of these
15168
13:05:53,756 --> 13:05:58,560
products and to do that we can
15169
13:05:56,720 --> 13:06:01,520
rightclick
15170
13:05:58,560 --> 13:06:04,240
inspect and then click this top left
15171
13:06:01,520 --> 13:06:05,956
icon and then click the element we want
15172
13:06:04,240 --> 13:06:09,640
to get the HTML
15173
13:06:05,956 --> 13:06:11,680
for so here's the HTML for one of these
15174
13:06:09,640 --> 13:06:14,360
products and we're going to search for
15175
13:06:11,680 --> 13:06:17,796
this class card item container and our
15176
13:06:14,360 --> 13:06:21,880
code so inside our
15177
13:06:17,796 --> 13:06:24,796
code let's open checkout.
15178
13:06:21,880 --> 13:06:27,320
HTML and we'll type control F or command
15179
13:06:24,796 --> 13:06:32,520
F to search for code and we'll search
15180
13:06:27,320 --> 13:06:35,956
for the class cart D item D
15181
13:06:32,520 --> 13:06:39,796
container which is this code right here
15182
13:06:35,956 --> 13:06:42,000
so if we collapse it and collapse this
15183
13:06:39,796 --> 13:06:45,200
this is the code for these two products
15184
13:06:42,000 --> 13:06:46,796
here so we're going to take this HTML
15185
13:06:45,200 --> 13:06:49,400
and we're going to move it into our
15186
13:06:46,796 --> 13:06:53,116
JavaScript so we can generate it with
15187
13:06:49,400 --> 13:06:57,520
JavaScript so we'll right click
15188
13:06:53,116 --> 13:06:59,520
copy and then in here right click and
15189
13:06:57,520 --> 13:07:02,200
paste and if we need to fix the
15190
13:06:59,520 --> 13:07:05,520
formatting we can select all of these
15191
13:07:02,200 --> 13:07:07,680
lines and then press shift tab to remove
15192
13:07:05,520 --> 13:07:10,956
some indents
15193
13:07:07,680 --> 13:07:13,596
and I'll add an indent here next when
15194
13:07:10,956 --> 13:07:16,276
we're generating this HTML we want to
15195
13:07:13,596 --> 13:07:18,956
replace this with the actual products
15196
13:07:16,276 --> 13:07:21,240
image and this with the actual products
15197
13:07:18,956 --> 13:07:23,840
name so we're going to take this card
15198
13:07:21,240 --> 13:07:27,560
item and use it to get the data that we
15199
13:07:23,840 --> 13:07:29,916
need so let's open card. JS to see what
15200
13:07:27,560 --> 13:07:32,720
each cart item looks like so we have the
15201
13:07:29,916 --> 13:07:35,480
product ID and the
15202
13:07:32,720 --> 13:07:38,116
quantity so first we need to use this
15203
13:07:35,480 --> 13:07:40,360
product ID to search for the product in
15204
13:07:38,116 --> 13:07:42,720
order to get the other details like the
15205
13:07:40,360 --> 13:07:45,680
image the name and the
15206
13:07:42,720 --> 13:07:49,160
price so to do that let's get the
15207
13:07:45,680 --> 13:07:53,680
product ID out of the cart item first so
15208
13:07:49,160 --> 13:07:59,080
we'll create a variable const product ID
15209
13:07:53,680 --> 13:08:02,040
equals the cart item do product
15210
13:07:59,080 --> 13:08:05,560
ID and now we need to use this to search
15211
13:08:02,040 --> 13:08:07,796
for the full product so the full product
15212
13:08:05,560 --> 13:08:09,160
if we open our files is INS inside
15213
13:08:07,796 --> 13:08:13,116
products.
15214
13:08:09,160 --> 13:08:14,560
JS which is this array right here so I'm
15215
13:08:13,116 --> 13:08:16,916
just going to move this up here so we
15216
13:08:14,560 --> 13:08:20,720
can see it side by
15217
13:08:16,916 --> 13:08:23,720
side so to search inside this array we
15218
13:08:20,720 --> 13:08:26,840
actually need to import products into
15219
13:08:23,720 --> 13:08:31,160
checkout. JS so let's use some module
15220
13:08:26,840 --> 13:08:32,116
features again at the top we'll import
15221
13:08:31,160 --> 13:08:35,916
curly
15222
13:08:32,116 --> 13:08:39,200
brackets the products array and we'll
15223
13:08:35,916 --> 13:08:42,400
import it from single quotes and
15224
13:08:39,200 --> 13:08:45,880
semicolon and then here we'll locate the
15225
13:08:42,400 --> 13:08:49,116
products. JS file so we'll type do dot
15226
13:08:45,880 --> 13:08:51,756
slash to go out of the scripts folder
15227
13:08:49,116 --> 13:08:54,480
and then we'll go into the data folder
15228
13:08:51,756 --> 13:08:58,480
data and then a slash to go into this
15229
13:08:54,480 --> 13:08:59,596
folder and we import from products. JS
15230
13:08:58,480 --> 13:09:04,360
so
15231
13:08:59,596 --> 13:09:07,040
products. JS and save so now we have
15232
13:09:04,360 --> 13:09:09,080
access to this products array here and
15233
13:09:07,040 --> 13:09:12,560
we'll search the array for the full
15234
13:09:09,080 --> 13:09:15,840
product details so down
15235
13:09:12,560 --> 13:09:19,040
here let's create a variable to save the
15236
13:09:15,840 --> 13:09:22,680
result so we'll type let and we'll name
15237
13:09:19,040 --> 13:09:25,320
it matching
15238
13:09:22,680 --> 13:09:28,640
product and then down here we'll Loop
15239
13:09:25,320 --> 13:09:34,320
through the products array so we'll type
15240
13:09:28,640 --> 13:09:36,360
products. for each brackets and a
15241
13:09:34,320 --> 13:09:38,756
function and then we'll give it a
15242
13:09:36,360 --> 13:09:42,040
parameter
15243
13:09:38,756 --> 13:09:44,680
product and now for each product here
15244
13:09:42,040 --> 13:09:48,640
we're going to check if the ID property
15245
13:09:44,680 --> 13:09:51,880
is equal to our product ID here so down
15246
13:09:48,640 --> 13:09:56,596
here we'll check if the
15247
13:09:51,880 --> 13:10:00,640
product. ID property is equal to our
15248
13:09:56,596 --> 13:10:03,240
product ID up here and then if they're
15249
13:10:00,640 --> 13:10:05,160
equal that means we found the matching
15250
13:10:03,240 --> 13:10:09,200
product and we're going to save it in
15251
13:10:05,160 --> 13:10:12,560
this variable so matching
15252
13:10:09,200 --> 13:10:13,480
product equals this product that We're
15253
13:10:12,560 --> 13:10:15,916
looping
15254
13:10:13,480 --> 13:10:18,756
through so now that we have the matching
15255
13:10:15,916 --> 13:10:21,240
product we have access to the image the
15256
13:10:18,756 --> 13:10:24,720
name as well as the price that we can
15257
13:10:21,240 --> 13:10:27,240
use to generate this HTML so this is a
15258
13:10:24,720 --> 13:10:30,276
good example of duplicating or
15259
13:10:27,240 --> 13:10:32,640
normalizing our data so now at the
15260
13:10:30,276 --> 13:10:35,436
bottom let's
15261
13:10:32,640 --> 13:10:39,276
console.log our matching product to see
15262
13:10:35,436 --> 13:10:41,956
if it works so matching
15263
13:10:39,276 --> 13:10:45,320
product and
15264
13:10:41,956 --> 13:10:49,596
save now if we go into our project and
15265
13:10:45,320 --> 13:10:52,160
we rightclick inspect and check our
15266
13:10:49,596 --> 13:10:54,720
console you can see that we were able to
15267
13:10:52,160 --> 13:10:58,480
get the full product details for each of
15268
13:10:54,720 --> 13:10:59,756
these products using the product ID so
15269
13:10:58,480 --> 13:11:02,880
now that we have the full product
15270
13:10:59,756 --> 13:11:06,080
details we can use this to generate all
15271
13:11:02,880 --> 13:11:06,080
this HTML
15272
13:11:07,756 --> 13:11:13,560
so down here instead of generating the
15273
13:11:11,400 --> 13:11:16,276
same image every time we're going to use
15274
13:11:13,560 --> 13:11:18,080
the image in the matching product so
15275
13:11:16,276 --> 13:11:22,116
let's get rid of this
15276
13:11:18,080 --> 13:11:24,040
code and here we're going to remove this
15277
13:11:22,116 --> 13:11:25,596
and we're going to substitute using
15278
13:11:24,040 --> 13:11:29,436
dollar curly
15279
13:11:25,596 --> 13:11:31,436
brackets the matching
15280
13:11:29,436 --> 13:11:34,796
product.
15281
13:11:31,436 --> 13:11:36,880
image and we'll scroll down and instead
15282
13:11:34,796 --> 13:11:39,240
of the same product name every time
15283
13:11:36,880 --> 13:11:42,320
we're going we're going to replace this
15284
13:11:39,240 --> 13:11:43,880
and we're going to substitute the
15285
13:11:42,320 --> 13:11:46,756
matching
15286
13:11:43,880 --> 13:11:49,400
product. name so each time we're going
15287
13:11:46,756 --> 13:11:51,916
to generate HTML with a different image
15288
13:11:49,400 --> 13:11:55,240
and a different name and down here the
15289
13:11:51,916 --> 13:12:00,000
same thing remove the price and we'll
15290
13:11:55,240 --> 13:12:01,560
replace it with matching product Dot and
15291
13:12:00,000 --> 13:12:05,916
then we'll just check here what the
15292
13:12:01,560 --> 13:12:07,880
property is it's called a price sense
15293
13:12:05,916 --> 13:12:10,480
and remember this is in
15294
13:12:07,880 --> 13:12:15,160
and to display it as dollars we have to
15295
13:12:10,480 --> 13:12:17,796
convert it by dividing by 100 and
15296
13:12:15,160 --> 13:12:21,160
save and lastly we're going to replace
15297
13:12:17,796 --> 13:12:23,840
the quantity here so if we scroll down
15298
13:12:21,160 --> 13:12:28,000
we can see that this is the quantity so
15299
13:12:23,840 --> 13:12:30,796
instead of two every time we'll
15300
13:12:28,000 --> 13:12:33,200
substitute and for the quantity remember
15301
13:12:30,796 --> 13:12:36,480
it's not part of a product it's part of
15302
13:12:33,200 --> 13:12:38,956
our cart so each cart item has a
15303
13:12:36,480 --> 13:12:43,796
property called called quantity so down
15304
13:12:38,956 --> 13:12:45,400
here we're going to substitute the cart
15305
13:12:43,796 --> 13:12:48,116
item.
15306
13:12:45,400 --> 13:12:51,320
quantity and
15307
13:12:48,116 --> 13:12:55,320
save so now we're generating all this
15308
13:12:51,320 --> 13:12:57,596
HTML by looping through our cart so the
15309
13:12:55,320 --> 13:13:00,360
next step is we're going to combine all
15310
13:12:57,596 --> 13:13:02,756
this HTML together and then put it on
15311
13:13:00,360 --> 13:13:06,040
the page so I'm just going to move this
15312
13:13:02,756 --> 13:13:09,000
up here so we can see more of the
15313
13:13:06,040 --> 13:13:11,840
code so to combine all this HTML
15314
13:13:09,000 --> 13:13:15,880
together let's create a variable up here
15315
13:13:11,840 --> 13:13:20,560
to store the result so we'll type let
15316
13:13:15,880 --> 13:13:25,000
and let's call it the cart summary
15317
13:13:20,560 --> 13:13:27,160
HTML equals an empty string and now each
15318
13:13:25,000 --> 13:13:29,956
time we Loop through the cart we're
15319
13:13:27,160 --> 13:13:34,200
going to add this HTML up here so that
15320
13:13:29,956 --> 13:13:35,756
we combine it so here we'll type cart
15321
13:13:34,200 --> 13:13:37,640
summary
15322
13:13:35,756 --> 13:13:40,796
HTML Plus
15323
13:13:37,640 --> 13:13:43,040
equals this HTML that we
15324
13:13:40,796 --> 13:13:44,796
generated and at the bottom I'll just
15325
13:13:43,040 --> 13:13:47,880
add a
15326
13:13:44,796 --> 13:13:49,080
semicolon and then let's console.log the
15327
13:13:47,880 --> 13:13:50,956
cart summary
15328
13:13:49,080 --> 13:13:55,956
HTML
15329
13:13:50,956 --> 13:13:59,276
console.log cart summary HTML to make
15330
13:13:55,956 --> 13:14:02,240
sure that it worked so we'll save and
15331
13:13:59,276 --> 13:14:04,276
then in here we'll check the console
15332
13:14:02,240 --> 13:14:07,916
right click
15333
13:14:04,276 --> 13:14:09,756
inspect the console
15334
13:14:07,916 --> 13:14:13,240
and now you can see that we generated
15335
13:14:09,756 --> 13:14:15,640
the HTML and each cart item is different
15336
13:14:13,240 --> 13:14:17,880
depending on the product that is being
15337
13:14:15,640 --> 13:14:20,640
displayed so that's how we generate all
15338
13:14:17,880 --> 13:14:23,200
the HTML for this section and the last
15339
13:14:20,640 --> 13:14:26,916
step is to take this and put it on the
15340
13:14:23,200 --> 13:14:29,560
page using the Dom so first we need an
15341
13:14:26,916 --> 13:14:34,400
element that we can put the HTML inside
15342
13:14:29,560 --> 13:14:38,200
of to find this element let's rightclick
15343
13:14:34,400 --> 13:14:39,680
inspect and click the top left left and
15344
13:14:38,200 --> 13:14:42,560
click one of these
15345
13:14:39,680 --> 13:14:45,160
products and let's find this order
15346
13:14:42,560 --> 13:14:47,840
summary element because this contains
15347
13:14:45,160 --> 13:14:50,680
both of our products here so we're going
15348
13:14:47,840 --> 13:14:53,276
to replace all the HTML inside here with
15349
13:14:50,680 --> 13:14:56,240
what we generated so let's search for
15350
13:14:53,276 --> 13:14:59,400
the class order summary in our code so
15351
13:14:56,240 --> 13:15:02,040
we'll go back to our code and let's open
15352
13:14:59,400 --> 13:15:04,956
checkout.
15353
13:15:02,040 --> 13:15:07,276
HTML and we'll type contrl f or command
15354
13:15:04,956 --> 13:15:09,276
F to search for code and we'll search
15355
13:15:07,276 --> 13:15:10,916
for the class
15356
13:15:09,276 --> 13:15:13,436
order-
15357
13:15:10,916 --> 13:15:16,000
summary and then it's right
15358
13:15:13,436 --> 13:15:20,520
here and we're going to add a class so
15359
13:15:16,000 --> 13:15:23,720
we can select it using the Dom so js-
15360
13:15:20,520 --> 13:15:26,436
order- summary and
15361
13:15:23,720 --> 13:15:29,436
save so now let's use the Dom and put
15362
13:15:26,436 --> 13:15:30,980
this element in our JavaScript so inside
15363
13:15:29,436 --> 13:15:32,116
here at the
15364
13:15:30,980 --> 13:15:34,596
[Music]
15365
13:15:32,116 --> 13:15:38,560
bottom we use
15366
13:15:34,596 --> 13:15:41,000
document. Query select VOR
15367
13:15:38,560 --> 13:15:44,040
brackets and the class we just
15368
13:15:41,000 --> 13:15:46,240
created js-
15369
13:15:44,040 --> 13:15:49,400
order-
15370
13:15:46,240 --> 13:15:51,756
summary and we'll use the property.
15371
13:15:49,400 --> 13:15:56,480
inner Capital
15372
13:15:51,756 --> 13:15:58,400
HTML and we'll change the HTML to cart
15373
13:15:56,480 --> 13:16:01,756
summary
15374
13:15:58,400 --> 13:16:04,080
HTML and we can remove this
15375
13:16:01,756 --> 13:16:06,640
line and now if we
15376
13:16:04,080 --> 13:16:09,320
save we're basically generating all this
15377
13:16:06,640 --> 13:16:12,436
h HTML with JavaScript and then putting
15378
13:16:09,320 --> 13:16:13,796
it on the page so now we can go back to
15379
13:16:12,436 --> 13:16:17,000
checkout.
15380
13:16:13,796 --> 13:16:19,796
HTML and we can actually remove the code
15381
13:16:17,000 --> 13:16:21,720
inside this order summary so we can
15382
13:16:19,796 --> 13:16:25,640
delete this
15383
13:16:21,720 --> 13:16:28,360
code and save and everything will still
15384
13:16:25,640 --> 13:16:30,320
work because this is now being generated
15385
13:16:28,360 --> 13:16:32,640
by
15386
13:16:30,320 --> 13:16:35,276
JavaScript so that's how we create the
15387
13:16:32,640 --> 13:16:38,596
cart section of this page with
15388
13:16:35,276 --> 13:16:41,436
JavaScript let's go into get and save
15389
13:16:38,596 --> 13:16:43,916
our changes so we'll open the git
15390
13:16:41,436 --> 13:16:48,040
section and then it will tell us that we
15391
13:16:43,916 --> 13:16:51,756
changed three files in checkout. HTML we
15392
13:16:48,040 --> 13:16:53,956
removed all the HTML that was written
15393
13:16:51,756 --> 13:16:56,240
manually and then at the bottom we
15394
13:16:53,956 --> 13:16:58,840
created a script tag to load our
15395
13:16:56,240 --> 13:17:02,040
JavaScript and then we also changed
15396
13:16:58,840 --> 13:17:04,480
cart. JS and added some default values
15397
13:17:02,040 --> 13:17:07,160
to work with and then we created
15398
13:17:04,480 --> 13:17:10,880
checkout. JS which loops through the
15399
13:17:07,160 --> 13:17:13,480
cart creates the HTML and puts it on the
15400
13:17:10,880 --> 13:17:14,560
page so let's create a message to
15401
13:17:13,480 --> 13:17:17,596
describe our
15402
13:17:14,560 --> 13:17:24,640
changes generate
15403
13:17:17,596 --> 13:17:24,640
HTML for the order summary and
15404
13:17:27,360 --> 13:17:34,160
commit next let's open our project
15405
13:17:31,000 --> 13:17:36,956
again and before we continue we actually
15406
13:17:34,160 --> 13:17:39,040
have two issues that we need to fix the
15407
13:17:36,956 --> 13:17:41,360
first issue is that the price is
15408
13:17:39,040 --> 13:17:44,480
displaying as one decimal here instead
15409
13:17:41,360 --> 13:17:46,520
of two and the second issue is that
15410
13:17:44,480 --> 13:17:49,320
these delivery options are actually
15411
13:17:46,520 --> 13:17:51,596
shared between the two products for
15412
13:17:49,320 --> 13:17:54,720
example if I click this delivery option
15413
13:17:51,596 --> 13:17:57,160
here it will actually unselect for the
15414
13:17:54,720 --> 13:17:58,436
second product so they're sort of shared
15415
13:17:57,160 --> 13:18:00,956
between the two
15416
13:17:58,436 --> 13:18:03,160
products but what we actually want is
15417
13:18:00,956 --> 13:18:05,596
for each product to be able to select
15418
13:18:03,160 --> 13:18:07,520
its own delivery options so we're going
15419
13:18:05,596 --> 13:18:11,040
to fix these two issues
15420
13:18:07,520 --> 13:18:13,040
next first let's focus on the price and
15421
13:18:11,040 --> 13:18:15,560
we want to display it in two
15422
13:18:13,040 --> 13:18:18,560
decimals so we actually learn how to fix
15423
13:18:15,560 --> 13:18:20,520
this on the homepage using the method to
15424
13:18:18,560 --> 13:18:24,436
fixed so we're going to use the same
15425
13:18:20,520 --> 13:18:28,040
code here let's go into our
15426
13:18:24,436 --> 13:18:30,560
code and we'll open our files and let's
15427
13:18:28,040 --> 13:18:33,240
open checkout. JS
15428
13:18:30,560 --> 13:18:35,000
again so here we're going to scroll down
15429
13:18:33,240 --> 13:18:38,840
to where we display the
15430
13:18:35,000 --> 13:18:41,400
price which is here price sense and to
15431
13:18:38,840 --> 13:18:43,320
show this in two decimal places we're
15432
13:18:41,400 --> 13:18:45,160
going to surround this with brackets to
15433
13:18:43,320 --> 13:18:48,276
make sure we calculate it
15434
13:18:45,160 --> 13:18:53,080
first and then use the method
15435
13:18:48,276 --> 13:18:57,276
do2 fixed brackets and then two to show
15436
13:18:53,080 --> 13:18:59,000
two decimal places if we save and then
15437
13:18:57,276 --> 13:19:02,276
open our
15438
13:18:59,000 --> 13:19:04,596
project now the price is displaying
15439
13:19:02,276 --> 13:19:07,000
correctly before we move on we're going
15440
13:19:04,596 --> 13:19:09,240
to learn how to better organize this
15441
13:19:07,000 --> 13:19:11,756
code so if we go
15442
13:19:09,240 --> 13:19:14,916
back so notice that we're using this
15443
13:19:11,756 --> 13:19:19,160
code inside the checkout page as well as
15444
13:19:14,916 --> 13:19:21,160
inside amazon. JS which is the homepage
15445
13:19:19,160 --> 13:19:23,116
so we can actually share this code
15446
13:19:21,160 --> 13:19:26,596
between the two files so we don't have
15447
13:19:23,116 --> 13:19:30,756
to repeat it and to do that we can use
15448
13:19:26,596 --> 13:19:32,360
modules so let's open checkout. JS again
15449
13:19:30,756 --> 13:19:34,360
and what we'll do is we're going to
15450
13:19:32,360 --> 13:19:37,116
create a function that does the same
15451
13:19:34,360 --> 13:19:40,360
thing as this code and then we can share
15452
13:19:37,116 --> 13:19:42,160
this function between the two files so
15453
13:19:40,360 --> 13:19:45,080
let's create a file that's going to
15454
13:19:42,160 --> 13:19:47,720
contain this shared function so we're
15455
13:19:45,080 --> 13:19:50,160
going to go to our scripts folder here
15456
13:19:47,720 --> 13:19:53,080
and inside we're going to create a new
15457
13:19:50,160 --> 13:19:54,956
folder this time and let's call this
15458
13:19:53,080 --> 13:19:57,360
folder
15459
13:19:54,956 --> 13:20:00,276
utils and press
15460
13:19:57,360 --> 13:20:02,520
enter so we're naming it utils because
15461
13:20:00,276 --> 13:20:04,360
this code is sort of like a useful
15462
13:20:02,520 --> 13:20:07,320
utility that we want to
15463
13:20:04,360 --> 13:20:10,200
share now inside this folder we're going
15464
13:20:07,320 --> 13:20:11,720
to have different types of utils so
15465
13:20:10,200 --> 13:20:17,480
let's create a new
15466
13:20:11,720 --> 13:20:20,116
file and let's name it money. JJs so
15467
13:20:17,480 --> 13:20:22,596
this file is going to contain utilities
15468
13:20:20,116 --> 13:20:25,880
that are related to money which is this
15469
13:20:22,596 --> 13:20:28,320
code right here so let's press
15470
13:20:25,880 --> 13:20:32,436
enter and I'm just going to move this to
15471
13:20:28,320 --> 13:20:32,436
the bottom so we can see it side by
15472
13:20:33,160 --> 13:20:38,436
side so now inside this UIL file we're
15473
13:20:36,756 --> 13:20:40,916
going to create a function that does the
15474
13:20:38,436 --> 13:20:42,880
same thing as here and then we can share
15475
13:20:40,916 --> 13:20:47,640
it between the two
15476
13:20:42,880 --> 13:20:51,640
files so here we'll create a function
15477
13:20:47,640 --> 13:20:54,160
and let's name it format currency
15478
13:20:51,640 --> 13:20:56,720
because that's what this code is doing
15479
13:20:54,160 --> 13:20:59,240
and then brackets and curly
15480
13:20:56,720 --> 13:21:02,320
brackets so this function is basically
15481
13:20:59,240 --> 13:21:05,080
going to do the same thing as here so
15482
13:21:02,320 --> 13:21:07,276
we're going to add a parameter here
15483
13:21:05,080 --> 13:21:09,360
price sense
15484
13:21:07,276 --> 13:21:11,400
because we want to use this function for
15485
13:21:09,360 --> 13:21:14,200
any amount of price
15486
13:21:11,400 --> 13:21:18,916
sents and then in here we're going to do
15487
13:21:14,200 --> 13:21:21,680
the same thing which is price sents
15488
13:21:18,916 --> 13:21:23,720
divided 100 and then we're going to
15489
13:21:21,680 --> 13:21:25,276
surround this with brackets to make sure
15490
13:21:23,720 --> 13:21:28,116
we calculate this
15491
13:21:25,276 --> 13:21:33,520
first and then display it in two decimal
15492
13:21:28,116 --> 13:21:38,520
places using dot 2 fixed brackets and
15493
13:21:33,520 --> 13:21:38,520
two and finally let's return this result
15494
13:21:38,560 --> 13:21:44,480
return and
15495
13:21:41,000 --> 13:21:46,436
save so what we just did is we created a
15496
13:21:44,480 --> 13:21:48,400
function that does the same thing as
15497
13:21:46,436 --> 13:21:51,480
this code here and now we're going to
15498
13:21:48,400 --> 13:21:55,116
share this function between checkout. JS
15499
13:21:51,480 --> 13:21:58,360
and amazon. JS so first in order to
15500
13:21:55,116 --> 13:22:01,240
share it we need to export this function
15501
13:21:58,360 --> 13:22:03,276
so at the front we're going to type
15502
13:22:01,240 --> 13:22:06,040
export and
15503
13:22:03,276 --> 13:22:08,160
save and now inside each of these files
15504
13:22:06,040 --> 13:22:12,320
we're going to to import this function
15505
13:22:08,160 --> 13:22:16,520
and use it so let's scroll to the
15506
13:22:12,320 --> 13:22:19,400
top and here we're going to import curly
15507
13:22:16,520 --> 13:22:21,956
brackets we're going to import the
15508
13:22:19,400 --> 13:22:24,560
function format
15509
13:22:21,956 --> 13:22:27,320
currency and we're going to import it
15510
13:22:24,560 --> 13:22:29,956
from single quotes and
15511
13:22:27,320 --> 13:22:33,720
semicolon and then inside here we're
15512
13:22:29,956 --> 13:22:36,160
going to locate the file money. JS so
15513
13:22:33,720 --> 13:22:39,116
here we're in the checkout. JS file
15514
13:22:36,160 --> 13:22:42,160
which is right here and to go here we're
15515
13:22:39,116 --> 13:22:45,360
first going to go into the UTS folder so
15516
13:22:42,160 --> 13:22:48,000
we're going to Type U toils and then a
15517
13:22:45,360 --> 13:22:51,680
slash to go into this folder and we're
15518
13:22:48,000 --> 13:22:53,520
going to locate the file money. JS so
15519
13:22:51,680 --> 13:22:56,560
money.
15520
13:22:53,520 --> 13:22:59,320
JS now for modules we have to do one
15521
13:22:56,560 --> 13:23:02,240
extra thing at the front of this file
15522
13:22:59,320 --> 13:23:05,320
path we need to type dot
15523
13:23:02,240 --> 13:23:07,240
slash so remember that dot dot
15524
13:23:05,320 --> 13:23:10,720
represents the folder outside the
15525
13:23:07,240 --> 13:23:12,756
current folder so for checkout. JS if we
15526
13:23:10,720 --> 13:23:14,680
go outside of this folder we're going to
15527
13:23:12,756 --> 13:23:17,320
go outside the scripts
15528
13:23:14,680 --> 13:23:20,200
folder now a single dot on the other
15529
13:23:17,320 --> 13:23:22,000
hand means the current folder so this
15530
13:23:20,200 --> 13:23:24,680
dot means we're going to go into the
15531
13:23:22,000 --> 13:23:26,756
current folder which is the scripts
15532
13:23:24,680 --> 13:23:29,080
folder and then we're going to go into
15533
13:23:26,756 --> 13:23:32,520
the utils folder and then we're going to
15534
13:23:29,080 --> 13:23:35,756
go and locate money.
15535
13:23:32,520 --> 13:23:38,200
JS so for modules if we want to start in
15536
13:23:35,756 --> 13:23:41,560
the current f folder our file paths have
15537
13:23:38,200 --> 13:23:44,160
to start with Slash so that's one extra
15538
13:23:41,560 --> 13:23:46,320
thing that we have to do so now that
15539
13:23:44,160 --> 13:23:48,916
we've imported the format currency
15540
13:23:46,320 --> 13:23:51,680
function let's use it in the rest of our
15541
13:23:48,916 --> 13:23:55,116
code so we're going to scroll
15542
13:23:51,680 --> 13:23:57,116
down to here and instead of writing this
15543
13:23:55,116 --> 13:24:00,640
all over again we're just going to use
15544
13:23:57,116 --> 13:24:03,596
the function format
15545
13:24:00,640 --> 13:24:05,360
currency and then brackets and we're
15546
13:24:03,596 --> 13:24:10,436
going to remove the rest of the code
15547
13:24:05,360 --> 13:24:13,040
here and and close bracket and
15548
13:24:10,436 --> 13:24:15,560
save so we're basically running the same
15549
13:24:13,040 --> 13:24:18,880
code except we're using this shared
15550
13:24:15,560 --> 13:24:20,436
function that's located in another file
15551
13:24:18,880 --> 13:24:23,240
so let's open our
15552
13:24:20,436 --> 13:24:24,680
project and we can see that the price is
15553
13:24:23,240 --> 13:24:26,880
still displaying
15554
13:24:24,680 --> 13:24:28,796
correctly so now let's go back into our
15555
13:24:26,880 --> 13:24:32,480
code and we're going to share this
15556
13:24:28,796 --> 13:24:34,720
function inside amazon. JS as well so
15557
13:24:32,480 --> 13:24:38,000
let's open amazon.
15558
13:24:34,720 --> 13:24:40,276
JS and then we'll scroll to where we
15559
13:24:38,000 --> 13:24:42,756
show the price which is here and we're
15560
13:24:40,276 --> 13:24:44,840
going to use this function again so
15561
13:24:42,756 --> 13:24:49,720
first we have to import it so we'll
15562
13:24:44,840 --> 13:24:53,200
scroll up to the top and import curly
15563
13:24:49,720 --> 13:24:54,956
brackets we'll import the function
15564
13:24:53,200 --> 13:24:59,240
format
15565
13:24:54,956 --> 13:25:02,160
currency and we'll import it from single
15566
13:24:59,240 --> 13:25:05,560
quotes semicolon and then here we'll
15567
13:25:02,160 --> 13:25:07,956
locate the file money. JS so remember
15568
13:25:05,560 --> 13:25:12,160
for module if we want to start in the
15569
13:25:07,956 --> 13:25:14,956
current folder we have to type slash and
15570
13:25:12,160 --> 13:25:18,680
then we're going to go to the UIL folder
15571
13:25:14,956 --> 13:25:21,320
so utils and then a slash to go inside
15572
13:25:18,680 --> 13:25:24,160
the folder and locate the
15573
13:25:21,320 --> 13:25:26,360
file money.
15574
13:25:24,160 --> 13:25:29,160
JS and now we're going to use this
15575
13:25:26,360 --> 13:25:31,400
function so let's scroll
15576
13:25:29,160 --> 13:25:36,436
down and we're going to replace this
15577
13:25:31,400 --> 13:25:38,720
code and use format currency and
15578
13:25:36,436 --> 13:25:41,680
brackets so we can remove the rest of
15579
13:25:38,720 --> 13:25:44,640
the code here and
15580
13:25:41,680 --> 13:25:47,200
save and now let's look at our
15581
13:25:44,640 --> 13:25:48,360
project and we'll click up here to go
15582
13:25:47,200 --> 13:25:50,880
back to the
15583
13:25:48,360 --> 13:25:53,840
homepage and you can see that the prices
15584
13:25:50,880 --> 13:25:56,680
are displaying as two decimal
15585
13:25:53,840 --> 13:25:59,756
places and that's it if we look at our
15586
13:25:56,680 --> 13:26:03,040
code again we're essentially taking this
15587
13:25:59,756 --> 13:26:06,320
function and sharing it across two files
15588
13:26:03,040 --> 13:26:10,200
using modules so using modules we can re
15589
13:26:06,320 --> 13:26:12,916
use a lot of our code and reduce
15590
13:26:10,200 --> 13:26:15,520
repetition next let's work on the second
15591
13:26:12,916 --> 13:26:18,276
issue that we saw earlier so we'll go
15592
13:26:15,520 --> 13:26:21,160
back to our project and click the top
15593
13:26:18,276 --> 13:26:23,756
right to go back to the checkout page
15594
13:26:21,160 --> 13:26:26,680
and then here the delivery options are
15595
13:26:23,756 --> 13:26:28,720
shared between the two products but we
15596
13:26:26,680 --> 13:26:30,320
want each product to choose its own
15597
13:26:28,720 --> 13:26:33,000
delivery
15598
13:26:30,320 --> 13:26:36,276
options so to fix that let's go back
15599
13:26:33,000 --> 13:26:39,640
into our code and just going to resize a
15600
13:26:36,276 --> 13:26:43,796
here so we can see it side by
15601
13:26:39,640 --> 13:26:47,040
side and we'll open checkout. JS again
15602
13:26:43,796 --> 13:26:47,040
and we can close this for
15603
13:26:48,240 --> 13:26:55,200
now so this is an HTML element called a
15604
13:26:52,160 --> 13:26:58,116
radial selector and here's the code for
15605
13:26:55,200 --> 13:27:01,200
a radial selector so the way that radial
15606
13:26:58,116 --> 13:27:03,720
selectors work is that if a set of radio
15607
13:27:01,200 --> 13:27:06,880
selectors have the same name then we can
15608
13:27:03,720 --> 13:27:08,916
only select one of them so for example
15609
13:27:06,880 --> 13:27:11,436
if these three radio selectors have the
15610
13:27:08,916 --> 13:27:14,436
same name attribute then we can only
15611
13:27:11,436 --> 13:27:16,916
select one of them now if the three at
15612
13:27:14,436 --> 13:27:19,320
the top have one name and the three at
15613
13:27:16,916 --> 13:27:21,880
the bottom have a different name then we
15614
13:27:19,320 --> 13:27:25,276
can select one from the first three as
15615
13:27:21,880 --> 13:27:27,640
well as one from the second
15616
13:27:25,276 --> 13:27:30,720
three now what's the problem with the
15617
13:27:27,640 --> 13:27:33,596
radial selectors here well let's take a
15618
13:27:30,720 --> 13:27:35,436
look at the code for these selectors to
15619
13:27:33,596 --> 13:27:38,320
do that we're going to rightclick one of
15620
13:27:35,436 --> 13:27:41,916
them and then
15621
13:27:38,320 --> 13:27:43,840
inspect and then click the top left and
15622
13:27:41,916 --> 13:27:47,320
click one of these selectors to get the
15623
13:27:43,840 --> 13:27:49,756
HTML code so here we have the code for
15624
13:27:47,320 --> 13:27:52,080
the radio selector and you can see that
15625
13:27:49,756 --> 13:27:54,796
the name of the selector is delivery
15626
13:27:52,080 --> 13:27:58,276
option one and now if we click the top
15627
13:27:54,796 --> 13:28:00,560
left again and find one of these bottom
15628
13:27:58,276 --> 13:28:03,956
selectors you'll notice that these also
15629
13:28:00,560 --> 13:28:06,080
have the name delivery option one so all
15630
13:28:03,956 --> 13:28:08,400
six of these have the same name at
15631
13:28:06,080 --> 13:28:11,796
attribute that's why we can only select
15632
13:28:08,400 --> 13:28:14,276
one of these six at a time so what we
15633
13:28:11,796 --> 13:28:17,040
actually want to do is we want the first
15634
13:28:14,276 --> 13:28:19,000
three selectors to have one name and the
15635
13:28:17,040 --> 13:28:21,640
second three selectors to have a
15636
13:28:19,000 --> 13:28:25,040
different name so let's figure out how
15637
13:28:21,640 --> 13:28:27,956
to give these a different name so inside
15638
13:28:25,040 --> 13:28:30,840
the console we can see the code for this
15639
13:28:27,956 --> 13:28:32,720
selector and we have a name attribute
15640
13:28:30,840 --> 13:28:35,320
delivery D
15641
13:28:32,720 --> 13:28:38,480
option-1 so let's actually find this
15642
13:28:35,320 --> 13:28:41,756
name in our code so we'll go to our code
15643
13:28:38,480 --> 13:28:45,756
editor and contrl F or command F to
15644
13:28:41,756 --> 13:28:49,520
search for code and we'll search for
15645
13:28:45,756 --> 13:28:52,160
delivery Das
15646
13:28:49,520 --> 13:28:54,720
option-1 and if we scroll
15647
13:28:52,160 --> 13:28:57,116
down you'll notice that every time we're
15648
13:28:54,720 --> 13:28:59,360
generating these radio selectors we're
15649
13:28:57,116 --> 13:29:02,400
always using the same name delivery
15650
13:28:59,360 --> 13:29:04,200
option one so every product is going to
15651
13:29:02,400 --> 13:29:06,320
have the same name for the radio
15652
13:29:04,200 --> 13:29:09,640
selectors and all of these are going to
15653
13:29:06,320 --> 13:29:11,796
be shared so what we actually want to do
15654
13:29:09,640 --> 13:29:14,840
is instead of using the name delivery
15655
13:29:11,796 --> 13:29:17,000
option one every time each product is
15656
13:29:14,840 --> 13:29:17,756
going to use a different name for these
15657
13:29:17,000 --> 13:29:20,840
three
15658
13:29:17,756 --> 13:29:23,436
selectors so one way we can do that is
15659
13:29:20,840 --> 13:29:26,080
instead of the number one every time we
15660
13:29:23,436 --> 13:29:28,880
can replace it with the product's ID
15661
13:29:26,080 --> 13:29:32,200
because the ID is always unique for each
15662
13:29:28,880 --> 13:29:33,560
product so let's substitute using dollar
15663
13:29:32,200 --> 13:29:37,116
and curly
15664
13:29:33,560 --> 13:29:40,360
brackets the product
15665
13:29:37,116 --> 13:29:42,360
ID and then down here as well instead of
15666
13:29:40,360 --> 13:29:43,596
using the name one every time we're
15667
13:29:42,360 --> 13:29:46,400
going to
15668
13:29:43,596 --> 13:29:48,956
substitute
15669
13:29:46,400 --> 13:29:52,720
product. and
15670
13:29:48,956 --> 13:29:56,000
actually we use the name matching
15671
13:29:52,720 --> 13:29:59,956
product so we'll scroll down and just
15672
13:29:56,000 --> 13:30:04,756
update this to matching
15673
13:29:59,956 --> 13:30:07,796
product and then down here matching
15674
13:30:04,756 --> 13:30:09,756
product and and as well down here
15675
13:30:07,796 --> 13:30:15,640
instead of one every
15676
13:30:09,756 --> 13:30:17,480
time substitute the matching product. ID
15677
13:30:15,640 --> 13:30:21,040
and
15678
13:30:17,480 --> 13:30:23,520
save so now these three radial selectors
15679
13:30:21,040 --> 13:30:26,160
will have a different name attribute
15680
13:30:23,520 --> 13:30:28,436
than these three radial selectors that
15681
13:30:26,160 --> 13:30:33,436
means we can select one out of these
15682
13:30:28,436 --> 13:30:36,520
three and we can select one out of these
15683
13:30:33,436 --> 13:30:38,756
three so that's how we fix that error
15684
13:30:36,520 --> 13:30:40,796
instead of using the same name delivery
15685
13:30:38,756 --> 13:30:44,436
option one every time we're going to
15686
13:30:40,796 --> 13:30:46,916
generate a name using the product's ID
15687
13:30:44,436 --> 13:30:51,276
so let's go into get and save our
15688
13:30:46,916 --> 13:30:53,880
changes so in amazon. JS we imported
15689
13:30:51,276 --> 13:30:56,956
this shared function and we used it to
15690
13:30:53,880 --> 13:30:59,956
format the price in two decimal places
15691
13:30:56,956 --> 13:31:01,680
and then in checkout. JS we also used
15692
13:30:59,956 --> 13:31:06,240
the shared function
15693
13:31:01,680 --> 13:31:08,720
here and we fix the radio selectors
15694
13:31:06,240 --> 13:31:10,680
and then in this file
15695
13:31:08,720 --> 13:31:13,116
moneyjar
15696
13:31:10,680 --> 13:31:17,796
function so let's create a message to
15697
13:31:13,116 --> 13:31:21,680
describe our changes fix price
15698
13:31:17,796 --> 13:31:25,040
formatting and radio
15699
13:31:21,680 --> 13:31:25,040
selectors and
15700
13:31:28,160 --> 13:31:33,000
commit the last step in our process is
15701
13:31:30,756 --> 13:31:35,040
to make it
15702
13:31:33,000 --> 13:31:37,756
interactive so I'm just going to close
15703
13:31:35,040 --> 13:31:40,000
these for now
15704
13:31:37,756 --> 13:31:42,796
and going to move it to the right again
15705
13:31:40,000 --> 13:31:42,796
so we can see our
15706
13:31:46,880 --> 13:31:51,160
project and for the order summary
15707
13:31:49,400 --> 13:31:53,596
there's a few things we can make
15708
13:31:51,160 --> 13:31:56,320
interactive for now we're going to start
15709
13:31:53,596 --> 13:31:58,720
with this delete link when we click this
15710
13:31:56,320 --> 13:32:00,680
link it should remove this product from
15711
13:31:58,720 --> 13:32:01,756
the cart so we're going to learn how to
15712
13:32:00,680 --> 13:32:05,360
build
15713
13:32:01,756 --> 13:32:08,080
this so let's go back to our code and
15714
13:32:05,360 --> 13:32:11,116
first let's add event listeners to all
15715
13:32:08,080 --> 13:32:12,956
of these delete links to do that we're
15716
13:32:11,116 --> 13:32:17,000
going to find the code for these delete
15717
13:32:12,956 --> 13:32:19,880
links so we'll rightclick
15718
13:32:17,000 --> 13:32:21,840
inspect and then in here this is the
15719
13:32:19,880 --> 13:32:26,160
code so we're going to search for this
15720
13:32:21,840 --> 13:32:30,436
class in our code editor delete quantity
15721
13:32:26,160 --> 13:32:33,240
dlink so in here let's open checkout. JS
15722
13:32:30,436 --> 13:32:38,000
and we're going to contrl f or command F
15723
13:32:33,240 --> 13:32:40,160
and search for delete - quantity
15724
13:32:38,000 --> 13:32:43,080
dlink which is right
15725
13:32:40,160 --> 13:32:45,276
here next we're going to add a class to
15726
13:32:43,080 --> 13:32:48,320
these elements so we can add event
15727
13:32:45,276 --> 13:32:50,000
listeners so at the end here let's add a
15728
13:32:48,320 --> 13:32:52,720
class
15729
13:32:50,000 --> 13:32:55,436
js- delete
15730
13:32:52,720 --> 13:32:58,240
daslink and
15731
13:32:55,436 --> 13:33:01,040
save and then at the bottom we're going
15732
13:32:58,240 --> 13:33:02,796
to scroll down and then out here we're
15733
13:33:01,040 --> 13:33:05,480
going to add the event
15734
13:33:02,796 --> 13:33:09,796
listeners so first we're going to select
15735
13:33:05,480 --> 13:33:15,480
all the delete links on the page using
15736
13:33:09,796 --> 13:33:17,436
document. query selector all brackets
15737
13:33:15,480 --> 13:33:20,840
and then a string and we're going to
15738
13:33:17,436 --> 13:33:24,520
select a class using Dot and the class
15739
13:33:20,840 --> 13:33:26,596
js- delete
15740
13:33:24,520 --> 13:33:31,520
daslink and then we're going to Loop
15741
13:33:26,596 --> 13:33:34,480
through all these links so dot for each
15742
13:33:31,520 --> 13:33:37,320
brackets and a
15743
13:33:34,480 --> 13:33:40,400
function and and in here it will give us
15744
13:33:37,320 --> 13:33:42,360
the link every time and then for each of
15745
13:33:40,400 --> 13:33:44,400
these links we're going to add an event
15746
13:33:42,360 --> 13:33:46,040
listener so
15747
13:33:44,400 --> 13:33:47,880
link.
15748
13:33:46,040 --> 13:33:49,400
addevent
15749
13:33:47,880 --> 13:33:51,520
listener
15750
13:33:49,400 --> 13:33:53,520
brackets and here we're going to give a
15751
13:33:51,520 --> 13:33:56,000
string and the event we want to listen
15752
13:33:53,520 --> 13:33:58,436
for which is a
15753
13:33:56,000 --> 13:34:01,956
click and then a function that we want
15754
13:33:58,436 --> 13:34:04,640
to run when we click these links so for
15755
13:34:01,956 --> 13:34:07,480
now let's just
15756
13:34:04,640 --> 13:34:10,276
console.log string delete to make sure
15757
13:34:07,480 --> 13:34:13,480
that it's working so we'll save
15758
13:34:10,276 --> 13:34:16,640
this and then in here we click these
15759
13:34:13,480 --> 13:34:19,040
delete links and then open the console
15760
13:34:16,640 --> 13:34:20,796
right click
15761
13:34:19,040 --> 13:34:24,240
inspect
15762
13:34:20,796 --> 13:34:27,320
console we can see that it's working now
15763
13:34:24,240 --> 13:34:27,320
so now let's go back to our
15764
13:34:27,840 --> 13:34:33,080
code so when we click delete we're going
15765
13:34:30,436 --> 13:34:34,680
to do two steps the first step is we're
15766
13:34:33,080 --> 13:34:37,360
going to remove the product from the
15767
13:34:34,680 --> 13:34:40,436
cart and the second step is we're also
15768
13:34:37,360 --> 13:34:43,040
going to update our HTML and remove the
15769
13:34:40,436 --> 13:34:45,480
product from the page so let's start
15770
13:34:43,040 --> 13:34:48,080
with the first step so when we click
15771
13:34:45,480 --> 13:34:50,520
delete how do we know which product we
15772
13:34:48,080 --> 13:34:53,080
need to remove from the
15773
13:34:50,520 --> 13:34:55,840
cart so we learned how to do this for
15774
13:34:53,080 --> 13:34:59,560
the added to cart button we can attach
15775
13:34:55,840 --> 13:35:01,956
the product's ID to the link element so
15776
13:34:59,560 --> 13:35:06,116
let's scroll up again to where the
15777
13:35:01,956 --> 13:35:08,520
delete link is which is right here and
15778
13:35:06,116 --> 13:35:12,080
we're going to attach the products ID to
15779
13:35:08,520 --> 13:35:15,320
this element using a data attribute so
15780
13:35:12,080 --> 13:35:17,956
at the end here we're going to add
15781
13:35:15,320 --> 13:35:21,400
data-
15782
13:35:17,956 --> 13:35:23,840
product-id equals double quotes and then
15783
13:35:21,400 --> 13:35:27,520
here we'll
15784
13:35:23,840 --> 13:35:30,840
substitute the matching
15785
13:35:27,520 --> 13:35:33,040
product. ID and
15786
13:35:30,840 --> 13:35:35,880
save and now that we attached the
15787
13:35:33,040 --> 13:35:40,436
product ID to this element we can get it
15788
13:35:35,880 --> 13:35:43,680
in our JavaScript below so let's scroll
15789
13:35:40,436 --> 13:35:47,160
down and then here we're going to delete
15790
13:35:43,680 --> 13:35:51,640
this line and using the link element we
15791
13:35:47,160 --> 13:35:54,956
can get that product ID using link. dat
15792
13:35:51,640 --> 13:35:58,360
set to access the data attributes and
15793
13:35:54,956 --> 13:36:01,200
we're going to access product
15794
13:35:58,360 --> 13:36:04,880
ID and let's save this in a variable so
15795
13:36:01,200 --> 13:36:07,040
we can use it later so const product ID
15796
13:36:04,880 --> 13:36:09,400
equals this
15797
13:36:07,040 --> 13:36:13,116
value and let's
15798
13:36:09,400 --> 13:36:15,116
console.log this to see if it
15799
13:36:13,116 --> 13:36:18,520
works and
15800
13:36:15,116 --> 13:36:20,520
save so now if we go to the project and
15801
13:36:18,520 --> 13:36:23,200
click the delete link for the first
15802
13:36:20,520 --> 13:36:26,560
product and then look at the console
15803
13:36:23,200 --> 13:36:27,796
inspect and console it will show us the
15804
13:36:26,560 --> 13:36:30,520
products
15805
13:36:27,796 --> 13:36:33,436
ID if we click the second products
15806
13:36:30,520 --> 13:36:36,916
delete link it will show us the second
15807
13:36:33,436 --> 13:36:39,916
products ID so now now we have the ID
15808
13:36:36,916 --> 13:36:42,596
that we need to remove from the cart so
15809
13:36:39,916 --> 13:36:45,200
now how do we actually do that so before
15810
13:36:42,596 --> 13:36:47,400
we begin figuring that out instead of
15811
13:36:45,200 --> 13:36:51,560
writing all the code down here let's
15812
13:36:47,400 --> 13:36:54,240
actually create a function inside C.J to
15813
13:36:51,560 --> 13:36:57,360
do this task the reason we're going to
15814
13:36:54,240 --> 13:36:59,840
do this is because cart. JS is supposed
15815
13:36:57,360 --> 13:37:02,000
to contain all the code that's related
15816
13:36:59,840 --> 13:37:04,916
to the cart so this will help us
15817
13:37:02,000 --> 13:37:07,040
organize our code better so let's open
15818
13:37:04,916 --> 13:37:09,400
our files again again and we're going to
15819
13:37:07,040 --> 13:37:12,320
open cart.
15820
13:37:09,400 --> 13:37:14,560
JS and we're going to scroll to the
15821
13:37:12,320 --> 13:37:17,480
bottom and we're going to create a
15822
13:37:14,560 --> 13:37:21,320
function for removing a product from the
15823
13:37:17,480 --> 13:37:26,596
cart so let's type function and let's
15824
13:37:21,320 --> 13:37:27,680
name it remove from cart brackets and
15825
13:37:26,596 --> 13:37:30,436
curly
15826
13:37:27,680 --> 13:37:33,320
brackets so this function we'll take a
15827
13:37:30,436 --> 13:37:35,916
product ID which we have and remove it
15828
13:37:33,320 --> 13:37:40,400
from the cart so here let's let's create
15829
13:37:35,916 --> 13:37:42,436
a parameter for the ID product ID and
15830
13:37:40,400 --> 13:37:45,756
now in here we're going to figure out
15831
13:37:42,436 --> 13:37:49,276
how to remove it so here's one way we
15832
13:37:45,756 --> 13:37:51,956
can do this first we can create a new
15833
13:37:49,276 --> 13:37:54,956
array and then we can Loop through our
15834
13:37:51,956 --> 13:37:59,160
cart and then add each product to the
15835
13:37:54,956 --> 13:38:02,436
new array except for this product ID so
15836
13:37:59,160 --> 13:38:04,596
now let's convert these steps into code
15837
13:38:02,436 --> 13:38:08,200
so inside this function here let's
15838
13:38:04,596 --> 13:38:13,480
create a new new array using const we'll
15839
13:38:08,200 --> 13:38:15,880
call it new cart equals an empty
15840
13:38:13,480 --> 13:38:19,000
array the next step is we're going to
15841
13:38:15,880 --> 13:38:24,796
Loop through our cart so we'll type
15842
13:38:19,000 --> 13:38:27,680
cart. for each brackets and a
15843
13:38:24,796 --> 13:38:31,400
function and we'll give it a parameter
15844
13:38:27,680 --> 13:38:33,680
cart item and the last step is that
15845
13:38:31,400 --> 13:38:36,796
we're going to add each card item to the
15846
13:38:33,680 --> 13:38:41,080
new array except if it has this product
15847
13:38:36,796 --> 13:38:42,640
ID so we can do that by checking if the
15848
13:38:41,080 --> 13:38:48,276
cart
15849
13:38:42,640 --> 13:38:50,720
item. product ID is not equal to the
15850
13:38:48,276 --> 13:38:52,596
product ID that we're looking for
15851
13:38:50,720 --> 13:38:55,680
product
15852
13:38:52,596 --> 13:38:57,436
ID so if it's not equal to the product
15853
13:38:55,680 --> 13:39:03,116
we're trying to remove we're going to
15854
13:38:57,436 --> 13:39:06,116
add it to the new cart so new cart. push
15855
13:39:03,116 --> 13:39:08,436
cart item
15856
13:39:06,116 --> 13:39:11,400
so the result of this Loop is it's going
15857
13:39:08,436 --> 13:39:13,756
to contain all the cart items that don't
15858
13:39:11,400 --> 13:39:16,000
match this product ID and that's the
15859
13:39:13,756 --> 13:39:19,160
same thing as removing this from the
15860
13:39:16,000 --> 13:39:21,756
cart so now the last step is we're going
15861
13:39:19,160 --> 13:39:24,640
to take our new cart and replace the
15862
13:39:21,756 --> 13:39:28,756
cart up here so we'll scroll
15863
13:39:24,640 --> 13:39:31,956
down and then here we'll make cart equal
15864
13:39:28,756 --> 13:39:34,360
to our new
15865
13:39:31,956 --> 13:39:37,720
cart because we're reassigning this
15866
13:39:34,360 --> 13:39:42,480
variable we have to scroll up and change
15867
13:39:37,720 --> 13:39:45,200
it from const to let and
15868
13:39:42,480 --> 13:39:48,360
save so now that we created this
15869
13:39:45,200 --> 13:39:50,756
function let's use it in our checkout
15870
13:39:48,360 --> 13:39:54,956
page first we're going to use the
15871
13:39:50,756 --> 13:39:56,080
modules feature and Export this function
15872
13:39:54,956 --> 13:39:59,040
and
15873
13:39:56,080 --> 13:40:01,400
save and then inside checkout. JS we're
15874
13:39:59,040 --> 13:40:02,560
going to import this function so I'm
15875
13:40:01,400 --> 13:40:06,080
just going to move this down to the
15876
13:40:02,560 --> 13:40:09,400
bottom so we can see it side by side
15877
13:40:06,080 --> 13:40:12,840
so here so in checkout. JS we're going
15878
13:40:09,400 --> 13:40:15,240
to scroll up and we're already importing
15879
13:40:12,840 --> 13:40:18,480
from cart. JS so we're just going to
15880
13:40:15,240 --> 13:40:20,956
import one additional Thing by typing
15881
13:40:18,480 --> 13:40:26,116
comma and we're going to import this
15882
13:40:20,956 --> 13:40:28,160
function remove from cart and
15883
13:40:26,116 --> 13:40:31,880
save and then we're going to use this
15884
13:40:28,160 --> 13:40:36,200
function at the bottom so we'll scroll
15885
13:40:31,880 --> 13:40:40,400
down and then here we're going to
15886
13:40:36,200 --> 13:40:42,520
remove from cart brackets and we're
15887
13:40:40,400 --> 13:40:46,400
going to give it the product ID we want
15888
13:40:42,520 --> 13:40:50,200
to remove so product
15889
13:40:46,400 --> 13:40:52,720
ID and lastly let's just console.log the
15890
13:40:50,200 --> 13:40:56,160
cart to make sure that this works so
15891
13:40:52,720 --> 13:40:59,116
console.log the card and
15892
13:40:56,160 --> 13:41:01,520
save so now let's go into our
15893
13:40:59,116 --> 13:41:04,240
project and we're going to click this
15894
13:41:01,520 --> 13:41:07,560
delete link for the first product so
15895
13:41:04,240 --> 13:41:11,320
delete and let's open the console right
15896
13:41:07,560 --> 13:41:13,200
click inspect the console and now it's
15897
13:41:11,320 --> 13:41:15,880
going to show us that we have one
15898
13:41:13,200 --> 13:41:18,200
product remaining in the cart and this
15899
13:41:15,880 --> 13:41:20,640
product has a quantity of one which is
15900
13:41:18,200 --> 13:41:23,520
the second product here so by clicking
15901
13:41:20,640 --> 13:41:26,840
that delete link We successfully removed
15902
13:41:23,520 --> 13:41:29,480
this product from the cart so now if we
15903
13:41:26,840 --> 13:41:30,400
refresh and tried clicking the second
15904
13:41:29,480 --> 13:41:33,596
delete
15905
13:41:30,400 --> 13:41:36,916
link and look at the
15906
13:41:33,596 --> 13:41:38,956
console and then EXP expand the cart it
15907
13:41:36,916 --> 13:41:41,200
will tell us that the remaining product
15908
13:41:38,956 --> 13:41:44,000
has a quantity of two which is this
15909
13:41:41,200 --> 13:41:45,956
product so we successfully removed the
15910
13:41:44,000 --> 13:41:48,200
second product from the cart when we
15911
13:41:45,956 --> 13:41:51,160
clicked
15912
13:41:48,200 --> 13:41:54,040
delete so now let's go into get and look
15913
13:41:51,160 --> 13:41:56,756
at our changes so we'll go into this
15914
13:41:54,040 --> 13:41:59,880
section well I can close this for now
15915
13:41:56,756 --> 13:42:03,640
and we'll open git and it will tell us
15916
13:41:59,880 --> 13:42:06,116
that in C.J we change it to let and we
15917
13:42:03,640 --> 13:42:09,596
created this new remove from cart
15918
13:42:06,116 --> 13:42:12,756
function and then in checkout. JS we
15919
13:42:09,596 --> 13:42:15,596
import that function and then at the
15920
13:42:12,756 --> 13:42:17,320
bottom when we click the delete link
15921
13:42:15,596 --> 13:42:21,160
we're going to remove this product from
15922
13:42:17,320 --> 13:42:24,240
the cart now finally we can remove this
15923
13:42:21,160 --> 13:42:26,880
console.log save and we're going to put
15924
13:42:24,240 --> 13:42:28,560
these changes into git so we'll type a
15925
13:42:26,880 --> 13:42:34,436
message to describe our
15926
13:42:28,560 --> 13:42:35,720
changes delete products from cart when
15927
13:42:34,436 --> 13:42:39,160
clicking
15928
13:42:35,720 --> 13:42:39,160
delete and
15929
13:42:41,040 --> 13:42:46,640
commit the second thing we have to do
15930
13:42:43,400 --> 13:42:49,560
when we click delete is to update our
15931
13:42:46,640 --> 13:42:52,840
HTML so if we go back to our
15932
13:42:49,560 --> 13:42:56,400
project when we click delete we want to
15933
13:42:52,840 --> 13:42:59,200
remove this product from the page so one
15934
13:42:56,400 --> 13:43:01,560
way we can do this is first we're going
15935
13:42:59,200 --> 13:43:04,040
to use the Dom to get the element we
15936
13:43:01,560 --> 13:43:05,840
want to remove and then we can use a
15937
13:43:04,040 --> 13:43:08,276
method called
15938
13:43:05,840 --> 13:43:11,560
remove so every element that we get from
15939
13:43:08,276 --> 13:43:15,276
the Dom has a method called remove which
15940
13:43:11,560 --> 13:43:17,640
removes it from the page so first of all
15941
13:43:15,276 --> 13:43:20,116
how do we know which element to get from
15942
13:43:17,640 --> 13:43:22,956
the page so let's actually look at the
15943
13:43:20,116 --> 13:43:24,040
HTML for one of these products we're
15944
13:43:22,956 --> 13:43:25,916
going to
15945
13:43:24,040 --> 13:43:29,520
rightclick
15946
13:43:25,916 --> 13:43:31,916
inspect and then click the top left and
15947
13:43:29,520 --> 13:43:35,276
then click one of these products
15948
13:43:31,916 --> 13:43:37,240
here and this will give us the HTML so
15949
13:43:35,276 --> 13:43:40,200
these two products are represented by
15950
13:43:37,240 --> 13:43:41,840
these two divs here with the class
15951
13:43:40,200 --> 13:43:44,680
cart--
15952
13:43:41,840 --> 13:43:47,320
container so one way to identify which
15953
13:43:44,680 --> 13:43:49,756
product this is for is to add a special
15954
13:43:47,320 --> 13:43:51,880
class to this element and this class
15955
13:43:49,756 --> 13:43:55,720
will contain the product
15956
13:43:51,880 --> 13:43:59,756
ID and then if we go back to our code
15957
13:43:55,720 --> 13:44:01,116
and we open checkout. JS and scroll to
15958
13:43:59,756 --> 13:44:04,520
the
15959
13:44:01,116 --> 13:44:07,400
bottom when we click delete we have the
15960
13:44:04,520 --> 13:44:09,276
product ID here so we can use this to
15961
13:44:07,400 --> 13:44:12,680
select that special class that we're
15962
13:44:09,276 --> 13:44:15,680
going to add so first let's add that
15963
13:44:12,680 --> 13:44:18,360
special class to each of these elements
15964
13:44:15,680 --> 13:44:20,756
so we're going to scroll up to the
15965
13:44:18,360 --> 13:44:24,680
HTML and we're going to go to the top
15966
13:44:20,756 --> 13:44:27,080
here to the div cart--
15967
13:44:24,680 --> 13:44:29,116
container and then here we'll add a
15968
13:44:27,080 --> 13:44:35,560
special class
15969
13:44:29,116 --> 13:44:38,880
js- cart Das item Das container Das and
15970
13:44:35,560 --> 13:44:40,796
then we'll substitute the product's ID
15971
13:44:38,880 --> 13:44:42,560
so we'll type the
15972
13:44:40,796 --> 13:44:44,520
matching
15973
13:44:42,560 --> 13:44:46,796
product.
15974
13:44:44,520 --> 13:44:48,956
ID and let's put this class on a
15975
13:44:46,796 --> 13:44:51,116
separate line so the line is not too
15976
13:44:48,956 --> 13:44:53,276
long now let's
15977
13:44:51,116 --> 13:44:56,116
save and now we're going to scroll to
15978
13:44:53,276 --> 13:44:58,190
the bottom and use our code to get this
15979
13:44:56,116 --> 13:45:00,080
class so we'll scroll to the
15980
13:44:58,190 --> 13:45:02,480
[Music]
15981
13:45:00,080 --> 13:45:05,640
bottom and here we're going to use the
15982
13:45:02,480 --> 13:45:08,880
Dom as well as this product ID to get
15983
13:45:05,640 --> 13:45:12,756
that special class that we just added
15984
13:45:08,880 --> 13:45:17,320
above so here we can type
15985
13:45:12,756 --> 13:45:20,116
document. query selector brackets and
15986
13:45:17,320 --> 13:45:24,160
then inside we'll type a string and
15987
13:45:20,116 --> 13:45:29,480
we'll select the class using a DOT js-
15988
13:45:24,160 --> 13:45:32,680
cart D item D container Dash and then
15989
13:45:29,480 --> 13:45:34,360
we're going to substitute the product ID
15990
13:45:32,680 --> 13:45:36,560
so because we want to insert something
15991
13:45:34,360 --> 13:45:38,796
in here we're going to switch this to a
15992
13:45:36,560 --> 13:45:42,240
template string using
15993
13:45:38,796 --> 13:45:44,880
backtick and now we can substitute this
15994
13:45:42,240 --> 13:45:47,840
product ID into this
15995
13:45:44,880 --> 13:45:51,276
string product
15996
13:45:47,840 --> 13:45:53,200
ID so by creating the string like this
15997
13:45:51,276 --> 13:45:56,400
we're able to select the specific
15998
13:45:53,200 --> 13:45:58,360
container that we need so now let's save
15999
13:45:56,400 --> 13:46:03,000
this in a variable so we can use it
16000
13:45:58,360 --> 13:46:05,400
later so const container equals this
16001
13:46:03,000 --> 13:46:09,880
result so for now let's let's actually
16002
13:46:05,400 --> 13:46:12,116
console.log this to see if it works
16003
13:46:09,880 --> 13:46:14,320
console.log
16004
13:46:12,116 --> 13:46:16,480
container and
16005
13:46:14,320 --> 13:46:19,160
save and then we'll go back to our
16006
13:46:16,480 --> 13:46:22,400
project so just move this
16007
13:46:19,160 --> 13:46:25,040
here and then in our project if we click
16008
13:46:22,400 --> 13:46:28,320
delete on the first product and then
16009
13:46:25,040 --> 13:46:31,040
check the console right click inspect
16010
13:46:28,320 --> 13:46:32,756
and the console you can see that we're
16011
13:46:31,040 --> 13:46:36,080
getting the correct element that we
16012
13:46:32,756 --> 13:46:39,756
should delete if we go out here and
16013
13:46:36,080 --> 13:46:42,276
click this delete link and check the
16014
13:46:39,756 --> 13:46:44,240
console you can see that this is also
16015
13:46:42,276 --> 13:46:45,796
getting us the correct element that we
16016
13:46:44,240 --> 13:46:48,240
want to
16017
13:46:45,796 --> 13:46:50,880
delete so now that we have the element
16018
13:46:48,240 --> 13:46:54,680
we want to delete the next step is to
16019
13:46:50,880 --> 13:46:57,040
use the do remove method so again every
16020
13:46:54,680 --> 13:46:59,360
element we get with the Dom has a method
16021
13:46:57,040 --> 13:47:02,680
called do remove which will remove it
16022
13:46:59,360 --> 13:47:06,436
from the page so if we go back into our
16023
13:47:02,680 --> 13:47:08,956
code down here all we have to do is type
16024
13:47:06,436 --> 13:47:12,880
out the element
16025
13:47:08,956 --> 13:47:16,040
container. remove and brackets and this
16026
13:47:12,880 --> 13:47:20,000
will remove it from the page if we
16027
13:47:16,040 --> 13:47:22,640
save and try it out so we'll go in here
16028
13:47:20,000 --> 13:47:24,796
we'll click delete on the first product
16029
13:47:22,640 --> 13:47:27,360
and it will remove it from the
16030
13:47:24,796 --> 13:47:30,200
page if we click delete on the second
16031
13:47:27,360 --> 13:47:33,756
product it will also remove it from the
16032
13:47:30,200 --> 13:47:35,400
page so that's it now let's refresh to
16033
13:47:33,756 --> 13:47:37,360
bring the products back
16034
13:47:35,400 --> 13:47:39,640
and that's how we make the delete link
16035
13:47:37,360 --> 13:47:42,116
interactive and remove the products from
16036
13:47:39,640 --> 13:47:44,796
the cart as well as from the
16037
13:47:42,116 --> 13:47:48,680
page so now let's save our changes into
16038
13:47:44,796 --> 13:47:48,680
git we'll go to the git
16039
13:47:48,956 --> 13:47:54,916
section and it will tell us that in
16040
13:47:51,276 --> 13:47:57,596
checkout. JS at the top we added that
16041
13:47:54,916 --> 13:48:01,480
special class which contains the product
16042
13:47:57,596 --> 13:48:04,200
ID and if we scroll down to the
16043
13:48:01,480 --> 13:48:06,080
bottom we created the string which will
16044
13:48:04,200 --> 13:48:08,520
get us these specific element that we
16045
13:48:06,080 --> 13:48:11,240
want to remove and then we use the do
16046
13:48:08,520 --> 13:48:13,796
remove method so now let's create a
16047
13:48:11,240 --> 13:48:18,720
message to describe our
16048
13:48:13,796 --> 13:48:25,160
changes delete products from
16049
13:48:18,720 --> 13:48:25,160
HTML when clicking delete and
16050
13:48:28,160 --> 13:48:32,240
commit the last thing we're going to do
16051
13:48:30,200 --> 13:48:35,400
in this lesson is we're going to add
16052
13:48:32,240 --> 13:48:36,756
local storage to our cart so if we go
16053
13:48:35,400 --> 13:48:39,560
back to our
16054
13:48:36,756 --> 13:48:41,680
project if we delete some products in
16055
13:48:39,560 --> 13:48:44,360
our cart and then
16056
13:48:41,680 --> 13:48:47,240
refresh notice that our cart goes back
16057
13:48:44,360 --> 13:48:50,480
to what it was before and that's because
16058
13:48:47,240 --> 13:48:52,520
right now if we look at our code and we
16059
13:48:50,480 --> 13:48:56,400
open cart.
16060
13:48:52,520 --> 13:48:58,680
JS our cart is just a variable and
16061
13:48:56,400 --> 13:49:02,080
variables are reset when we refresh the
16062
13:48:58,680 --> 13:49:04,840
page or when we go to a different page
16063
13:49:02,080 --> 13:49:06,480
so again if we go back to our project
16064
13:49:04,840 --> 13:49:09,320
and we go to a different Page by
16065
13:49:06,480 --> 13:49:12,040
clicking the top left so on this
16066
13:49:09,320 --> 13:49:15,276
homepage we can add as many products as
16067
13:49:12,040 --> 13:49:18,276
we want to our cart and if we go back to
16068
13:49:15,276 --> 13:49:22,040
the checkout page our cart will just get
16069
13:49:18,276 --> 13:49:24,000
reset to whatever it is here so that's a
16070
13:49:22,040 --> 13:49:26,400
problem with just using a variable to
16071
13:49:24,000 --> 13:49:29,320
save our cart it gets reset when we
16072
13:49:26,400 --> 13:49:31,880
refresh the page or we go to a different
16073
13:49:29,320 --> 13:49:35,240
page to solve this problem we're going
16074
13:49:31,880 --> 13:49:37,400
to use local storage to save our cart
16075
13:49:35,240 --> 13:49:40,200
so first let's create a function for
16076
13:49:37,400 --> 13:49:43,160
saving the cart to local storage because
16077
13:49:40,200 --> 13:49:47,240
we might want to reuse this code so down
16078
13:49:43,160 --> 13:49:52,680
here let's create a function we'll call
16079
13:49:47,240 --> 13:49:54,640
it save to storage brackets and curler
16080
13:49:52,680 --> 13:49:58,200
brackets and we're just going to save
16081
13:49:54,640 --> 13:50:02,360
the cart to local storage using local
16082
13:49:58,200 --> 13:50:05,400
storage do set item
16083
13:50:02,360 --> 13:50:08,596
brackets and set item takes two
16084
13:50:05,400 --> 13:50:10,720
strings the first string is the name of
16085
13:50:08,596 --> 13:50:13,400
whatever we want to save so we're going
16086
13:50:10,720 --> 13:50:15,840
to save our cart so we're just going to
16087
13:50:13,400 --> 13:50:19,040
call this the cart and then the second
16088
13:50:15,840 --> 13:50:21,400
string is the data that we want to save
16089
13:50:19,040 --> 13:50:24,596
so remember that local storage can only
16090
13:50:21,400 --> 13:50:27,796
save strings so to save our cart we need
16091
13:50:24,596 --> 13:50:30,320
to convert it into a string first and we
16092
13:50:27,796 --> 13:50:32,240
can do that using
16093
13:50:30,320 --> 13:50:35,560
json.
16094
13:50:32,240 --> 13:50:38,596
stringify brackets and then inside we're
16095
13:50:35,560 --> 13:50:41,160
going to give it the cart so this will
16096
13:50:38,596 --> 13:50:44,520
convert the cart into a string and now
16097
13:50:41,160 --> 13:50:47,240
we can save it in local storage so now
16098
13:50:44,520 --> 13:50:49,360
let's use this function whenever we
16099
13:50:47,240 --> 13:50:51,720
update the cart we need to save it to
16100
13:50:49,360 --> 13:50:55,080
local storage so it doesn't get reset
16101
13:50:51,720 --> 13:50:58,400
when we refresh the page so here when we
16102
13:50:55,080 --> 13:51:00,596
add it to the cart at the bottom after
16103
13:50:58,400 --> 13:51:04,640
we update the cart we're going to use
16104
13:51:00,596 --> 13:51:07,956
that function we created above save to
16105
13:51:04,640 --> 13:51:10,840
to storage and
16106
13:51:07,956 --> 13:51:13,596
brackets and also in the function remove
16107
13:51:10,840 --> 13:51:16,560
from cart so this function is also
16108
13:51:13,596 --> 13:51:22,320
updating the cart so after we update the
16109
13:51:16,560 --> 13:51:25,436
cart we're also going to save to storage
16110
13:51:22,320 --> 13:51:28,640
and brackets and
16111
13:51:25,436 --> 13:51:31,080
save so now whenever we update the cart
16112
13:51:28,640 --> 13:51:33,796
we're going to save it in local
16113
13:51:31,080 --> 13:51:36,480
storage the last thing we need to do is
16114
13:51:33,796 --> 13:51:38,400
at the top at the beginning of our code
16115
13:51:36,480 --> 13:51:41,116
we need to get the cart from local
16116
13:51:38,400 --> 13:51:43,596
storage instead of using this default
16117
13:51:41,116 --> 13:51:46,276
value so let's add some new lines here
16118
13:51:43,596 --> 13:51:48,000
to separate the code for a bit and here
16119
13:51:46,276 --> 13:51:53,040
we're going to get the cart from local
16120
13:51:48,000 --> 13:51:57,916
storage and we can do that using local
16121
13:51:53,040 --> 13:52:00,796
storage. get item and brackets so get
16122
13:51:57,916 --> 13:52:03,240
item takes one string and that is the
16123
13:52:00,796 --> 13:52:04,916
name of what we saved earlier which is
16124
13:52:03,240 --> 13:52:06,200
the cart so we're going to to give it
16125
13:52:04,916 --> 13:52:08,840
the string
16126
13:52:06,200 --> 13:52:09,720
cart so this will give us the cart that
16127
13:52:08,840 --> 13:52:12,040
we
16128
13:52:09,720 --> 13:52:15,160
saved however remember that local
16129
13:52:12,040 --> 13:52:17,560
storage can only save strings so it will
16130
13:52:15,160 --> 13:52:19,680
give us the string version of our cart
16131
13:52:17,560 --> 13:52:22,480
and we need to convert it back into an
16132
13:52:19,680 --> 13:52:24,916
array to convert it back to an array we
16133
13:52:22,480 --> 13:52:31,360
can use the code
16134
13:52:24,916 --> 13:52:31,360
json. pars and brackets and close
16135
13:52:32,040 --> 13:52:37,360
bracket the last thing we need to do is
16136
13:52:34,956 --> 13:52:40,360
when we first use the website we might
16137
13:52:37,360 --> 13:52:42,796
not have a cart in local storage so if
16138
13:52:40,360 --> 13:52:46,160
we don't have a cart saved local storage
16139
13:52:42,796 --> 13:52:48,480
will give us null so in this situation
16140
13:52:46,160 --> 13:52:51,560
if this value is null we want to give
16141
13:52:48,480 --> 13:52:54,640
the cart a default value which is this
16142
13:52:51,560 --> 13:52:57,596
value below so to give the cart a
16143
13:52:54,640 --> 13:53:01,160
default value if it's empty we can use
16144
13:52:57,596 --> 13:53:04,720
an if statement by typing if brackets
16145
13:53:01,160 --> 13:53:07,436
and curly brackets and then here we can
16146
13:53:04,720 --> 13:53:10,240
check if not
16147
13:53:07,436 --> 13:53:12,560
cart so if we don't have a cart in local
16148
13:53:10,240 --> 13:53:15,756
storage this will give us
16149
13:53:12,560 --> 13:53:18,040
null in this case not null will become
16150
13:53:15,756 --> 13:53:19,520
truthy and we're going to run the code
16151
13:53:18,040 --> 13:53:22,560
in this if
16152
13:53:19,520 --> 13:53:25,640
statement so if the cart is empty we're
16153
13:53:22,560 --> 13:53:28,240
going to make the cart equal this
16154
13:53:25,640 --> 13:53:32,360
default value below so let's just select
16155
13:53:28,240 --> 13:53:35,796
this code and we'll right click cut and
16156
13:53:32,360 --> 13:53:40,200
then in here right click and
16157
13:53:35,796 --> 13:53:43,200
paste and remove the extra line and
16158
13:53:40,200 --> 13:53:46,436
save so now if the cart is empty we just
16159
13:53:43,200 --> 13:53:49,596
give it a default value if we go back to
16160
13:53:46,436 --> 13:53:52,160
our project and try out our code so
16161
13:53:49,596 --> 13:53:55,116
let's delete the first product and
16162
13:53:52,160 --> 13:53:58,276
refresh the page notice that the cart
16163
13:53:55,116 --> 13:54:01,840
gets saved and the first product remains
16164
13:53:58,276 --> 13:54:04,560
deleted if we go to the homepage and we
16165
13:54:01,840 --> 13:54:06,160
add some new products
16166
13:54:04,560 --> 13:54:09,116
and then go to our
16167
13:54:06,160 --> 13:54:12,596
cart notice that our cart is saved
16168
13:54:09,116 --> 13:54:14,680
between pages so by using local storage
16169
13:54:12,596 --> 13:54:18,200
we can save our cart even when we
16170
13:54:14,680 --> 13:54:20,596
refresh the page or go between different
16171
13:54:18,200 --> 13:54:23,520
pages so that's all we're going to build
16172
13:54:20,596 --> 13:54:26,276
in this lesson so to clean up let's
16173
13:54:23,520 --> 13:54:28,796
delete all these products in the
16174
13:54:26,276 --> 13:54:32,400
cart and then go to the
16175
13:54:28,796 --> 13:54:34,680
homepage and we'll add back two socks
16176
13:54:32,400 --> 13:54:36,360
and one basketball which which is the
16177
13:54:34,680 --> 13:54:39,680
default value of the
16178
13:54:36,360 --> 13:54:42,320
cart let's go back to the checkout
16179
13:54:39,680 --> 13:54:45,320
page and now we're done with this part
16180
13:54:42,320 --> 13:54:48,520
of the page so finally let's save our
16181
13:54:45,320 --> 13:54:51,276
changes into git we'll go to the git
16182
13:54:48,520 --> 13:54:54,400
section and it will tell us that inside
16183
13:54:51,276 --> 13:54:57,400
cart. JS we're now loading the cart from
16184
13:54:54,400 --> 13:54:58,956
local storage when we open the page if
16185
13:54:57,400 --> 13:55:01,880
the cart doesn't exist we're going to
16186
13:54:58,956 --> 13:55:04,000
give it a default value and we created a
16187
13:55:01,880 --> 13:55:04,840
function to save the cart into local
16188
13:55:04,000 --> 13:55:07,400
store
16189
13:55:04,840 --> 13:55:08,520
stage so now let's add a message to
16190
13:55:07,400 --> 13:55:17,640
describe our
16191
13:55:08,520 --> 13:55:17,640
changes save cart in local storage and
16192
13:55:19,880 --> 13:55:25,796
commit and that's the end of this lesson
16193
13:55:22,916 --> 13:55:28,080
in this lesson we learned about modules
16194
13:55:25,796 --> 13:55:31,116
which is a better way to organize our
16195
13:55:28,080 --> 13:55:34,560
code we created the checkout page in our
16196
13:55:31,116 --> 13:55:37,956
final project we learned about HTML link
16197
13:55:34,560 --> 13:55:41,116
elements and radio selectors we made the
16198
13:55:37,956 --> 13:55:43,956
delete link interactive and we saved the
16199
13:55:41,116 --> 13:55:46,596
cart in local
16200
13:55:43,956 --> 13:55:50,596
storage here are some exercises to help
16201
13:55:46,596 --> 13:55:50,596
you practice what we learned in this
16202
13:56:03,240 --> 13:56:07,240
lesson e
16203
13:56:38,040 --> 13:56:42,000
in this lesson we're going to learn
16204
13:56:39,720 --> 13:56:44,596
about external libraries and we're going
16205
13:56:42,000 --> 13:56:47,680
to finish the checkout page in our final
16206
13:56:44,596 --> 13:56:50,756
project an external library is basically
16207
13:56:47,680 --> 13:56:53,680
just code that is outside of our
16208
13:56:50,756 --> 13:56:56,276
project so far we've only been using
16209
13:56:53,680 --> 13:56:57,360
Code that is inside our project like
16210
13:56:56,276 --> 13:57:00,276
these
16211
13:56:57,360 --> 13:57:02,756
files well a lot of developers write
16212
13:57:00,276 --> 13:57:05,596
JavaScript code and then put their code
16213
13:57:02,756 --> 13:57:08,520
on the internet and we can actually load
16214
13:57:05,596 --> 13:57:11,796
their code from the internet into our
16215
13:57:08,520 --> 13:57:14,520
project and use it we call this code an
16216
13:57:11,796 --> 13:57:17,756
external library because it's code that
16217
13:57:14,520 --> 13:57:20,680
is outside of our project Let's do an
16218
13:57:17,756 --> 13:57:22,840
example and load our first external
16219
13:57:20,680 --> 13:57:24,720
Library we're going to go to the video
16220
13:57:22,840 --> 13:57:26,956
description and we're going to click
16221
13:57:24,720 --> 13:57:26,956
this
16222
13:57:29,720 --> 13:57:35,276
link for the hello external Library
16223
13:57:37,680 --> 13:57:42,596
and it will open up a page that contains
16224
13:57:40,080 --> 13:57:44,756
JavaScript code so I actually wrote this
16225
13:57:42,596 --> 13:57:47,916
code myself and you'll notice that this
16226
13:57:44,756 --> 13:57:50,320
is just normal JavaScript code we create
16227
13:57:47,916 --> 13:57:53,956
a function called hello and it just
16228
13:57:50,320 --> 13:57:56,640
console.log hello so this is called an
16229
13:57:53,956 --> 13:57:59,640
external Library it's code that is
16230
13:57:56,640 --> 13:58:02,436
outside of our project so the cool thing
16231
13:57:59,640 --> 13:58:06,000
is we can actually load this code from
16232
13:58:02,436 --> 13:58:09,276
the internet into our project so let's
16233
13:58:06,000 --> 13:58:11,240
give that a try we're going to go to our
16234
13:58:09,276 --> 13:58:12,916
project and we're going to open
16235
13:58:11,240 --> 13:58:15,840
checkout.
16236
13:58:12,916 --> 13:58:18,956
HTML and we're going to scroll to the
16237
13:58:15,840 --> 13:58:21,360
bottom and above the script tag we're
16238
13:58:18,956 --> 13:58:24,320
going to add another script tag to load
16239
13:58:21,360 --> 13:58:27,520
some code so
16240
13:58:24,320 --> 13:58:30,276
script and we'll give it a source
16241
13:58:27,520 --> 13:58:33,200
attribute and then in here instead of
16242
13:58:30,276 --> 13:58:35,880
using a fth like we've done before we're
16243
13:58:33,200 --> 13:58:38,640
going to give this a a URL of a website
16244
13:58:35,880 --> 13:58:40,680
that contains JavaScript code so if we
16245
13:58:38,640 --> 13:58:44,400
go back to our
16246
13:58:40,680 --> 13:58:47,560
browser and here the URL of this page is
16247
13:58:44,400 --> 13:58:50,596
up here so we're just going to copy this
16248
13:58:47,560 --> 13:58:51,596
right click copy and then paste it into
16249
13:58:50,596 --> 13:58:55,276
our
16250
13:58:51,596 --> 13:58:58,240
code right click and
16251
13:58:55,276 --> 13:59:00,880
paste so now the computer will get all
16252
13:58:58,240 --> 13:59:02,320
the JavaScript code from this URL or
16253
13:59:00,880 --> 13:59:04,880
from this
16254
13:59:02,320 --> 13:59:07,320
page so it's going to get all the code
16255
13:59:04,880 --> 13:59:11,560
from this page and load it into our
16256
13:59:07,320 --> 13:59:13,200
project like normal code so let's save
16257
13:59:11,560 --> 13:59:15,916
and let's give this a
16258
13:59:13,200 --> 13:59:18,320
try so this code creates a function
16259
13:59:15,916 --> 13:59:21,276
called hello so let's try running this
16260
13:59:18,320 --> 13:59:25,000
hello function in our project we'll go
16261
13:59:21,276 --> 13:59:28,000
to checkout. JS and then scroll to the
16262
13:59:25,000 --> 13:59:33,240
top and then here let's just run the
16263
13:59:28,000 --> 13:59:35,276
function hello so hello and brackets and
16264
13:59:33,240 --> 13:59:36,916
Save
16265
13:59:35,276 --> 13:59:40,240
now if we go back to our
16266
13:59:36,916 --> 13:59:44,276
project go to the checkout page and
16267
13:59:40,240 --> 13:59:46,680
check the console right click inspect
16268
13:59:44,276 --> 13:59:48,560
and the console you'll see that it
16269
13:59:46,680 --> 13:59:51,276
displayed the message
16270
13:59:48,560 --> 13:59:54,240
hello so that's how an external Library
16271
13:59:51,276 --> 13:59:57,276
works it's just code that is outside of
16272
13:59:54,240 --> 14:00:00,640
our project and we can load this code
16273
13:59:57,276 --> 14:00:03,080
using a script tag like this we just
16274
14:00:00,640 --> 14:00:04,680
give it the URL of where this code is
16275
14:00:03,080 --> 14:00:05,880
located
16276
14:00:04,680 --> 14:00:07,956
so there's two things you might be
16277
14:00:05,880 --> 14:00:10,916
wondering about how come we put the
16278
14:00:07,956 --> 14:00:13,560
script tag at the top so generally we
16279
14:00:10,916 --> 14:00:16,480
load external libraries first and then
16280
14:00:13,560 --> 14:00:19,360
we can use the library in our own code
16281
14:00:16,480 --> 14:00:22,640
below and the second thing is how do you
16282
14:00:19,360 --> 14:00:24,720
put code on the internet like this to
16283
14:00:22,640 --> 14:00:27,200
learn this you can check out my video on
16284
14:00:24,720 --> 14:00:29,360
how to put a website on the internet
16285
14:00:27,200 --> 14:00:33,000
it'll show you how to put any file like
16286
14:00:29,360 --> 14:00:34,640
HTML CSS and JavaScript files onto a
16287
14:00:33,000 --> 14:00:37,756
website like this
16288
14:00:34,640 --> 14:00:40,680
this next let's talk about why we use
16289
14:00:37,756 --> 14:00:43,756
external libraries external libraries
16290
14:00:40,680 --> 14:00:46,596
let us share code instead of writing all
16291
14:00:43,756 --> 14:00:48,756
the code ourselves we can use code that
16292
14:00:46,596 --> 14:00:52,160
other people wrote and this helps us
16293
14:00:48,756 --> 14:00:54,040
save time and avoid duplicating work
16294
14:00:52,160 --> 14:00:56,596
right now we're loading a very simple
16295
14:00:54,040 --> 14:00:58,956
Library so let's load a more complex
16296
14:00:56,596 --> 14:01:02,116
library to show how we can save a lot of
16297
14:00:58,956 --> 14:01:05,756
time and work let's go back to our
16298
14:01:02,116 --> 14:01:08,680
project and go to the checkout
16299
14:01:05,756 --> 14:01:11,400
page here we have a section for choosing
16300
14:01:08,680 --> 14:01:13,276
a delivery option for this product and
16301
14:01:11,400 --> 14:01:15,560
you'll notice that each option has a
16302
14:01:13,276 --> 14:01:18,360
date so this is the date that the
16303
14:01:15,560 --> 14:01:20,360
product should be delivered by so the
16304
14:01:18,360 --> 14:01:24,400
way this works is that the cheapest
16305
14:01:20,360 --> 14:01:27,880
option here takes 7 days to deliver the
16306
14:01:24,400 --> 14:01:28,560
$4.99 option takes 3 days to deliver and
16307
14:01:27,880 --> 14:01:32,400
the
16308
14:01:28,560 --> 14:01:35,000
$9.99 option takes one day to deliver so
16309
14:01:32,400 --> 14:01:37,916
to get these dates here we need to do
16310
14:01:35,000 --> 14:01:41,080
three things first we need to somehow
16311
14:01:37,916 --> 14:01:43,480
get today's date in our JavaScript
16312
14:01:41,080 --> 14:01:46,400
number two we need to do calculations
16313
14:01:43,480 --> 14:01:49,680
with the date such as ADD seven days or
16314
14:01:46,400 --> 14:01:52,000
add 3 days and number three we need to
16315
14:01:49,680 --> 14:01:53,680
display the date in an easyto read
16316
14:01:52,000 --> 14:01:56,160
format like
16317
14:01:53,680 --> 14:01:58,400
this now we could try to figure out how
16318
14:01:56,160 --> 14:02:00,596
to do this ourselves by writing our own
16319
14:01:58,400 --> 14:02:03,400
code but this is going to be a lot of
16320
14:02:00,596 --> 14:02:06,756
work instead we can use an external
16321
14:02:03,400 --> 14:02:08,276
Library to help us work with dates so in
16322
14:02:06,756 --> 14:02:11,796
this project we're going to use an
16323
14:02:08,276 --> 14:02:14,320
external Library called DJs this is a
16324
14:02:11,796 --> 14:02:19,080
popular library that helps us work with
16325
14:02:14,320 --> 14:02:21,320
dates so first let's load DJs into our
16326
14:02:19,080 --> 14:02:25,436
project we're going to go to the video
16327
14:02:21,320 --> 14:02:25,436
description and we'll click this
16328
14:02:28,596 --> 14:02:34,436
link for the DJs external Library
16329
14:02:35,596 --> 14:02:40,116
and when the page opens you'll see a
16330
14:02:37,596 --> 14:02:42,320
bunch of random code here now you might
16331
14:02:40,116 --> 14:02:44,436
think that this is some special code but
16332
14:02:42,320 --> 14:02:47,080
this is actually just regular JavaScript
16333
14:02:44,436 --> 14:02:49,240
code that has been compressed so
16334
14:02:47,080 --> 14:02:51,480
basically all the extra spaces have been
16335
14:02:49,240 --> 14:02:53,116
removed and the variable names have been
16336
14:02:51,480 --> 14:02:56,160
shortened to one
16337
14:02:53,116 --> 14:02:58,640
letter we can press JavaScript code like
16338
14:02:56,160 --> 14:03:02,000
this because we need to load this code
16339
14:02:58,640 --> 14:03:04,116
from the internet into our project by
16340
14:03:02,000 --> 14:03:06,956
compressing it it makes this code
16341
14:03:04,116 --> 14:03:09,680
smaller so it will load into our project
16342
14:03:06,956 --> 14:03:14,116
faster so this compression process is
16343
14:03:09,680 --> 14:03:17,000
called minification or we Minify the
16344
14:03:14,116 --> 14:03:20,480
code okay so this is the code for the
16345
14:03:17,000 --> 14:03:23,400
external Library DJs now let's load this
16346
14:03:20,480 --> 14:03:24,480
code into our project we'll go back to
16347
14:03:23,400 --> 14:03:27,276
our
16348
14:03:24,480 --> 14:03:29,796
code and then go to checkout.
16349
14:03:27,276 --> 14:03:33,916
HTML and then here we're going to add
16350
14:03:29,796 --> 14:03:36,200
another script tag less than script and
16351
14:03:33,916 --> 14:03:38,480
the source
16352
14:03:36,200 --> 14:03:41,040
attribute and then here we're going to
16353
14:03:38,480 --> 14:03:43,916
give it the URL of the code we want to
16354
14:03:41,040 --> 14:03:46,560
load so let's go back to the code for
16355
14:03:43,916 --> 14:03:49,080
DJs and then up here we're going to
16356
14:03:46,560 --> 14:03:52,360
rightclick and copy this
16357
14:03:49,080 --> 14:03:53,720
URL and then inside our code in the
16358
14:03:52,360 --> 14:03:56,000
source attribute we're going to
16359
14:03:53,720 --> 14:03:57,956
rightclick and paste the
16360
14:03:56,000 --> 14:04:00,680
URL and
16361
14:03:57,956 --> 14:04:03,160
save so again this will take all the
16362
14:04:00,680 --> 14:04:05,840
code that's located on this page and
16363
14:04:03,160 --> 14:04:09,400
then load it into our
16364
14:04:05,840 --> 14:04:11,756
project now let's give it a try the DJs
16365
14:04:09,400 --> 14:04:12,796
external Library creates a function
16366
14:04:11,756 --> 14:04:16,840
called
16367
14:04:12,796 --> 14:04:20,756
DJs so we'll go to checkout. JS and then
16368
14:04:16,840 --> 14:04:22,680
at the top we're going to run the JJs
16369
14:04:20,756 --> 14:04:24,640
function and
16370
14:04:22,680 --> 14:04:26,596
brackets now make sure this is all
16371
14:04:24,640 --> 14:04:29,276
lowercase cuz that's the name that the
16372
14:04:26,596 --> 14:04:32,436
library used so now let's actually
16373
14:04:29,276 --> 14:04:35,436
console.log the result of this function
16374
14:04:32,436 --> 14:04:35,436
console.log
16375
14:04:36,596 --> 14:04:41,276
and
16376
14:04:37,840 --> 14:04:42,916
save and we'll go back to our project in
16377
14:04:41,276 --> 14:04:45,116
the checkout page we're going to check
16378
14:04:42,916 --> 14:04:47,520
our
16379
14:04:45,116 --> 14:04:50,320
console and you'll see that the DJs
16380
14:04:47,520 --> 14:04:52,796
function gives us an object and this
16381
14:04:50,320 --> 14:04:56,640
object represents the current date and
16382
14:04:52,796 --> 14:04:59,560
time so we know that DJs is working and
16383
14:04:56,640 --> 14:05:02,200
that's it we successfully loaded the DJs
16384
14:04:59,560 --> 14:05:05,080
external Library into our
16385
14:05:02,200 --> 14:05:08,200
project now let's learn how to use
16386
14:05:05,080 --> 14:05:10,360
DJs external libraries usually have a
16387
14:05:08,200 --> 14:05:12,680
documentation page that shows us how to
16388
14:05:10,360 --> 14:05:14,520
use the library we can find the
16389
14:05:12,680 --> 14:05:18,400
documentation Page by searching on
16390
14:05:14,520 --> 14:05:21,240
Google the library name like DJs and
16391
14:05:18,400 --> 14:05:23,796
then documentation or we can ask an AI
16392
14:05:21,240 --> 14:05:25,840
tool how to use the library to make
16393
14:05:23,796 --> 14:05:27,916
things easier in this video I'm going to
16394
14:05:25,840 --> 14:05:29,520
show you the features that we need and
16395
14:05:27,916 --> 14:05:32,640
you can go through the documentation
16396
14:05:29,520 --> 14:05:35,240
later if you want so earlier we said we
16397
14:05:32,640 --> 14:05:38,040
needed to do three things with the date
16398
14:05:35,240 --> 14:05:40,116
first we want to get today's date number
16399
14:05:38,040 --> 14:05:42,720
two we want to do calculations with the
16400
14:05:40,116 --> 14:05:46,200
date and number three we want to display
16401
14:05:42,720 --> 14:05:49,360
the date in an easyto read format DJs
16402
14:05:46,200 --> 14:05:52,560
helps us do all of these things so first
16403
14:05:49,360 --> 14:05:54,756
let's use DJs to get today's date
16404
14:05:52,560 --> 14:05:57,276
according to the documentation to get
16405
14:05:54,756 --> 14:06:01,000
the current date and time we can just
16406
14:05:57,276 --> 14:06:04,160
use the DJs function like
16407
14:06:01,000 --> 14:06:07,200
this so if we go back to our code
16408
14:06:04,160 --> 14:06:08,720
and that's what we have here we call DJs
16409
14:06:07,200 --> 14:06:11,796
and it gives us an object that
16410
14:06:08,720 --> 14:06:13,720
represents the current date and time the
16411
14:06:11,796 --> 14:06:16,560
second thing we need to do is to do
16412
14:06:13,720 --> 14:06:18,680
calculations with the date so for the
16413
14:06:16,560 --> 14:06:22,360
delivery options here we need to
16414
14:06:18,680 --> 14:06:25,956
calculate today's date plus 7 days or
16415
14:06:22,360 --> 14:06:28,596
today's date plus 3 days so again the
16416
14:06:25,956 --> 14:06:31,320
DJs Library can help us do
16417
14:06:28,596 --> 14:06:33,916
this so let's go back to our
16418
14:06:31,320 --> 14:06:37,000
console and look at the object that we
16419
14:06:33,916 --> 14:06:40,000
get back from DJs so this object
16420
14:06:37,000 --> 14:06:43,520
represents today's date and time and
16421
14:06:40,000 --> 14:06:45,880
this object also has a method called add
16422
14:06:43,520 --> 14:06:48,720
which adds a certain amount of time to
16423
14:06:45,880 --> 14:06:51,436
this date so this is what we need for
16424
14:06:48,720 --> 14:06:53,756
the project to calculate these dates
16425
14:06:51,436 --> 14:06:57,000
here let's go to our
16426
14:06:53,756 --> 14:07:00,596
code and first let's save this result in
16427
14:06:57,000 --> 14:07:04,200
a variable so we're going to remove this
16428
14:07:00,596 --> 14:07:06,320
and create a variable const today
16429
14:07:04,200 --> 14:07:08,840
equals
16430
14:07:06,320 --> 14:07:12,160
DJs and then down here we're going to
16431
14:07:08,840 --> 14:07:14,916
use the add method so we'll type
16432
14:07:12,160 --> 14:07:18,200
today. add and
16433
14:07:14,916 --> 14:07:20,840
brackets now the add method takes two
16434
14:07:18,200 --> 14:07:23,276
parameters the first one is the number
16435
14:07:20,840 --> 14:07:25,360
of time that we want to add so if we
16436
14:07:23,276 --> 14:07:28,880
want to add seven days we're going to
16437
14:07:25,360 --> 14:07:30,880
type seven and then the second parameter
16438
14:07:28,880 --> 14:07:33,916
is the length of time that we want to
16439
14:07:30,880 --> 14:07:37,680
add so if we want to add seven days
16440
14:07:33,916 --> 14:07:41,160
we're going to give it a string days so
16441
14:07:37,680 --> 14:07:43,916
this will add seven days to today's
16442
14:07:41,160 --> 14:07:49,200
date so let's save this result in a
16443
14:07:43,916 --> 14:07:51,840
variable const delivery date equals this
16444
14:07:49,200 --> 14:07:55,080
result and we'll console.log it to make
16445
14:07:51,840 --> 14:07:59,680
sure it's working correctly
16446
14:07:55,080 --> 14:08:02,796
console.log the delivery date and
16447
14:07:59,680 --> 14:08:04,840
save now if we go back to our project
16448
14:08:02,796 --> 14:08:07,436
and open the
16449
14:08:04,840 --> 14:08:10,880
console it will give us an object that
16450
14:08:07,436 --> 14:08:14,000
represents 7 days after to date or 7
16451
14:08:10,880 --> 14:08:16,916
days after when you're watching this
16452
14:08:14,000 --> 14:08:19,240
video so that's how we use DJs to do
16453
14:08:16,916 --> 14:08:21,796
calculations with the date it gives us
16454
14:08:19,240 --> 14:08:25,080
methods like add to add a certain amount
16455
14:08:21,796 --> 14:08:28,240
of time to the date finally we're going
16456
14:08:25,080 --> 14:08:31,040
to use DJs to display this date in an
16457
14:08:28,240 --> 14:08:34,360
easyto read format like
16458
14:08:31,040 --> 14:08:36,560
this so according to the document
16459
14:08:34,360 --> 14:08:39,520
this date object has another method
16460
14:08:36,560 --> 14:08:43,000
called format which will display the
16461
14:08:39,520 --> 14:08:45,276
date in an easyto read format so let's
16462
14:08:43,000 --> 14:08:48,160
go back to our
16463
14:08:45,276 --> 14:08:52,276
code and we'll remove the
16464
14:08:48,160 --> 14:08:55,240
console.log and we'll type delivery
16465
14:08:52,276 --> 14:08:58,560
date.
16466
14:08:55,240 --> 14:09:01,040
format and then inside these brackets
16467
14:08:58,560 --> 14:09:03,560
we're going to give this method a string
16468
14:09:01,040 --> 14:09:06,720
so this string tells DJs what kind kind
16469
14:09:03,560 --> 14:09:09,160
of format we want for the date so in the
16470
14:09:06,720 --> 14:09:11,560
documentation it has a table showing us
16471
14:09:09,160 --> 14:09:14,560
some special characters we can put into
16472
14:09:11,560 --> 14:09:17,000
this string for example if we want to
16473
14:09:14,560 --> 14:09:20,956
show the day of the week like Monday or
16474
14:09:17,000 --> 14:09:23,436
Tuesday we can type four D's into the
16475
14:09:20,956 --> 14:09:25,596
string and this will give us a string
16476
14:09:23,436 --> 14:09:27,160
where this text is replaced by the
16477
14:09:25,596 --> 14:09:30,240
actual day of the
16478
14:09:27,160 --> 14:09:32,720
week if we want to add a comma and a
16479
14:09:30,240 --> 14:09:35,080
space to this format we can just add a
16480
14:09:32,720 --> 14:09:37,916
comma and space and this will show up
16481
14:09:35,080 --> 14:09:40,000
directly in the result now let's say
16482
14:09:37,916 --> 14:09:43,000
that after this we want to show the
16483
14:09:40,000 --> 14:09:47,116
month according to the documentation to
16484
14:09:43,000 --> 14:09:50,480
show the month we can type for Capital
16485
14:09:47,116 --> 14:09:54,436
M's and it will replace this with the
16486
14:09:50,480 --> 14:09:56,640
month and finally we'll type a space and
16487
14:09:54,436 --> 14:09:59,080
according to the documentation if we
16488
14:09:56,640 --> 14:10:03,560
want to insert the day of the month into
16489
14:09:59,080 --> 14:10:06,000
the string we can type a capital D
16490
14:10:03,560 --> 14:10:08,840
so this method takes this date and
16491
14:10:06,000 --> 14:10:11,680
converts it into a string with this
16492
14:10:08,840 --> 14:10:15,640
format so now let's console.log this to
16493
14:10:11,680 --> 14:10:17,480
see what it looks like well
16494
14:10:15,640 --> 14:10:19,560
console.log and
16495
14:10:17,480 --> 14:10:22,840
brackets and
16496
14:10:19,560 --> 14:10:24,596
save and then go into our project and
16497
14:10:22,840 --> 14:10:27,320
open the
16498
14:10:24,596 --> 14:10:30,436
console and now you should see the date
16499
14:10:27,320 --> 14:10:33,436
7 days after today but displayed in an
16500
14:10:30,436 --> 14:10:36,000
easyto read format
16501
14:10:33,436 --> 14:10:39,320
so that's how we use the DJs external
16502
14:10:36,000 --> 14:10:41,720
library to help us work with dates and
16503
14:10:39,320 --> 14:10:43,880
as you can see it saves us a lot of time
16504
14:10:41,720 --> 14:10:46,240
and work we don't have to figure out how
16505
14:10:43,880 --> 14:10:49,000
to work with dates ourselves we can just
16506
14:10:46,240 --> 14:10:51,040
use someone else's code to solve this
16507
14:10:49,000 --> 14:10:53,436
problem so a best practice in
16508
14:10:51,040 --> 14:10:55,956
programming is when we need to do
16509
14:10:53,436 --> 14:10:58,680
something complicated try to find an
16510
14:10:55,956 --> 14:10:59,956
external Library first before writing
16511
14:10:58,680 --> 14:11:03,080
the code
16512
14:10:59,956 --> 14:11:05,796
ourselves to find external libraries we
16513
14:11:03,080 --> 14:11:07,596
can you can search in Google JavaScript
16514
14:11:05,796 --> 14:11:10,520
and then what kind of Library we're
16515
14:11:07,596 --> 14:11:13,756
looking for like date
16516
14:11:10,520 --> 14:11:16,720
Library we can also use an AI tool to
16517
14:11:13,756 --> 14:11:18,916
help us find external
16518
14:11:16,720 --> 14:11:21,560
libraries next we're going to learn how
16519
14:11:18,916 --> 14:11:24,916
to use external libraries and JavaScript
16520
14:11:21,560 --> 14:11:28,200
modules together right now if we look at
16521
14:11:24,916 --> 14:11:31,200
our code and go to checkout.
16522
14:11:28,200 --> 14:11:34,080
HTML we're loading these libraries using
16523
14:11:31,200 --> 14:11:36,596
script tags the problem with script tags
16524
14:11:34,080 --> 14:11:39,360
is that it runs this code directly on
16525
14:11:36,596 --> 14:11:42,560
the page and this might cause naming
16526
14:11:39,360 --> 14:11:45,320
conflicts for example the hello Library
16527
14:11:42,560 --> 14:11:47,520
creates a function called hello so if
16528
14:11:45,320 --> 14:11:50,520
something else is called hello in any of
16529
14:11:47,520 --> 14:11:53,276
our other code it might cause a naming
16530
14:11:50,520 --> 14:11:56,596
conflict a better way to load external
16531
14:11:53,276 --> 14:11:59,116
libraries is to use JavaScript modules
16532
14:11:56,596 --> 14:12:02,240
because a module will contain this code
16533
14:11:59,116 --> 14:12:04,796
inside a file and any variables that are
16534
14:12:02,240 --> 14:12:08,276
created inside inside the file will not
16535
14:12:04,796 --> 14:12:11,160
conflict with anything outside of the
16536
14:12:08,276 --> 14:12:13,276
file to use external libraries and
16537
14:12:11,160 --> 14:12:16,200
JavaScript modules together we're going
16538
14:12:13,276 --> 14:12:20,000
to use a special version of the library
16539
14:12:16,200 --> 14:12:23,080
called an esm version esm stands for
16540
14:12:20,000 --> 14:12:26,400
ecmascript modules ecmascript is just
16541
14:12:23,080 --> 14:12:28,956
another name for JavaScript so the esm
16542
14:12:26,400 --> 14:12:31,560
version of a library is just a version
16543
14:12:28,956 --> 14:12:34,796
that works with JavaScript
16544
14:12:31,560 --> 14:12:37,040
modules so let's do an example we're
16545
14:12:34,796 --> 14:12:41,680
going to go to the video description and
16546
14:12:37,040 --> 14:12:41,680
we're going to open the esm version of
16547
14:12:48,080 --> 14:12:53,040
hello.js so you can see that it's the
16548
14:12:50,240 --> 14:12:56,320
exact same code as before we're creating
16549
14:12:53,040 --> 14:12:58,916
a function called hello except this time
16550
14:12:56,320 --> 14:13:01,640
I just added the word export in front of
16551
14:12:58,916 --> 14:13:04,840
function so this turns the library into
16552
14:13:01,640 --> 14:13:08,116
an esm version and now it will work with
16553
14:13:04,840 --> 14:13:10,560
JavaScript modules so let's use the esm
16554
14:13:08,116 --> 14:13:11,756
version in our code we're going to go
16555
14:13:10,560 --> 14:13:14,116
back to our
16556
14:13:11,756 --> 14:13:16,160
code and we're not going to use script
16557
14:13:14,116 --> 14:13:17,400
tags to load this anymore so let's
16558
14:13:16,160 --> 14:13:19,520
delete
16559
14:13:17,400 --> 14:13:24,320
this and
16560
14:13:19,520 --> 14:13:26,880
save and then in checkout. JS at the top
16561
14:13:24,320 --> 14:13:29,520
we're going to use an import to import
16562
14:13:26,880 --> 14:13:33,840
this function into our code so we'll
16563
14:13:29,520 --> 14:13:35,756
type import curly brackets we'll import
16564
14:13:33,840 --> 14:13:38,840
the function
16565
14:13:35,756 --> 14:13:42,276
hello and we're going to import it from
16566
14:13:38,840 --> 14:13:44,916
a string and then this time instead of
16567
14:13:42,276 --> 14:13:47,796
giving it a file path like before we're
16568
14:13:44,916 --> 14:13:51,080
going to give it a URL that contains our
16569
14:13:47,796 --> 14:13:54,756
code so on the web page we're going to
16570
14:13:51,080 --> 14:13:57,840
rightclick and copy the URL at the top
16571
14:13:54,756 --> 14:13:59,956
and then inside our code in here we're
16572
14:13:57,840 --> 14:14:02,640
going to rightclick and
16573
14:13:59,956 --> 14:14:05,320
paste so this import works the same way
16574
14:14:02,640 --> 14:14:07,640
as before before except now the codee is
16575
14:14:05,320 --> 14:14:10,360
coming from the internet rather than one
16576
14:14:07,640 --> 14:14:14,240
of our files so let's
16577
14:14:10,360 --> 14:14:15,680
save and then go back to our project and
16578
14:14:14,240 --> 14:14:17,956
check the
16579
14:14:15,680 --> 14:14:19,200
console and you can see that everything
16580
14:14:17,956 --> 14:14:21,796
is still
16581
14:14:19,200 --> 14:14:23,916
working so that's how we use external
16582
14:14:21,796 --> 14:14:27,160
libraries and JavaScript modules
16583
14:14:23,916 --> 14:14:30,320
together we just load the esm version of
16584
14:14:27,160 --> 14:14:32,596
the library and we use import as normal
16585
14:14:30,320 --> 14:14:35,436
except this time we're importing from
16586
14:14:32,596 --> 14:14:38,560
code that is on the
16587
14:14:35,436 --> 14:14:41,200
internet next let's use DJs with
16588
14:14:38,560 --> 14:14:44,840
JavaScript modules to do that we're
16589
14:14:41,200 --> 14:14:45,956
going to load the esm version of DJs so
16590
14:14:44,840 --> 14:14:48,480
we're going to go to the video
16591
14:14:45,956 --> 14:14:51,840
description and click this link for the
16592
14:14:48,480 --> 14:14:51,840
DJs esm
16593
14:14:58,436 --> 14:15:03,840
version and now we're going to load this
16594
14:15:00,880 --> 14:15:07,160
code into our project so let's go back
16595
14:15:03,840 --> 14:15:08,640
into our codee and first let's open
16596
14:15:07,160 --> 14:15:10,956
checkout.
16597
14:15:08,640 --> 14:15:12,720
HTML and we're going to remove this
16598
14:15:10,956 --> 14:15:15,320
script tag because we're going to load
16599
14:15:12,720 --> 14:15:19,116
this with JavaScript modules so let's
16600
14:15:15,320 --> 14:15:21,756
save and then go into checkout. JS and
16601
14:15:19,116 --> 14:15:25,880
then at the top we're going to import
16602
14:15:21,756 --> 14:15:28,276
from the DJs esm version so we'll
16603
14:15:25,880 --> 14:15:30,360
import and we're going to use a slightly
16604
14:15:28,276 --> 14:15:31,916
different syntax we're just going to
16605
14:15:30,360 --> 14:15:35,480
type
16606
14:15:31,916 --> 14:15:38,400
DJs without the curly brackets and then
16607
14:15:35,480 --> 14:15:40,400
we'll type from a
16608
14:15:38,400 --> 14:15:43,240
string and we're going to give it the
16609
14:15:40,400 --> 14:15:44,080
URL that contains the code so we'll go
16610
14:15:43,240 --> 14:15:46,680
to our
16611
14:15:44,080 --> 14:15:50,080
browser and then click the URL at the
16612
14:15:46,680 --> 14:15:53,480
top we're going to right click
16613
14:15:50,080 --> 14:15:56,680
copy and then in our code inside these
16614
14:15:53,480 --> 14:15:59,436
quotes rightclick and
16615
14:15:56,680 --> 14:16:02,320
paste and
16616
14:15:59,436 --> 14:16:03,840
save so now let's open our project and
16617
14:16:02,320 --> 14:16:07,840
take a look at the the console to make
16618
14:16:03,840 --> 14:16:09,840
sure it works so we'll right click
16619
14:16:07,840 --> 14:16:12,916
inspect the
16620
14:16:09,840 --> 14:16:15,520
console and everything is still working
16621
14:16:12,916 --> 14:16:18,596
so that's how we use the DJs external
16622
14:16:15,520 --> 14:16:20,640
library with JavaScript modules so
16623
14:16:18,596 --> 14:16:23,560
before we continue we're going to learn
16624
14:16:20,640 --> 14:16:26,276
about this new syntax that we used here
16625
14:16:23,560 --> 14:16:29,320
so this syntax is called a default
16626
14:16:26,276 --> 14:16:32,320
export a default export is another way
16627
14:16:29,320 --> 14:16:34,640
of exporting something from a file we
16628
14:16:32,320 --> 14:16:37,160
can use it when we only want to export
16629
14:16:34,640 --> 14:16:39,240
one thing from a file and it makes the
16630
14:16:37,160 --> 14:16:42,160
syntax a little bit cleaner because we
16631
14:16:39,240 --> 14:16:44,596
don't have to type the curly brackets so
16632
14:16:42,160 --> 14:16:47,400
let's do an example of a default export
16633
14:16:44,596 --> 14:16:50,756
to see how it works we're going to open
16634
14:16:47,400 --> 14:16:53,276
the utils folder and open money.
16635
14:16:50,756 --> 14:16:57,200
JS and at the bottom we're going to
16636
14:16:53,276 --> 14:17:00,756
create a default export by typing
16637
14:16:57,200 --> 14:17:03,240
export default and then whatever we want
16638
14:17:00,756 --> 14:17:05,756
to export so let's say we want to export
16639
14:17:03,240 --> 14:17:09,320
this function here so we just type the
16640
14:17:05,756 --> 14:17:11,880
name of the function format
16641
14:17:09,320 --> 14:17:14,956
currency and
16642
14:17:11,880 --> 14:17:17,320
save and now when we import this we can
16643
14:17:14,956 --> 14:17:20,116
just import the name without the curly
16644
14:17:17,320 --> 14:17:23,160
brackets so the syntax is a little bit
16645
14:17:20,116 --> 14:17:25,756
cleaner now each file can only have one
16646
14:17:23,160 --> 14:17:28,916
default export so if we only want to
16647
14:17:25,756 --> 14:17:31,116
export one thing from a file this is
16648
14:17:28,916 --> 14:17:34,116
another syntax that we can
16649
14:17:31,116 --> 14:17:36,436
use so some people like using default
16650
14:17:34,116 --> 14:17:38,756
exports because they feel that exporting
16651
14:17:36,436 --> 14:17:41,840
only one thing from a file makes the
16652
14:17:38,756 --> 14:17:44,116
code cleaner however in your own code
16653
14:17:41,840 --> 14:17:45,880
it's up to you which version of export
16654
14:17:44,116 --> 14:17:49,276
you want to
16655
14:17:45,880 --> 14:17:53,320
use let's go back to checkout.
16656
14:17:49,276 --> 14:17:56,040
JS and then here the DJs Library only
16657
14:17:53,320 --> 14:17:59,040
exports one thing which is the DJs
16658
14:17:56,040 --> 14:18:01,596
function so they chose to use a default
16659
14:17:59,040 --> 14:18:03,360
export instead of a normal export that
16660
14:18:01,596 --> 14:18:05,480
we were using before
16661
14:18:03,360 --> 14:18:08,596
by the way the syntax up here with the
16662
14:18:05,480 --> 14:18:11,596
curly brackets is called a named
16663
14:18:08,596 --> 14:18:14,080
export so when we use external libraries
16664
14:18:11,596 --> 14:18:16,596
in the future some libraries will use
16665
14:18:14,080 --> 14:18:19,116
named exports like this and other
16666
14:18:16,596 --> 14:18:22,240
libraries will use a default export like
16667
14:18:19,116 --> 14:18:24,560
this so it's useful to know both
16668
14:18:22,240 --> 14:18:26,596
syntaxes so that's how we use external
16669
14:18:24,560 --> 14:18:29,560
libraries and JavaScript modules
16670
14:18:26,596 --> 14:18:32,436
together we just import from the esm
16671
14:18:29,560 --> 14:18:34,596
version of the library now keep in mind
16672
14:18:32,436 --> 14:18:37,040
that not every library has an esm
16673
14:18:34,596 --> 14:18:39,000
version so for some libraries we still
16674
14:18:37,040 --> 14:18:41,916
have to use a script
16675
14:18:39,000 --> 14:18:44,520
tag okay now that we learned external
16676
14:18:41,916 --> 14:18:46,596
libraries let's do some practical
16677
14:18:44,520 --> 14:18:49,756
examples we're going to go back to the
16678
14:18:46,596 --> 14:18:52,680
checkout page and we're going to use DJs
16679
14:18:49,756 --> 14:18:54,880
to create the delivery options here so
16680
14:18:52,680 --> 14:18:57,480
the way this works is that we can select
16681
14:18:54,880 --> 14:18:59,720
one of three delivery options when we
16682
14:18:57,480 --> 14:19:02,240
click an option it should change the
16683
14:18:59,720 --> 14:19:05,400
delivery date up here and it should
16684
14:19:02,240 --> 14:19:07,796
change the prices on the right side so
16685
14:19:05,400 --> 14:19:10,480
let's get started as always we're going
16686
14:19:07,796 --> 14:19:12,480
to do three steps first we're going to
16687
14:19:10,480 --> 14:19:15,276
save the data and then we're going to
16688
14:19:12,480 --> 14:19:18,320
generate the HTML and finally we're
16689
14:19:15,276 --> 14:19:20,756
going to make it interactive so first
16690
14:19:18,320 --> 14:19:23,720
what data do we need to save for this
16691
14:19:20,756 --> 14:19:27,840
section well each delivery option has a
16692
14:19:23,720 --> 14:19:29,840
delivery time like 7 days or 3 days and
16693
14:19:27,840 --> 14:19:33,116
each option also has a
16694
14:19:29,840 --> 14:19:35,596
price so right now here's what our cart
16695
14:19:33,116 --> 14:19:38,276
looks like now we could save the
16696
14:19:35,596 --> 14:19:41,360
delivery option details inside the cart
16697
14:19:38,276 --> 14:19:43,916
like this however notice that this data
16698
14:19:41,360 --> 14:19:46,436
gets duplicated for each product in the
16699
14:19:43,916 --> 14:19:47,956
cart instead we're going to save the
16700
14:19:46,436 --> 14:19:50,956
delivery options
16701
14:19:47,956 --> 14:19:53,360
separately and then just save an ID that
16702
14:19:50,956 --> 14:19:56,200
points to the delivery
16703
14:19:53,360 --> 14:19:59,200
option as a reminder this technique is
16704
14:19:56,200 --> 14:20:01,560
called normalizing the data we save the
16705
14:19:59,200 --> 14:20:03,240
delivery options separately and then we
16706
14:20:01,560 --> 14:20:06,000
just save an ID
16707
14:20:03,240 --> 14:20:08,640
that points to the full delivery
16708
14:20:06,000 --> 14:20:12,480
option so let's create the data for the
16709
14:20:08,640 --> 14:20:15,040
delivery options we'll go into our code
16710
14:20:12,480 --> 14:20:17,680
and then in the data folder let's create
16711
14:20:15,040 --> 14:20:22,916
a new file for this and we're going to
16712
14:20:17,680 --> 14:20:23,916
name this file delivery options. JS and
16713
14:20:22,916 --> 14:20:26,880
press
16714
14:20:23,916 --> 14:20:29,720
enter and in here we'll create a list of
16715
14:20:26,880 --> 14:20:33,520
delivery options that we can pick from
16716
14:20:29,720 --> 14:20:36,916
we'll create a variable const delivery
16717
14:20:33,520 --> 14:20:39,840
options equals and array because we want
16718
14:20:36,916 --> 14:20:42,040
a list and then each delivery option is
16719
14:20:39,840 --> 14:20:45,116
going to have multiple values like the
16720
14:20:42,040 --> 14:20:46,520
time to deliver as well as the price so
16721
14:20:45,116 --> 14:20:50,160
we're going to make each of them an
16722
14:20:46,520 --> 14:20:52,040
object to group these values together so
16723
14:20:50,160 --> 14:20:53,880
I'm going to rearrange my windows here
16724
14:20:52,040 --> 14:20:56,360
so that we can see the data that we're
16725
14:20:53,880 --> 14:21:00,360
trying to save and we can actually close
16726
14:20:56,360 --> 14:21:00,360
these tabs for now
16727
14:21:03,400 --> 14:21:06,956
so here let's save the data for the
16728
14:21:05,436 --> 14:21:10,040
first delivery
16729
14:21:06,956 --> 14:21:12,360
option first let's give it an ID
16730
14:21:10,040 --> 14:21:14,956
property because as we mentioned we're
16731
14:21:12,360 --> 14:21:16,916
going to save the ID in the cart and
16732
14:21:14,956 --> 14:21:20,160
then we're going to use that ID to get
16733
14:21:16,916 --> 14:21:22,040
the full delivery option here so to keep
16734
14:21:20,160 --> 14:21:24,520
things simple let's just give it a
16735
14:21:22,040 --> 14:21:26,560
string and an ID of
16736
14:21:24,520 --> 14:21:28,756
one and then we're going to give it
16737
14:21:26,560 --> 14:21:31,436
another property and we're going to save
16738
14:21:28,756 --> 14:21:33,840
the delivery time so for the first
16739
14:21:31,436 --> 14:21:37,040
option it's going to take seven days to
16740
14:21:33,840 --> 14:21:42,596
deliver so let's create a property
16741
14:21:37,040 --> 14:21:45,116
delivery days colon 7 and comma and
16742
14:21:42,596 --> 14:21:47,080
we're also going to save the price so
16743
14:21:45,116 --> 14:21:52,680
this one is free so we're going to save
16744
14:21:47,080 --> 14:21:54,520
the price cents and zero remember that a
16745
14:21:52,680 --> 14:21:56,680
best practice when calculating money is
16746
14:21:54,520 --> 14:21:59,480
to save it in
16747
14:21:56,680 --> 14:22:01,796
cents and next let's save the data for
16748
14:21:59,480 --> 14:22:04,796
the second delivery option here we'll
16749
14:22:01,796 --> 14:22:09,160
type a comma and another object and
16750
14:22:04,796 --> 14:22:11,000
let's give it an ID of two this time and
16751
14:22:09,160 --> 14:22:15,116
this one is going to take three days to
16752
14:22:11,000 --> 14:22:19,840
deliver so we'll type delivery days
16753
14:22:15,116 --> 14:22:21,400
colon 3 and we'll give it a price cents
16754
14:22:19,840 --> 14:22:23,956
and this one is
16755
14:22:21,400 --> 14:22:26,080
$4.99 so
16756
14:22:23,956 --> 14:22:27,756
$4.99 and then finally we're going to
16757
14:22:26,080 --> 14:22:33,480
save the data for the third delivery
16758
14:22:27,756 --> 14:22:35,596
option comma another object ID of three
16759
14:22:33,480 --> 14:22:39,640
and this one is going to take one day to
16760
14:22:35,596 --> 14:22:43,880
deliver so we'll type delivery days
16761
14:22:39,640 --> 14:22:50,160
colon 1 comma and the price sense is
16762
14:22:43,880 --> 14:22:52,596
$9.99 so price sense 999 and
16763
14:22:50,160 --> 14:22:55,240
save so now that we've created our
16764
14:22:52,596 --> 14:22:58,080
delivery options for each product in the
16765
14:22:55,240 --> 14:23:00,680
cart we're going to save the ID of the
16766
14:22:58,080 --> 14:23:02,640
delivery option that's selected so for
16767
14:23:00,680 --> 14:23:05,596
example here we selected the first First
16768
14:23:02,640 --> 14:23:08,596
Option we're going to save an ID of one
16769
14:23:05,596 --> 14:23:13,000
in our cart so let's go back into our
16770
14:23:08,596 --> 14:23:13,000
code and we're going to open the
16771
14:23:14,200 --> 14:23:23,080
cart so here in the default cart we're
16772
14:23:17,680 --> 14:23:25,400
going to save the delivery option ID
16773
14:23:23,080 --> 14:23:27,640
colon and let's say that the first
16774
14:23:25,400 --> 14:23:31,956
product selected the first delivery
16775
14:23:27,640 --> 14:23:34,116
option so we're going to save the ID one
16776
14:23:31,956 --> 14:23:38,756
and then for the second product we're
16777
14:23:34,116 --> 14:23:40,720
also going to save a delivery option ID
16778
14:23:38,756 --> 14:23:42,680
colon and then let's say that for the
16779
14:23:40,720 --> 14:23:45,320
second product we chose the second
16780
14:23:42,680 --> 14:23:48,116
delivery option here so here we're going
16781
14:23:45,320 --> 14:23:51,116
to give it an ID of
16782
14:23:48,116 --> 14:23:53,480
two next when we add a product to the
16783
14:23:51,116 --> 14:23:56,480
cart we also need to give it a delivery
16784
14:23:53,480 --> 14:23:59,640
option ID so if we scroll down to the
16785
14:23:56,480 --> 14:24:02,040
add to cart function here we're adding a
16786
14:23:59,640 --> 14:24:03,956
product to the cart so when we add a new
16787
14:24:02,040 --> 14:24:06,840
product we also want to give it a
16788
14:24:03,956 --> 14:24:11,796
delivery option ID so we'll type
16789
14:24:06,840 --> 14:24:13,640
delivery option ID colon and for new
16790
14:24:11,796 --> 14:24:16,160
products let's give it a default
16791
14:24:13,640 --> 14:24:19,436
delivery option of one so for new
16792
14:24:16,160 --> 14:24:20,560
products to select the first one and now
16793
14:24:19,436 --> 14:24:23,720
let's
16794
14:24:20,560 --> 14:24:26,520
save and lastly we might have a cart
16795
14:24:23,720 --> 14:24:29,040
that is saved in local storage so we'll
16796
14:24:26,520 --> 14:24:31,640
need to add the delivery option ID to
16797
14:24:29,040 --> 14:24:34,360
local storage as well but to keep things
16798
14:24:31,640 --> 14:24:36,116
simple let's just do a shortcut we're
16799
14:24:34,360 --> 14:24:38,200
going to delete the cart in local
16800
14:24:36,116 --> 14:24:40,520
storage and then it will go back to
16801
14:24:38,200 --> 14:24:42,000
using this default value which has the
16802
14:24:40,520 --> 14:24:44,596
delivery option
16803
14:24:42,000 --> 14:24:47,436
IDs so to delete the cart from local
16804
14:24:44,596 --> 14:24:51,160
storage we're going to go into our page
16805
14:24:47,436 --> 14:24:53,796
and open the console right click
16806
14:24:51,160 --> 14:24:58,080
inspect the
16807
14:24:53,796 --> 14:25:02,680
console and we're going to type local
16808
14:24:58,080 --> 14:25:05,040
storage. remove item brackets and the
16809
14:25:02,680 --> 14:25:07,720
cart and press
16810
14:25:05,040 --> 14:25:09,680
enter so this will erase the cart from
16811
14:25:07,720 --> 14:25:12,480
local storage and it will use those
16812
14:25:09,680 --> 14:25:14,720
default values so now let's go to our
16813
14:25:12,480 --> 14:25:16,916
page and
16814
14:25:14,720 --> 14:25:19,680
refresh and it should be using the
16815
14:25:16,916 --> 14:25:22,880
default cart so that's how we save the
16816
14:25:19,680 --> 14:25:25,596
data for the delivery
16817
14:25:22,880 --> 14:25:27,796
options by the way in the rest of this
16818
14:25:25,596 --> 14:25:30,956
course if you get an error in your
16819
14:25:27,796 --> 14:25:33,756
project but your code looks correct you
16820
14:25:30,956 --> 14:25:37,160
may have some bad data saved in local
16821
14:25:33,756 --> 14:25:40,640
storage to fix this you can try running
16822
14:25:37,160 --> 14:25:42,640
local storage. CLE in your console to
16823
14:25:40,640 --> 14:25:46,796
remove everything from local
16824
14:25:42,640 --> 14:25:46,796
storage and then refresh the
16825
14:25:48,360 --> 14:25:55,840
page the next step is to generate the
16826
14:25:52,840 --> 14:25:58,880
HTML first let's find the HTML for the
16827
14:25:55,840 --> 14:26:01,520
delivery options here to do that we can
16828
14:25:58,880 --> 14:26:03,360
rightclick this part of the page and
16829
14:26:01,520 --> 14:26:05,720
inspect
16830
14:26:03,360 --> 14:26:08,276
and this will give us the HTML for this
16831
14:26:05,720 --> 14:26:10,520
part so we're going to find the element
16832
14:26:08,276 --> 14:26:12,596
that represents this part of the page
16833
14:26:10,520 --> 14:26:15,560
and that's this one right here it's a
16834
14:26:12,596 --> 14:26:17,276
div with the class delivery Das options
16835
14:26:15,560 --> 14:26:19,956
and to find this in our code we're going
16836
14:26:17,276 --> 14:26:21,360
to search for this class so let's go
16837
14:26:19,956 --> 14:26:23,560
back to our
16838
14:26:21,360 --> 14:26:26,840
code and then we're going to open
16839
14:26:23,560 --> 14:26:30,040
checkout. JS which is right
16840
14:26:26,840 --> 14:26:32,320
here and we'll press crlf or command F
16841
14:26:30,040 --> 14:26:35,916
to find code and we're going to look for
16842
14:26:32,320 --> 14:26:38,596
the class delivery Das
16843
14:26:35,916 --> 14:26:41,560
options and it will give us this code
16844
14:26:38,596 --> 14:26:42,796
right here so this is the HTML for the
16845
14:26:41,560 --> 14:26:45,160
delivery
16846
14:26:42,796 --> 14:26:47,680
options so now instead of writing this
16847
14:26:45,160 --> 14:26:48,840
HTML directly we're going to generate
16848
14:26:47,680 --> 14:26:51,400
this with
16849
14:26:48,840 --> 14:26:53,560
JavaScript to keep our code organized
16850
14:26:51,400 --> 14:26:54,360
let's create a function for generating
16851
14:26:53,560 --> 14:26:57,040
this
16852
14:26:54,360 --> 14:27:01,116
HTML we'll scroll to the
16853
14:26:57,040 --> 14:27:04,640
bottom and then here we'll create a
16854
14:27:01,116 --> 14:27:06,320
function and let's call it delivery
16855
14:27:04,640 --> 14:27:10,000
options
16856
14:27:06,320 --> 14:27:12,560
HTML brackets and curly
16857
14:27:10,000 --> 14:27:15,200
brackets and now inside here we're going
16858
14:27:12,560 --> 14:27:17,200
to do three steps first we're going to
16859
14:27:15,200 --> 14:27:20,080
Loop through the delivery options we
16860
14:27:17,200 --> 14:27:22,756
created earlier and then for each option
16861
14:27:20,080 --> 14:27:24,596
we're going to generate some HTML and
16862
14:27:22,756 --> 14:27:28,276
then finally we're going to combine all
16863
14:27:24,596 --> 14:27:30,880
the HTML together so first let's import
16864
14:27:28,276 --> 14:27:34,200
the delivery options at the top so we'll
16865
14:27:30,880 --> 14:27:39,116
scroll up and we're going to
16866
14:27:34,200 --> 14:27:40,640
import curly brackets from quotes and
16867
14:27:39,116 --> 14:27:43,436
we're going to locate the delivery
16868
14:27:40,640 --> 14:27:45,520
options file which is inside the data
16869
14:27:43,436 --> 14:27:47,756
folder so first we need to get out of
16870
14:27:45,520 --> 14:27:51,040
the scripts folder we'll type dot do
16871
14:27:47,756 --> 14:27:55,840
slash and then go into the data folder
16872
14:27:51,040 --> 14:27:59,436
slash delivery options. JS and we're
16873
14:27:55,840 --> 14:28:02,160
going to import the delivery
16874
14:27:59,436 --> 14:28:04,756
options now one thing I forgot to do is
16875
14:28:02,160 --> 14:28:06,916
that inside these delivery options we
16876
14:28:04,756 --> 14:28:10,520
need to make sure that we export this
16877
14:28:06,916 --> 14:28:11,596
variable so we're going to type export
16878
14:28:10,520 --> 14:28:15,320
and
16879
14:28:11,596 --> 14:28:17,520
save and we'll go back to checkout. JS
16880
14:28:15,320 --> 14:28:19,880
and then here we're going to Loop
16881
14:28:17,520 --> 14:28:21,560
through the delivery options below so
16882
14:28:19,880 --> 14:28:24,360
we'll scroll back
16883
14:28:21,560 --> 14:28:30,200
down to this new
16884
14:28:24,360 --> 14:28:35,080
function and type delivery options. for
16885
14:28:30,200 --> 14:28:35,080
each brackets and a function
16886
14:28:35,200 --> 14:28:40,360
inside and we'll name the parameter
16887
14:28:38,000 --> 14:28:43,360
delivery
16888
14:28:40,360 --> 14:28:46,320
option so for each delivery option we're
16889
14:28:43,360 --> 14:28:48,720
going to generate some HTML so let's use
16890
14:28:46,320 --> 14:28:51,796
a template string to save the
16891
14:28:48,720 --> 14:28:53,596
HTML and then we're going to scroll up
16892
14:28:51,796 --> 14:28:57,116
and we're going to find the class
16893
14:28:53,596 --> 14:28:59,480
delivery Das option so this is the HTML
16894
14:28:57,116 --> 14:29:02,040
for one delivery option so we're just
16895
14:28:59,480 --> 14:29:06,276
going to copy this HTML into our Java
16896
14:29:02,040 --> 14:29:10,436
JavaScript below so we'll right click
16897
14:29:06,276 --> 14:29:13,560
copy and then down here inside the
16898
14:29:10,436 --> 14:29:15,840
string give some new lines and
16899
14:29:13,560 --> 14:29:18,720
rightclick and
16900
14:29:15,840 --> 14:29:22,160
paste and if we need to reformat we can
16901
14:29:18,720 --> 14:29:22,160
select these lines and press
16902
14:29:26,116 --> 14:29:31,720
tab okay now when we're generating the
16903
14:29:29,116 --> 14:29:34,320
HTML instead of using the same date
16904
14:29:31,720 --> 14:29:38,040
every time we're going to calculate the
16905
14:29:34,320 --> 14:29:40,560
date using DJs and then insert it into
16906
14:29:38,040 --> 14:29:43,480
here to calculate the date we're going
16907
14:29:40,560 --> 14:29:47,040
to get today's date first using
16908
14:29:43,480 --> 14:29:49,756
DJs so up here let's create a variable
16909
14:29:47,040 --> 14:29:51,720
const today
16910
14:29:49,756 --> 14:29:54,400
equals and according to the
16911
14:29:51,720 --> 14:29:58,160
documentation to get today's date we can
16912
14:29:54,400 --> 14:30:00,640
just call the DJs function so we'll type
16913
14:29:58,160 --> 14:30:02,560
DJs and
16914
14:30:00,640 --> 14:30:04,480
brackets next
16915
14:30:02,560 --> 14:30:07,160
each delivery option takes a certain
16916
14:30:04,480 --> 14:30:10,640
amount of days to deliver so we need to
16917
14:30:07,160 --> 14:30:14,560
add that to today's date to do that we
16918
14:30:10,640 --> 14:30:16,560
have a method called add So Below this
16919
14:30:14,560 --> 14:30:21,680
let's create a variable to save the
16920
14:30:16,560 --> 14:30:23,360
result const delivery date
16921
14:30:21,680 --> 14:30:27,000
equals
16922
14:30:23,360 --> 14:30:29,116
today. add
16923
14:30:27,000 --> 14:30:31,480
brackets and we're going to give it two
16924
14:30:29,116 --> 14:30:34,040
parameters the first parameter is how
16925
14:30:31,480 --> 14:30:37,240
many dat days we want to add and this is
16926
14:30:34,040 --> 14:30:41,520
saved in the delivery option so here
16927
14:30:37,240 --> 14:30:44,400
we'll give it the delivery option dot
16928
14:30:41,520 --> 14:30:46,796
delivery days
16929
14:30:44,400 --> 14:30:50,956
comma and then we'll give it the length
16930
14:30:46,796 --> 14:30:53,720
of time we want to add which is a string
16931
14:30:50,956 --> 14:30:56,560
days now that we calculated the correct
16932
14:30:53,720 --> 14:31:00,160
delivery date we need to display it in
16933
14:30:56,560 --> 14:31:03,116
an easyto read format and again DJs has
16934
14:31:00,160 --> 14:31:06,640
a method called format that Let's us do
16935
14:31:03,116 --> 14:31:10,756
this so below let's create a variable
16936
14:31:06,640 --> 14:31:14,000
const and we'll call it date string and
16937
14:31:10,756 --> 14:31:15,640
make it equal to delivery
16938
14:31:14,000 --> 14:31:19,880
date.
16939
14:31:15,640 --> 14:31:23,200
format brackets and will give it a
16940
14:31:19,880 --> 14:31:26,160
string so the format we want is we want
16941
14:31:23,200 --> 14:31:28,000
to insert the day of the week so
16942
14:31:26,160 --> 14:31:29,200
according to the documentation we can
16943
14:31:28,000 --> 14:31:33,276
use
16944
14:31:29,200 --> 14:31:35,520
4ds and then a comma and a space and
16945
14:31:33,276 --> 14:31:38,160
then we want to insert the month and
16946
14:31:35,520 --> 14:31:39,080
according to the documentation that's 4
16947
14:31:38,160 --> 14:31:41,756
Capital
16948
14:31:39,080 --> 14:31:44,796
M's and finally we're going to insert
16949
14:31:41,756 --> 14:31:47,560
the day of month which is capital
16950
14:31:44,796 --> 14:31:50,160
D so now that we calculated this date
16951
14:31:47,560 --> 14:31:52,880
string we're going to insert it into the
16952
14:31:50,160 --> 14:31:56,040
HTML instead of using the same date
16953
14:31:52,880 --> 14:31:59,436
every time so we'll remove this and then
16954
14:31:56,040 --> 14:32:02,480
insert the date
16955
14:31:59,436 --> 14:32:03,596
string next let's insert the price
16956
14:32:02,480 --> 14:32:06,720
because it's going to be different
16957
14:32:03,596 --> 14:32:10,160
prices every time so at the
16958
14:32:06,720 --> 14:32:14,276
top let's create a variable const and
16959
14:32:10,160 --> 14:32:17,116
we'll call it price string and make it
16960
14:32:14,276 --> 14:32:19,916
equals and remember each delivery option
16961
14:32:17,116 --> 14:32:22,200
has a property price sense so if the
16962
14:32:19,916 --> 14:32:25,200
price ense is zero we want to display
16963
14:32:22,200 --> 14:32:27,436
the text free if the price sense is not
16964
14:32:25,200 --> 14:32:29,080
zero we want to display the price as
16965
14:32:27,436 --> 14:32:32,160
dollars with a
16966
14:32:29,080 --> 14:32:35,520
dash so to do that let's practice using
16967
14:32:32,160 --> 14:32:38,880
a Turner operator so first we'll check
16968
14:32:35,520 --> 14:32:44,080
if the price sense is zero so we'll type
16969
14:32:38,880 --> 14:32:45,756
delivery option. price sense is triple
16970
14:32:44,080 --> 14:32:48,560
equals to
16971
14:32:45,756 --> 14:32:51,520
Z and then we'll type a new line and
16972
14:32:48,560 --> 14:32:54,640
question mark and also a new line and
16973
14:32:51,520 --> 14:32:57,880
colon so remember the way that a Turner
16974
14:32:54,640 --> 14:33:00,880
operator works is that if the first part
16975
14:32:57,880 --> 14:33:03,480
returns true the value is whatever is
16976
14:33:00,880 --> 14:33:05,956
after this question Mark if the first
16977
14:33:03,480 --> 14:33:08,520
part is false then the value is whatever
16978
14:33:05,956 --> 14:33:10,720
is after the colon so it's sort of like
16979
14:33:08,520 --> 14:33:12,200
an if statement except we can save the
16980
14:33:10,720 --> 14:33:15,436
result in a
16981
14:33:12,200 --> 14:33:17,480
variable so if the price sense is zero
16982
14:33:15,436 --> 14:33:20,360
that means it's free so we want to
16983
14:33:17,480 --> 14:33:22,240
display the text free so we'll create a
16984
14:33:20,360 --> 14:33:25,840
string
16985
14:33:22,240 --> 14:33:29,200
free and if the price sense is not zero
16986
14:33:25,840 --> 14:33:31,116
we want to display the price as dollars
16987
14:33:29,200 --> 14:33:34,116
so here we're going to type a template
16988
14:33:31,116 --> 14:33:37,200
string a dollar sign and we're going to
16989
14:33:34,116 --> 14:33:40,916
insert the price sents as
16990
14:33:37,200 --> 14:33:44,880
dollars so here we'll type delivery
16991
14:33:40,916 --> 14:33:46,916
option. price sense and to display this
16992
14:33:44,880 --> 14:33:50,116
as dollars we already have a function
16993
14:33:46,916 --> 14:33:52,436
for this called format currency so at
16994
14:33:50,116 --> 14:33:54,276
the front we're just going to type
16995
14:33:52,436 --> 14:33:58,116
format
16996
14:33:54,276 --> 14:34:00,796
currency Open Bracket and close
16997
14:33:58,116 --> 14:34:05,000
bracket and then at the end let's add a
16998
14:34:00,796 --> 14:34:06,680
dash so here we'll add space and dash
16999
14:34:05,000 --> 14:34:09,160
and
17000
14:34:06,680 --> 14:34:12,040
semicolon so that's how we create the
17001
14:34:09,160 --> 14:34:15,400
price string for each delivery option so
17002
14:34:12,040 --> 14:34:20,320
now let's substitute this into the HTML
17003
14:34:15,400 --> 14:34:25,080
so we'll remove this and substitute the
17004
14:34:20,320 --> 14:34:25,080
price string and
17005
14:34:25,320 --> 14:34:30,880
save so now instead of using these same
17006
14:34:28,320 --> 14:34:32,720
values every time we're substituting the
17007
14:34:30,880 --> 14:34:36,360
values in into the
17008
14:34:32,720 --> 14:34:38,360
HTML finally let's combine all this HTML
17009
14:34:36,360 --> 14:34:41,520
together so we're going to scroll up to
17010
14:34:38,360 --> 14:34:43,276
the top and outside of this loop we're
17011
14:34:41,520 --> 14:34:47,680
going to create a variable to save the
17012
14:34:43,276 --> 14:34:50,400
result so let HTML equals empty string
17013
14:34:47,680 --> 14:34:53,116
to start and then every time we Loop
17014
14:34:50,400 --> 14:34:56,560
through we're going to add this HTML to
17015
14:34:53,116 --> 14:34:58,756
this result so here we're going to type
17016
14:34:56,560 --> 14:35:01,756
HTML plus
17017
14:34:58,756 --> 14:35:04,000
equals and finally after we've created
17018
14:35:01,756 --> 14:35:07,200
this HTML we're going to return it from
17019
14:35:04,000 --> 14:35:09,756
this function so at the bottom we're
17020
14:35:07,200 --> 14:35:12,680
just going to return the
17021
14:35:09,756 --> 14:35:15,796
HTML and
17022
14:35:12,680 --> 14:35:18,880
save now that we generated the HTML for
17023
14:35:15,796 --> 14:35:21,000
the delivery options let's insert this
17024
14:35:18,880 --> 14:35:23,680
into the HTML
17025
14:35:21,000 --> 14:35:28,436
above so instead of creating this HTML
17026
14:35:23,680 --> 14:35:28,436
directly we're going to delete it
17027
14:35:32,240 --> 14:35:37,040
and then here we're going to insert and
17028
14:35:35,200 --> 14:35:40,360
we're going to run this function to
17029
14:35:37,040 --> 14:35:45,436
generate it so here we're going to type
17030
14:35:40,360 --> 14:35:48,560
delivery options HTML and
17031
14:35:45,436 --> 14:35:50,640
brackets now before we save one thing
17032
14:35:48,560 --> 14:35:53,796
that we're missing in this function is
17033
14:35:50,640 --> 14:35:56,956
that if we scroll down here we're using
17034
14:35:53,796 --> 14:35:59,360
a variable called matching product but
17035
14:35:56,956 --> 14:36:01,880
this variable is not accessible inside
17036
14:35:59,360 --> 14:36:05,116
this function so let's actually pass the
17037
14:36:01,880 --> 14:36:09,000
matching product into here so at the top
17038
14:36:05,116 --> 14:36:11,480
we're going to add a parameter matching
17039
14:36:09,000 --> 14:36:14,720
product and then when we call this
17040
14:36:11,480 --> 14:36:19,080
function up here we're going to pass in
17041
14:36:14,720 --> 14:36:20,956
the matching product so matching product
17042
14:36:19,080 --> 14:36:24,680
so now let's
17043
14:36:20,956 --> 14:36:27,040
save and check our page and now we're
17044
14:36:24,680 --> 14:36:29,320
generating the HTML for these delivery
17045
14:36:27,040 --> 14:36:31,520
options and you'll notice that your
17046
14:36:29,320 --> 14:36:34,116
delivery dates here will be based on
17047
14:36:31,520 --> 14:36:37,276
today's date or when you're watching
17048
14:36:34,116 --> 14:36:39,796
this video so this will be 7 days after
17049
14:36:37,276 --> 14:36:42,480
today or 7 days after when you're
17050
14:36:39,796 --> 14:36:45,160
watching this video this will be 3 days
17051
14:36:42,480 --> 14:36:47,480
after today or 3 days after when you're
17052
14:36:45,160 --> 14:36:49,720
watching this video and this will be one
17053
14:36:47,480 --> 14:36:52,276
day after
17054
14:36:49,720 --> 14:36:54,916
today now one thing we need to fix here
17055
14:36:52,276 --> 14:36:57,040
is that these selectors are empty
17056
14:36:54,916 --> 14:37:00,436
however we want the delivery option that
17057
14:36:57,040 --> 14:37:02,680
is saved in the cart to be checked to do
17058
14:37:00,436 --> 14:37:05,360
that let's go back to our
17059
14:37:02,680 --> 14:37:08,840
code and in order to make one of these
17060
14:37:05,360 --> 14:37:11,640
selectors selected we're going to scroll
17061
14:37:08,840 --> 14:37:13,596
down to the input
17062
14:37:11,640 --> 14:37:16,480
element and we're going to add an
17063
14:37:13,596 --> 14:37:19,000
attribute called
17064
14:37:16,480 --> 14:37:20,276
checked and this attribute makes a
17065
14:37:19,000 --> 14:37:22,840
selector
17066
14:37:20,276 --> 14:37:25,240
checked however we don't want all of
17067
14:37:22,840 --> 14:37:27,680
these delivery options to be checked we
17068
14:37:25,240 --> 14:37:30,240
only want it to be checked if it matches
17069
14:37:27,680 --> 14:37:32,956
the delivery option ID that is saved in
17070
14:37:30,240 --> 14:37:35,160
the cart so let's write some code up
17071
14:37:32,956 --> 14:37:37,360
here to figure out which delivery option
17072
14:37:35,160 --> 14:37:41,240
should be checked we're going to create
17073
14:37:37,360 --> 14:37:43,160
a variable const is
17074
14:37:41,240 --> 14:37:46,080
checked
17075
14:37:43,160 --> 14:37:49,596
equals and we only want it to be checked
17076
14:37:46,080 --> 14:37:53,360
if this delivery options ID matches the
17077
14:37:49,596 --> 14:37:59,756
delivery option ID in the cart so we'll
17078
14:37:53,360 --> 14:38:02,200
test if delivery option. ID is equal to
17079
14:37:59,756 --> 14:38:06,276
the cart item
17080
14:38:02,200 --> 14:38:09,080
do delivery option
17081
14:38:06,276 --> 14:38:12,276
ID now inside this function we actually
17082
14:38:09,080 --> 14:38:16,160
don't have access to cart item so let's
17083
14:38:12,276 --> 14:38:19,320
actually pass it in as a parameter cart
17084
14:38:16,160 --> 14:38:22,116
item up here and then when we call the
17085
14:38:19,320 --> 14:38:24,916
function this outer function has access
17086
14:38:22,116 --> 14:38:28,680
to the cart item so we're going to give
17087
14:38:24,916 --> 14:38:30,596
it the cart item so we're going to put
17088
14:38:28,680 --> 14:38:32,360
it into this function and then we can
17089
14:38:30,596 --> 14:38:34,956
use it down here
17090
14:38:32,360 --> 14:38:37,520
so now that we have this
17091
14:38:34,956 --> 14:38:40,360
variable instead of being checked all
17092
14:38:37,520 --> 14:38:42,916
the time we're going to remove this and
17093
14:38:40,360 --> 14:38:46,560
insert and we're going to use a tary
17094
14:38:42,916 --> 14:38:50,160
operator here is
17095
14:38:46,560 --> 14:38:52,240
checked question mark and colon so we
17096
14:38:50,160 --> 14:38:55,916
can also use a ternary operator when
17097
14:38:52,240 --> 14:38:58,000
we're inserting into a string so again
17098
14:38:55,916 --> 14:39:00,796
if this is true it's going to get the
17099
14:38:58,000 --> 14:39:02,720
value after the question mark So if it
17100
14:39:00,796 --> 14:39:05,080
is checked we're going to give it the
17101
14:39:02,720 --> 14:39:08,040
value
17102
14:39:05,080 --> 14:39:11,116
checked if this is false we're going to
17103
14:39:08,040 --> 14:39:13,200
give it the value of empty string so
17104
14:39:11,116 --> 14:39:16,240
it's the same thing as if this attribute
17105
14:39:13,200 --> 14:39:18,480
didn't exist so now if we
17106
14:39:16,240 --> 14:39:20,756
save you'll notice that the correct
17107
14:39:18,480 --> 14:39:23,116
delivery option is checked for each
17108
14:39:20,756 --> 14:39:25,200
product the first product we saved
17109
14:39:23,116 --> 14:39:28,000
delivery option one and the second
17110
14:39:25,200 --> 14:39:31,560
product we say delivery option
17111
14:39:28,000 --> 14:39:33,916
two finally let's replace this date at
17112
14:39:31,560 --> 14:39:35,080
the top with the delivery date that we
17113
14:39:33,916 --> 14:39:37,480
selected
17114
14:39:35,080 --> 14:39:41,560
here we'll go back to our
17115
14:39:37,480 --> 14:39:44,756
code and we'll scroll to the
17116
14:39:41,560 --> 14:39:47,040
top until we see this date in our code
17117
14:39:44,756 --> 14:39:49,360
here so now we're going to calculate
17118
14:39:47,040 --> 14:39:52,200
this date using the delivery option that
17119
14:39:49,360 --> 14:39:54,680
we picked so remember that inside the
17120
14:39:52,200 --> 14:39:57,480
cart we only saved the delivery option
17121
14:39:54,680 --> 14:39:58,680
ID so let's use this to get the full
17122
14:39:57,480 --> 14:40:01,880
delivery
17123
14:39:58,680 --> 14:40:06,040
option so at the top here let's get the
17124
14:40:01,880 --> 14:40:11,916
delivery option ID out of the cart const
17125
14:40:06,040 --> 14:40:15,640
delivery option ID equals cart item.
17126
14:40:11,916 --> 14:40:15,640
delivery option
17127
14:40:16,756 --> 14:40:22,276
ID next we're going to use this ID to
17128
14:40:19,640 --> 14:40:25,276
find the full delivery option now we did
17129
14:40:22,276 --> 14:40:26,796
something similar with the product ID we
17130
14:40:25,276 --> 14:40:28,880
Loop through the products found a
17131
14:40:26,796 --> 14:40:31,796
matching ID and then saved it in a
17132
14:40:28,880 --> 14:40:33,560
variable up here so we'll do the same
17133
14:40:31,796 --> 14:40:35,596
let's create a variable to store the
17134
14:40:33,560 --> 14:40:38,520
result let
17135
14:40:35,596 --> 14:40:41,400
delivery option and then we're going to
17136
14:40:38,520 --> 14:40:46,720
Loop through the delivery options so
17137
14:40:41,400 --> 14:40:47,916
delivery options. for each brackets and
17138
14:40:46,720 --> 14:40:51,000
a
17139
14:40:47,916 --> 14:40:53,520
function and let's name the parameter
17140
14:40:51,000 --> 14:40:56,400
option because we use the name delivery
17141
14:40:53,520 --> 14:41:01,480
option up here so in here we're going to
17142
14:40:56,400 --> 14:41:07,680
look for a matching ID so if this option
17143
14:41:01,480 --> 14:41:07,680
ID is equal to the delivery option ID
17144
14:41:09,360 --> 14:41:16,956
here we're going to save this inside
17145
14:41:12,200 --> 14:41:19,560
this variable so delivery option equals
17146
14:41:16,956 --> 14:41:21,916
option so now we have the full delivery
17147
14:41:19,560 --> 14:41:24,200
option in our code and we can use it to
17148
14:41:21,916 --> 14:41:26,320
get the delivery days property and then
17149
14:41:24,200 --> 14:41:29,436
calculate the day that we need
17150
14:41:26,320 --> 14:41:32,240
here to calculate this state we already
17151
14:41:29,436 --> 14:41:34,320
wrote some code for this at the bottom
17152
14:41:32,240 --> 14:41:37,040
if we scroll down in our
17153
14:41:34,320 --> 14:41:39,916
code when we created the delivery
17154
14:41:37,040 --> 14:41:42,720
options we calculated the date for each
17155
14:41:39,916 --> 14:41:46,520
delivery option so we can reuse this
17156
14:41:42,720 --> 14:41:47,720
code above so let's select this code and
17157
14:41:46,520 --> 14:41:49,560
then right
17158
14:41:47,720 --> 14:41:52,916
click
17159
14:41:49,560 --> 14:41:56,040
copy and then at the
17160
14:41:52,916 --> 14:41:58,720
top after we get the delivery option
17161
14:41:56,040 --> 14:42:02,200
we're just going to rightclick and paste
17162
14:41:58,720 --> 14:42:02,200
that code again
17163
14:42:02,400 --> 14:42:07,480
and if we need to we can reformat by
17164
14:42:04,480 --> 14:42:10,480
selecting these lines and press shift
17165
14:42:07,480 --> 14:42:12,956
tab so this code will take the delivery
17166
14:42:10,480 --> 14:42:14,916
option that we selected and calculate
17167
14:42:12,956 --> 14:42:18,000
the delivery date that we need to show
17168
14:42:14,916 --> 14:42:20,160
down here and now instead of using the
17169
14:42:18,000 --> 14:42:23,320
same date every time we're going to
17170
14:42:20,160 --> 14:42:28,916
remove this and insert the date string
17171
14:42:23,320 --> 14:42:32,400
that we created Above So date string and
17172
14:42:28,916 --> 14:42:34,756
save so now this date string up here
17173
14:42:32,400 --> 14:42:38,160
will match the delivery date that we
17174
14:42:34,756 --> 14:42:40,436
chose on the right side so that's how we
17175
14:42:38,160 --> 14:42:44,520
generate the HTML for the delivery
17176
14:42:40,436 --> 14:42:46,276
options using the DJs external Library
17177
14:42:44,520 --> 14:42:50,320
so now let's take a look at our changes
17178
14:42:46,276 --> 14:42:52,560
in git we'll go to our code and open the
17179
14:42:50,320 --> 14:42:52,560
git
17180
14:42:54,080 --> 14:43:00,400
section and here it'll tell us in cart.
17181
14:42:57,320 --> 14:43:01,596
JS we added delivery option IDs to the
17182
14:43:00,400 --> 14:43:03,596
cart
17183
14:43:01,596 --> 14:43:06,756
as well as when we add to the
17184
14:43:03,596 --> 14:43:09,880
cart and then in this file we created
17185
14:43:06,756 --> 14:43:09,880
the list of delivery
17186
14:43:11,116 --> 14:43:16,840
options and in checkout. JS instead of
17187
14:43:14,200 --> 14:43:20,000
writing this HTML directly we generated
17188
14:43:16,840 --> 14:43:23,116
it and then in money. JS we learned
17189
14:43:20,000 --> 14:43:26,796
about default exports so let's type a
17190
14:43:23,116 --> 14:43:33,000
message to describe our changes save
17191
14:43:26,796 --> 14:43:36,400
data and generate HTML for for delivery
17192
14:43:33,000 --> 14:43:36,400
options and
17193
14:43:39,360 --> 14:43:46,240
commit the last step is to make it
17194
14:43:43,520 --> 14:43:49,756
interactive so when we click a delivery
17195
14:43:46,240 --> 14:43:52,240
option we need to do two things first we
17196
14:43:49,756 --> 14:43:55,916
need to update the delivery option ID in
17197
14:43:52,240 --> 14:43:58,000
the cart array and number two we need to
17198
14:43:55,916 --> 14:44:00,520
update the page so we need to update
17199
14:43:58,000 --> 14:44:02,360
this date here to match the date that we
17200
14:44:00,520 --> 14:44:04,596
select
17201
14:44:02,360 --> 14:44:06,400
let's start with the first step let's
17202
14:44:04,596 --> 14:44:09,000
create a function for updating the
17203
14:44:06,400 --> 14:44:10,200
delivery option in the cart we're going
17204
14:44:09,000 --> 14:44:13,680
to go to our
17205
14:44:10,200 --> 14:44:15,840
code and we're going to open the file
17206
14:44:13,680 --> 14:44:19,240
called cart.
17207
14:44:15,840 --> 14:44:21,400
JS so because we're modifying the cart a
17208
14:44:19,240 --> 14:44:23,480
best practice is to put the code inside
17209
14:44:21,400 --> 14:44:26,560
this file this file should contain all
17210
14:44:23,480 --> 14:44:28,680
the code that manages the cart so we're
17211
14:44:26,560 --> 14:44:31,000
going to scroll down to the bottom and
17212
14:44:28,680 --> 14:44:34,520
we're going to add a new function so
17213
14:44:31,000 --> 14:44:36,320
let's type function and let's name it
17214
14:44:34,520 --> 14:44:40,160
update
17215
14:44:36,320 --> 14:44:42,640
delivery option brackets and curly
17216
14:44:40,160 --> 14:44:45,000
brackets so when we update a delivery
17217
14:44:42,640 --> 14:44:46,840
option we need to know the product that
17218
14:44:45,000 --> 14:44:49,160
we want to update as well as the
17219
14:44:46,840 --> 14:44:50,840
delivery option that we chose so we're
17220
14:44:49,160 --> 14:44:56,596
going to need two things for this
17221
14:44:50,840 --> 14:44:59,320
function the product ID and the delivery
17222
14:44:56,596 --> 14:44:59,320
option
17223
14:44:59,916 --> 14:45:05,040
ID so the steps to do this is first
17224
14:45:03,160 --> 14:45:07,596
we're going to Loop through the cart and
17225
14:45:05,040 --> 14:45:10,880
find the product and then we're going to
17226
14:45:07,596 --> 14:45:13,560
update the delivery option ID of that
17227
14:45:10,880 --> 14:45:16,116
product so to find the product using the
17228
14:45:13,560 --> 14:45:20,240
product ID we already have some code for
17229
14:45:16,116 --> 14:45:22,756
this if we scroll up to the add to cart
17230
14:45:20,240 --> 14:45:25,116
function we have this code which takes a
17231
14:45:22,756 --> 14:45:27,756
product ID and finds the matching
17232
14:45:25,116 --> 14:45:29,796
product in the cart so let's just make a
17233
14:45:27,756 --> 14:45:31,956
copy of this code we're going to select
17234
14:45:29,796 --> 14:45:34,400
it right click
17235
14:45:31,956 --> 14:45:39,756
copy and then paste it into our new
17236
14:45:34,400 --> 14:45:42,636
function so down here right click and
17237
14:45:39,756 --> 14:45:44,796
paste so this will give us the card item
17238
14:45:42,636 --> 14:45:45,680
that matches this product ID and save it
17239
14:45:44,796 --> 14:45:49,276
in this
17240
14:45:45,680 --> 14:45:51,956
variable next each card item has a
17241
14:45:49,276 --> 14:45:54,436
property called delivery option ID so
17242
14:45:51,956 --> 14:45:57,276
we're just going to update that property
17243
14:45:54,436 --> 14:46:02,480
so down here we can just type the code
17244
14:45:57,276 --> 14:46:05,596
matching item. delivery op option ID and
17245
14:46:02,480 --> 14:46:07,916
make it equal to the delivery option ID
17246
14:46:05,596 --> 14:46:10,160
that we give to this function so
17247
14:46:07,916 --> 14:46:13,000
delivery option
17248
14:46:10,160 --> 14:46:15,636
ID and lastly because we updated the
17249
14:46:13,000 --> 14:46:18,040
cart we should save it to local
17250
14:46:15,636 --> 14:46:22,040
storage so we can use this function we
17251
14:46:18,040 --> 14:46:26,240
created earlier save to
17252
14:46:22,040 --> 14:46:28,756
storage and brackets now let's
17253
14:46:26,240 --> 14:46:31,480
save now that we have this function
17254
14:46:28,756 --> 14:46:33,436
let's use it on the checkout page so
17255
14:46:31,480 --> 14:46:36,080
first let's export it so we can use this
17256
14:46:33,436 --> 14:46:36,756
in another file we're going to export
17257
14:46:36,080 --> 14:46:39,080
this
17258
14:46:36,756 --> 14:46:43,200
function and
17259
14:46:39,080 --> 14:46:46,436
save and then open checkout.
17260
14:46:43,200 --> 14:46:48,360
JS and then in our project we need to
17261
14:46:46,436 --> 14:46:50,320
add event listeners to each of these
17262
14:46:48,360 --> 14:46:53,116
delivery options so we run some code
17263
14:46:50,320 --> 14:46:55,480
when we click them so inside our code
17264
14:46:53,116 --> 14:46:58,480
here we're going to scroll to the HTML
17265
14:46:55,480 --> 14:47:01,080
for each delivery option which is right
17266
14:46:58,480 --> 14:47:04,840
here and then we're going to add a class
17267
14:47:01,080 --> 14:47:08,436
so we can select it using the Dom js-
17268
14:47:04,840 --> 14:47:11,160
delivery D option and then we'll add an
17269
14:47:08,436 --> 14:47:13,720
event listener to these so we'll scroll
17270
14:47:11,160 --> 14:47:15,956
down and down here we'll add the event
17271
14:47:13,720 --> 14:47:20,880
listener using
17272
14:47:15,956 --> 14:47:23,040
document. query selector all brackets
17273
14:47:20,880 --> 14:47:28,360
and a string will'll select that class
17274
14:47:23,040 --> 14:47:31,000
we just created using dot js- delivery D
17275
14:47:28,360 --> 14:47:37,320
option
17276
14:47:31,000 --> 14:47:37,320
and then dot for each brackets and a
17277
14:47:37,756 --> 14:47:42,360
function so for each option we're going
17278
14:47:40,040 --> 14:47:44,840
to add an event listener and listen for
17279
14:47:42,360 --> 14:47:47,240
clicks so let's just call each of the
17280
14:47:44,840 --> 14:47:49,796
options an
17281
14:47:47,240 --> 14:47:53,000
element so for each of these elements
17282
14:47:49,796 --> 14:47:56,756
we're going to element.
17283
14:47:53,000 --> 14:47:59,796
addevent listener brackets and we're
17284
14:47:56,756 --> 14:48:01,596
going to listen for clicks comma and
17285
14:47:59,796 --> 14:48:02,796
we're going to run this function when we
17286
14:48:01,596 --> 14:48:05,596
click
17287
14:48:02,796 --> 14:48:08,480
it so as we said the first thing we'll
17288
14:48:05,596 --> 14:48:11,240
do is to update the delivery option ID
17289
14:48:08,480 --> 14:48:13,756
in the cart so now let's import that
17290
14:48:11,240 --> 14:48:16,200
function that we created earlier we're
17291
14:48:13,756 --> 14:48:18,880
going to scroll to the
17292
14:48:16,200 --> 14:48:21,080
top and we're already importing from the
17293
14:48:18,880 --> 14:48:23,240
cart so to import something else we're
17294
14:48:21,080 --> 14:48:27,560
going to add a comma and we're going to
17295
14:48:23,240 --> 14:48:30,436
import that function update delivery
17296
14:48:27,560 --> 14:48:32,720
option so now let's scroll back down and
17297
14:48:30,436 --> 14:48:35,480
use use it in our
17298
14:48:32,720 --> 14:48:39,080
code so here when we click a delivery
17299
14:48:35,480 --> 14:48:42,240
option we're going to update delivery
17300
14:48:39,080 --> 14:48:44,756
option brackets now we said we need to
17301
14:48:42,240 --> 14:48:48,116
give this function two things the
17302
14:48:44,756 --> 14:48:51,956
product ID that we want to updated for
17303
14:48:48,116 --> 14:48:56,040
as well as the delivery option ID that
17304
14:48:51,956 --> 14:48:59,436
we picked but how do we get these two
17305
14:48:56,040 --> 14:49:02,560
values and the answer is if we scroll
17306
14:48:59,436 --> 14:49:05,636
up here here we have access to the
17307
14:49:02,560 --> 14:49:07,880
product ID and we also have access to
17308
14:49:05,636 --> 14:49:10,796
the delivery option
17309
14:49:07,880 --> 14:49:13,320
ID so we can use data attributes to
17310
14:49:10,796 --> 14:49:17,080
attach it to this element
17311
14:49:13,320 --> 14:49:19,680
here so let's create a data attribute
17312
14:49:17,080 --> 14:49:24,320
data-
17313
14:49:19,680 --> 14:49:28,680
product-id equals double quotes and
17314
14:49:24,320 --> 14:49:32,040
insert the product ID which is matching
17315
14:49:28,680 --> 14:49:35,080
product. ID and we're also going to use
17316
14:49:32,040 --> 14:49:39,520
a data attribute for the delivery option
17317
14:49:35,080 --> 14:49:41,000
data- delivery D option- ID equals
17318
14:49:39,520 --> 14:49:43,360
double
17319
14:49:41,000 --> 14:49:49,436
quotes and we're going to insert the
17320
14:49:43,360 --> 14:49:52,796
delivery option here so delivery
17321
14:49:49,436 --> 14:49:52,796
option. and
17322
14:49:53,000 --> 14:49:59,320
save next let's scroll back
17323
14:49:55,796 --> 14:50:01,116
down and then here we're going to get
17324
14:49:59,320 --> 14:50:05,400
those values out of the the data
17325
14:50:01,116 --> 14:50:08,116
attributes by using const and let's use
17326
14:50:05,400 --> 14:50:13,160
the shorthand property here for practice
17327
14:50:08,116 --> 14:50:15,840
curly brackets equals the element. data
17328
14:50:13,160 --> 14:50:20,320
set and then out of the data attributes
17329
14:50:15,840 --> 14:50:24,596
we're going to get the product ID comma
17330
14:50:20,320 --> 14:50:27,636
as well as the delivery option
17331
14:50:24,596 --> 14:50:29,520
ID as a reminder this is a shorthand
17332
14:50:27,636 --> 14:50:32,200
property it does the same thing as the
17333
14:50:29,520 --> 14:50:34,436
code down here but it's just a
17334
14:50:32,200 --> 14:50:38,040
shortcut now let's
17335
14:50:34,436 --> 14:50:41,200
save and try out the project we'll go
17336
14:50:38,040 --> 14:50:44,400
back and here if we click the second
17337
14:50:41,200 --> 14:50:47,000
delivery option and then refresh the
17338
14:50:44,400 --> 14:50:50,116
page you'll notice that now this one is
17339
14:50:47,000 --> 14:50:52,116
checked and the date here is
17340
14:50:50,116 --> 14:50:54,436
correct so that's how we make the
17341
14:50:52,116 --> 14:50:57,116
section interactive we just update the
17342
14:50:54,436 --> 14:50:59,720
cart and then when we refresh the page
17343
14:50:57,116 --> 14:51:02,080
it will regenerate the HTML based on the
17344
14:50:59,720 --> 14:51:04,840
new cart
17345
14:51:02,080 --> 14:51:08,400
now let's save our code into git we'll
17346
14:51:04,840 --> 14:51:10,756
go back and open the git
17347
14:51:08,400 --> 14:51:13,756
section and then it will tell us in
17348
14:51:10,756 --> 14:51:15,680
cart. JS we added this function for
17349
14:51:13,756 --> 14:51:19,040
updating the delivery
17350
14:51:15,680 --> 14:51:22,080
option and in checkout. JS we imported
17351
14:51:19,040 --> 14:51:24,240
that function and then at the bottom we
17352
14:51:22,080 --> 14:51:26,720
added some event listeners and data
17353
14:51:24,240 --> 14:51:28,240
attributes and we use that function to
17354
14:51:26,720 --> 14:51:30,520
update the
17355
14:51:28,240 --> 14:51:34,796
card now let's add a message describe
17356
14:51:30,520 --> 14:51:36,560
describing our changes make delivery
17357
14:51:34,796 --> 14:51:39,916
options
17358
14:51:36,560 --> 14:51:39,916
interactive and
17359
14:51:43,040 --> 14:51:49,436
commit next when we select a delivery
17360
14:51:45,796 --> 14:51:53,240
option we need to update the
17361
14:51:49,436 --> 14:51:55,720
page so right now in our project when we
17362
14:51:53,240 --> 14:51:58,596
click a delivery option we need to
17363
14:51:55,720 --> 14:52:00,840
refresh the page for the text to be
17364
14:51:58,596 --> 14:52:03,200
updated so what we're going to work on
17365
14:52:00,840 --> 14:52:04,680
now is when we click this we want the
17366
14:52:03,200 --> 14:52:06,956
page to update
17367
14:52:04,680 --> 14:52:09,480
immediately so far in this course the
17368
14:52:06,956 --> 14:52:11,596
way we solve this problem is once we
17369
14:52:09,480 --> 14:52:14,160
click this we're going to use a Dom to
17370
14:52:11,596 --> 14:52:16,320
get this element here and then update
17371
14:52:14,160 --> 14:52:18,680
the text
17372
14:52:16,320 --> 14:52:20,436
directly however the problem with this
17373
14:52:18,680 --> 14:52:23,880
approach is that we need to update the
17374
14:52:20,436 --> 14:52:25,880
page one by one and later there might be
17375
14:52:23,880 --> 14:52:28,956
lots of places on the page that we need
17376
14:52:25,880 --> 14:52:31,480
to update for example when we change a
17377
14:52:28,956 --> 14:52:34,680
delivery option we also need to change
17378
14:52:31,480 --> 14:52:36,400
the numbers here on the right so there's
17379
14:52:34,680 --> 14:52:39,080
potentially a lot of things that we need
17380
14:52:36,400 --> 14:52:41,840
to update one by one and it's easy to
17381
14:52:39,080 --> 14:52:43,956
make a mistake or forget something so
17382
14:52:41,840 --> 14:52:47,880
now we're going to learn a better way to
17383
14:52:43,956 --> 14:52:52,756
update the page we'll go back to our
17384
14:52:47,880 --> 14:52:56,040
code and let's open checkout. JS
17385
14:52:52,756 --> 14:53:00,200
again and notice if we scroll
17386
14:52:56,040 --> 14:53:03,360
up here we already have all of this code
17387
14:53:00,200 --> 14:53:06,796
that takes our data and generates the
17388
14:53:03,360 --> 14:53:09,320
HTML so another way to update the page
17389
14:53:06,796 --> 14:53:12,560
is after we update our data we just need
17390
14:53:09,320 --> 14:53:16,436
to rerun all this code and regenerate
17391
14:53:12,560 --> 14:53:18,160
all this HTML so let's give this a try
17392
14:53:16,436 --> 14:53:21,240
first we're going to put all of this
17393
14:53:18,160 --> 14:53:24,276
code inside a function so we can rerun
17394
14:53:21,240 --> 14:53:27,436
it we're going to scroll to the
17395
14:53:24,276 --> 14:53:31,636
top and let's put this in a function by
17396
14:53:27,436 --> 14:53:36,636
typing function and let's call call it
17397
14:53:31,636 --> 14:53:39,080
render order summary brackets and curly
17398
14:53:36,636 --> 14:53:41,080
brackets so the word render just means
17399
14:53:39,080 --> 14:53:43,276
to display on the
17400
14:53:41,080 --> 14:53:44,880
page and we're going to call this
17401
14:53:43,276 --> 14:53:47,480
section the order
17402
14:53:44,880 --> 14:53:50,840
summary so this function should display
17403
14:53:47,480 --> 14:53:53,160
the order summary on the page next we're
17404
14:53:50,840 --> 14:53:55,680
going to put all of this code inside our
17405
14:53:53,160 --> 14:53:57,560
new function so let's just remove this
17406
14:53:55,680 --> 14:54:00,040
curly bracket
17407
14:53:57,560 --> 14:54:02,040
here and let's actually select all of
17408
14:54:00,040 --> 14:54:05,400
this code and we're just going to
17409
14:54:02,040 --> 14:54:07,796
reformat it by pressing Tab and adding
17410
14:54:05,400 --> 14:54:09,880
an indent and then at the end we're
17411
14:54:07,796 --> 14:54:12,520
going to add back that closed curly
17412
14:54:09,880 --> 14:54:15,360
bracket to finish the
17413
14:54:12,520 --> 14:54:17,720
function so all we did was we put all of
17414
14:54:15,360 --> 14:54:20,880
our code inside a
17415
14:54:17,720 --> 14:54:22,680
function and then at the bottom let's
17416
14:54:20,880 --> 14:54:25,200
run this function because we still need
17417
14:54:22,680 --> 14:54:28,956
to run all this code at the start of our
17418
14:54:25,200 --> 14:54:31,200
page so we're going to type render the
17419
14:54:28,956 --> 14:54:33,720
order summary
17420
14:54:31,200 --> 14:54:35,320
and brackets so this shouldn't change
17421
14:54:33,720 --> 14:54:37,276
anything because we're just running the
17422
14:54:35,320 --> 14:54:41,400
same code but now it's just in a
17423
14:54:37,276 --> 14:54:43,956
function let's save and
17424
14:54:41,400 --> 14:54:46,400
check and everything's still working so
17425
14:54:43,956 --> 14:54:47,400
that's good so now let's go back into
17426
14:54:46,400 --> 14:54:50,956
our
17427
14:54:47,400 --> 14:54:52,916
code and this time to update the page
17428
14:54:50,956 --> 14:54:55,756
instead of using the Dom to update the
17429
14:54:52,916 --> 14:54:58,360
page directly like we did up here we're
17430
14:54:55,756 --> 14:55:02,240
just going to rerun all of this code and
17431
14:54:58,360 --> 14:55:02,240
regenerate all the HTML
17432
14:55:02,436 --> 14:55:08,756
so after we update the data we're going
17433
14:55:04,400 --> 14:55:10,720
to rerun the code using render order
17434
14:55:08,756 --> 14:55:13,000
summary and
17435
14:55:10,720 --> 14:55:15,320
brackets now let's
17436
14:55:13,000 --> 14:55:17,956
save and try it
17437
14:55:15,320 --> 14:55:20,276
out so here let's say we start off with
17438
14:55:17,956 --> 14:55:23,040
the first delivery option if we click
17439
14:55:20,276 --> 14:55:25,240
the third delivery option you'll notice
17440
14:55:23,040 --> 14:55:27,080
that the date up here updates
17441
14:55:25,240 --> 14:55:29,916
automatically if we click the second
17442
14:55:27,080 --> 14:55:31,436
delivery option it updates automatically
17443
14:55:29,916 --> 14:55:33,596
as well
17444
14:55:31,436 --> 14:55:36,360
so that's a better way to keep the page
17445
14:55:33,596 --> 14:55:40,276
up to dat instead of using the Dom and
17446
14:55:36,360 --> 14:55:43,000
changing the HTML directly one by one we
17447
14:55:40,276 --> 14:55:45,560
just update the data and then regenerate
17448
14:55:43,000 --> 14:55:45,560
all of this
17449
14:55:45,880 --> 14:55:50,636
HTML so let's go back into our code and
17450
14:55:48,956 --> 14:55:54,240
there's two things that I want to point
17451
14:55:50,636 --> 14:55:57,360
out here so notice that we put our event
17452
14:55:54,240 --> 14:55:59,116
listeners into this big function and
17453
14:55:57,360 --> 14:56:01,880
that's because when we're regenerating
17454
14:55:59,116 --> 14:56:04,956
all the HTML we're essentially deleting
17455
14:56:01,880 --> 14:56:08,000
the previous HTML and replacing it so we
17456
14:56:04,956 --> 14:56:10,320
need to add the event listeners again
17457
14:56:08,000 --> 14:56:12,680
and the second thing I want to point out
17458
14:56:10,320 --> 14:56:15,360
is that inside the render order summary
17459
14:56:12,680 --> 14:56:16,636
function we can call render order
17460
14:56:15,360 --> 14:56:19,840
summary
17461
14:56:16,636 --> 14:56:23,560
again so a function can actually call
17462
14:56:19,840 --> 14:56:26,200
itself or rerun itself and this feature
17463
14:56:23,560 --> 14:56:30,636
is called recursion it's useful when a
17464
14:56:26,200 --> 14:56:33,560
function needs to rerun all of its code
17465
14:56:30,636 --> 14:56:35,916
so now let's save our changes into git
17466
14:56:33,560 --> 14:56:38,880
we'll open the git section and it will
17467
14:56:35,916 --> 14:56:42,360
tell us in checkout. JS we basically
17468
14:56:38,880 --> 14:56:45,200
moved all of our code into this function
17469
14:56:42,360 --> 14:56:47,840
and then at the bottom we call the
17470
14:56:45,200 --> 14:56:49,840
function at the start of the page and we
17471
14:56:47,840 --> 14:56:52,240
also call the function when we select a
17472
14:56:49,840 --> 14:56:53,956
delivery option so now let's add a
17473
14:56:52,240 --> 14:56:55,840
message describing our
17474
14:56:53,956 --> 14:56:57,520
changes
17475
14:56:55,840 --> 14:57:00,756
regenerate
17476
14:56:57,520 --> 14:57:05,160
HTML when updating
17477
14:57:00,756 --> 14:57:05,160
delivery option and
17478
14:57:07,880 --> 14:57:12,240
commit so the technique we just used
17479
14:57:10,400 --> 14:57:15,360
where we update the data and then
17480
14:57:12,240 --> 14:57:16,720
regenerate all the HTML this technique
17481
14:57:15,360 --> 14:57:21,160
is called
17482
14:57:16,720 --> 14:57:23,636
MVC MVC stands for model view controller
17483
14:57:21,160 --> 14:57:26,796
and is a popular technique in software
17484
14:57:23,636 --> 14:57:29,480
engineering in MVC we split our code
17485
14:57:26,796 --> 14:57:32,400
into three parts the first part is the
17486
14:57:29,480 --> 14:57:34,116
model this is all the code that saves
17487
14:57:32,400 --> 14:57:37,560
and manages the
17488
14:57:34,116 --> 14:57:40,480
data so in our project all the code in
17489
14:57:37,560 --> 14:57:43,956
this data folder is called the model
17490
14:57:40,480 --> 14:57:48,160
because this code saves and manages our
17491
14:57:43,956 --> 14:57:50,320
data the second part of MVC is the view
17492
14:57:48,160 --> 14:57:53,040
this is code that takes the data and
17493
14:57:50,320 --> 14:57:56,276
displays it on the page so in our
17494
14:57:53,040 --> 14:58:00,116
project if we open checkout. JS and
17495
14:57:56,276 --> 14:58:02,560
scroll to the top here we have code that
17496
14:58:00,116 --> 14:58:06,040
takes our data and then generates all
17497
14:58:02,560 --> 14:58:09,000
the HTML so this code is called the
17498
14:58:06,040 --> 14:58:11,840
view the last part of MVC is the
17499
14:58:09,000 --> 14:58:14,116
controller so this runs some code when
17500
14:58:11,840 --> 14:58:17,480
we interact with the
17501
14:58:14,116 --> 14:58:20,320
page so in our project at the
17502
14:58:17,480 --> 14:58:23,160
bottom these event listeners here would
17503
14:58:20,320 --> 14:58:25,360
be called the controller because they do
17504
14:58:23,160 --> 14:58:26,916
something when we interact with the page
17505
14:58:25,360 --> 14:58:30,400
or with the
17506
14:58:26,916 --> 14:58:32,636
view so in MVC we divide our code Lo
17507
14:58:30,400 --> 14:58:34,880
into these three parts and then they
17508
14:58:32,636 --> 14:58:38,200
interact with each other in a
17509
14:58:34,880 --> 14:58:39,916
loop first we use the model to generate
17510
14:58:38,200 --> 14:58:42,720
the
17511
14:58:39,916 --> 14:58:45,636
view so in our code that's what we did
17512
14:58:42,720 --> 14:58:48,520
here we took the model or the data which
17513
14:58:45,636 --> 14:58:52,400
is our cart and then we generated the
17514
14:58:48,520 --> 14:58:55,956
HTML or the view then when we interact
17515
14:58:52,400 --> 14:58:55,956
with the view it will run the
17516
14:58:56,240 --> 14:59:00,636
controller so that's what we did at the
17517
14:58:58,720 --> 14:59:02,636
bottom here
17518
14:59:00,636 --> 14:59:03,680
when we interact with the page we run
17519
14:59:02,636 --> 14:59:08,680
some
17520
14:59:03,680 --> 14:59:08,680
code then the controller will update the
17521
14:59:08,756 --> 14:59:14,596
model so that's what we did here inside
17522
14:59:12,040 --> 14:59:16,720
the controller we just updated our data
17523
14:59:14,596 --> 14:59:19,756
using this
17524
14:59:16,720 --> 14:59:23,320
function and finally we use the updated
17525
14:59:19,756 --> 14:59:26,276
model to regenerate The
17526
14:59:23,320 --> 14:59:28,360
View so that's what this code does it
17527
14:59:26,276 --> 14:59:30,636
takes the updated data and then
17528
14:59:28,360 --> 14:59:32,796
regenerates all the HTM ml or
17529
14:59:30,636 --> 14:59:36,360
regenerates The
17530
14:59:32,796 --> 14:59:38,916
View so that's how MVC Works instead of
17531
14:59:36,360 --> 14:59:40,680
updating the page directly with the Dom
17532
14:59:38,916 --> 14:59:43,956
we just update our data and then
17533
14:59:40,680 --> 14:59:43,956
regenerate all the
17534
14:59:44,480 --> 14:59:51,000
HTML so we use MVC because doing this
17535
14:59:48,520 --> 14:59:51,916
makes sure that the page always matches
17536
14:59:51,000 --> 14:59:56,436
the
17537
14:59:51,916 --> 14:59:59,000
data so MVC is known as a design pattern
17538
14:59:56,436 --> 15:00:01,520
it's a way to organize and design our
17539
14:59:59,000 --> 15:00:03,840
code in the future you might use a
17540
15:00:01,520 --> 15:00:06,200
technology called a JavaScript framework
17541
15:00:03,840 --> 15:00:09,000
to build websites many JavaScript
17542
15:00:06,200 --> 15:00:11,720
Frameworks are based on MVC so it's
17543
15:00:09,000 --> 15:00:15,240
useful to know how it
17544
15:00:11,720 --> 15:00:17,796
works okay now that we learned the MVC
17545
15:00:15,240 --> 15:00:19,520
design pattern let's do some practical
17546
15:00:17,796 --> 15:00:21,956
examples using
17547
15:00:19,520 --> 15:00:24,916
MBC we're going to open our project
17548
15:00:21,956 --> 15:00:27,200
again to the checkout page and we're
17549
15:00:24,916 --> 15:00:30,520
going to create this payment section on
17550
15:00:27,200 --> 15:00:34,040
the right now before we start if we look
17551
15:00:30,520 --> 15:00:35,880
at our code in this checkout. JS file
17552
15:00:34,040 --> 15:00:37,400
you'll notice that we already have a lot
17553
15:00:35,880 --> 15:00:40,240
of code
17554
15:00:37,400 --> 15:00:42,520
here instead of adding even more code to
17555
15:00:40,240 --> 15:00:44,796
this file let's actually split this up
17556
15:00:42,520 --> 15:00:47,560
into two different
17557
15:00:44,796 --> 15:00:50,160
files so one file will be responsible
17558
15:00:47,560 --> 15:00:52,116
for this left section and then one file
17559
15:00:50,160 --> 15:00:54,320
will be responsible for this right
17560
15:00:52,116 --> 15:00:56,436
section we're doing this to keep our
17561
15:00:54,320 --> 15:01:00,000
code more organized and so that we don't
17562
15:00:56,436 --> 15:01:02,916
have too much code in one file
17563
15:01:00,000 --> 15:01:05,796
so let's go back and let's create two
17564
15:01:02,916 --> 15:01:08,636
new files for the checkout page so up
17565
15:01:05,796 --> 15:01:14,240
here we'll create a file and let's call
17566
15:01:08,636 --> 15:01:17,840
this one the order summary. JS and press
17567
15:01:14,240 --> 15:01:20,276
enter and let's create another file for
17568
15:01:17,840 --> 15:01:23,360
the right section and let's call this
17569
15:01:20,276 --> 15:01:27,320
one the payment
17570
15:01:23,360 --> 15:01:29,916
summary. JS and press
17571
15:01:27,320 --> 15:01:32,276
enter now both of these files are
17572
15:01:29,916 --> 15:01:35,200
related to the checkout page so let's
17573
15:01:32,276 --> 15:01:38,116
create a folder and group them together
17574
15:01:35,200 --> 15:01:42,320
we'll create a new folder up here and
17575
15:01:38,116 --> 15:01:43,880
let's call it checkout and press enter
17576
15:01:42,320 --> 15:01:47,840
and we're going to move these two files
17577
15:01:43,880 --> 15:01:50,360
into this new folder so we move that and
17578
15:01:47,840 --> 15:01:50,360
we'll move
17579
15:01:51,880 --> 15:01:58,040
that next let's open checkout. JS and
17580
15:01:55,880 --> 15:02:01,000
let's move all of this code into the
17581
15:01:58,040 --> 15:02:04,636
order summary so we'll press control a
17582
15:02:01,000 --> 15:02:05,480
or command a to select all the code and
17583
15:02:04,636 --> 15:02:07,200
then
17584
15:02:05,480 --> 15:02:10,840
rightclick
17585
15:02:07,200 --> 15:02:14,040
cut and then in here we're going to
17586
15:02:10,840 --> 15:02:16,240
rightclick and
17587
15:02:14,040 --> 15:02:19,880
paste now there's a few things that we
17588
15:02:16,240 --> 15:02:23,680
need to fix here so first our checkout.
17589
15:02:19,880 --> 15:02:25,796
HTML file is still loading checkout. JS
17590
15:02:23,680 --> 15:02:28,436
so we actually need to run this function
17591
15:02:25,796 --> 15:02:31,480
inside checkout. JS instead of inside
17592
15:02:28,436 --> 15:02:35,080
here so let's actually remove
17593
15:02:31,480 --> 15:02:36,240
this and save and we're going to scroll
17594
15:02:35,080 --> 15:02:39,320
to the
17595
15:02:36,240 --> 15:02:42,160
top and let's export this function so we
17596
15:02:39,320 --> 15:02:47,240
can run it inside here so we'll type
17597
15:02:42,160 --> 15:02:51,200
export and save and then inside checkout
17598
15:02:47,240 --> 15:02:54,360
we're going to import curly brackets the
17599
15:02:51,200 --> 15:02:58,596
render order summary
17600
15:02:54,360 --> 15:03:02,520
function from a string and to locate
17601
15:02:58,596 --> 15:03:04,000
this file we're going to type A do slir
17602
15:03:02,520 --> 15:03:06,160
that means to start from the current
17603
15:03:04,000 --> 15:03:10,200
folder and we'll go into the checkout
17604
15:03:06,160 --> 15:03:13,200
folder checkout SL orderers
17605
15:03:10,200 --> 15:03:13,200
summary.
17606
15:03:13,916 --> 15:03:19,796
JS and finally we're going to run this
17607
15:03:16,916 --> 15:03:25,080
function when we load the page so render
17608
15:03:19,796 --> 15:03:25,080
order summary and brackets and
17609
15:03:25,480 --> 15:03:32,160
save another thing we need to fix is if
17610
15:03:28,360 --> 15:03:35,400
we open order summary .js we moved this
17611
15:03:32,160 --> 15:03:38,240
file into a folder so now all of these
17612
15:03:35,400 --> 15:03:41,360
file paths need to be updated do do
17613
15:03:38,240 --> 15:03:43,636
slash is now inside the scripts folder
17614
15:03:41,360 --> 15:03:46,200
and we can't find a data folder anymore
17615
15:03:43,636 --> 15:03:48,520
so this is going to cause an error so to
17616
15:03:46,200 --> 15:03:50,560
find the data folder we need to get out
17617
15:03:48,520 --> 15:03:53,116
of the checkout folder and then we need
17618
15:03:50,560 --> 15:03:55,436
to get out of the scripts folder so we
17619
15:03:53,116 --> 15:03:58,756
need to get out of two folders so we'll
17620
15:03:55,436 --> 15:04:00,400
just add an additional do dot slash and
17621
15:03:58,756 --> 15:04:04,276
then same thing for this we'll add
17622
15:04:00,400 --> 15:04:05,796
another dot dot slash and for the utils
17623
15:04:04,276 --> 15:04:08,636
now we need to get out of the checkout
17624
15:04:05,796 --> 15:04:11,560
folder and then into the utils folder so
17625
15:04:08,636 --> 15:04:13,840
we'll change this to do/
17626
15:04:11,560 --> 15:04:16,276
utils and then for here we're going to
17627
15:04:13,840 --> 15:04:19,160
go out an additional folder so another
17628
15:04:16,276 --> 15:04:21,596
dot dot slash and
17629
15:04:19,160 --> 15:04:24,756
save so now let's check if this still
17630
15:04:21,596 --> 15:04:28,200
works we'll go to our project and
17631
15:04:24,756 --> 15:04:28,200
refresh and try it
17632
15:04:28,240 --> 15:04:34,160
out and the p still works because we're
17633
15:04:31,756 --> 15:04:37,680
still running all of the same code but
17634
15:04:34,160 --> 15:04:39,680
we just organized it into its own file
17635
15:04:37,680 --> 15:04:41,880
so now let's open git and save our
17636
15:04:39,680 --> 15:04:44,560
changes so it's going to tell us that in
17637
15:04:41,880 --> 15:04:47,080
here we removed all this code and then
17638
15:04:44,560 --> 15:04:49,636
we separated it into the order summary
17639
15:04:47,080 --> 15:04:51,916
file and the payment summary file which
17640
15:04:49,636 --> 15:04:54,680
we're going to work on next so let's
17641
15:04:51,916 --> 15:04:57,520
type a message describing our changes
17642
15:04:54,680 --> 15:05:03,636
move order
17643
15:04:57,520 --> 15:05:03,636
summary into its own own file and
17644
15:05:06,320 --> 15:05:11,880
commit now let's start creating the
17645
15:05:08,916 --> 15:05:16,956
payment summary on the right side so in
17646
15:05:11,880 --> 15:05:16,956
our code let's open payment summary.
17647
15:05:18,080 --> 15:05:23,720
JS and just like the order summary let's
17648
15:05:21,040 --> 15:05:27,040
put all our code in a function so we can
17649
15:05:23,720 --> 15:05:30,916
regenerate the HTML if we need to so
17650
15:05:27,040 --> 15:05:34,916
we'll type function and let's call it
17651
15:05:30,916 --> 15:05:36,116
render payment summary brackets and
17652
15:05:34,916 --> 15:05:39,276
curly
17653
15:05:36,116 --> 15:05:43,596
brackets and let's just
17654
15:05:39,276 --> 15:05:47,040
console.log string payment summary just
17655
15:05:43,596 --> 15:05:49,080
to make sure it's working so we'll save
17656
15:05:47,040 --> 15:05:53,400
and let's export this function and then
17657
15:05:49,080 --> 15:05:57,560
run it inside checkout. JS so export
17658
15:05:53,400 --> 15:06:01,360
save and then in checkout. JS at the top
17659
15:05:57,560 --> 15:06:06,796
we're going to import curly brackets the
17660
15:06:01,360 --> 15:06:09,916
render payment summary function from a
17661
15:06:06,796 --> 15:06:13,756
string the current folder go into the
17662
15:06:09,916 --> 15:06:16,680
checkout folder and the payment summary.
17663
15:06:13,756 --> 15:06:19,276
JS file and then at the bottom we're
17664
15:06:16,680 --> 15:06:23,720
going to run the function so render
17665
15:06:19,276 --> 15:06:26,520
payment summary brackets and
17666
15:06:23,720 --> 15:06:30,480
save let's go back to our project and
17667
15:06:26,520 --> 15:06:32,680
open the console rightclick inspect the
17668
15:06:30,480 --> 15:06:35,756
console and we'll see the message
17669
15:06:32,680 --> 15:06:38,360
payment summary so now we know that our
17670
15:06:35,756 --> 15:06:40,720
code here is working and the export is
17671
15:06:38,360 --> 15:06:40,720
working
17672
15:06:40,796 --> 15:06:46,240
correctly now let's remove this code and
17673
15:06:43,956 --> 15:06:48,480
actually build the payment
17674
15:06:46,240 --> 15:06:51,720
summary as always we're going to do
17675
15:06:48,480 --> 15:06:55,116
three steps save the data generate the
17676
15:06:51,720 --> 15:06:58,680
HTML and make it interactive so let's
17677
15:06:55,116 --> 15:07:01,080
start with saving the data in MVC this
17678
15:06:58,680 --> 15:07:03,480
is called the
17679
15:07:01,080 --> 15:07:06,360
model so if we go to our
17680
15:07:03,480 --> 15:07:08,796
project for this section the data that
17681
15:07:06,360 --> 15:07:10,276
we need is just to calculate these
17682
15:07:08,796 --> 15:07:13,080
numbers
17683
15:07:10,276 --> 15:07:15,160
here so let's start by calculating this
17684
15:07:13,080 --> 15:07:18,276
first number here which is the cost of
17685
15:07:15,160 --> 15:07:20,680
the products to calculate this we can
17686
15:07:18,276 --> 15:07:22,956
Loop through the cart and for each
17687
15:07:20,680 --> 15:07:26,436
product in the cart we can multiply the
17688
15:07:22,956 --> 15:07:28,916
products price times the quantity and
17689
15:07:26,436 --> 15:07:31,840
then add everything together now let's
17690
15:07:28,916 --> 15:07:34,436
convert these steps into code we'll go
17691
15:07:31,840 --> 15:07:35,956
to our project and inside the payment
17692
15:07:34,436 --> 15:07:38,840
summary
17693
15:07:35,956 --> 15:07:42,480
file first we need to get the cart so
17694
15:07:38,840 --> 15:07:43,360
let's import it import curly brackets
17695
15:07:42,480 --> 15:07:47,400
the
17696
15:07:43,360 --> 15:07:49,080
cart from the string and we'll locate
17697
15:07:47,400 --> 15:07:51,840
cart.
17698
15:07:49,080 --> 15:07:54,880
JS so first we'll go out of the checkout
17699
15:07:51,840 --> 15:07:57,840
folder do do slash and then go out of
17700
15:07:54,880 --> 15:08:01,436
the scripts folder do do slash and then
17701
15:07:57,840 --> 15:08:01,436
into the data folder
17702
15:08:02,080 --> 15:08:06,880
data.js and
17703
15:08:04,596 --> 15:08:12,520
save and now we're going to Loop through
17704
15:08:06,880 --> 15:08:15,240
the cart so we can type cart. for each
17705
15:08:12,520 --> 15:08:18,116
brackets and a
17706
15:08:15,240 --> 15:08:22,596
function and let's name the parameter
17707
15:08:18,116 --> 15:08:25,520
cart item so for each cart item we have
17708
15:08:22,596 --> 15:08:27,720
the product ID and the quantity so we
17709
15:08:25,520 --> 15:08:30,480
need to multiply the product's price
17710
15:08:27,720 --> 15:08:32,756
times the quantity so first we need to
17711
15:08:30,480 --> 15:08:35,200
use the product ID and get the full
17712
15:08:32,756 --> 15:08:39,480
product details and we already have some
17713
15:08:35,200 --> 15:08:42,720
code for this inside orders summary. JS
17714
15:08:39,480 --> 15:08:45,040
if we scroll down here we have some code
17715
15:08:42,720 --> 15:08:46,400
that takes a product ID and finds the
17716
15:08:45,040 --> 15:08:49,160
matching
17717
15:08:46,400 --> 15:08:51,916
product now instead of copy and pasting
17718
15:08:49,160 --> 15:08:54,360
this code let's actually put this into a
17719
15:08:51,916 --> 15:08:57,160
function so we can reuse this and we'll
17720
15:08:54,360 --> 15:09:01,360
practice some modules so let's select
17721
15:08:57,160 --> 15:09:03,680
this code and rightclick and copy it
17722
15:09:01,360 --> 15:09:05,520
first and then let's go into the
17723
15:09:03,680 --> 15:09:08,116
products. JS
17724
15:09:05,520 --> 15:09:10,480
file and at the top we're going to
17725
15:09:08,116 --> 15:09:14,240
create a function so we can reuse that
17726
15:09:10,480 --> 15:09:18,756
code so let's type function and let's
17727
15:09:14,240 --> 15:09:20,636
name it get product brackets and curer
17728
15:09:18,756 --> 15:09:23,680
brackets and we're going to give this
17729
15:09:20,636 --> 15:09:26,160
function the product ID that we're
17730
15:09:23,680 --> 15:09:31,040
looking for and then let's paste the
17731
15:09:26,160 --> 15:09:33,840
code we copied earlier right click and
17732
15:09:31,040 --> 15:09:36,436
paste so this finds the matching product
17733
15:09:33,840 --> 15:09:39,360
using the product ID and then at the end
17734
15:09:36,436 --> 15:09:42,756
of the function let's return the
17735
15:09:39,360 --> 15:09:45,400
matching product so we can use this
17736
15:09:42,756 --> 15:09:47,360
outside of the function so now let's
17737
15:09:45,400 --> 15:09:51,320
export this function so we can share it
17738
15:09:47,360 --> 15:09:55,000
across files so export and
17739
15:09:51,320 --> 15:09:56,796
save first we'll go to the order summary
17740
15:09:55,000 --> 15:09:58,956
and at the top let's import that
17741
15:09:56,796 --> 15:10:01,116
function so we're already importing from
17742
15:09:58,956 --> 15:10:04,796
product .js we're going to import
17743
15:10:01,116 --> 15:10:07,916
something else using a comma the get
17744
15:10:04,796 --> 15:10:10,680
product function and then down
17745
15:10:07,916 --> 15:10:13,436
here instead of all this
17746
15:10:10,680 --> 15:10:18,000
code we're going to run that function so
17747
15:10:13,436 --> 15:10:20,680
we make this equal to get product and
17748
15:10:18,000 --> 15:10:22,840
run the function and we need to give the
17749
15:10:20,680 --> 15:10:25,840
function the product ID so let's just
17750
15:10:22,840 --> 15:10:28,560
give that here product
17751
15:10:25,840 --> 15:10:31,400
ID and because we're no longer updating
17752
15:10:28,560 --> 15:10:33,756
this variable we can change from let to
17753
15:10:31,400 --> 15:10:36,000
const and
17754
15:10:33,756 --> 15:10:38,080
save let's go to our project to make
17755
15:10:36,000 --> 15:10:39,360
sure everything's still working so that
17756
15:10:38,080 --> 15:10:42,160
looks
17757
15:10:39,360 --> 15:10:45,680
good and now let's use this function
17758
15:10:42,160 --> 15:10:49,560
inside payment summary. JS so the same
17759
15:10:45,680 --> 15:10:53,636
thing we will import curly brackets the
17760
15:10:49,560 --> 15:10:56,720
get product function from a
17761
15:10:53,636 --> 15:11:00,000
string and we'll go to the data folder
17762
15:10:56,720 --> 15:11:03,000
do SL do do SL data SL
17763
15:11:00,000 --> 15:11:05,560
and products.
17764
15:11:03,000 --> 15:11:10,080
JS and let's run that function to get
17765
15:11:05,560 --> 15:11:12,240
the full product so get product brackets
17766
15:11:10,080 --> 15:11:13,840
and then each cart item has the product
17767
15:11:12,240 --> 15:11:18,596
ID so we're going to give it to the
17768
15:11:13,840 --> 15:11:21,360
function cart item. product
17769
15:11:18,596 --> 15:11:23,636
ID and let's save this product in a
17770
15:11:21,360 --> 15:11:27,796
variable so we can use it for our
17771
15:11:23,636 --> 15:11:30,116
calculations con product equals get
17772
15:11:27,796 --> 15:11:32,520
product so now now as we said we're
17773
15:11:30,116 --> 15:11:36,160
going to multiply the product's price by
17774
15:11:32,520 --> 15:11:38,796
the quantity so down here we can do
17775
15:11:36,160 --> 15:11:42,240
product and it has a property
17776
15:11:38,796 --> 15:11:46,320
called price sense and we're going to
17777
15:11:42,240 --> 15:11:49,436
multiply it by the cart item and this
17778
15:11:46,320 --> 15:11:52,240
has a property do
17779
15:11:49,436 --> 15:11:54,276
quantity and the last step is to add all
17780
15:11:52,240 --> 15:11:56,956
of these
17781
15:11:54,276 --> 15:11:59,276
together so outside of the loop let's
17782
15:11:56,956 --> 15:12:02,880
create a variable to save the result of
17783
15:11:59,276 --> 15:12:08,160
adding them together let's type let and
17784
15:12:02,880 --> 15:12:11,200
we'll name it product price sense equals
17785
15:12:08,160 --> 15:12:13,160
and we'll make it zero to start and then
17786
15:12:11,200 --> 15:12:15,796
every time we Loop through the cart
17787
15:12:13,160 --> 15:12:20,916
we're going to add this to this variable
17788
15:12:15,796 --> 15:12:23,400
so we'll type product price sense plus
17789
15:12:20,916 --> 15:12:25,636
equals this value
17790
15:12:23,400 --> 15:12:28,680
here and that's how we calculate the
17791
15:12:25,636 --> 15:12:30,560
cost of the products so at the bottom
17792
15:12:28,680 --> 15:12:35,040
let's
17793
15:12:30,560 --> 15:12:38,080
console.log the product price sense just
17794
15:12:35,040 --> 15:12:41,240
to make sure that this is working we'll
17795
15:12:38,080 --> 15:12:42,160
save and in our project we're going to
17796
15:12:41,240 --> 15:12:44,756
check the
17797
15:12:42,160 --> 15:12:47,360
console and it will give us this number
17798
15:12:44,756 --> 15:12:50,560
here and this number should match the
17799
15:12:47,360 --> 15:12:53,080
number on the page except it's in sense
17800
15:12:50,560 --> 15:12:56,320
and assuming you also have two socks and
17801
15:12:53,080 --> 15:12:58,796
one basketball in your
17802
15:12:56,320 --> 15:13:01,160
cart okay so that's how we calculate
17803
15:12:58,796 --> 15:13:03,680
this first number here now let's
17804
15:13:01,160 --> 15:13:06,680
calculate the second number which is the
17805
15:13:03,680 --> 15:13:08,720
cost of shipping so to calculate this
17806
15:13:06,680 --> 15:13:11,796
we're going to Loop through the cart and
17807
15:13:08,720 --> 15:13:14,276
add all the shipping costs
17808
15:13:11,796 --> 15:13:17,040
together so let's go into our
17809
15:13:14,276 --> 15:13:19,400
code and here we're already looping
17810
15:13:17,040 --> 15:13:21,636
through the cart so instead of creating
17811
15:13:19,400 --> 15:13:25,080
another loop let's just calculate the
17812
15:13:21,636 --> 15:13:26,276
shipping cost in the same Loop so let's
17813
15:13:25,080 --> 15:13:29,596
create some new
17814
15:13:26,276 --> 15:13:32,320
lines and each card item has a property
17815
15:13:29,596 --> 15:13:35,040
delivery option ID so we need to use
17816
15:13:32,320 --> 15:13:38,720
this ID to get the full delivery option
17817
15:13:35,040 --> 15:13:41,080
which has the price so in the order
17818
15:13:38,720 --> 15:13:43,480
summary we also have this code that
17819
15:13:41,080 --> 15:13:46,080
takes the delivery option ID and finds
17820
15:13:43,480 --> 15:13:48,560
the full delivery option so again let's
17821
15:13:46,080 --> 15:13:49,720
create a function to share and reuse
17822
15:13:48,560 --> 15:13:52,680
this
17823
15:13:49,720 --> 15:13:55,680
code so first let's select this code and
17824
15:13:52,680 --> 15:13:58,080
we'll write click and
17825
15:13:55,680 --> 15:13:59,720
copy and let's go to the delivery
17826
15:13:58,080 --> 15:14:02,636
options. Js
17827
15:13:59,720 --> 15:14:03,756
file and then at the bottom we'll create
17828
15:14:02,636 --> 15:14:07,916
a
17829
15:14:03,756 --> 15:14:11,360
function let's call it get delivery
17830
15:14:07,916 --> 15:14:14,400
option brackets and curly brackets and
17831
15:14:11,360 --> 15:14:15,956
we'll give this function the delivery
17832
15:14:14,400 --> 15:14:19,756
option
17833
15:14:15,956 --> 15:14:23,116
ID and inside here we'll rightclick and
17834
15:14:19,756 --> 15:14:25,080
paste the code that we copied earlier so
17835
15:14:23,116 --> 15:14:28,360
this will take this ID and get the
17836
15:14:25,080 --> 15:14:30,720
delivery option from this array and
17837
15:14:28,360 --> 15:14:34,720
let's return return this delivery
17838
15:14:30,720 --> 15:14:37,840
option so we can use it outside of this
17839
15:14:34,720 --> 15:14:40,436
function and just to be safe let's also
17840
15:14:37,840 --> 15:14:43,560
give this a default value if we don't
17841
15:14:40,436 --> 15:14:45,840
find a delivery option so we'll use the
17842
15:14:43,560 --> 15:14:48,880
default operator
17843
15:14:45,840 --> 15:14:53,240
or and let's make the default value the
17844
15:14:48,880 --> 15:14:58,320
first delivery option so delivery
17845
15:14:53,240 --> 15:14:58,320
options square bracket 0
17846
15:15:00,276 --> 15:15:06,160
so now let's export this and
17847
15:15:03,436 --> 15:15:08,956
save and then inside order summary we'll
17848
15:15:06,160 --> 15:15:11,400
use this function so at the
17849
15:15:08,956 --> 15:15:14,720
top we're already importing from
17850
15:15:11,400 --> 15:15:17,796
delivery options so we'll type a comma
17851
15:15:14,720 --> 15:15:20,596
and get delivery
17852
15:15:17,796 --> 15:15:23,956
option and then down here instead of
17853
15:15:20,596 --> 15:15:26,840
running all this code we'll select it
17854
15:15:23,956 --> 15:15:29,880
and make this equal and run the function
17855
15:15:26,840 --> 15:15:32,400
get delivery option
17856
15:15:29,880 --> 15:15:36,636
brackets and we'll give it this delivery
17857
15:15:32,400 --> 15:15:40,080
option ID delivery option
17858
15:15:36,636 --> 15:15:42,596
ID and we can change from let to const
17859
15:15:40,080 --> 15:15:45,116
since we're not changing this variable
17860
15:15:42,596 --> 15:15:48,116
so now let's save and let's use this
17861
15:15:45,116 --> 15:15:52,636
function inside payment summary as well
17862
15:15:48,116 --> 15:15:57,320
so in here at the top we'll import curly
17863
15:15:52,636 --> 15:16:00,320
brackets the get delivery option
17864
15:15:57,320 --> 15:16:04,636
function from
17865
15:16:00,320 --> 15:16:11,480
quotes the data folder do do slash do
17866
15:16:04,636 --> 15:16:11,480
data slash and the delivery options. JS
17867
15:16:11,636 --> 15:16:18,160
file and now we'll run this function get
17868
15:16:15,520 --> 15:16:20,680
delivery option and
17869
15:16:18,160 --> 15:16:23,200
brackets and each cart item has a
17870
15:16:20,680 --> 15:16:28,240
delivery option ID so we'll put that
17871
15:16:23,200 --> 15:16:29,596
into the function cart item. delivery
17872
15:16:28,240 --> 15:16:32,520
option
17873
15:16:29,596 --> 15:16:38,480
ID and let's save this in a
17874
15:16:32,520 --> 15:16:41,160
variable con delivery option
17875
15:16:38,480 --> 15:16:45,400
equals and now we can get the price for
17876
15:16:41,160 --> 15:16:49,240
the delivery option using delivery
17877
15:16:45,400 --> 15:16:51,560
option price sense
17878
15:16:49,240 --> 15:16:54,276
property and finally we're going to add
17879
15:16:51,560 --> 15:16:57,796
all these together so at the top let's
17880
15:16:54,276 --> 15:16:59,636
create a variable to save the result let
17881
15:16:57,796 --> 15:17:04,956
we'll call it ship
17882
15:16:59,636 --> 15:17:07,480
shipping price cents equals zero and
17883
15:17:04,956 --> 15:17:08,436
when we Loop through the cart we're
17884
15:17:07,480 --> 15:17:14,636
going to
17885
15:17:08,436 --> 15:17:17,596
do shipping price sents plus equals this
17886
15:17:14,636 --> 15:17:17,596
delivery options
17887
15:17:17,880 --> 15:17:26,080
price and let's also console.log this to
17888
15:17:21,680 --> 15:17:29,436
make sure it's working so shipping price
17889
15:17:26,080 --> 15:17:31,636
cents and Save
17890
15:17:29,436 --> 15:17:33,796
now let's go to our project and check
17891
15:17:31,636 --> 15:17:33,796
the
17892
15:17:34,796 --> 15:17:40,116
console and this value
17893
15:17:37,400 --> 15:17:43,756
here should be the same as adding these
17894
15:17:40,116 --> 15:17:43,756
two numbers together in
17895
15:17:44,116 --> 15:17:50,040
sense so that's how we calculate the
17896
15:17:46,596 --> 15:17:51,040
second number the shipping price so note
17897
15:17:50,040 --> 15:17:54,080
that this
17898
15:17:51,040 --> 15:17:56,360
$4.99 number is just a practice number
17899
15:17:54,080 --> 15:17:58,520
right now the actual shipping price
17900
15:17:56,360 --> 15:18:01,636
should be the total of adding all these
17901
15:17:58,520 --> 15:18:01,636
sh shipping prices
17902
15:18:01,756 --> 15:18:06,596
together the next number we need to
17903
15:18:03,796 --> 15:18:09,276
calculate is the total before tax so let
17904
15:18:06,596 --> 15:18:11,160
just adding these two numbers together
17905
15:18:09,276 --> 15:18:14,840
inside our
17906
15:18:11,160 --> 15:18:20,400
code let's remove these console. logs
17907
15:18:14,840 --> 15:18:23,680
and we'll create const total before tax
17908
15:18:20,400 --> 15:18:28,116
sense and make it equal and we'll add
17909
15:18:23,680 --> 15:18:32,000
these two together product price sense
17910
15:18:28,116 --> 15:18:36,276
Plus shipping price
17911
15:18:32,000 --> 15:18:39,080
sense and the next number is the tax so
17912
15:18:36,276 --> 15:18:41,880
we're going to calculate a 10% tax on
17913
15:18:39,080 --> 15:18:45,880
this number here to calculate 10% of
17914
15:18:41,880 --> 15:18:50,720
something we can multiply this by 10 /
17915
15:18:45,880 --> 15:18:52,840
100 that's what percent means so 10 ID
17916
15:18:50,720 --> 15:18:55,720
100 is also equal to
17917
15:18:52,840 --> 15:18:57,080
0.1 so we can also multiply this number
17918
15:18:55,720 --> 15:19:00,596
by
17919
15:18:57,080 --> 15:19:05,276
0.1 let's go into code and we'll create
17920
15:19:00,596 --> 15:19:11,880
a variable const tax sense make it equal
17921
15:19:05,276 --> 15:19:13,520
to the total before tax sense times 0.1
17922
15:19:11,880 --> 15:19:16,720
or
17923
15:19:13,520 --> 15:19:19,680
10% finally to calculate the total we're
17924
15:19:16,720 --> 15:19:25,720
going to add these two numbers together
17925
15:19:19,680 --> 15:19:31,360
so const total sense equals the total
17926
15:19:25,720 --> 15:19:34,080
before tax sense Plus the tax
17927
15:19:31,360 --> 15:19:36,520
sense so that's how we calculate all the
17928
15:19:34,080 --> 15:19:39,796
numbers in the payment summary and now
17929
15:19:36,520 --> 15:19:43,480
we have all the data that we need next
17930
15:19:39,796 --> 15:19:46,040
we're going to generate the HTML in MVC
17931
15:19:43,480 --> 15:19:49,596
this is called The
17932
15:19:46,040 --> 15:19:51,680
View so at the bottom here let's create
17933
15:19:49,596 --> 15:19:57,240
a variable to store the
17934
15:19:51,680 --> 15:20:00,000
HTML const payment summary
17935
15:19:57,240 --> 15:20:01,480
HTML and we'll make make it equal to a
17936
15:20:00,000 --> 15:20:03,756
template
17937
15:20:01,480 --> 15:20:05,840
string and then inside here we're going
17938
15:20:03,756 --> 15:20:09,480
to copy and paste the
17939
15:20:05,840 --> 15:20:12,680
HTML so let's open checkout.
17940
15:20:09,480 --> 15:20:16,000
HTML and we're going to scroll up until
17941
15:20:12,680 --> 15:20:18,240
we find the class payment D summary so
17942
15:20:16,000 --> 15:20:21,000
we're going to generate all the HTML
17943
15:20:18,240 --> 15:20:23,560
inside here so let's actually select
17944
15:20:21,000 --> 15:20:26,596
this HTML and move it into our
17945
15:20:23,560 --> 15:20:29,956
JavaScript so we'll select it up until
17946
15:20:26,596 --> 15:20:32,720
this button and then we we can
17947
15:20:29,956 --> 15:20:37,320
rightclick
17948
15:20:32,720 --> 15:20:40,040
cut and remove the new line save and
17949
15:20:37,320 --> 15:20:43,000
then inside the payment summary inside
17950
15:20:40,040 --> 15:20:45,160
the screen we'll rightclick and paste
17951
15:20:43,000 --> 15:20:45,160
the
17952
15:20:45,276 --> 15:20:50,436
HTML and if we need to reformat we can
17953
15:20:48,160 --> 15:20:53,400
select these
17954
15:20:50,436 --> 15:20:55,916
lines and press tab a few times to
17955
15:20:53,400 --> 15:20:55,916
reformat
17956
15:20:57,360 --> 15:21:03,680
it and and
17957
15:21:00,680 --> 15:21:06,320
save next instead of using these same
17958
15:21:03,680 --> 15:21:08,720
numbers every time we're going to take
17959
15:21:06,320 --> 15:21:12,200
the numbers we calculated up here and
17960
15:21:08,720 --> 15:21:15,276
insert it into this HTML string so
17961
15:21:12,200 --> 15:21:19,956
instead of 42.75 every time we're going
17962
15:21:15,276 --> 15:21:22,400
to insert the product price
17963
15:21:19,956 --> 15:21:24,840
sense and let's give it some new lines
17964
15:21:22,400 --> 15:21:27,756
to make it a little easier to
17965
15:21:24,840 --> 15:21:30,360
read now remember that this number is in
17966
15:21:27,756 --> 15:21:33,320
sense and we want to display it as
17967
15:21:30,360 --> 15:21:37,160
dollars to do that we already have a
17968
15:21:33,320 --> 15:21:40,040
function for this so in the utils money.
17969
15:21:37,160 --> 15:21:43,116
JS file we have a function format
17970
15:21:40,040 --> 15:21:45,956
currency that displays it in dollars so
17971
15:21:43,116 --> 15:21:48,720
let's use this function inside payment
17972
15:21:45,956 --> 15:21:49,756
summary so at the top let's import the
17973
15:21:48,720 --> 15:21:54,916
function
17974
15:21:49,756 --> 15:21:59,560
first import curly brackets the format
17975
15:21:54,916 --> 15:22:01,680
currency function from a Str
17976
15:21:59,560 --> 15:22:05,520
and to locate this folder we'll go out
17977
15:22:01,680 --> 15:22:10,360
of the checkout folder do do/ the UIL
17978
15:22:05,520 --> 15:22:10,360
folder SL money.jpg
17979
15:22:28,596 --> 15:22:34,916
numbers here so this one is the shipping
17980
15:22:31,596 --> 15:22:40,080
price so we can
17981
15:22:34,916 --> 15:22:43,840
insert format currency brackets the
17982
15:22:40,080 --> 15:22:45,596
shipping price sents and let's give it
17983
15:22:43,840 --> 15:22:47,796
some new lines to make it a little
17984
15:22:45,596 --> 15:22:51,116
easier to
17985
15:22:47,796 --> 15:22:54,880
read next let's insert the total before
17986
15:22:51,116 --> 15:22:59,276
tax so we'll remove this number and
17987
15:22:54,880 --> 15:23:02,596
insert format currency bracket gets the
17988
15:22:59,276 --> 15:23:06,160
total before tax
17989
15:23:02,596 --> 15:23:06,160
sents and new
17990
15:23:07,320 --> 15:23:12,756
lines and next is the tax we'll remove
17991
15:23:11,276 --> 15:23:19,480
this and
17992
15:23:12,756 --> 15:23:23,040
insert format currency brackets the tax
17993
15:23:19,480 --> 15:23:26,636
sents and we'll enter some new lines and
17994
15:23:23,040 --> 15:23:28,840
finally the total so we remove this
17995
15:23:26,636 --> 15:23:34,916
insert
17996
15:23:28,840 --> 15:23:37,520
format currency brackets total sense and
17997
15:23:34,916 --> 15:23:37,520
add some new
17998
15:23:37,636 --> 15:23:43,276
lines and
17999
15:23:40,320 --> 15:23:45,636
save now before we continue I actually
18000
15:23:43,276 --> 15:23:48,080
learned of a small issue with the format
18001
15:23:45,636 --> 15:23:50,080
currency function so let's open the
18002
15:23:48,080 --> 15:23:52,796
money. JS
18003
15:23:50,080 --> 15:23:56,160
file and I recently learned that this
18004
15:23:52,796 --> 15:23:58,956
two fixed method has a small issue with
18005
15:23:56,160 --> 15:24:02,436
rounding so for some numbers that end in
18006
15:23:58,956 --> 15:24:05,680
five it won't round the number
18007
15:24:02,436 --> 15:24:08,840
properly one way to fix this issue is to
18008
15:24:05,680 --> 15:24:11,796
round the price sense first so that this
18009
15:24:08,840 --> 15:24:15,796
method doesn't have to do any rounding
18010
15:24:11,796 --> 15:24:19,796
so at the front here let's just type
18011
15:24:15,796 --> 15:24:22,360
math.round Open Bracket and close
18012
15:24:19,796 --> 15:24:24,480
bracket so this is just a tricky issue
18013
15:24:22,360 --> 15:24:26,680
that I discovered with the help of AI
18014
15:24:24,480 --> 15:24:29,080
recently we just need to add a little
18015
15:24:26,680 --> 15:24:30,720
bit of code here to fix it
18016
15:24:29,080 --> 15:24:33,840
so now let's save this
18017
15:24:30,720 --> 15:24:36,360
file and go back to payment
18018
15:24:33,840 --> 15:24:39,040
summary so now that we generated all
18019
15:24:36,360 --> 15:24:43,240
this HTML and inserted our numbers into
18020
15:24:39,040 --> 15:24:46,320
it let's put this HTML on the page so
18021
15:24:43,240 --> 15:24:46,320
inside checkout.
18022
15:24:46,520 --> 15:24:50,880
HTML let's give this payment summary
18023
15:24:48,956 --> 15:24:54,916
another class
18024
15:24:50,880 --> 15:24:57,796
js- payment Das summary and then we'll
18025
15:24:54,916 --> 15:24:59,956
select this using the Dom so now let's
18026
15:24:57,796 --> 15:25:03,756
save this
18027
15:24:59,956 --> 15:25:06,880
file inside payment summary at the
18028
15:25:03,756 --> 15:25:11,680
bottom after we create the HTML we're
18029
15:25:06,880 --> 15:25:15,680
going to document. query selector
18030
15:25:11,680 --> 15:25:21,116
brackets and a string and we'll select
18031
15:25:15,680 --> 15:25:24,276
js- payment D summary to get that
18032
15:25:21,116 --> 15:25:29,040
element and we'll change the HTML inside
18033
15:25:24,276 --> 15:25:32,400
that element using do inner Capital H
18034
15:25:29,040 --> 15:25:35,040
HTML and we'll make it equal to the
18035
15:25:32,400 --> 15:25:39,320
payment summary
18036
15:25:35,040 --> 15:25:42,956
HTML that we just created so now let's
18037
15:25:39,320 --> 15:25:45,680
save and check our
18038
15:25:42,956 --> 15:25:47,956
project and now these numbers on the
18039
15:25:45,680 --> 15:25:51,596
right should match what we have in the
18040
15:25:47,956 --> 15:25:54,000
cart and the delivery options that we
18041
15:25:51,596 --> 15:25:56,560
selected so that's how we generate the
18042
15:25:54,000 --> 15:26:00,116
HTML for this section
18043
15:25:56,560 --> 15:26:01,320
here now let's save our changes into git
18044
15:26:00,116 --> 15:26:03,956
we'll open
18045
15:26:01,320 --> 15:26:08,080
git and it will tell us in checkout.
18046
15:26:03,956 --> 15:26:11,080
HTML we removed the HTML we created
18047
15:26:08,080 --> 15:26:13,320
manually in delivery options. JS we
18048
15:26:11,080 --> 15:26:15,520
created this shared function for finding
18049
15:26:13,320 --> 15:26:17,636
the full delivery option and the same
18050
15:26:15,520 --> 15:26:18,880
thing in products. JS for finding the
18051
15:26:17,636 --> 15:26:21,796
full
18052
15:26:18,880 --> 15:26:24,596
product inside checkout. JS we're now
18053
15:26:21,796 --> 15:26:27,200
running all the code inside payment
18054
15:26:24,596 --> 15:26:29,276
summary in order summary we're just
18055
15:26:27,200 --> 15:26:32,520
using those shared functions that we
18056
15:26:29,276 --> 15:26:35,040
created and then in payment summary we
18057
15:26:32,520 --> 15:26:36,720
calculated the numbers and generated all
18058
15:26:35,040 --> 15:26:40,720
the
18059
15:26:36,720 --> 15:26:43,796
HTML and finally in money. JS we fixed a
18060
15:26:40,720 --> 15:26:47,320
small bug related to rounding let's type
18061
15:26:43,796 --> 15:26:51,200
a message to describe our changes save
18062
15:26:47,320 --> 15:26:55,360
data and generate
18063
15:26:51,200 --> 15:26:59,756
HTML for payment
18064
15:26:55,360 --> 15:26:59,756
summary and commit
18065
15:27:03,160 --> 15:27:09,240
the last step is to make it interactive
18066
15:27:06,160 --> 15:27:11,956
in MVC this is called the
18067
15:27:09,240 --> 15:27:14,320
controller let's go to our
18068
15:27:11,956 --> 15:27:16,680
project and one thing we can make
18069
15:27:14,320 --> 15:27:19,596
interactive in this section is the place
18070
15:27:16,680 --> 15:27:22,880
order button however we haven't figured
18071
15:27:19,596 --> 15:27:25,880
out how orders work yet so we'll work on
18072
15:27:22,880 --> 15:27:28,796
this in the next lesson another thing we
18073
15:27:25,880 --> 15:27:32,080
can make interactive however is when we
18074
15:27:28,796 --> 15:27:35,276
change the cart on the left these prices
18075
15:27:32,080 --> 15:27:37,880
should also update so let's make this
18076
15:27:35,276 --> 15:27:41,720
interactive first when we delete a
18077
15:27:37,880 --> 15:27:44,916
product the prices here should update so
18078
15:27:41,720 --> 15:27:46,360
let's actually practice using MVC to
18079
15:27:44,916 --> 15:27:49,240
create this
18080
15:27:46,360 --> 15:27:52,400
functionality according to MVC when we
18081
15:27:49,240 --> 15:27:55,160
click delete we should update the data
18082
15:27:52,400 --> 15:27:58,116
and then regenerate all of this
18083
15:27:55,160 --> 15:28:01,040
HTML so let's get started and go to the
18084
15:27:58,116 --> 15:28:04,916
code for the delete link so this is in
18085
15:28:01,040 --> 15:28:08,160
the order summary section so in our code
18086
15:28:04,916 --> 15:28:11,520
let's open the orders summary. JS
18087
15:28:08,160 --> 15:28:14,276
file and we'll scroll down and find the
18088
15:28:11,520 --> 15:28:16,840
event listener for the delete link which
18089
15:28:14,276 --> 15:28:19,840
is right
18090
15:28:16,840 --> 15:28:22,116
here when we click delete first we're
18091
15:28:19,840 --> 15:28:25,520
going to update the
18092
15:28:22,116 --> 15:28:29,000
data so we already update the data using
18093
15:28:25,520 --> 15:28:31,680
this function remove from cart
18094
15:28:29,000 --> 15:28:34,360
and now the next step according to MBC
18095
15:28:31,680 --> 15:28:37,680
is to just regenerate all the
18096
15:28:34,360 --> 15:28:40,720
HTML so to regenerate the HTML for the
18097
15:28:37,680 --> 15:28:43,480
payment summary we created this function
18098
15:28:40,720 --> 15:28:46,160
at the top render payment
18099
15:28:43,480 --> 15:28:50,160
summary so this will recalculate all the
18100
15:28:46,160 --> 15:28:53,000
numbers and then regenerate the
18101
15:28:50,160 --> 15:28:56,320
HTML so let's import this
18102
15:28:53,000 --> 15:28:58,596
function in order summary. JS we'll
18103
15:28:56,320 --> 15:29:02,040
scroll to the top
18104
15:28:58,596 --> 15:29:07,160
and down here we can import curly
18105
15:29:02,040 --> 15:29:11,320
brackets the render payment summary
18106
15:29:07,160 --> 15:29:14,116
function from a string and we'll locate
18107
15:29:11,320 --> 15:29:16,160
the payment summary file so it's in the
18108
15:29:14,116 --> 15:29:19,680
same folder so we're going to start with
18109
15:29:16,160 --> 15:29:24,596
a slash which is the current folder the
18110
15:29:19,680 --> 15:29:27,320
payment summary. JS file and now let's
18111
15:29:24,596 --> 15:29:29,916
use this function in the event listener
18112
15:29:27,320 --> 15:29:33,276
so let's scroll
18113
15:29:29,916 --> 15:29:36,240
down when we click delete we're going to
18114
15:29:33,276 --> 15:29:42,636
update the data and then regenerate all
18115
15:29:36,240 --> 15:29:47,880
the HTML using render payment summary
18116
15:29:42,636 --> 15:29:50,400
brackets now let's save and go to our
18117
15:29:47,880 --> 15:29:53,160
project focus on the numbers on the
18118
15:29:50,400 --> 15:29:55,400
right here and now let's click
18119
15:29:53,160 --> 15:29:59,720
delete and you'll notice that all of
18120
15:29:55,400 --> 15:30:03,080
these numbers updated to match our new
18121
15:29:59,720 --> 15:30:05,240
so that's another example of using MVC
18122
15:30:03,080 --> 15:30:07,756
when we click delete instead of using
18123
15:30:05,240 --> 15:30:10,880
the Dom to change these numbers one by
18124
15:30:07,756 --> 15:30:13,040
one we just update the data and then
18125
15:30:10,880 --> 15:30:17,116
regenerate all of the
18126
15:30:13,040 --> 15:30:20,360
HTML MVC makes sure that the HTML always
18127
15:30:17,116 --> 15:30:22,480
matches the data or that the view always
18128
15:30:20,360 --> 15:30:25,956
matches the
18129
15:30:22,480 --> 15:30:28,560
model let's do one last example of NBC
18130
15:30:25,956 --> 15:30:31,400
for this lesson when we change the
18131
15:30:28,560 --> 15:30:34,436
delivery options here we also want these
18132
15:30:31,400 --> 15:30:37,040
numbers on the right to update so let's
18133
15:30:34,436 --> 15:30:38,956
find the code for the delivery options
18134
15:30:37,040 --> 15:30:42,320
again this is in the order summary
18135
15:30:38,956 --> 15:30:47,040
section so in our code we'll open orders
18136
15:30:42,320 --> 15:30:49,276
summary. JS scroll down and then here we
18137
15:30:47,040 --> 15:30:52,080
updated the data and then we're just
18138
15:30:49,276 --> 15:30:56,720
going to regenerate the HTML for the
18139
15:30:52,080 --> 15:30:58,880
payment summary using render payment
18140
15:30:56,720 --> 15:31:01,000
summary and and
18141
15:30:58,880 --> 15:31:04,200
brackets now let's
18142
15:31:01,000 --> 15:31:06,680
save and then look at our project and
18143
15:31:04,200 --> 15:31:08,840
let's try changing the delivery option
18144
15:31:06,680 --> 15:31:11,560
here and you'll notice the numbers on
18145
15:31:08,840 --> 15:31:14,636
the right update automatically to match
18146
15:31:11,560 --> 15:31:17,200
the cart and that's it we finished the
18147
15:31:14,636 --> 15:31:20,436
checkout page so now let's save our code
18148
15:31:17,200 --> 15:31:24,956
into git we'll go into the git
18149
15:31:20,436 --> 15:31:27,160
section here and inside order summary we
18150
15:31:24,956 --> 15:31:28,636
basically imported the render payment
18151
15:31:27,160 --> 15:31:30,720
summary function
18152
15:31:28,636 --> 15:31:34,080
and then at the
18153
15:31:30,720 --> 15:31:37,916
bottom we used MVC so when we click
18154
15:31:34,080 --> 15:31:40,916
delete we update the data or the model
18155
15:31:37,916 --> 15:31:44,160
and then we regenerate all the HTML or
18156
15:31:40,916 --> 15:31:46,480
regenerate The View down here same thing
18157
15:31:44,160 --> 15:31:49,276
when we click a delivery option we
18158
15:31:46,480 --> 15:31:50,636
update the data and then regenerate all
18159
15:31:49,276 --> 15:31:53,596
the
18160
15:31:50,636 --> 15:31:57,636
HTML the last thing we're going to do is
18161
15:31:53,596 --> 15:31:57,636
at the top of this file
18162
15:31:58,040 --> 15:32:03,480
we're going to remove this practice code
18163
15:32:00,160 --> 15:32:07,320
that we use to learn external libraries
18164
15:32:03,480 --> 15:32:07,320
so let's open orders summary.
18165
15:32:07,480 --> 15:32:12,956
JS and at the top we're going to remove
18166
15:32:10,880 --> 15:32:15,636
this
18167
15:32:12,956 --> 15:32:19,636
code and
18168
15:32:15,636 --> 15:32:19,636
save now let's go back into
18169
15:32:20,000 --> 15:32:26,480
get and that looks good finally let's
18170
15:32:24,160 --> 15:32:28,880
type a message describing our
18171
15:32:26,480 --> 15:32:30,400
changes make
18172
15:32:28,880 --> 15:32:32,520
payment
18173
15:32:30,400 --> 15:32:35,956
summary
18174
15:32:32,520 --> 15:32:35,956
interactive and
18175
15:32:39,400 --> 15:32:44,956
commit and that's the end of this lesson
18176
15:32:42,560 --> 15:32:47,756
in this lesson we learned about external
18177
15:32:44,956 --> 15:32:51,116
libraries which is code that is outside
18178
15:32:47,756 --> 15:32:53,756
of our project we learned about the DJs
18179
15:32:51,116 --> 15:32:56,636
external Library which helps us work
18180
15:32:53,756 --> 15:32:58,720
with dates we also learned how to use
18181
15:32:56,636 --> 15:33:01,596
external libraries with JavaScript
18182
15:32:58,720 --> 15:33:05,000
modules together as well as the default
18183
15:33:01,596 --> 15:33:07,796
export syntax we created the delivery
18184
15:33:05,000 --> 15:33:10,720
section of the checkout page we learned
18185
15:33:07,796 --> 15:33:14,000
MBC which is a better way to design our
18186
15:33:10,720 --> 15:33:16,756
code and we created the payment section
18187
15:33:14,000 --> 15:33:16,756
of the checkout
18188
15:33:17,480 --> 15:33:22,520
page thanks for watching this course so
18189
15:33:20,000 --> 15:33:24,480
far if you want to support this channel
18190
15:33:22,520 --> 15:33:26,796
you can check out the premium version of
18191
15:33:24,480 --> 15:33:29,240
my courses just like this one where you
18192
15:33:26,796 --> 15:33:31,636
can get a certificate of completion and
18193
15:33:29,240 --> 15:33:34,400
a Better Learning platform if you're
18194
15:33:31,636 --> 15:33:36,956
interested in extra videos from me more
18195
15:33:34,400 --> 15:33:39,720
in-depth videos and behind the scenes
18196
15:33:36,956 --> 15:33:42,400
content you can check out these links
18197
15:33:39,720 --> 15:33:45,240
here you can also support the channel by
18198
15:33:42,400 --> 15:33:48,040
liking the video subscribing and sharing
18199
15:33:45,240 --> 15:33:50,720
this video with others thanks again and
18200
15:33:48,040 --> 15:33:53,320
let's continue with the
18201
15:33:50,720 --> 15:33:56,636
course here are some exercises to help
18202
15:33:53,320 --> 15:34:00,680
you practice what we learned in this
18203
15:33:56,636 --> 15:34:00,680
lesson e
18204
15:34:40,720 --> 15:34:45,560
in the rest of this course if you get an
18205
15:34:43,116 --> 15:34:48,560
error in your project but your code
18206
15:34:45,560 --> 15:34:52,080
looks correct you may have some bad data
18207
15:34:48,560 --> 15:34:55,400
saved in local storage to fix this you
18208
15:34:52,080 --> 15:34:57,916
can try running local storage. CLE in
18209
15:34:55,400 --> 15:34:58,720
your console to remove everything from
18210
15:34:57,916 --> 15:35:02,880
local
18211
15:34:58,720 --> 15:35:02,880
storage and then refresh the
18212
15:35:03,240 --> 15:35:09,116
page if you see an error like this
18213
15:35:06,400 --> 15:35:11,796
object object that means that you saved
18214
15:35:09,116 --> 15:35:15,080
something directly into local storage
18215
15:35:11,796 --> 15:35:16,720
but you have to json.stringify it first
18216
15:35:15,080 --> 15:35:19,116
so check your code to make sure that
18217
15:35:16,720 --> 15:35:21,720
you're always stringifying before saving
18218
15:35:19,116 --> 15:35:25,680
to local storage and then clear your
18219
15:35:21,720 --> 15:35:25,680
local storage and refresh the
18220
15:35:26,560 --> 15:35:32,040
page in this lesson we're going to learn
18221
15:35:29,360 --> 15:35:34,796
how to test our code so when we're
18222
15:35:32,040 --> 15:35:37,756
writing code it's important to test our
18223
15:35:34,796 --> 15:35:39,116
code to see if it's working correctly
18224
15:35:37,756 --> 15:35:41,796
and if you're working at a company in
18225
15:35:39,116 --> 15:35:44,596
the future you'll also be expected to
18226
15:35:41,796 --> 15:35:46,000
test your code so let's learn how to do
18227
15:35:44,596 --> 15:35:48,956
that in this
18228
15:35:46,000 --> 15:35:51,596
lesson the easiest way to test our code
18229
15:35:48,956 --> 15:35:55,956
is to just open the website and try out
18230
15:35:51,596 --> 15:36:01,756
the code for example in our code here
18231
15:35:55,956 --> 15:36:01,756
let's open the file utils money.jpg
18232
15:36:30,436 --> 15:36:36,636
server so on this website we have a
18233
15:36:33,320 --> 15:36:38,840
couple of prices here as well as here
18234
15:36:36,636 --> 15:36:40,560
and we created these prices using the
18235
15:36:38,840 --> 15:36:42,520
function format
18236
15:36:40,560 --> 15:36:44,480
currency so if we just look at the
18237
15:36:42,520 --> 15:36:47,000
website we can see that these prices
18238
15:36:44,480 --> 15:36:49,756
look correct and this tells us that the
18239
15:36:47,000 --> 15:36:52,320
function format currency is working
18240
15:36:49,756 --> 15:36:54,796
correctly so that's one way to test that
18241
15:36:52,320 --> 15:36:58,436
function we just open the website and
18242
15:36:54,796 --> 15:37:00,756
try it out so this is called manual
18243
15:36:58,436 --> 15:37:03,956
testing when we manually open the
18244
15:37:00,756 --> 15:37:06,320
website and try our code so manual
18245
15:37:03,956 --> 15:37:08,956
testing is really useful for quickly
18246
15:37:06,320 --> 15:37:11,320
checking to see if everything is
18247
15:37:08,956 --> 15:37:14,756
working so now let's talk about the
18248
15:37:11,320 --> 15:37:18,200
disadvantages of manual testing one
18249
15:37:14,756 --> 15:37:21,480
disadvantage is it's hard to test every
18250
15:37:18,200 --> 15:37:23,436
situation for example here we just
18251
15:37:21,480 --> 15:37:26,956
happen to have the number
18252
15:37:23,436 --> 15:37:28,560
295 and we test with that however what
18253
15:37:26,956 --> 15:37:31,520
if we want to test with different
18254
15:37:28,560 --> 15:37:35,000
numbers like the number zero or a number
18255
15:37:31,520 --> 15:37:37,400
that requires rounding like
18256
15:37:35,000 --> 15:37:39,720
2.5 in order to test all these
18257
15:37:37,400 --> 15:37:42,436
situations we have to manually set up
18258
15:37:39,720 --> 15:37:46,560
our website so that our code runs with
18259
15:37:42,436 --> 15:37:49,360
those numbers so here we ran with 2095
18260
15:37:46,560 --> 15:37:52,756
as well as zero so we covered those
18261
15:37:49,360 --> 15:37:55,560
situations however we did not cover
18262
15:37:52,756 --> 15:37:58,000
2.5 so we have to do a bunch of setup in
18263
15:37:55,560 --> 15:38:00,200
order to test that situation
18264
15:37:58,000 --> 15:38:02,636
so as you can see it takes a lot of time
18265
15:38:00,200 --> 15:38:05,560
and effort to test different situations
18266
15:38:02,636 --> 15:38:07,840
in our code the second disadvantage of
18267
15:38:05,560 --> 15:38:11,560
manual testing is that it's hard to
18268
15:38:07,840 --> 15:38:14,636
retest the code for example if we change
18269
15:38:11,560 --> 15:38:16,880
some of our code how do we retest format
18270
15:38:14,636 --> 15:38:18,240
currency and make sure that it's still
18271
15:38:16,880 --> 15:38:20,360
working
18272
15:38:18,240 --> 15:38:22,916
correctly well we would have to open the
18273
15:38:20,360 --> 15:38:25,636
website and set up all the situations
18274
15:38:22,916 --> 15:38:28,240
again and retest all those situations
18275
15:38:25,636 --> 15:38:30,796
manually so this takes too much time and
18276
15:38:28,240 --> 15:38:33,796
effort to retest the
18277
15:38:30,796 --> 15:38:35,796
code to solve these two problems we're
18278
15:38:33,796 --> 15:38:38,360
going to learn another way to test our
18279
15:38:35,796 --> 15:38:41,080
code called automated
18280
15:38:38,360 --> 15:38:45,040
testing automated testing basically
18281
15:38:41,080 --> 15:38:47,080
means using code to test code instead of
18282
15:38:45,040 --> 15:38:49,720
manually opening the website and
18283
15:38:47,080 --> 15:38:51,596
clicking around to try our code we're
18284
15:38:49,720 --> 15:38:54,276
going to tell the computer to do these
18285
15:38:51,596 --> 15:38:57,680
tests for us and this will save a lot of
18286
15:38:54,276 --> 15:39:01,160
time and effort so let's go ahead and
18287
15:38:57,680 --> 15:39:02,560
create our first automated test we're
18288
15:39:01,160 --> 15:39:06,080
going to go back to our
18289
15:39:02,560 --> 15:39:09,240
code and again let's test this format
18290
15:39:06,080 --> 15:39:11,520
currency function to create an automated
18291
15:39:09,240 --> 15:39:14,436
test we're just going to write some code
18292
15:39:11,520 --> 15:39:17,000
to test this function so first let's
18293
15:39:14,436 --> 15:39:19,480
create a folder to group all of our test
18294
15:39:17,000 --> 15:39:22,636
code together we're going to click this
18295
15:39:19,480 --> 15:39:27,520
icon to create a folder and let's just
18296
15:39:22,636 --> 15:39:29,360
name this tests and press enter
18297
15:39:27,520 --> 15:39:32,160
and we're going to move this folder so
18298
15:39:29,360 --> 15:39:35,400
we'll drag it to the top level here
18299
15:39:32,160 --> 15:39:35,400
beside the HTML
18300
15:39:35,720 --> 15:39:40,596
files so we want the test folder to be
18301
15:39:38,436 --> 15:39:43,436
beside the scripts
18302
15:39:40,596 --> 15:39:45,596
folder next let's click on the test
18303
15:39:43,436 --> 15:39:48,796
folder and we're going to create our
18304
15:39:45,596 --> 15:39:51,320
first test file we'll click
18305
15:39:48,796 --> 15:39:56,200
this and we're going to test format
18306
15:39:51,320 --> 15:39:56,200
currency which is inside the money.jpg
18307
15:39:57,720 --> 15:40:02,720
money
18308
15:40:00,480 --> 15:40:06,360
test.js so we know that this file
18309
15:40:02,720 --> 15:40:08,596
contains tests for money. JS so let's
18310
15:40:06,360 --> 15:40:08,596
press
18311
15:40:08,840 --> 15:40:14,160
enter and inside this file we're going
18312
15:40:11,400 --> 15:40:16,880
to write some code to test format
18313
15:40:14,160 --> 15:40:20,400
currency so first let's import format
18314
15:40:16,880 --> 15:40:25,320
currency so we can test it at the top
18315
15:40:20,400 --> 15:40:27,360
we'll type import curly brackets format
18316
15:40:25,320 --> 15:40:30,636
currency
18317
15:40:27,360 --> 15:40:34,200
from a string and from here we're going
18318
15:40:30,636 --> 15:40:36,796
to locate money. JS so we start out in
18319
15:40:34,200 --> 15:40:39,796
money test.js and we need to get out of
18320
15:40:36,796 --> 15:40:42,520
the test folder so we'll type do do
18321
15:40:39,796 --> 15:40:46,200
slash to get out of this folder and then
18322
15:40:42,520 --> 15:40:49,956
we'll go into the scripts folder scripts
18323
15:40:46,200 --> 15:40:53,400
slash and then into the utils folder
18324
15:40:49,956 --> 15:40:57,400
utils slash and locat
18325
15:40:53,400 --> 15:40:57,400
money. Js
18326
15:40:57,956 --> 15:41:04,956
so as a reminder format currency takes a
18327
15:41:00,916 --> 15:41:08,880
number in cents like 295 cents and then
18328
15:41:04,956 --> 15:41:08,880
converts it into Dollars like
18329
15:41:09,680 --> 15:41:16,596
$20.95 so first let's test this function
18330
15:41:12,400 --> 15:41:20,400
using that number 2095 as an example
18331
15:41:16,596 --> 15:41:24,796
we're going to run the function format
18332
15:41:20,400 --> 15:41:27,276
currency brackets and give it
18333
15:41:24,796 --> 15:41:30,636
295 and now we're going to check if the
18334
15:41:27,276 --> 15:41:34,000
result of this function is correct to do
18335
15:41:30,636 --> 15:41:38,916
that we can just use an if statement so
18336
15:41:34,000 --> 15:41:41,560
we'll type if Open Bracket close
18337
15:41:38,916 --> 15:41:42,796
bracket and we said we expect format
18338
15:41:41,560 --> 15:41:47,080
currency
18339
15:41:42,796 --> 15:41:47,080
295 to give us the string
18340
15:41:53,916 --> 15:41:59,436
20959 and curly brackets and and if
18341
15:41:57,480 --> 15:42:02,480
these two are equal that means the code
18342
15:41:59,436 --> 15:42:07,400
is working correctly so we're going to
18343
15:42:02,480 --> 15:42:11,680
console. log the string
18344
15:42:07,400 --> 15:42:15,240
passed to say that this test has passed
18345
15:42:11,680 --> 15:42:15,240
now if it is not equal to
18346
15:42:26,116 --> 15:42:30,400
20.95%
18347
15:42:28,040 --> 15:42:33,916
failed and
18348
15:42:30,400 --> 15:42:36,680
save and that's it this is our first
18349
15:42:33,916 --> 15:42:39,756
automated test it checks if the result
18350
15:42:36,680 --> 15:42:42,200
of this function is correct if it is
18351
15:42:39,756 --> 15:42:43,916
correct we're going to display past and
18352
15:42:42,200 --> 15:42:45,880
if it's not correct we're going to
18353
15:42:43,916 --> 15:42:49,636
display
18354
15:42:45,880 --> 15:42:52,480
failed now let's run this test code so
18355
15:42:49,636 --> 15:42:55,200
remember we can't run JavaScript files
18356
15:42:52,480 --> 15:42:59,040
directly we need to load this Javascript
18357
15:42:55,200 --> 15:43:03,360
file using an HTML file so let's create
18358
15:42:59,040 --> 15:43:05,916
an HTML file to run this test inside the
18359
15:43:03,360 --> 15:43:07,560
test folder we're going to create a new
18360
15:43:05,916 --> 15:43:11,480
file by clicking up
18361
15:43:07,560 --> 15:43:13,080
here and let's name this file
18362
15:43:11,480 --> 15:43:16,240
tests.
18363
15:43:13,080 --> 15:43:18,756
HTML and press
18364
15:43:16,240 --> 15:43:22,680
enter and in here we're going to start
18365
15:43:18,756 --> 15:43:25,320
by creating a basic HTML structure so as
18366
15:43:22,680 --> 15:43:27,636
a reminder at the top we'll type less
18367
15:43:25,320 --> 15:43:32,520
than exclamation
18368
15:43:27,636 --> 15:43:35,160
dock type space HTML greater than and
18369
15:43:32,520 --> 15:43:38,276
we'll create an HTML
18370
15:43:35,160 --> 15:43:39,400
element and then inside we'll create a
18371
15:43:38,276 --> 15:43:44,040
head
18372
15:43:39,400 --> 15:43:46,520
element as well as a body
18373
15:43:44,040 --> 15:43:49,240
element and then inside the body we're
18374
15:43:46,520 --> 15:43:50,436
going to create a script tag to run
18375
15:43:49,240 --> 15:43:52,520
JavaScript
18376
15:43:50,436 --> 15:43:57,040
code and we're going to give the script
18377
15:43:52,520 --> 15:43:59,200
tag an attribute called SRC or source
18378
15:43:57,040 --> 15:44:01,680
equals double quotes and we're going to
18379
15:43:59,200 --> 15:44:05,720
give it this JavaScript file to
18380
15:44:01,680 --> 15:44:05,720
run money
18381
15:44:06,116 --> 15:44:12,796
test.js and also because this file uses
18382
15:44:09,320 --> 15:44:17,720
import we also need to add an attribute
18383
15:44:12,796 --> 15:44:19,756
called type equals modules to give this
18384
15:44:17,720 --> 15:44:21,320
file access to JavaScript module
18385
15:44:19,756 --> 15:44:23,840
features like
18386
15:44:21,320 --> 15:44:26,560
import so now let's
18387
15:44:23,840 --> 15:44:29,200
save and we're going to run this file in
18388
15:44:26,560 --> 15:44:30,240
live server so we're going to click it
18389
15:44:29,200 --> 15:44:33,636
and then
18390
15:44:30,240 --> 15:44:35,636
rightclick open with live
18391
15:44:33,636 --> 15:44:37,680
server and then we're going to check the
18392
15:44:35,636 --> 15:44:39,796
console by right
18393
15:44:37,680 --> 15:44:42,956
clicking
18394
15:44:39,796 --> 15:44:46,200
inspect and open the
18395
15:44:42,956 --> 15:44:48,840
console and our code display the text
18396
15:44:46,200 --> 15:44:52,000
passed so if we look at our
18397
15:44:48,840 --> 15:44:54,400
code and open money
18398
15:44:52,000 --> 15:44:56,560
test.js it's telling us that the result
18399
15:44:54,400 --> 15:44:57,596
of this function matched what we
18400
15:44:56,560 --> 15:44:59,116
expected
18401
15:44:57,596 --> 15:45:02,080
and this test
18402
15:44:59,116 --> 15:45:05,360
passed so that's how we run an automated
18403
15:45:02,080 --> 15:45:08,320
test we just load it like normal
18404
15:45:05,360 --> 15:45:10,756
JavaScript so as you can see automated
18405
15:45:08,320 --> 15:45:14,520
tests are pretty straightforward we're
18406
15:45:10,756 --> 15:45:14,520
just using code to test
18407
15:45:15,436 --> 15:45:22,040
code okay so I mentioned earlier that a
18408
15:45:18,880 --> 15:45:24,080
disadvantage of manual testing is it's
18409
15:45:22,040 --> 15:45:26,436
hard to test every
18410
15:45:24,080 --> 15:45:28,360
situation now let's solve this problem
18411
15:45:26,436 --> 15:45:31,276
using automated
18412
15:45:28,360 --> 15:45:33,680
tests so inside money
18413
15:45:31,276 --> 15:45:36,560
test.js if we want to test format
18414
15:45:33,680 --> 15:45:39,040
currency in different situations or with
18415
15:45:36,560 --> 15:45:41,756
different numbers we can just add some
18416
15:45:39,040 --> 15:45:44,040
more tests at the bottom so at the
18417
15:45:41,756 --> 15:45:47,480
bottom let's create some new lines and
18418
15:45:44,040 --> 15:45:49,360
we'll just add another test using IF
18419
15:45:47,480 --> 15:45:52,360
brackets and curly
18420
15:45:49,360 --> 15:45:55,480
brackets and inside here let's test
18421
15:45:52,360 --> 15:45:57,596
format currency with the number zero so
18422
15:45:55,480 --> 15:46:02,360
we'll type format
18423
15:45:57,596 --> 15:46:07,240
currency brackets 0 and we expect this
18424
15:46:02,360 --> 15:46:12,840
result to be the string 0.0 0 so we'll
18425
15:46:07,240 --> 15:46:12,840
check if this triple equals the string
18426
15:46:12,880 --> 15:46:21,680
0. if this result matches we're going to
18427
15:46:17,880 --> 15:46:25,636
console.log the string
18428
15:46:21,680 --> 15:46:29,636
passed and if this result does not match
18429
15:46:25,636 --> 15:46:31,756
we're going to type else curly brackets
18430
15:46:29,636 --> 15:46:35,240
and
18431
15:46:31,756 --> 15:46:37,756
console.log the string
18432
15:46:35,240 --> 15:46:40,400
failed so that's how we test format
18433
15:46:37,756 --> 15:46:43,840
currency in a different situation with
18434
15:46:40,400 --> 15:46:47,400
the number zero so now let's
18435
15:46:43,840 --> 15:46:50,320
save and then go back to our test page
18436
15:46:47,400 --> 15:46:52,040
which is here and then open the console
18437
15:46:50,320 --> 15:46:53,956
right click
18438
15:46:52,040 --> 15:46:56,560
inspect the
18439
15:46:53,956 --> 15:46:58,636
console and it will tell us that both of
18440
15:46:56,560 --> 15:47:02,116
our automated tests
18441
15:46:58,636 --> 15:47:04,000
passed so as you can see automated tests
18442
15:47:02,116 --> 15:47:07,116
help us test our code in different
18443
15:47:04,000 --> 15:47:09,880
situations very easily this is a lot
18444
15:47:07,116 --> 15:47:13,080
faster than manually opening our website
18445
15:47:09,880 --> 15:47:16,040
and setting it up to test with different
18446
15:47:13,080 --> 15:47:19,756
numbers so let's go back to our
18447
15:47:16,040 --> 15:47:22,680
code and by the way another name for a
18448
15:47:19,756 --> 15:47:26,000
situation that we're testing is called a
18449
15:47:22,680 --> 15:47:28,796
test case so here instead of saying
18450
15:47:26,000 --> 15:47:32,880
we're testing two different situations
18451
15:47:28,796 --> 15:47:35,956
we usually say we're testing two test
18452
15:47:32,880 --> 15:47:39,596
cases okay now let's get more practice
18453
15:47:35,956 --> 15:47:41,596
and add another test case at the bottom
18454
15:47:39,596 --> 15:47:44,956
of this file we're going to create
18455
15:47:41,596 --> 15:47:46,276
another if statement if brackets and
18456
15:47:44,956 --> 15:47:51,596
curly
18457
15:47:46,276 --> 15:47:54,680
brackets and this time let's test format
18458
15:47:51,596 --> 15:47:57,560
currency brackets and we'll give it a
18459
15:47:54,680 --> 15:48:00,080
number that requires some rounding
18460
15:47:57,560 --> 15:48:03,200
so when we calculate the 10% tax on our
18461
15:48:00,080 --> 15:48:06,400
website the result could be a decimal
18462
15:48:03,200 --> 15:48:06,400
like the number
18463
15:48:06,916 --> 15:48:15,680
2000.5 if we use the number
18464
15:48:10,276 --> 15:48:18,756
2.5 this will convert into $20 and
18465
15:48:15,680 --> 15:48:22,000
0.5 however we can't have
18466
15:48:18,756 --> 15:48:27,160
0.5 so we're going to round this up to 1
18467
15:48:22,000 --> 15:48:29,720
cent so we're going to have $20 And1
18468
15:48:27,160 --> 15:48:33,560
so let's check if this result triple
18469
15:48:29,720 --> 15:48:38,956
equals the string
18470
15:48:33,560 --> 15:48:40,880
20.1 and if it is equal we're going to
18471
15:48:38,956 --> 15:48:45,796
console.log
18472
15:48:40,880 --> 15:48:48,040
past and if it is not equal else curly
18473
15:48:45,796 --> 15:48:50,000
brackets
18474
15:48:48,040 --> 15:48:52,520
console.log
18475
15:48:50,000 --> 15:48:56,360
failed and
18476
15:48:52,520 --> 15:48:58,636
save and open our test page and open the
18477
15:48:56,360 --> 15:48:58,636
con
18478
15:48:59,400 --> 15:49:04,956
and you can see that all three of our
18479
15:49:01,240 --> 15:49:07,636
test cases passed and that's it we just
18480
15:49:04,956 --> 15:49:10,796
created three test cases for format
18481
15:49:07,636 --> 15:49:14,720
currency using automated
18482
15:49:10,796 --> 15:49:14,720
tests now let's go back to our
18483
15:49:15,240 --> 15:49:20,956
code and currently we have three test
18484
15:49:18,360 --> 15:49:24,596
cases and you might be wondering how
18485
15:49:20,956 --> 15:49:28,320
many test cases should we have generally
18486
15:49:24,596 --> 15:49:30,680
we create two types of test cases basic
18487
15:49:28,320 --> 15:49:34,040
test cases and edge
18488
15:49:30,680 --> 15:49:37,596
cases a basic test case just tests if
18489
15:49:34,040 --> 15:49:40,956
the code is working or not so here our
18490
15:49:37,596 --> 15:49:43,680
first test case is a basic test case we
18491
15:49:40,956 --> 15:49:46,436
use a normal number like
18492
15:49:43,680 --> 15:49:47,916
2095 and we see if format currency is
18493
15:49:46,436 --> 15:49:50,400
working
18494
15:49:47,916 --> 15:49:53,796
correctly the second type of test cases
18495
15:49:50,400 --> 15:49:56,000
that we should have are edge cases this
18496
15:49:53,796 --> 15:49:58,080
means we test a code with values that
18497
15:49:56,000 --> 15:50:01,360
are a little bit bit tricky they're on
18498
15:49:58,080 --> 15:50:04,080
the edge of what our code can handle for
18499
15:50:01,360 --> 15:50:07,796
example in our test here the last two
18500
15:50:04,080 --> 15:50:10,240
test cases are edge cases zero is sort
18501
15:50:07,796 --> 15:50:13,000
of a special number that's not positive
18502
15:50:10,240 --> 15:50:15,796
or negative and
18503
15:50:13,000 --> 15:50:18,636
2.5 is a number that requires some
18504
15:50:15,796 --> 15:50:21,116
rounding so these numbers are acceptable
18505
15:50:18,636 --> 15:50:23,200
we can use them with format currency but
18506
15:50:21,116 --> 15:50:27,360
they're a little bit tricky and on the
18507
15:50:23,200 --> 15:50:30,000
edge of what our code can handle
18508
15:50:27,360 --> 15:50:32,956
so when creating test cases make sure to
18509
15:50:30,000 --> 15:50:36,916
create basic test cases as well as edge
18510
15:50:32,956 --> 15:50:36,916
cases if there are any edge
18511
15:50:37,000 --> 15:50:43,680
cases now we could have added another
18512
15:50:39,840 --> 15:50:47,276
basic test case like format currency
18513
15:50:43,680 --> 15:50:49,756
1095 however this is very similar to
18514
15:50:47,276 --> 15:50:52,436
2095 it's basically testing the same
18515
15:50:49,756 --> 15:50:54,956
thing so we don't need another test case
18516
15:50:52,436 --> 15:50:57,956
like this generally we should try to
18517
15:50:54,956 --> 15:51:01,080
test something different in each test
18518
15:50:57,956 --> 15:51:04,436
case for example an edge case that we
18519
15:51:01,080 --> 15:51:07,080
have not tested is a number
18520
15:51:04,436 --> 15:51:11,360
200.4 so this would check if the code
18521
15:51:07,080 --> 15:51:13,880
rounds down correctly to $20
18522
15:51:11,360 --> 15:51:16,880
and0 however I'll leave creating this
18523
15:51:13,880 --> 15:51:19,560
test case as an
18524
15:51:16,880 --> 15:51:22,276
exercise now let's move on and talk
18525
15:51:19,560 --> 15:51:25,520
about the second disadvantage of manual
18526
15:51:22,276 --> 15:51:28,680
tests which is it's hard to retest the
18527
15:51:25,520 --> 15:51:31,560
code automated test also solve this
18528
15:51:28,680 --> 15:51:34,636
problem for example let's say that we
18529
15:51:31,560 --> 15:51:38,956
Chang the format currency function so
18530
15:51:34,636 --> 15:51:38,956
inside UIL money.jpg
18531
15:51:56,756 --> 15:52:01,520
we would have to open up the website set
18532
15:51:59,276 --> 15:52:03,756
up everything manually and then click
18533
15:52:01,520 --> 15:52:06,956
around to see if it's
18534
15:52:03,756 --> 15:52:09,880
working however with automated testing
18535
15:52:06,956 --> 15:52:12,360
all we need to do is to rerun all of
18536
15:52:09,880 --> 15:52:15,720
this test code and it will instantly
18537
15:52:12,360 --> 15:52:19,796
retest all of these cases so let's go
18538
15:52:15,720 --> 15:52:23,360
back to money. JS and save this
18539
15:52:19,796 --> 15:52:27,796
code and then go into our test
18540
15:52:23,360 --> 15:52:30,040
page and check our console right click
18541
15:52:27,796 --> 15:52:32,080
inspect the
18542
15:52:30,040 --> 15:52:35,000
console and you can see that it
18543
15:52:32,080 --> 15:52:37,116
instantly reruns all the test cases and
18544
15:52:35,000 --> 15:52:39,956
it tells us that the last test case
18545
15:52:37,116 --> 15:52:42,956
failed so automated tests make it really
18546
15:52:39,956 --> 15:52:44,796
easy to retest our code after we make
18547
15:52:42,956 --> 15:52:48,240
any
18548
15:52:44,796 --> 15:52:50,680
changes okay now we have another problem
18549
15:52:48,240 --> 15:52:53,320
here we can see that the test Cas is
18550
15:52:50,680 --> 15:52:55,756
passed passed and failed but it's not
18551
15:52:53,320 --> 15:52:58,756
clear which ones passed and which ones
18552
15:52:55,756 --> 15:53:00,636
failed we don't really have a name for
18553
15:52:58,756 --> 15:53:02,560
these tests so we don't know what
18554
15:53:00,636 --> 15:53:04,840
they're doing so that's what we're going
18555
15:53:02,560 --> 15:53:07,756
to add next we're going to give each of
18556
15:53:04,840 --> 15:53:08,880
these tests a name so let's go back to
18557
15:53:07,756 --> 15:53:12,360
our
18558
15:53:08,880 --> 15:53:14,436
code and open money
18559
15:53:12,360 --> 15:53:17,796
test.js and now we're going to give each
18560
15:53:14,436 --> 15:53:19,160
of these test cases a name so above the
18561
15:53:17,796 --> 15:53:21,480
first test
18562
15:53:19,160 --> 15:53:23,360
case let's just
18563
15:53:21,480 --> 15:53:26,720
console.
18564
15:53:23,360 --> 15:53:29,360
log a string and we're going to give
18565
15:53:26,720 --> 15:53:32,680
this test a name so the name should
18566
15:53:29,360 --> 15:53:36,720
describe what this test is doing so in
18567
15:53:32,680 --> 15:53:39,596
here let's just use the name converts
18568
15:53:36,720 --> 15:53:41,840
cents into
18569
15:53:39,596 --> 15:53:44,956
dollars and that's how we give a test
18570
15:53:41,840 --> 15:53:48,840
case a name let's do the same thing with
18571
15:53:44,956 --> 15:53:52,596
the other two test cases so down here
18572
15:53:48,840 --> 15:53:56,756
we're going to console.
18573
15:53:52,596 --> 15:53:59,636
log brackets and a string and we give
18574
15:53:56,756 --> 15:54:02,560
the second test case a name so this one
18575
15:53:59,636 --> 15:54:08,116
tests the number zero so let's use the
18576
15:54:02,560 --> 15:54:11,720
name works with zero so again the name
18577
15:54:08,116 --> 15:54:13,956
just describes what the test is
18578
15:54:11,720 --> 15:54:17,320
doing and let's do the same thing for
18579
15:54:13,956 --> 15:54:21,080
the third test case we
18580
15:54:17,320 --> 15:54:23,756
console.log a string and here we're
18581
15:54:21,080 --> 15:54:27,560
testing if the function rounds up to the
18582
15:54:23,756 --> 15:54:32,360
nearest scent so let's use the name
18583
15:54:27,560 --> 15:54:34,956
rounds up to the nearest
18584
15:54:32,360 --> 15:54:37,400
scent and
18585
15:54:34,956 --> 15:54:39,560
save if you're wondering how I came up
18586
15:54:37,400 --> 15:54:42,520
with these names a naming convention
18587
15:54:39,560 --> 15:54:46,200
that we use is to describe what the code
18588
15:54:42,520 --> 15:54:49,240
is doing for example the code works with
18589
15:54:46,200 --> 15:54:52,520
zero or the code rounds up to the
18590
15:54:49,240 --> 15:54:54,916
nearest scent and then we remove the
18591
15:54:52,520 --> 15:54:58,880
code some people also like to use the
18592
15:54:54,916 --> 15:54:58,880
word it instead of the
18593
15:54:59,360 --> 15:55:05,916
code so now each of these test cases has
18594
15:55:02,400 --> 15:55:08,880
a name above it if we open up our test
18595
15:55:05,916 --> 15:55:11,840
page and open the
18596
15:55:08,880 --> 15:55:14,756
console now we can see exactly which
18597
15:55:11,840 --> 15:55:17,480
test case passed and which test case
18598
15:55:14,756 --> 15:55:20,520
failed so this failed test case tells us
18599
15:55:17,480 --> 15:55:23,360
we have a rounding problem in our code
18600
15:55:20,520 --> 15:55:26,756
so now we can go back to our code into
18601
15:55:23,360 --> 15:55:29,200
money. JS and investigate the rounding
18602
15:55:26,756 --> 15:55:31,840
problem so of course we removed
18603
15:55:29,200 --> 15:55:34,880
math.round as an example we're just
18604
15:55:31,840 --> 15:55:38,680
going to add it back to fix that failing
18605
15:55:34,880 --> 15:55:42,880
test capital m
18606
15:55:38,680 --> 15:55:45,240
math.round Open Bracket and close
18607
15:55:42,880 --> 15:55:48,240
bracket and
18608
15:55:45,240 --> 15:55:51,840
save and then open the console for our
18609
15:55:48,240 --> 15:55:54,636
test which is here and now all of our
18610
15:55:51,840 --> 15:55:57,720
test cases
18611
15:55:54,636 --> 15:56:00,560
passed next another thing we do when
18612
15:55:57,720 --> 15:56:04,436
naming our tests is to group related
18613
15:56:00,560 --> 15:56:07,200
tests together for example these three
18614
15:56:04,436 --> 15:56:09,636
test cases are for the format currency
18615
15:56:07,200 --> 15:56:12,636
function so we're going to group these
18616
15:56:09,636 --> 15:56:16,436
tests together and give this group a
18617
15:56:12,636 --> 15:56:19,680
name by the way a group of related tests
18618
15:56:16,436 --> 15:56:19,680
is called a test
18619
15:56:20,160 --> 15:56:26,320
Suite so let's go back to our code and
18620
15:56:23,160 --> 15:56:28,680
open Money test.js
18621
15:56:26,320 --> 15:56:32,320
and at the top let's give this group of
18622
15:56:28,680 --> 15:56:34,796
tests or this test Suite A Name by
18623
15:56:32,320 --> 15:56:38,596
typing
18624
15:56:34,796 --> 15:56:45,360
console.log brackets and a string we're
18625
15:56:38,596 --> 15:56:47,916
going to name it test Suite colon format
18626
15:56:45,360 --> 15:56:50,596
currency and
18627
15:56:47,916 --> 15:56:52,560
save so now let's open the console for
18628
15:56:50,596 --> 15:56:55,720
our
18629
15:56:52,560 --> 15:56:58,840
tests and now at the top it will show us
18630
15:56:55,720 --> 15:57:01,916
test site format currency so this makes
18631
15:56:58,840 --> 15:57:04,116
it clear that this group of tests here
18632
15:57:01,916 --> 15:57:06,880
are for the format currency
18633
15:57:04,116 --> 15:57:09,720
function in the future if we are testing
18634
15:57:06,880 --> 15:57:12,560
some other code for example a calculated
18635
15:57:09,720 --> 15:57:16,560
tax function we can create another group
18636
15:57:12,560 --> 15:57:18,480
of tests or another test Suite like this
18637
15:57:16,560 --> 15:57:21,756
and this makes it clear that the second
18638
15:57:18,480 --> 15:57:24,360
group of tests is for the calculate tax
18639
15:57:21,756 --> 15:57:26,200
function so this is how we name our
18640
15:57:24,360 --> 15:57:28,436
tests and group our tests together
18641
15:57:26,200 --> 15:57:31,276
together to make it more clear what is
18642
15:57:28,436 --> 15:57:33,160
being tested and which tests have passed
18643
15:57:31,276 --> 15:57:36,160
or
18644
15:57:33,160 --> 15:57:39,636
failed and now we created our first set
18645
15:57:36,160 --> 15:57:42,560
of automated tests as you can see
18646
15:57:39,636 --> 15:57:45,116
automated tests are basically using code
18647
15:57:42,560 --> 15:57:47,956
to test code and they make it really
18648
15:57:45,116 --> 15:57:50,636
easy to check if our code is working
18649
15:57:47,956 --> 15:57:54,040
correctly so now let's save this into
18650
15:57:50,636 --> 15:57:57,200
git we're going to open the git
18651
15:57:54,040 --> 15:58:00,680
section and our first change in money
18652
15:57:57,200 --> 15:58:03,756
test.js we created the tests for format
18653
15:58:00,680 --> 15:58:06,320
currency and then we created an HTML
18654
15:58:03,756 --> 15:58:08,680
file to load our test
18655
15:58:06,320 --> 15:58:10,040
code so let's create a message
18656
15:58:08,680 --> 15:58:15,916
describing these
18657
15:58:10,040 --> 15:58:17,520
changes create automated tests for
18658
15:58:15,916 --> 15:58:20,956
format
18659
15:58:17,520 --> 15:58:20,956
currency and
18660
15:58:24,080 --> 15:58:29,000
commit next we're going to learn how to
18661
15:58:26,596 --> 15:58:32,520
use a testing framework to write
18662
15:58:29,000 --> 15:58:34,956
automated tests so what is a testing
18663
15:58:32,520 --> 15:58:37,636
framework in the previous lesson we
18664
15:58:34,956 --> 15:58:40,560
learned about external libraries which
18665
15:58:37,636 --> 15:58:43,276
is code that is outside of our project
18666
15:58:40,560 --> 15:58:46,000
that someone else wrote and we can load
18667
15:58:43,276 --> 15:58:47,480
external libraries into our project and
18668
15:58:46,000 --> 15:58:50,520
use
18669
15:58:47,480 --> 15:58:53,040
them so a testing framework is an
18670
15:58:50,520 --> 15:58:54,240
external library that helps us write
18671
15:58:53,040 --> 15:58:57,680
tests
18672
15:58:54,240 --> 15:59:00,756
easier let's go back to our code and
18673
15:58:57,680 --> 15:59:03,796
we're going to open the money test.js
18674
15:59:00,756 --> 15:59:06,436
file and notice that in our tests we
18675
15:59:03,796 --> 15:59:08,756
need to do several things first we
18676
15:59:06,436 --> 15:59:11,680
create a test suite and we give it a
18677
15:59:08,756 --> 15:59:14,880
name and then we create some tests and
18678
15:59:11,680 --> 15:59:17,200
for each test we give it a name and then
18679
15:59:14,880 --> 15:59:20,116
we compare the values and display the
18680
15:59:17,200 --> 15:59:22,436
result in the console so a testing
18681
15:59:20,116 --> 15:59:25,000
framework helps us do all of these
18682
15:59:22,436 --> 15:59:27,596
things automatically and gives us many
18683
15:59:25,000 --> 15:59:29,240
other features so now let's learn our
18684
15:59:27,596 --> 15:59:31,480
first testing
18685
15:59:29,240 --> 15:59:34,276
framework in this course we're going to
18686
15:59:31,480 --> 15:59:36,200
use a popular testing framework called
18687
15:59:34,276 --> 15:59:38,160
Jasmine now if you're working at a
18688
15:59:36,200 --> 15:59:40,520
company in the future you'll definitely
18689
15:59:38,160 --> 15:59:43,240
be using a testing framework but it
18690
15:59:40,520 --> 15:59:45,720
might not always be Jasmine and that's
18691
15:59:43,240 --> 15:59:48,560
okay because most testing Frameworks are
18692
15:59:45,720 --> 15:59:50,520
pretty similar so by learning Jasmine
18693
15:59:48,560 --> 15:59:53,796
you'll be able to easily use other
18694
15:59:50,520 --> 15:59:53,796
testing Frameworks in the
18695
15:59:53,840 --> 15:59:58,916
future to load Jasmine into our project
18696
15:59:57,240 --> 16:00:00,916
we're going to go into the video
18697
15:59:58,916 --> 16:00:04,636
description and we're going to click
18698
16:00:00,916 --> 16:00:04,636
this link to download
18699
16:00:13,116 --> 16:00:18,200
Jasmine so once that link opens we're
18700
16:00:16,200 --> 16:00:20,916
going to be on this page and we're going
18701
16:00:18,200 --> 16:00:23,916
to scroll down and we're going to click
18702
16:00:20,916 --> 16:00:27,320
this Jasmine DST standalone. zip file to
18703
16:00:23,916 --> 16:00:29,040
download it
18704
16:00:27,320 --> 16:00:32,560
now once that's finished downloading
18705
16:00:29,040 --> 16:00:32,560
we're going to open our downloads
18706
16:00:34,160 --> 16:00:40,360
folder and if you're on Windows we're
18707
16:00:36,796 --> 16:00:41,916
going to rightclick the zip file and
18708
16:00:40,360 --> 16:00:45,160
click extract
18709
16:00:41,916 --> 16:00:47,116
all and click
18710
16:00:45,160 --> 16:00:49,636
extract now if you don't have that
18711
16:00:47,116 --> 16:00:52,436
extract all option you can also create a
18712
16:00:49,636 --> 16:00:54,680
folder with this name and then double
18713
16:00:52,436 --> 16:00:57,040
click the zip file and drag everything
18714
16:00:54,680 --> 16:00:58,840
into that folder
18715
16:00:57,040 --> 16:01:01,956
if you're using a Mac you can just
18716
16:00:58,840 --> 16:01:01,956
doubleclick the zip
18717
16:01:03,240 --> 16:01:08,080
file so this folder contains the code
18718
16:01:05,880 --> 16:01:11,400
for Jasmine and we're going to drag this
18719
16:01:08,080 --> 16:01:13,596
folder into our project so let's open
18720
16:01:11,400 --> 16:01:15,720
the code for our
18721
16:01:13,596 --> 16:01:19,720
project and then we're just going to
18722
16:01:15,720 --> 16:01:19,720
drag this folder down
18723
16:01:19,756 --> 16:01:23,720
here and click copy
18724
16:01:23,756 --> 16:01:29,080
folder so just make sure that this fold
18725
16:01:25,880 --> 16:01:31,596
folder is beside the scripts and images
18726
16:01:29,080 --> 16:01:35,436
folder next we're going to rename this
18727
16:01:31,596 --> 16:01:38,720
folder so we'll right click
18728
16:01:35,436 --> 16:01:41,880
rename and let's rename it to
18729
16:01:38,720 --> 16:01:44,360
test- Jasmine to make it clear this
18730
16:01:41,880 --> 16:01:48,160
folder contains test created with
18731
16:01:44,360 --> 16:01:48,160
Jasmine so now let's press
18732
16:01:48,520 --> 16:01:55,480
enter and now we have Jasmine inside our
18733
16:01:51,916 --> 16:01:58,040
project so inside the lip folder we have
18734
16:01:55,480 --> 16:02:00,080
some JavaScript files here and this is
18735
16:01:58,040 --> 16:02:02,840
the code for the Jasmine testing
18736
16:02:00,080 --> 16:02:05,840
framework so this is another way to load
18737
16:02:02,840 --> 16:02:07,796
an external Library into our project we
18738
16:02:05,840 --> 16:02:10,360
can just download all the code and put
18739
16:02:07,796 --> 16:02:12,400
it into our project and this is useful
18740
16:02:10,360 --> 16:02:14,560
if an external library has lots of
18741
16:02:12,400 --> 16:02:17,560
different files like
18742
16:02:14,560 --> 16:02:20,040
this before we continue let's save the
18743
16:02:17,560 --> 16:02:22,240
changes into git so if we make any
18744
16:02:20,040 --> 16:02:25,880
changes later it will be easier to see
18745
16:02:22,240 --> 16:02:28,040
them we'll open the git section
18746
16:02:25,880 --> 16:02:31,400
and then we just added all the code for
18747
16:02:28,040 --> 16:02:36,680
Jasmine so at the top let's type the
18748
16:02:31,400 --> 16:02:40,000
message add Jasmin testing
18749
16:02:36,680 --> 16:02:40,000
framework and
18750
16:02:42,636 --> 16:02:48,360
commit now that we loaded Jasmine into
18751
16:02:45,200 --> 16:02:50,400
our project let's learn how to use it so
18752
16:02:48,360 --> 16:02:52,480
Jasmine has a documentation page that
18753
16:02:50,400 --> 16:02:55,080
shows you how to use the testing
18754
16:02:52,480 --> 16:02:56,480
framework however to save time I'm just
18755
16:02:55,080 --> 16:02:58,680
going to show you the features that we
18756
16:02:56,480 --> 16:03:01,680
need and you can read the documentation
18757
16:02:58,680 --> 16:03:03,916
later if you want so first let's learn
18758
16:03:01,680 --> 16:03:07,160
how to run tests using
18759
16:03:03,916 --> 16:03:09,956
Jasmine I'm going to close this for now
18760
16:03:07,160 --> 16:03:13,320
and then in our code we're going to open
18761
16:03:09,956 --> 16:03:15,840
the test- Jasmin folder and at the
18762
16:03:13,320 --> 16:03:17,720
bottom we're going to open this spec
18763
16:03:15,840 --> 16:03:21,116
runner. HTML
18764
16:03:17,720 --> 16:03:23,956
file so this file loads all of the
18765
16:03:21,116 --> 16:03:27,880
tests so this does the same thing as our
18766
16:03:23,956 --> 16:03:31,916
test.html file from before and by the
18767
16:03:27,880 --> 16:03:35,116
way in Jasmine spec is another name for
18768
16:03:31,916 --> 16:03:38,080
test so spec Runner just means test
18769
16:03:35,116 --> 16:03:41,276
Runner this file runs all the
18770
16:03:38,080 --> 16:03:44,916
tests so let's actually rename this file
18771
16:03:41,276 --> 16:03:48,000
to test.html so we can match what we had
18772
16:03:44,916 --> 16:03:51,160
before and compare the two so here we're
18773
16:03:48,000 --> 16:03:53,040
going to right click and
18774
16:03:51,160 --> 16:03:57,000
rename
18775
16:03:53,040 --> 16:03:59,840
tests. HTML and press
18776
16:03:57,000 --> 16:04:01,636
enter and now let's open this file and
18777
16:03:59,840 --> 16:04:05,680
take a look at the code that's
18778
16:04:01,636 --> 16:04:08,040
inside so here at the top this is the
18779
16:04:05,680 --> 16:04:11,436
code for the Jasmine testing framework
18780
16:04:08,040 --> 16:04:15,480
so we're just loading the framework up
18781
16:04:11,436 --> 16:04:18,680
here below that here we have the code
18782
16:04:15,480 --> 16:04:21,040
that we want to test so this code is
18783
16:04:18,680 --> 16:04:22,116
sort of like the money JS file that we
18784
16:04:21,040 --> 16:04:25,116
were testing
18785
16:04:22,116 --> 16:04:28,276
earlier and then at the bottom these
18786
16:04:25,116 --> 16:04:30,880
files contain the tests so these files
18787
16:04:28,276 --> 16:04:33,200
are sort of like the money test.js file
18788
16:04:30,880 --> 16:04:35,520
that we had earlier and you'll notice
18789
16:04:33,200 --> 16:04:39,080
that these are in a spec folder so as a
18790
16:04:35,520 --> 16:04:41,880
reminder in Jasmine spec is another name
18791
16:04:39,080 --> 16:04:46,240
for test so this is basically the test
18792
16:04:41,880 --> 16:04:49,680
folder this folder contains all of our
18793
16:04:46,240 --> 16:04:51,720
tests so now let's run these tests and
18794
16:04:49,680 --> 16:04:54,956
to do that we just need to open this
18795
16:04:51,720 --> 16:04:56,436
HTML file in live server just like we
18796
16:04:54,956 --> 16:04:59,480
did before
18797
16:04:56,436 --> 16:05:03,636
so for this file we're going to right
18798
16:04:59,480 --> 16:05:03,636
click and open with live
18799
16:05:05,360 --> 16:05:10,680
server and I'm just going to make this a
18800
16:05:07,480 --> 16:05:12,436
little bigger by pressing control equals
18801
16:05:10,680 --> 16:05:15,276
so it's easier to see in the
18802
16:05:12,436 --> 16:05:19,080
video so this is what Jasmine tests look
18803
16:05:15,276 --> 16:05:21,276
like up here we have five Green Dots
18804
16:05:19,080 --> 16:05:23,560
this means we have five tests that we
18805
16:05:21,276 --> 16:05:27,276
ran and the green color means that all
18806
16:05:23,560 --> 16:05:29,636
of them passed so that here each test
18807
16:05:27,276 --> 16:05:32,636
has a Green Dot and you'll notice that
18808
16:05:29,636 --> 16:05:35,116
each test also has a name next to it
18809
16:05:32,636 --> 16:05:36,956
which tells us what the test does and
18810
16:05:35,116 --> 16:05:39,520
don't worry if this is in a different
18811
16:05:36,956 --> 16:05:40,796
order for you Jasmine randomizes the
18812
16:05:39,520 --> 16:05:43,276
order of the
18813
16:05:40,796 --> 16:05:46,560
tests also notice that some of these
18814
16:05:43,276 --> 16:05:49,360
tests are grouped together into a test
18815
16:05:46,560 --> 16:05:52,636
suite and up here we have the name of
18816
16:05:49,360 --> 16:05:55,040
the test Suite so as you can see a
18817
16:05:52,636 --> 16:05:57,720
testing framework helps us do all of the
18818
16:05:55,040 --> 16:05:59,756
things we were doing before and it also
18819
16:05:57,720 --> 16:06:02,636
provides a nice looking website where we
18820
16:05:59,756 --> 16:06:05,436
can see the test results so a testing
18821
16:06:02,636 --> 16:06:09,116
framework is just an external library
18822
16:06:05,436 --> 16:06:09,116
that helps us write tests
18823
16:06:11,320 --> 16:06:16,636
easier now that we know what Jasmine and
18824
16:06:14,000 --> 16:06:19,200
a testing framework is let's learn how
18825
16:06:16,636 --> 16:06:21,400
to write our tests using
18826
16:06:19,200 --> 16:06:23,200
Jasmine first we're going to go back to
18827
16:06:21,400 --> 16:06:25,880
our
18828
16:06:23,200 --> 16:06:28,240
code and we're going to remove the
18829
16:06:25,880 --> 16:06:31,400
example code provided by
18830
16:06:28,240 --> 16:06:34,080
Jasmine so down here we'll remove these
18831
16:06:31,400 --> 16:06:34,080
four script
18832
16:06:34,360 --> 16:06:41,520
texts and let's also remove the source
18833
16:06:37,400 --> 16:06:41,520
folder so we'll right click
18834
16:06:41,636 --> 16:06:47,200
delete as well as the spec folder right
18835
16:06:44,636 --> 16:06:49,916
click
18836
16:06:47,200 --> 16:06:53,000
delete but make sure we keep this lib
18837
16:06:49,916 --> 16:06:56,756
folder because this contains a code for
18838
16:06:53,000 --> 16:06:59,756
Jasmine and now inside test Jasmin we're
18839
16:06:56,756 --> 16:07:01,436
going to create a new file for our test
18840
16:06:59,756 --> 16:07:04,000
so we'll create a new
18841
16:07:01,436 --> 16:07:06,756
file and let's say that we're testing
18842
16:07:04,000 --> 16:07:11,320
money. JS again so let's name it the
18843
16:07:06,756 --> 16:07:14,956
same thing here money
18844
16:07:11,320 --> 16:07:18,276
test.js and press
18845
16:07:14,956 --> 16:07:21,956
enter and now let's create the same test
18846
16:07:18,276 --> 16:07:24,200
we had before by using Jasmine this time
18847
16:07:21,956 --> 16:07:26,720
so to make it easier for the video I'm
18848
16:07:24,200 --> 16:07:29,636
just going to take this file and drag it
18849
16:07:26,720 --> 16:07:32,160
to the top here so we can see these two
18850
16:07:29,636 --> 16:07:32,160
side by
18851
16:07:34,000 --> 16:07:39,840
side so like before we're going to
18852
16:07:36,320 --> 16:07:41,720
create tests for format currency first
18853
16:07:39,840 --> 16:07:45,276
we'll need to import this function at
18854
16:07:41,720 --> 16:07:48,480
the top so let's just actually select
18855
16:07:45,276 --> 16:07:53,916
this and right click
18856
16:07:48,480 --> 16:07:56,276
copy and then down here right click and
18857
16:07:53,916 --> 16:07:59,436
paste and just make sure that this file
18858
16:07:56,276 --> 16:08:03,436
path still works so our money test.js
18859
16:07:59,436 --> 16:08:05,040
file has to be inside test- Jasmin and
18860
16:08:03,436 --> 16:08:07,756
this folder should be beside the
18861
16:08:05,040 --> 16:08:07,756
previous test
18862
16:08:10,000 --> 16:08:16,116
folder next we're going to create a test
18863
16:08:12,840 --> 16:08:18,636
suite and name the test Suite so in
18864
16:08:16,116 --> 16:08:22,596
Jasmine to create a test Suite we're
18865
16:08:18,636 --> 16:08:22,596
going to use a function called
18866
16:08:22,756 --> 16:08:28,040
describe so this describe function is
18867
16:08:25,520 --> 16:08:30,116
provided by Jasmine and it creates a
18868
16:08:28,040 --> 16:08:33,080
test
18869
16:08:30,116 --> 16:08:35,480
Suite next we're going to give a name to
18870
16:08:33,080 --> 16:08:37,720
the test Suite so to name a test Suite
18871
16:08:35,480 --> 16:08:40,680
in Jasmine we're going to give describe
18872
16:08:37,720 --> 16:08:43,000
a string and this string is the name of
18873
16:08:40,680 --> 16:08:52,116
the test Suite so let's name it the same
18874
16:08:43,000 --> 16:08:52,116
thing as before test Suite colon format
18875
16:08:52,916 --> 16:08:59,400
currency next we're going to add some
18876
16:08:55,596 --> 16:09:01,436
tests inside the test Suite to do that
18877
16:08:59,400 --> 16:09:05,636
we're going to give describe a second
18878
16:09:01,436 --> 16:09:09,080
parameter which is a function brackets
18879
16:09:05,636 --> 16:09:09,080
arrow and curly
18880
16:09:09,956 --> 16:09:16,116
brackets and inside here we're going to
18881
16:09:12,840 --> 16:09:18,400
create a test and give the test a name
18882
16:09:16,116 --> 16:09:23,040
to create a test in Jasmine we're going
18883
16:09:18,400 --> 16:09:26,200
to use another function called it and
18884
16:09:23,040 --> 16:09:30,480
brackets so it is a another function
18885
16:09:26,200 --> 16:09:34,000
provided by Jasmine and this creates a
18886
16:09:30,480 --> 16:09:36,880
test next let's give a name to our test
18887
16:09:34,000 --> 16:09:40,116
so that we know what it's doing to name
18888
16:09:36,880 --> 16:09:42,596
a test we're going to give it a string
18889
16:09:40,116 --> 16:09:44,720
and this is going to be the test name so
18890
16:09:42,596 --> 16:09:46,240
let's name it the same thing we had
18891
16:09:44,720 --> 16:09:51,520
before
18892
16:09:46,240 --> 16:09:51,520
converts sense into
18893
16:09:51,840 --> 16:09:57,116
dollars and now we're going to add some
18894
16:09:54,080 --> 16:09:59,956
code into our tests to do that in
18895
16:09:57,116 --> 16:10:03,000
Jasmine we're going to give it a second
18896
16:09:59,956 --> 16:10:06,360
parameter which is another function
18897
16:10:03,000 --> 16:10:09,796
brackets arrow and curly
18898
16:10:06,360 --> 16:10:12,956
brackets so this is the code inside the
18899
16:10:09,796 --> 16:10:16,240
test and in this test we need to compare
18900
16:10:12,956 --> 16:10:18,680
these two values and display the result
18901
16:10:16,240 --> 16:10:20,840
in Jasmine instead of creating an if
18902
16:10:18,680 --> 16:10:23,360
statement and displaying the result
18903
16:10:20,840 --> 16:10:26,116
ourselves Jasmine provides us another
18904
16:10:23,360 --> 16:10:31,276
function to do all of this
18905
16:10:26,116 --> 16:10:34,520
and that function is called expect and
18906
16:10:31,276 --> 16:10:38,636
brackets so expect lets us compare a
18907
16:10:34,520 --> 16:10:40,880
value to another value for example let's
18908
16:10:38,636 --> 16:10:44,636
give expect the first value that we want
18909
16:10:40,880 --> 16:10:48,480
to compare which is format currency
18910
16:10:44,636 --> 16:10:52,276
2095 so we'll type format
18911
16:10:48,480 --> 16:10:55,400
currency brackets
18912
16:10:52,276 --> 16:10:59,276
295 and now to compare this value to
18913
16:10:55,400 --> 16:11:02,596
another value expect gives us an
18914
16:10:59,276 --> 16:11:04,436
object and this object has many methods
18915
16:11:02,596 --> 16:11:06,756
we can use to do
18916
16:11:04,436 --> 16:11:13,360
comparisons so one of the methods we can
18917
16:11:06,756 --> 16:11:16,240
use in this object is dot 2 equal
18918
16:11:13,360 --> 16:11:18,360
brackets and then inside these brackets
18919
16:11:16,240 --> 16:11:21,080
we'll put another value that we want to
18920
16:11:18,360 --> 16:11:25,880
compare this to so we want to compare
18921
16:11:21,080 --> 16:11:25,880
this to the string 2095
18922
16:11:26,116 --> 16:11:32,596
and that's it this checks if this value
18923
16:11:29,436 --> 16:11:35,360
is equal to this value and then displays
18924
16:11:32,596 --> 16:11:37,596
the result on the page so it does
18925
16:11:35,360 --> 16:11:40,360
everything that we did before except
18926
16:11:37,596 --> 16:11:43,160
with one line of code and you'll also
18927
16:11:40,360 --> 16:11:46,240
notice that jasmin's code is designed so
18928
16:11:43,160 --> 16:11:48,720
that it reads like English for example
18929
16:11:46,240 --> 16:11:52,880
we expect format currency
18930
16:11:48,720 --> 16:11:56,000
2095 to equal this string and this makes
18931
16:11:52,880 --> 16:11:58,796
a test code easier to read
18932
16:11:56,000 --> 16:12:01,756
so we just created our first test suite
18933
16:11:58,796 --> 16:12:05,116
and our first test using
18934
16:12:01,756 --> 16:12:07,480
Jasmine now let's run this test to do
18935
16:12:05,116 --> 16:12:10,480
that we just need to run this Javascript
18936
16:12:07,480 --> 16:12:13,400
file inside test.html
18937
16:12:10,480 --> 16:12:16,720
so first let's save this
18938
16:12:13,400 --> 16:12:20,796
file and then inside test.html we're
18939
16:12:16,720 --> 16:12:23,240
going to load this file so in here at
18940
16:12:20,796 --> 16:12:26,636
the bottom we're going to create a
18941
16:12:23,240 --> 16:12:26,636
script tag
18942
16:12:26,796 --> 16:12:31,636
and we'll give it a source attribute SRC
18943
16:12:29,880 --> 16:12:35,680
equals double
18944
16:12:31,636 --> 16:12:38,680
quotes and we're going to load money
18945
16:12:35,680 --> 16:12:38,680
test.js
18946
16:12:39,080 --> 16:12:45,480
test.js and remember our test file uses
18947
16:12:42,200 --> 16:12:49,680
import so we also need to give it the
18948
16:12:45,480 --> 16:12:52,320
attribute type equals module so this
18949
16:12:49,680 --> 16:12:56,320
file has access to JavaScript module
18950
16:12:52,320 --> 16:12:59,276
features so now let's save
18951
16:12:56,320 --> 16:13:01,956
and we'll open this file in our browser
18952
16:12:59,276 --> 16:13:04,400
so we should have it open from before if
18953
16:13:01,956 --> 16:13:06,200
you don't you can write click and open
18954
16:13:04,400 --> 16:13:09,680
with live
18955
16:13:06,200 --> 16:13:11,756
server so we'll open the test page and
18956
16:13:09,680 --> 16:13:13,916
now you can see that we have our one
18957
16:13:11,756 --> 16:13:16,796
test that we created here and it's
18958
16:13:13,916 --> 16:13:20,040
passing so it's green you can see here
18959
16:13:16,796 --> 16:13:22,880
that we created a test Suite with a name
18960
16:13:20,040 --> 16:13:26,240
and we also created a test with this
18961
16:13:22,880 --> 16:13:28,956
name so we just created the first test
18962
16:13:26,240 --> 16:13:31,160
that we had before except using Jasmine
18963
16:13:28,956 --> 16:13:33,520
this time and you can see that Jasmine
18964
16:13:31,160 --> 16:13:36,000
also creates a nice website for us to
18965
16:13:33,520 --> 16:13:38,636
see the test
18966
16:13:36,000 --> 16:13:41,436
results okay now that we learned how to
18967
16:13:38,636 --> 16:13:43,560
use Jasmine to create a test let's get
18968
16:13:41,436 --> 16:13:47,240
some practice and create the rest of our
18969
16:13:43,560 --> 16:13:51,400
tests from before we'll go back to our
18970
16:13:47,240 --> 16:13:51,400
code and open money
18971
16:13:51,436 --> 16:13:57,796
test.js and here we're going to create
18972
16:13:54,436 --> 16:14:01,400
the other two tests that we had here so
18973
16:13:57,796 --> 16:14:03,636
at the bottom inside the same test Suite
18974
16:14:01,400 --> 16:14:07,520
we're going to create another test using
18975
16:14:03,636 --> 16:14:11,000
the function it brackets and we'll give
18976
16:14:07,520 --> 16:14:12,756
it a string which is the test name and
18977
16:14:11,000 --> 16:14:18,720
let's name it the same as
18978
16:14:12,756 --> 16:14:20,636
before works with zero comma brackets
18979
16:14:18,720 --> 16:14:22,840
arrow and curly
18980
16:14:20,636 --> 16:14:25,916
brackets and now we can put something
18981
16:14:22,840 --> 16:14:28,560
inside this test so in the second test
18982
16:14:25,916 --> 16:14:30,636
we're going to compare these two values
18983
16:14:28,560 --> 16:14:34,040
to compare values we're going to use the
18984
16:14:30,636 --> 16:14:36,916
function expect
18985
16:14:34,040 --> 16:14:39,956
brackets and the first value is going to
18986
16:14:36,916 --> 16:14:39,956
be format
18987
16:14:40,320 --> 16:14:46,636
currency brackets
18988
16:14:42,956 --> 16:14:49,596
zero and then expect gives us an
18989
16:14:46,636 --> 16:14:53,320
object and this object has a method
18990
16:14:49,596 --> 16:14:55,916
called dot to equal which lets us
18991
16:14:53,320 --> 16:14:58,756
compare this value to another value
18992
16:14:55,916 --> 16:15:03,796
so we'll call this method using brackets
18993
16:14:58,756 --> 16:15:06,400
and compare to the string the string 0 0
18994
16:15:03,796 --> 16:15:09,160
0 and now let's
18995
16:15:06,400 --> 16:15:11,436
save and live server will update our web
18996
16:15:09,160 --> 16:15:14,560
page automatically so we'll open the
18997
16:15:11,436 --> 16:15:17,116
test page and now we have two tests and
18998
16:15:14,560 --> 16:15:20,400
they both passed so that's how we create
18999
16:15:17,116 --> 16:15:22,040
the second test using Jasmine and again
19000
16:15:20,400 --> 16:15:24,400
don't worry if this is in a different
19001
16:15:22,040 --> 16:15:25,720
order for you Jasmine randomizes the
19002
16:15:24,400 --> 16:15:28,360
order of the
19003
16:15:25,720 --> 16:15:30,880
tests finally let's create that third
19004
16:15:28,360 --> 16:15:34,480
test that we had before we'll go back to
19005
16:15:30,880 --> 16:15:36,756
our code and then in our old money test
19006
16:15:34,480 --> 16:15:39,240
file we're going to create this third
19007
16:15:36,756 --> 16:15:40,880
test feel free to pause the video if you
19008
16:15:39,240 --> 16:15:44,276
want to give it a try
19009
16:15:40,880 --> 16:15:46,436
yourself so we'll scroll down and we'll
19010
16:15:44,276 --> 16:15:50,796
create another test inside this test
19011
16:15:46,436 --> 16:15:53,720
Suite using the function it brackets and
19012
16:15:50,796 --> 16:15:55,840
a string and we'll give it the same test
19013
16:15:53,720 --> 16:15:59,276
name as before
19014
16:15:55,840 --> 16:16:04,636
rounds up to the
19015
16:15:59,276 --> 16:16:05,796
nearest set comma brackets arrow and
19016
16:16:04,636 --> 16:16:07,956
curly
19017
16:16:05,796 --> 16:16:13,200
brackets and we're going to compare
19018
16:16:07,956 --> 16:16:16,560
these two values so we use exp brackets
19019
16:16:13,200 --> 16:16:19,756
and give it the first value format
19020
16:16:16,560 --> 16:16:22,360
currency brackets
19021
16:16:19,756 --> 16:16:23,840
2000.5 and to compare it we'll use the
19022
16:16:22,360 --> 16:16:31,240
method
19023
16:16:23,840 --> 16:16:33,840
do2 equal brackets and compare it to
19024
16:16:31,240 --> 16:16:37,240
20.01 and
19025
16:16:33,840 --> 16:16:39,596
save and let's go back to our test page
19026
16:16:37,240 --> 16:16:43,000
and now we have three tests and all
19027
16:16:39,596 --> 16:16:45,596
three of them passed so we recreated the
19028
16:16:43,000 --> 16:16:48,116
tests that we had
19029
16:16:45,596 --> 16:16:50,956
before now let's try making one of these
19030
16:16:48,116 --> 16:16:53,680
tests fail to see what it looks like in
19031
16:16:50,956 --> 16:16:59,436
Jasmine we'll open our
19032
16:16:53,680 --> 16:16:59,436
code and and let's open the file utils
19033
16:17:12,480 --> 16:17:15,480
money.jpg
19034
16:17:21,276 --> 16:17:26,436
test so it tells us the test Suite name
19035
16:17:24,276 --> 16:17:28,240
and the test name that failed and it
19036
16:17:26,436 --> 16:17:31,436
will also tell us the two values that
19037
16:17:28,240 --> 16:17:33,916
are not equal to each other and here it
19038
16:17:31,436 --> 16:17:35,796
will tell us where this test failed so
19039
16:17:33,916 --> 16:17:38,840
it tell us that it failed in money
19040
16:17:35,796 --> 16:17:41,840
test.js at line
19041
16:17:38,840 --> 16:17:45,840
13 so if we go back to our
19042
16:17:41,840 --> 16:17:48,880
code and we open the Jasmine money
19043
16:17:45,840 --> 16:17:50,720
test.js line 13 is right here so just
19044
16:17:48,880 --> 16:17:53,720
telling us that this line failed the
19045
16:17:50,720 --> 16:17:53,720
test
19046
16:17:55,956 --> 16:18:00,480
here we can see the full list of tests
19047
16:17:58,756 --> 16:18:04,040
and it will tell us that we have three
19048
16:18:00,480 --> 16:18:06,360
tests two of them passed and one of them
19049
16:18:04,040 --> 16:18:09,116
failed so Jasmine gives us a lot of
19050
16:18:06,360 --> 16:18:10,796
details on where a test failed to help
19051
16:18:09,116 --> 16:18:14,276
us fix the
19052
16:18:10,796 --> 16:18:17,040
issue now let's add back math.round to
19053
16:18:14,276 --> 16:18:23,480
make everything pass again we'll open
19054
16:18:17,040 --> 16:18:23,480
our code and open UTS money.jpg
19055
16:18:26,400 --> 16:18:32,040
math.round Open Bracket and close
19056
16:18:30,080 --> 16:18:35,320
bracket and
19057
16:18:32,040 --> 16:18:37,596
save and if we check our test page
19058
16:18:35,320 --> 16:18:40,240
everything passes
19059
16:18:37,596 --> 16:18:43,756
again so this is how we use a testing
19060
16:18:40,240 --> 16:18:46,080
framework like Jasmine to create tests
19061
16:18:43,756 --> 16:18:49,916
the testing framework gives us a bunch
19062
16:18:46,080 --> 16:18:52,520
of functions such as describe it and
19063
16:18:49,916 --> 16:18:55,596
expect and then we use these functions
19064
16:18:52,520 --> 16:18:58,360
to create our test so so these functions
19065
16:18:55,596 --> 16:19:01,040
have a lot of features inside them they
19066
16:18:58,360 --> 16:19:04,200
do all of the setup for us and they also
19067
16:19:01,040 --> 16:19:06,480
display the test on a nice web page for
19068
16:19:04,200 --> 16:19:09,720
us now there's one more thing I want to
19069
16:19:06,480 --> 16:19:12,880
mention which is we can use describe
19070
16:19:09,720 --> 16:19:15,636
inside describe this helps us organize
19071
16:19:12,880 --> 16:19:15,636
our tests
19072
16:19:16,480 --> 16:19:22,160
further so now let's save our changes
19073
16:19:18,956 --> 16:19:24,956
into git we'll open the git
19074
16:19:22,160 --> 16:19:25,956
section and let's close this file at the
19075
16:19:24,956 --> 16:19:30,200
top for
19076
16:19:25,956 --> 16:19:32,276
now so inside money test.js we created
19077
16:19:30,200 --> 16:19:35,320
all the tests that we had before for
19078
16:19:32,276 --> 16:19:38,520
format currency by using Jasmine this
19079
16:19:35,320 --> 16:19:42,756
time and for spec Runner we rename this
19080
16:19:38,520 --> 16:19:46,160
file to test.html and finally we deleted
19081
16:19:42,756 --> 16:19:48,116
all the test code that came with Jasmine
19082
16:19:46,160 --> 16:19:48,796
so now let's add a message to describe
19083
16:19:48,116 --> 16:19:50,360
our
19084
16:19:48,796 --> 16:19:55,320
changes
19085
16:19:50,360 --> 16:20:00,080
remove default tests and add
19086
16:19:55,320 --> 16:20:00,080
money tests and
19087
16:20:04,436 --> 16:20:09,956
commit now let's test a different
19088
16:20:06,756 --> 16:20:11,636
function using Jasmine and along the way
19089
16:20:09,956 --> 16:20:13,240
we're going to learn some more features
19090
16:20:11,636 --> 16:20:16,200
of testing
19091
16:20:13,240 --> 16:20:18,320
Frameworks let's go back to our
19092
16:20:16,200 --> 16:20:23,560
code and we're going to scroll to the
19093
16:20:18,320 --> 16:20:26,560
top and open the data/ cart. JS
19094
16:20:23,560 --> 16:20:29,596
file so inside this file we have a
19095
16:20:26,560 --> 16:20:31,560
function called add to cart so we're
19096
16:20:29,596 --> 16:20:32,560
going to create tests for the add to
19097
16:20:31,560 --> 16:20:35,636
cart
19098
16:20:32,560 --> 16:20:38,116
function first since this function is in
19099
16:20:35,636 --> 16:20:41,520
a different file we're going to create a
19100
16:20:38,116 --> 16:20:44,436
new test file so we're going to scroll
19101
16:20:41,520 --> 16:20:47,000
down and let's close the test folder so
19102
16:20:44,436 --> 16:20:50,116
we don't get confused and then inside
19103
16:20:47,000 --> 16:20:53,916
test- Jasmine we're going to click in
19104
16:20:50,116 --> 16:20:58,320
this folder and then create a new file
19105
16:20:53,916 --> 16:21:00,956
and let's name it cart
19106
16:20:58,320 --> 16:21:04,276
test.js and press
19107
16:21:00,956 --> 16:21:06,720
enter so we name it the original file
19108
16:21:04,276 --> 16:21:08,636
name which is cart and then just add
19109
16:21:06,720 --> 16:21:11,796
test at the
19110
16:21:08,636 --> 16:21:15,000
end and to better organize our test
19111
16:21:11,796 --> 16:21:18,360
files we usually try to match the folder
19112
16:21:15,000 --> 16:21:22,720
structure of the code so for example in
19113
16:21:18,360 --> 16:21:25,796
our code money. JS is inside this UIL
19114
16:21:22,720 --> 16:21:28,240
folder so inside our tests we should
19115
16:21:25,796 --> 16:21:31,200
also create a utils folder and put this
19116
16:21:28,240 --> 16:21:34,880
file inside so we'll create a new folder
19117
16:21:31,200 --> 16:21:37,000
by clicking up here and let's name it
19118
16:21:34,880 --> 16:21:40,080
utils and press
19119
16:21:37,000 --> 16:21:42,596
enter and then move the money test.js
19120
16:21:40,080 --> 16:21:42,596
file
19121
16:21:43,636 --> 16:21:48,560
inside if it asks you if you want to
19122
16:21:46,040 --> 16:21:49,880
update Imports automatically you can
19123
16:21:48,560 --> 16:21:53,436
click
19124
16:21:49,880 --> 16:21:56,080
yes if you check your code scroll to the
19125
16:21:53,436 --> 16:21:58,956
top make sure that your file path starts
19126
16:21:56,080 --> 16:22:01,000
with do do slash do do slash because now
19127
16:21:58,956 --> 16:22:03,916
we're inside another
19128
16:22:01,000 --> 16:22:06,436
folder VSS code sometimes updates the
19129
16:22:03,916 --> 16:22:08,880
file paths for us automatically but if
19130
16:22:06,436 --> 16:22:12,080
it doesn't we can just add an extra dot
19131
16:22:08,880 --> 16:22:12,080
do slash in front
19132
16:22:12,240 --> 16:22:19,240
ourselves and we're also going to open
19133
16:22:14,880 --> 16:22:24,560
money test.js and save this
19134
16:22:19,240 --> 16:22:28,040
file next if we scroll up cart. JS is in
19135
16:22:24,560 --> 16:22:30,720
inside a data folder so inside our tests
19136
16:22:28,040 --> 16:22:32,160
we're also going to create a data folder
19137
16:22:30,720 --> 16:22:35,756
let's click cart
19138
16:22:32,160 --> 16:22:38,956
test.js we'll create a new folder and
19139
16:22:35,756 --> 16:22:40,080
let's name this the data folder and
19140
16:22:38,956 --> 16:22:45,560
press
19141
16:22:40,080 --> 16:22:45,560
enter and then move card test.js inside
19142
16:22:48,000 --> 16:22:52,560
here now you'll notice that this folder
19143
16:22:50,360 --> 16:22:54,956
structure doesn't perfectly match the
19144
16:22:52,560 --> 16:22:57,276
folder structure that we have up here
19145
16:22:54,956 --> 16:22:59,840
because utils is inside the scripts
19146
16:22:57,276 --> 16:23:02,436
folder but usually this data folder
19147
16:22:59,840 --> 16:23:04,200
should also be inside the scripts folder
19148
16:23:02,436 --> 16:23:05,080
I just made a mistake when structuring
19149
16:23:04,200 --> 16:23:07,480
the
19150
16:23:05,080 --> 16:23:10,480
project so let's just use this folder
19151
16:23:07,480 --> 16:23:10,480
structure in our
19152
16:23:10,880 --> 16:23:17,320
tests okay so now let's open cart
19153
16:23:14,560 --> 16:23:18,560
test.js and now we're ready to test the
19154
16:23:17,320 --> 16:23:22,040
add to cart
19155
16:23:18,560 --> 16:23:25,560
function so first let's import add to
19156
16:23:22,040 --> 16:23:29,080
cart at the top we'll import
19157
16:23:25,560 --> 16:23:31,916
curly brackets add to
19158
16:23:29,080 --> 16:23:34,680
cart from a
19159
16:23:31,916 --> 16:23:37,596
string and we're going to locate cart.
19160
16:23:34,680 --> 16:23:41,240
JS so first we need to get out of the
19161
16:23:37,596 --> 16:23:45,116
data folder using do slash and then get
19162
16:23:41,240 --> 16:23:48,080
out of the test djine folder do do slash
19163
16:23:45,116 --> 16:23:51,880
and we'll go into this data folder data
19164
16:23:48,080 --> 16:23:51,880
SL cart.
19165
16:23:51,916 --> 16:23:57,956
JS next let's create a test suite for
19166
16:23:55,320 --> 16:24:00,480
this function so we'll create some new
19167
16:23:57,956 --> 16:24:03,596
lines and to create a test Suite in
19168
16:24:00,480 --> 16:24:05,480
Jasmine we'll use the function
19169
16:24:03,596 --> 16:24:07,796
describe
19170
16:24:05,480 --> 16:24:10,756
brackets and we'll give this test Suite
19171
16:24:07,796 --> 16:24:15,916
A Name by giving it a
19172
16:24:10,756 --> 16:24:18,596
string so let's use the name test Suite
19173
16:24:15,916 --> 16:24:20,916
colon add to
19174
16:24:18,596 --> 16:24:24,560
cart and we'll give it a second
19175
16:24:20,916 --> 16:24:27,360
parameter which is a function brackets
19176
16:24:24,560 --> 16:24:30,400
arrow and curly
19177
16:24:27,360 --> 16:24:33,040
brackets and now inside this test Suite
19178
16:24:30,400 --> 16:24:35,480
we're going to add some tests so let's
19179
16:24:33,040 --> 16:24:37,436
look at the code for add to cart to see
19180
16:24:35,480 --> 16:24:41,560
what kind of tests we should
19181
16:24:37,436 --> 16:24:45,240
add so we'll open data/ cart.
19182
16:24:41,560 --> 16:24:48,160
JS and then inside add to cart you'll
19183
16:24:45,240 --> 16:24:51,320
notice that this function uses an if
19184
16:24:48,160 --> 16:24:53,680
statement a best practice in testing is
19185
16:24:51,320 --> 16:24:54,956
to test each condition of the if
19186
16:24:53,680 --> 16:24:57,880
statement
19187
16:24:54,956 --> 16:25:00,200
this is known as test coverage test
19188
16:24:57,880 --> 16:25:03,320
coverage means how much of the code is
19189
16:25:00,200 --> 16:25:07,040
being tested and a best practice is we
19190
16:25:03,320 --> 16:25:09,916
try to maximize test
19191
16:25:07,040 --> 16:25:12,240
coverage so for this if statement we'll
19192
16:25:09,916 --> 16:25:14,200
create a test for the first condition
19193
16:25:12,240 --> 16:25:17,000
which is when the product is already in
19194
16:25:14,200 --> 16:25:19,916
the cart and we'll create a test for the
19195
16:25:17,000 --> 16:25:22,240
else condition when the product is not
19196
16:25:19,916 --> 16:25:22,240
in the
19197
16:25:22,956 --> 16:25:27,480
cart let's go back to cart
19198
16:25:28,040 --> 16:25:33,480
test.js and inside this test Suite we're
19199
16:25:31,360 --> 16:25:37,520
going to create a test using the
19200
16:25:33,480 --> 16:25:41,080
function it brackets and we'll give it a
19201
16:25:37,520 --> 16:25:43,080
string and this will be the test name so
19202
16:25:41,080 --> 16:25:46,840
for the video I'm just going to scroll
19203
16:25:43,080 --> 16:25:49,560
up and take this cart. JS file and put
19204
16:25:46,840 --> 16:25:52,880
it at the top here so we can see our
19205
16:25:49,560 --> 16:25:55,596
code and our test side by side so I'm
19206
16:25:52,880 --> 16:25:57,680
going to scroll down to the add to card
19207
16:25:55,596 --> 16:26:00,436
function and we mentioned that we're
19208
16:25:57,680 --> 16:26:03,116
going to test each condition of this if
19209
16:26:00,436 --> 16:26:05,116
statement so the first test is going to
19210
16:26:03,116 --> 16:26:11,276
be when the product is already in the
19211
16:26:05,116 --> 16:26:16,160
cart so that here let's name it ads and
19212
16:26:11,276 --> 16:26:19,240
existing product to the cart comma
19213
16:26:16,160 --> 16:26:22,000
brackets arrow and curly
19214
16:26:19,240 --> 16:26:23,916
brackets and let's add another test for
19215
16:26:22,000 --> 16:26:27,480
when the product is not in the cart so
19216
16:26:23,916 --> 16:26:31,200
this else condition so down here we'll
19217
16:26:27,480 --> 16:26:36,200
create another test using it brackets
19218
16:26:31,200 --> 16:26:41,840
and a string and the test name adds a
19219
16:26:36,200 --> 16:26:46,720
new product to the cart comma and a
19220
16:26:41,840 --> 16:26:49,080
function brackets arrow and curly
19221
16:26:46,720 --> 16:26:51,796
brackets so these are the two tests that
19222
16:26:49,080 --> 16:26:53,116
we need for the two conditions of this
19223
16:26:51,796 --> 16:26:55,480
if
19224
16:26:53,116 --> 16:26:58,080
statement let's actually start with
19225
16:26:55,480 --> 16:27:00,276
adding a new product to the cart since
19226
16:26:58,080 --> 16:27:03,240
it's a little easier to
19227
16:27:00,276 --> 16:27:06,276
test now unlike the format currency
19228
16:27:03,240 --> 16:27:09,200
function add to cart doesn't return a
19229
16:27:06,276 --> 16:27:11,436
value so we can't really compare it to
19230
16:27:09,200 --> 16:27:14,116
another value using
19231
16:27:11,436 --> 16:27:16,916
expect instead we're going to call add
19232
16:27:14,116 --> 16:27:20,560
to cart to modify the cart and then
19233
16:27:16,916 --> 16:27:24,240
check if this cart looks correct to do
19234
16:27:20,560 --> 16:27:28,916
that inside here let's call the function
19235
16:27:24,240 --> 16:27:32,636
add to cart
19236
16:27:28,916 --> 16:27:35,796
brackets and this function takes one
19237
16:27:32,636 --> 16:27:39,880
string which is the product
19238
16:27:35,796 --> 16:27:42,200
ID so inside here let's give it a string
19239
16:27:39,880 --> 16:27:45,000
and to find a product ID that we can
19240
16:27:42,200 --> 16:27:47,520
test with we're going to go to the left
19241
16:27:45,000 --> 16:27:50,956
and scroll up and we're going to open
19242
16:27:47,520 --> 16:27:54,160
the data/ products. JS
19243
16:27:50,956 --> 16:27:56,596
file and inside here we have a list of
19244
16:27:54,160 --> 16:27:59,756
products so let's just take the first
19245
16:27:56,596 --> 16:28:04,956
product ID and use it in our test we're
19246
16:27:59,756 --> 16:28:08,436
going to select this ID and right click
19247
16:28:04,956 --> 16:28:11,436
copy and then inside cart
19248
16:28:08,436 --> 16:28:14,436
test.js in this string we're going to
19249
16:28:11,436 --> 16:28:17,560
rightclick and
19250
16:28:14,436 --> 16:28:20,596
paste so this will add this product ID
19251
16:28:17,560 --> 16:28:22,880
to the cart and now to check if this
19252
16:28:20,596 --> 16:28:25,436
code is working correctly we're going to
19253
16:28:22,880 --> 16:28:28,040
check what the cart look looks like so
19254
16:28:25,436 --> 16:28:30,360
first we need to import the cart we're
19255
16:28:28,040 --> 16:28:33,480
going to scroll up and since we're
19256
16:28:30,360 --> 16:28:36,916
already importing from cart. JS to UT
19257
16:28:33,480 --> 16:28:40,200
the cart we can type a comma
19258
16:28:36,916 --> 16:28:42,040
cart and then at the bottom here we're
19259
16:28:40,200 --> 16:28:45,596
going to create a new
19260
16:28:42,040 --> 16:28:48,596
line and first let's check if the card.
19261
16:28:45,596 --> 16:28:51,560
length is correct so if we assume that
19262
16:28:48,596 --> 16:28:54,200
we start with an empty cart when we add
19263
16:28:51,560 --> 16:28:56,636
a product the cart. length should should
19264
16:28:54,200 --> 16:29:00,040
be one so we can compare these two
19265
16:28:56,636 --> 16:29:01,720
values cart. length and one so to
19266
16:29:00,040 --> 16:29:05,956
compare values we're going to use the
19267
16:29:01,720 --> 16:29:07,480
function expect brackets and we'll
19268
16:29:05,956 --> 16:29:09,560
compare the
19269
16:29:07,480 --> 16:29:13,360
cart.
19270
16:29:09,560 --> 16:29:17,840
length and then here we'll use the
19271
16:29:13,360 --> 16:29:20,560
method2 equal brackets
19272
16:29:17,840 --> 16:29:23,720
1 so now let's save this
19273
16:29:20,560 --> 16:29:25,596
file and we're going to run these tests
19274
16:29:23,720 --> 16:29:30,480
to run them we're just going to load
19275
16:29:25,596 --> 16:29:33,320
this file inside test.html so we'll open
19276
16:29:30,480 --> 16:29:35,116
this and then at the bottom we'll create
19277
16:29:33,320 --> 16:29:38,796
a script
19278
16:29:35,116 --> 16:29:42,160
tag give it a source attribute double
19279
16:29:38,796 --> 16:29:44,680
quotes and we're going to load this file
19280
16:29:42,160 --> 16:29:48,240
so this file is inside the data folder
19281
16:29:44,680 --> 16:29:54,320
so we need to type data SL to go into
19282
16:29:48,240 --> 16:29:57,080
the folder and then load cart test.js
19283
16:29:54,320 --> 16:29:59,520
and this file also uses import so we're
19284
16:29:57,080 --> 16:30:02,916
going to give it the attribute type
19285
16:29:59,520 --> 16:30:03,840
equals module to enable JavaScript
19286
16:30:02,916 --> 16:30:06,040
module
19287
16:30:03,840 --> 16:30:10,200
features and one thing that I forgot to
19288
16:30:06,040 --> 16:30:12,520
do is we moved money test into the util
19289
16:30:10,200 --> 16:30:15,916
folder so we need to update the source
19290
16:30:12,520 --> 16:30:18,400
attribute to add the utils folder and
19291
16:30:15,916 --> 16:30:20,160
then slash to go into the folder and
19292
16:30:18,400 --> 16:30:25,040
then locate money
19293
16:30:20,160 --> 16:30:28,756
test.js so now let's save this HTML file
19294
16:30:25,040 --> 16:30:28,756
and open this test page in our
19295
16:30:31,436 --> 16:30:35,796
browser and now we should have two
19296
16:30:33,680 --> 16:30:38,400
additional tests and the test that we
19297
16:30:35,796 --> 16:30:40,200
just created should fail if it doesn't
19298
16:30:38,400 --> 16:30:43,916
fail for you you can go into your
19299
16:30:40,200 --> 16:30:47,596
console and run local storage. CLE and
19300
16:30:43,916 --> 16:30:50,240
then refresh the page and it should
19301
16:30:47,596 --> 16:30:53,000
fail so this tells us that the failure
19302
16:30:50,240 --> 16:30:55,880
happened in the test suite at Dart in
19303
16:30:53,000 --> 16:30:58,200
the test adds a new product to the cart
19304
16:30:55,880 --> 16:31:00,596
which is the one we just
19305
16:30:58,200 --> 16:31:03,476
created so it's telling us that the
19306
16:31:00,596 --> 16:31:06,200
cart. length is not equal to one it's
19307
16:31:03,476 --> 16:31:09,796
equal to a different number so why is
19308
16:31:06,200 --> 16:31:13,000
this happening let's go back to our
19309
16:31:09,796 --> 16:31:16,240
test open cart
19310
16:31:13,000 --> 16:31:19,276
test.js and in here remember that we
19311
16:31:16,240 --> 16:31:21,596
assumed the cart starts as empty and if
19312
16:31:19,276 --> 16:31:24,720
we add a product the card dot length
19313
16:31:21,596 --> 16:31:27,720
would be one however the cart doesn't
19314
16:31:24,720 --> 16:31:27,720
actually start as
19315
16:31:27,840 --> 16:31:34,720
empty in cart. JS at the top here we're
19316
16:31:31,916 --> 16:31:36,636
loading the cart from local storage if
19317
16:31:34,720 --> 16:31:40,320
there's nothing in local storage we use
19318
16:31:36,636 --> 16:31:43,400
this default cart so our starting cart
19319
16:31:40,320 --> 16:31:46,040
depends on what's inside local storage
19320
16:31:43,400 --> 16:31:48,840
and this is a big problem when testing
19321
16:31:46,040 --> 16:31:50,840
because local storage can change if
19322
16:31:48,840 --> 16:31:54,360
there's an empty card saved in local
19323
16:31:50,840 --> 16:31:56,520
storage our test will pass but if
19324
16:31:54,360 --> 16:32:00,200
there's not an empty cart in local
19325
16:31:56,520 --> 16:32:03,200
storage then this test will fail this is
19326
16:32:00,200 --> 16:32:05,796
known as a flaky test a test that
19327
16:32:03,200 --> 16:32:07,956
sometimes passes and sometimes fails
19328
16:32:05,796 --> 16:32:10,880
even if we don't change the
19329
16:32:07,956 --> 16:32:13,520
code now to solve this problem we're
19330
16:32:10,880 --> 16:32:17,200
going to use a feature of Jasmine called
19331
16:32:13,520 --> 16:32:20,116
mocks a mock lets us replace a method
19332
16:32:17,200 --> 16:32:23,400
with a fake version and then we can make
19333
16:32:20,116 --> 16:32:24,520
the fake version do anything we want for
19334
16:32:23,400 --> 16:32:27,436
example
19335
16:32:24,520 --> 16:32:30,880
when we load the cart from local storage
19336
16:32:27,436 --> 16:32:33,560
we're using local storage. getet item so
19337
16:32:30,880 --> 16:32:36,400
we can use a mock to create a fake
19338
16:32:33,560 --> 16:32:38,680
version of get item and then we can make
19339
16:32:36,400 --> 16:32:40,636
this fake version do anything we want
19340
16:32:38,680 --> 16:32:43,560
like return an empty
19341
16:32:40,636 --> 16:32:44,596
array so let's go ahead and create our
19342
16:32:43,560 --> 16:32:47,400
first
19343
16:32:44,596 --> 16:32:50,916
mock we'll go back to cart
19344
16:32:47,400 --> 16:32:52,880
test.js and at the top of this test
19345
16:32:50,916 --> 16:32:56,796
we're going to create a mock using
19346
16:32:52,880 --> 16:32:59,436
another function of Jasmine called spy
19347
16:32:56,796 --> 16:33:02,636
on and
19348
16:32:59,436 --> 16:33:05,240
brackets and we'll give spy on two
19349
16:33:02,636 --> 16:33:08,080
parameters the first parameter is the
19350
16:33:05,240 --> 16:33:12,436
object that we want to mock in our case
19351
16:33:08,080 --> 16:33:15,560
it's local storage so we'll type local
19352
16:33:12,436 --> 16:33:18,000
storage comma and then we'll give it a
19353
16:33:15,560 --> 16:33:21,200
string and this string will be the
19354
16:33:18,000 --> 16:33:24,000
method that we want to Mark in our case
19355
16:33:21,200 --> 16:33:28,756
we want to Mark the get item method so
19356
16:33:24,000 --> 16:33:31,240
here we'll type get item and make sure I
19357
16:33:28,756 --> 16:33:32,476
is uppercase so that we exactly match
19358
16:33:31,240 --> 16:33:35,916
the method
19359
16:33:32,476 --> 16:33:39,796
name so now this will replace local
19360
16:33:35,916 --> 16:33:41,756
storage. getet item with a fake version
19361
16:33:39,796 --> 16:33:45,880
and we can make this fake version do
19362
16:33:41,756 --> 16:33:49,000
anything we want to do that spy on gives
19363
16:33:45,880 --> 16:33:50,680
us an object and this object has a
19364
16:33:49,000 --> 16:33:54,400
property we can
19365
16:33:50,680 --> 16:33:57,160
use so at the end we'll type Dot
19366
16:33:54,400 --> 16:34:01,160
and the property called
19367
16:33:57,160 --> 16:34:05,916
an and this result is also an object and
19368
16:34:01,160 --> 16:34:09,916
this object has a method called dot call
19369
16:34:05,916 --> 16:34:12,796
fake brackets so don't worry about all
19370
16:34:09,916 --> 16:34:16,000
the Dots here Jasmine just organizes its
19371
16:34:12,796 --> 16:34:18,560
code so that it reads like English so
19372
16:34:16,000 --> 16:34:22,116
we're spying on local storage. getet
19373
16:34:18,560 --> 16:34:26,276
item and call fake so next we're going
19374
16:34:22,116 --> 16:34:29,040
to give call fake a function brackets
19375
16:34:26,276 --> 16:34:32,080
arrow and curly
19376
16:34:29,040 --> 16:34:34,796
brackets and this function is what we
19377
16:34:32,080 --> 16:34:37,636
want get item to do so we're essentially
19378
16:34:34,796 --> 16:34:40,200
overwriting the original get item with
19379
16:34:37,636 --> 16:34:42,916
whatever is inside this
19380
16:34:40,200 --> 16:34:45,436
function so earlier we said we wanted
19381
16:34:42,916 --> 16:34:48,916
get item to return the empty array for
19382
16:34:45,436 --> 16:34:52,560
this test so inside this fake function
19383
16:34:48,916 --> 16:34:54,360
let's make get item return the empty
19384
16:34:52,560 --> 16:34:56,276
array
19385
16:34:54,360 --> 16:34:58,720
now remember that local storage only
19386
16:34:56,276 --> 16:35:01,840
supports strings so we need to return
19387
16:34:58,720 --> 16:35:08,160
this as a string to do that we're going
19388
16:35:01,840 --> 16:35:12,476
to use the code Json all uppercase do
19389
16:35:08,160 --> 16:35:14,840
stringify Open Bracket and close bracket
19390
16:35:12,476 --> 16:35:17,796
so this will convert whatever is in the
19391
16:35:14,840 --> 16:35:19,360
brackets to a Json string and that's
19392
16:35:17,796 --> 16:35:22,116
what we need for local
19393
16:35:19,360 --> 16:35:24,240
storage so now let's test out this mock
19394
16:35:22,116 --> 16:35:27,680
to see if it works
19395
16:35:24,240 --> 16:35:29,436
below this we're going to
19396
16:35:27,680 --> 16:35:32,916
console.log
19397
16:35:29,436 --> 16:35:38,840
brackets and run local
19398
16:35:32,916 --> 16:35:41,040
storage doget capital I item brackets
19399
16:35:38,840 --> 16:35:45,000
the string
19400
16:35:41,040 --> 16:35:47,596
cart let's save this file and then open
19401
16:35:45,000 --> 16:35:49,560
the test page in our
19402
16:35:47,596 --> 16:35:51,320
browser and we're going to open the
19403
16:35:49,560 --> 16:35:54,276
console so
19404
16:35:51,320 --> 16:35:56,276
rightclick inspect
19405
16:35:54,276 --> 16:35:59,276
and the
19406
16:35:56,276 --> 16:36:02,040
console and you'll see that Here Local
19407
16:35:59,276 --> 16:36:04,400
storage. getet item is no longer loading
19408
16:36:02,040 --> 16:36:07,116
from the actual local storage it's
19409
16:36:04,400 --> 16:36:12,400
giving us an empty array every
19410
16:36:07,116 --> 16:36:12,400
time so now we have mocked the get item
19411
16:36:12,796 --> 16:36:18,436
method however you'll also notice that
19412
16:36:15,636 --> 16:36:19,476
our test is still failing so how come it
19413
16:36:18,436 --> 16:36:22,360
still
19414
16:36:19,476 --> 16:36:25,240
fails to understand what's happening
19415
16:36:22,360 --> 16:36:28,116
let's take a closer look at our code
19416
16:36:25,240 --> 16:36:28,116
we'll go back to our
19417
16:36:28,160 --> 16:36:34,916
code and inside our tests here we're
19418
16:36:31,840 --> 16:36:38,560
mocking local storage. getet item but
19419
16:36:34,916 --> 16:36:41,596
notice that above this if we scroll up
19420
16:36:38,560 --> 16:36:45,000
we import the cart at the top so the
19421
16:36:41,596 --> 16:36:47,840
order of this code matters first we load
19422
16:36:45,000 --> 16:36:50,880
the cart from local storage and after
19423
16:36:47,840 --> 16:36:52,720
we're mocking local storage. getet item
19424
16:36:50,880 --> 16:36:54,916
so the card is already loaded at this
19425
16:36:52,720 --> 16:36:56,200
point and this code doesn't have the
19426
16:36:54,916 --> 16:37:00,040
effect that we
19427
16:36:56,200 --> 16:37:02,796
want so one way to solve this problem is
19428
16:37:00,040 --> 16:37:06,880
after we mock local storage here we
19429
16:37:02,796 --> 16:37:09,596
should reload the cart so inside cart.
19430
16:37:06,880 --> 16:37:13,880
JS just going to give it a little more
19431
16:37:09,596 --> 16:37:17,040
space to reload this cart after we mock
19432
16:37:13,880 --> 16:37:18,880
we just need to rerun all of this code
19433
16:37:17,040 --> 16:37:22,756
so let's create a function so we can
19434
16:37:18,880 --> 16:37:25,596
rerun this code at the bottom here we'll
19435
16:37:22,756 --> 16:37:30,476
create a
19436
16:37:25,596 --> 16:37:33,956
function and we'll call it load from
19437
16:37:30,476 --> 16:37:36,040
Storage brackets and curly
19438
16:37:33,956 --> 16:37:39,116
brackets and we're just going to move
19439
16:37:36,040 --> 16:37:42,276
all of this code inside the function so
19440
16:37:39,116 --> 16:37:44,636
let's select all the code up to cart
19441
16:37:42,276 --> 16:37:47,000
equals we'll
19442
16:37:44,636 --> 16:37:50,040
rightclick
19443
16:37:47,000 --> 16:37:54,000
cut and then in the function we'll
19444
16:37:50,040 --> 16:37:56,476
rightclick and paste
19445
16:37:54,000 --> 16:38:01,160
and at the top let's create the cart
19446
16:37:56,476 --> 16:38:04,116
variable again let cart and
19447
16:38:01,160 --> 16:38:06,720
semicolon and lastly when we load this
19448
16:38:04,116 --> 16:38:09,796
file we need to run this function so
19449
16:38:06,720 --> 16:38:12,880
that we run this code at least
19450
16:38:09,796 --> 16:38:17,636
once so down here we'll just run this
19451
16:38:12,880 --> 16:38:20,360
function load from storage and
19452
16:38:17,636 --> 16:38:22,796
brackets so let's
19453
16:38:20,360 --> 16:38:25,520
save so we're basically running the
19454
16:38:22,796 --> 16:38:28,400
exact same code as before except this
19455
16:38:25,520 --> 16:38:31,436
code is now inside a
19456
16:38:28,400 --> 16:38:34,840
function and now in our
19457
16:38:31,436 --> 16:38:37,560
test after we mock local storage. getet
19458
16:38:34,840 --> 16:38:40,040
item we're going to reload the cart
19459
16:38:37,560 --> 16:38:42,796
using this function so first let's
19460
16:38:40,040 --> 16:38:44,476
export it so we can use it in our test
19461
16:38:42,796 --> 16:38:48,320
we'll type
19462
16:38:44,476 --> 16:38:51,160
export and save this file and Insider
19463
16:38:48,320 --> 16:38:53,680
test let's scroll up to the top we're
19464
16:38:51,160 --> 16:38:59,680
already importing from cart. Js so we'll
19465
16:38:53,680 --> 16:39:02,040
type a comma and we'll import load from
19466
16:38:59,680 --> 16:39:05,956
storage and then we'll scroll down back
19467
16:39:02,040 --> 16:39:10,116
to our test and here after we mock local
19468
16:39:05,956 --> 16:39:15,916
storage. getet item we're going to load
19469
16:39:10,116 --> 16:39:19,560
from Storage brackets and
19470
16:39:15,916 --> 16:39:22,000
save so this time we mock local storage.
19471
16:39:19,560 --> 16:39:25,560
getet item first to return an empty
19472
16:39:22,000 --> 16:39:28,040
array and then when we reload the cart
19473
16:39:25,560 --> 16:39:30,840
this is going to be an empty array and
19474
16:39:28,040 --> 16:39:33,240
the cart will be empty and now in our
19475
16:39:30,840 --> 16:39:35,796
test when we add a product to an empty
19476
16:39:33,240 --> 16:39:39,000
cart the cart length will be equal to
19477
16:39:35,796 --> 16:39:43,596
one so this test will pass so we can
19478
16:39:39,000 --> 16:39:46,200
actually remove the console.log here and
19479
16:39:43,596 --> 16:39:50,680
save and check our test
19480
16:39:46,200 --> 16:39:53,720
page and now this test should be
19481
16:39:50,680 --> 16:39:56,796
passing next let's go back to our code
19482
16:39:53,720 --> 16:39:58,720
Cod and if we look at the add to cart
19483
16:39:56,796 --> 16:40:03,636
function in cart.
19484
16:39:58,720 --> 16:40:05,916
JS so in here at the bottom of this
19485
16:40:03,636 --> 16:40:08,360
function you'll notice that we're saving
19486
16:40:05,916 --> 16:40:11,916
the cart to local storage so this is
19487
16:40:08,360 --> 16:40:14,560
going to call local storage. set
19488
16:40:11,916 --> 16:40:16,796
item however we don't actually want to
19489
16:40:14,560 --> 16:40:19,160
save to local storage because this is
19490
16:40:16,796 --> 16:40:21,956
just test code we don't want our test
19491
16:40:19,160 --> 16:40:24,200
code to be modifying local storage or
19492
16:40:21,956 --> 16:40:26,560
affecting our real code
19493
16:40:24,200 --> 16:40:28,720
to prevent this we're also going to mock
19494
16:40:26,560 --> 16:40:31,840
local storage. set
19495
16:40:28,720 --> 16:40:34,160
item so down here we're going to create
19496
16:40:31,840 --> 16:40:36,116
some new lines at the top of the test
19497
16:40:34,160 --> 16:40:40,796
and we're going to mock local storage.
19498
16:40:36,116 --> 16:40:44,320
set item using the function spy on
19499
16:40:40,796 --> 16:40:48,200
brackets and we'll give it local
19500
16:40:44,320 --> 16:40:51,796
storage comma a string and the method we
19501
16:40:48,200 --> 16:40:54,756
want to mock which is set
19502
16:40:51,796 --> 16:40:57,636
item and
19503
16:40:54,756 --> 16:41:00,000
save and remember the order of the code
19504
16:40:57,636 --> 16:41:03,040
matters so we want to mock local
19505
16:41:00,000 --> 16:41:06,080
storage. set item first and then we call
19506
16:41:03,040 --> 16:41:08,916
add to cart so now set item will be
19507
16:41:06,080 --> 16:41:12,596
replaced with a fake version and this
19508
16:41:08,916 --> 16:41:12,596
will no longer save to local
19509
16:41:13,200 --> 16:41:19,916
storage next spyon has another useful
19510
16:41:16,796 --> 16:41:23,200
feature which is it records every time a
19511
16:41:19,916 --> 16:41:25,636
method is used for example what if we
19512
16:41:23,200 --> 16:41:28,596
want to make sure that add to cart saves
19513
16:41:25,636 --> 16:41:31,880
the cart to local storage at the end in
19514
16:41:28,596 --> 16:41:33,956
our tests set item is mocked so we can't
19515
16:41:31,880 --> 16:41:37,080
really check what's inside the local
19516
16:41:33,956 --> 16:41:40,596
storage instead we can just check if add
19517
16:41:37,080 --> 16:41:44,596
to cart calls set item at some
19518
16:41:40,596 --> 16:41:47,756
point to check if set item was called at
19519
16:41:44,596 --> 16:41:49,476
the bottom we can use the function
19520
16:41:47,756 --> 16:41:52,000
expect
19521
16:41:49,476 --> 16:41:56,840
brackets and we're going to give this
19522
16:41:52,000 --> 16:42:00,160
the method that we loed which is local
19523
16:41:56,840 --> 16:42:03,080
storage. set
19524
16:42:00,160 --> 16:42:05,680
item and remember that expect gives us
19525
16:42:03,080 --> 16:42:08,596
an object and this object has many
19526
16:42:05,680 --> 16:42:09,756
useful methods to check stuff like dot
19527
16:42:08,596 --> 16:42:13,320
to
19528
16:42:09,756 --> 16:42:21,916
equal so another method we get from
19529
16:42:13,320 --> 16:42:23,520
expect is dot 2 have been called times
19530
16:42:21,916 --> 16:42:25,000
brackets
19531
16:42:23,520 --> 16:42:28,200
so make sure that you write this method
19532
16:42:25,000 --> 16:42:31,116
in cam case two is lowercase and every
19533
16:42:28,200 --> 16:42:33,956
word after starts with a
19534
16:42:31,116 --> 16:42:37,276
capital so this method checks how many
19535
16:42:33,956 --> 16:42:40,680
times local storage. set item was called
19536
16:42:37,276 --> 16:42:43,436
in the code above so we expect it to be
19537
16:42:40,680 --> 16:42:45,560
called once inside add to cart so we're
19538
16:42:43,436 --> 16:42:48,680
going to give it the number
19539
16:42:45,560 --> 16:42:51,360
one so keep in mind that this only works
19540
16:42:48,680 --> 16:42:53,636
if this method has been mocked with spy
19541
16:42:51,360 --> 16:42:56,160
on so now let's
19542
16:42:53,636 --> 16:42:58,360
save and open our test
19543
16:42:56,160 --> 16:43:02,160
page and you can see that all of our
19544
16:42:58,360 --> 16:43:03,560
tests passed and local storage. set item
19545
16:43:02,160 --> 16:43:07,956
was called
19546
16:43:03,560 --> 16:43:10,636
once so after we mock a method we can
19547
16:43:07,956 --> 16:43:13,880
check how many times this method was
19548
16:43:10,636 --> 16:43:16,160
called and we can even check what values
19549
16:43:13,880 --> 16:43:17,720
this method received but I'll leave that
19550
16:43:16,160 --> 16:43:19,720
as an
19551
16:43:17,720 --> 16:43:22,520
exercise another thing you'll notice
19552
16:43:19,720 --> 16:43:23,956
here is that each test can have multiple
19553
16:43:22,520 --> 16:43:26,400
expectations
19554
16:43:23,956 --> 16:43:29,596
and the test will only pass if all of
19555
16:43:26,400 --> 16:43:31,916
its expectations
19556
16:43:29,596 --> 16:43:35,240
pass now let's add a few more
19557
16:43:31,916 --> 16:43:37,840
expectations to this test for practice
19558
16:43:35,240 --> 16:43:40,360
so one thing we can check is we can
19559
16:43:37,840 --> 16:43:42,796
check the first product in the cart and
19560
16:43:40,360 --> 16:43:46,756
make sure that its product ID matches
19561
16:43:42,796 --> 16:43:50,796
this string here so below this let's use
19562
16:43:46,756 --> 16:43:53,200
another expect brackets and we're going
19563
16:43:50,796 --> 16:43:56,560
to check the first product in the cart
19564
16:43:53,200 --> 16:44:00,476
using cart square bracket
19565
16:43:56,560 --> 16:44:03,476
0 so this is going to be an object and
19566
16:44:00,476 --> 16:44:07,360
this object is going to have a property
19567
16:44:03,476 --> 16:44:11,160
called product ID so that here we'll get
19568
16:44:07,360 --> 16:44:13,436
the dot product
19569
16:44:11,160 --> 16:44:16,916
ID and we're going to check if this
19570
16:44:13,436 --> 16:44:21,916
product ID is equal to this string so to
19571
16:44:16,916 --> 16:44:24,596
do that we'll use the dot 2 equal method
19572
16:44:21,916 --> 16:44:27,320
brackets and we'll give it this string
19573
16:44:24,596 --> 16:44:29,636
here so let's just select this and
19574
16:44:27,320 --> 16:44:34,520
rightclick
19575
16:44:29,636 --> 16:44:37,240
copy and here right click and
19576
16:44:34,520 --> 16:44:40,080
paste another thing that we can check is
19577
16:44:37,240 --> 16:44:42,320
the quantity when we add a new product
19578
16:44:40,080 --> 16:44:46,040
to the cart the quantity should start
19579
16:44:42,320 --> 16:44:47,720
out as one so down here we're going to
19580
16:44:46,040 --> 16:44:49,520
add another
19581
16:44:47,720 --> 16:44:52,116
expect
19582
16:44:49,520 --> 16:44:53,436
brackets and we're going to check the
19583
16:44:52,116 --> 16:44:55,276
first product
19584
16:44:53,436 --> 16:44:57,636
cart square bracket
19585
16:44:55,276 --> 16:45:04,596
0.
19586
16:44:57,636 --> 16:45:07,956
quantity. 2 equal brackets one and
19587
16:45:04,596 --> 16:45:10,400
save now let's open our test
19588
16:45:07,956 --> 16:45:13,320
page and you can see that all of those
19589
16:45:10,400 --> 16:45:16,040
expectations
19590
16:45:13,320 --> 16:45:18,476
passed now let's move on and create the
19591
16:45:16,040 --> 16:45:23,040
test for adding an existing product to
19592
16:45:18,476 --> 16:45:26,756
the cart so we'll go back to our code
19593
16:45:23,040 --> 16:45:29,916
and scroll up to the first test
19594
16:45:26,756 --> 16:45:32,360
here so first we need to set up the cart
19595
16:45:29,916 --> 16:45:35,116
so that it already contains the product
19596
16:45:32,360 --> 16:45:38,000
that we want to add to do that we're
19597
16:45:35,116 --> 16:45:41,360
going to Mark local storage. getet item
19598
16:45:38,000 --> 16:45:44,596
again so down here we can just reuse
19599
16:45:41,360 --> 16:45:47,080
this code so we're going to select this
19600
16:45:44,596 --> 16:45:49,276
code and right
19601
16:45:47,080 --> 16:45:53,720
click
19602
16:45:49,276 --> 16:45:57,360
copy and then in the first test here
19603
16:45:53,720 --> 16:45:57,360
rightclick and
19604
16:45:57,436 --> 16:46:02,680
paste and this time do set up the test
19605
16:46:00,720 --> 16:46:04,956
we're going to put a product into the
19606
16:46:02,680 --> 16:46:07,680
cart at the beginning and then we're
19607
16:46:04,956 --> 16:46:11,320
going to add the same product to the
19608
16:46:07,680 --> 16:46:12,200
cart so inside this cart array let's add
19609
16:46:11,320 --> 16:46:15,240
an
19610
16:46:12,200 --> 16:46:18,320
object and each product has a property
19611
16:46:15,240 --> 16:46:23,360
called product ID so we're going to add
19612
16:46:18,320 --> 16:46:25,756
this property product ID colon
19613
16:46:23,360 --> 16:46:29,000
and let's just give the same product ID
19614
16:46:25,756 --> 16:46:33,080
that we used down here so we'll select
19615
16:46:29,000 --> 16:46:36,360
this and then right click
19616
16:46:33,080 --> 16:46:38,796
copy and then up here we're going to
19617
16:46:36,360 --> 16:46:40,436
right click and
19618
16:46:38,796 --> 16:46:43,080
paste
19619
16:46:40,436 --> 16:46:46,436
comma and each product also has a
19620
16:46:43,080 --> 16:46:51,000
quantity so we'll give it a quantity
19621
16:46:46,436 --> 16:46:55,436
colon and let's just give it one comma
19622
16:46:51,000 --> 16:46:59,436
and also a delivery option so delivery
19623
16:46:55,436 --> 16:47:00,956
option ID colon and let's just give it
19624
16:46:59,436 --> 16:47:03,956
the string
19625
16:47:00,956 --> 16:47:06,840
one and
19626
16:47:03,956 --> 16:47:09,840
save so now when we do local storage.
19627
16:47:06,840 --> 16:47:12,680
getet item it will give back this array
19628
16:47:09,840 --> 16:47:16,160
as the starting cart and then we need to
19629
16:47:12,680 --> 16:47:20,476
make sure that we reload the cart from
19630
16:47:16,160 --> 16:47:23,000
Storage next let's scroll down and let's
19631
16:47:20,476 --> 16:47:25,276
copy the rest of the tests because it's
19632
16:47:23,000 --> 16:47:28,636
going to be very similar so we're going
19633
16:47:25,276 --> 16:47:30,680
to select this code and
19634
16:47:28,636 --> 16:47:34,400
rightclick
19635
16:47:30,680 --> 16:47:39,276
copy and then up here create some new
19636
16:47:34,400 --> 16:47:41,680
lines and right click and
19637
16:47:39,276 --> 16:47:45,436
paste and also one thing I forgot to
19638
16:47:41,680 --> 16:47:47,596
copy over is to mock local storage. set
19639
16:47:45,436 --> 16:47:49,756
item so at the
19640
16:47:47,596 --> 16:47:54,080
top let's
19641
16:47:49,756 --> 16:47:55,400
also spy on brackets
19642
16:47:54,080 --> 16:48:00,160
local
19643
16:47:55,400 --> 16:48:04,400
storage comma a string set
19644
16:48:00,160 --> 16:48:06,680
item so a mock only lasts for one test
19645
16:48:04,400 --> 16:48:09,436
once that test is finished the method is
19646
16:48:06,680 --> 16:48:12,756
no longer mocked so that's why in this
19647
16:48:09,436 --> 16:48:14,596
test we also have to mock local storage.
19648
16:48:12,756 --> 16:48:17,796
set
19649
16:48:14,596 --> 16:48:20,436
item and now in this test we're just
19650
16:48:17,796 --> 16:48:23,200
going to modify these expectations so
19651
16:48:20,436 --> 16:48:25,116
that they make sense for this test
19652
16:48:23,200 --> 16:48:28,636
if we add an existing product to the
19653
16:48:25,116 --> 16:48:31,476
cart the cart. length will still equal
19654
16:48:28,636 --> 16:48:33,400
one because these product IDs match and
19655
16:48:31,476 --> 16:48:35,840
we're just increasing the
19656
16:48:33,400 --> 16:48:38,436
quantity we're still going to call local
19657
16:48:35,840 --> 16:48:39,956
storage. set item once so this is
19658
16:48:38,436 --> 16:48:42,756
correct
19659
16:48:39,956 --> 16:48:45,476
still the first item in the cart is
19660
16:48:42,756 --> 16:48:47,796
going to have this product ID and the
19661
16:48:45,476 --> 16:48:50,436
only thing we're going to change is that
19662
16:48:47,796 --> 16:48:54,360
the quantity is now going to increase by
19663
16:48:50,436 --> 16:48:56,080
one so it's going to go from one to two
19664
16:48:54,360 --> 16:48:59,160
this
19665
16:48:56,080 --> 16:49:01,360
time so everything is the same except if
19666
16:48:59,160 --> 16:49:05,080
we add an existing product we're just
19667
16:49:01,360 --> 16:49:08,200
increasing the quantity now let's
19668
16:49:05,080 --> 16:49:12,040
save and check the test
19669
16:49:08,200 --> 16:49:13,160
page and now the existing product test
19670
16:49:12,040 --> 16:49:16,160
is
19671
16:49:13,160 --> 16:49:18,756
passing and that's it we created tests
19672
16:49:16,160 --> 16:49:21,596
for the add to cart
19673
16:49:18,756 --> 16:49:23,476
function so now let's do some cleanup
19674
16:49:21,596 --> 16:49:25,880
and we're actually going to remove
19675
16:49:23,476 --> 16:49:28,400
everything from local storage since we
19676
16:49:25,880 --> 16:49:30,880
were modifying it earlier in the test
19677
16:49:28,400 --> 16:49:32,756
and we might have messed it up so on
19678
16:49:30,880 --> 16:49:34,560
this page we're going to
19679
16:49:32,756 --> 16:49:38,000
rightclick
19680
16:49:34,560 --> 16:49:40,400
inspect and open the console and to
19681
16:49:38,000 --> 16:49:43,520
remove everything from local storage
19682
16:49:40,400 --> 16:49:45,720
we're going to type the code local
19683
16:49:43,520 --> 16:49:51,276
capital S
19684
16:49:45,720 --> 16:49:54,636
storage. clear and brackets and press
19685
16:49:51,276 --> 16:49:57,796
enter and then we'll refresh the
19686
16:49:54,636 --> 16:50:01,756
page now finally let's go into get and
19687
16:49:57,796 --> 16:50:04,040
save our changes so we'll open our code
19688
16:50:01,756 --> 16:50:07,596
and we can close this one for
19689
16:50:04,040 --> 16:50:12,320
now and we'll open the get
19690
16:50:07,596 --> 16:50:14,520
Section so in cart. JS at the top we
19691
16:50:12,320 --> 16:50:17,160
basically put all the code that loads
19692
16:50:14,520 --> 16:50:18,400
the cart into a function so we can use
19693
16:50:17,160 --> 16:50:21,560
it in our
19694
16:50:18,400 --> 16:50:26,320
tests and then here we moved money
19695
16:50:21,560 --> 16:50:31,160
test.js into a utils folder in test.html
19696
16:50:26,320 --> 16:50:34,476
we're loading the new cart test.js file
19697
16:50:31,160 --> 16:50:37,956
and then inside cart test.js we added
19698
16:50:34,476 --> 16:50:40,080
some tests for the add to cart function
19699
16:50:37,956 --> 16:50:41,116
so now let's create a message describing
19700
16:50:40,080 --> 16:50:42,636
these
19701
16:50:41,116 --> 16:50:44,240
changes
19702
16:50:42,636 --> 16:50:50,276
create
19703
16:50:44,240 --> 16:50:53,276
automated tests for add to cart and
19704
16:50:50,276 --> 16:50:53,276
commit
19705
16:50:56,956 --> 16:51:00,360
the last thing we're going to learn in
19706
16:50:58,200 --> 16:51:01,636
this lesson is how to create more
19707
16:51:00,360 --> 16:51:05,276
complicated
19708
16:51:01,636 --> 16:51:08,636
tests so far we've only been testing a
19709
16:51:05,276 --> 16:51:11,436
single function for example we tested
19710
16:51:08,636 --> 16:51:14,436
the add to card function as well as the
19711
16:51:11,436 --> 16:51:17,240
format currency function so these are
19712
16:51:14,436 --> 16:51:20,560
called Unit tests because we're only
19713
16:51:17,240 --> 16:51:22,956
testing one unit or one piece of the
19714
16:51:20,560 --> 16:51:26,400
code now what if we want to test t a
19715
16:51:22,956 --> 16:51:28,916
whole page or part of a page and this
19716
16:51:26,400 --> 16:51:30,560
requires a more complicated test called
19717
16:51:28,916 --> 16:51:34,080
an integration
19718
16:51:30,560 --> 16:51:38,400
test an integration test tests many
19719
16:51:34,080 --> 16:51:41,596
units of code or pieces of code working
19720
16:51:38,400 --> 16:51:44,636
together for example in our code we're
19721
16:51:41,596 --> 16:51:46,956
going to go to scripts checkout thee
19722
16:51:44,636 --> 16:51:49,720
orders summary. JS
19723
16:51:46,956 --> 16:51:52,916
file and we're going to test this render
19724
16:51:49,720 --> 16:51:55,320
order summary function so this function
19725
16:51:52,916 --> 16:51:57,560
creates a whole section on the checkout
19726
16:51:55,320 --> 16:51:59,956
page and it uses many different
19727
16:51:57,560 --> 16:52:02,720
functions and libraries to create the
19728
16:51:59,956 --> 16:52:05,436
page so testing this function will be
19729
16:52:02,720 --> 16:52:07,956
considered an integration test because
19730
16:52:05,436 --> 16:52:11,400
it uses many different pieces of code or
19731
16:52:07,956 --> 16:52:14,596
units of code together so let's start by
19732
16:52:11,400 --> 16:52:16,956
creating a test file for this function
19733
16:52:14,596 --> 16:52:21,080
so this is in the orders summary. JS
19734
16:52:16,956 --> 16:52:22,596
file inside our test here let's match
19735
16:52:21,080 --> 16:52:25,200
the file structure that we have here
19736
16:52:22,596 --> 16:52:27,680
here so we're going to click test-
19737
16:52:25,200 --> 16:52:30,116
Jasmin and first we're going to create a
19738
16:52:27,680 --> 16:52:31,360
checkout folder so we'll click here to
19739
16:52:30,116 --> 16:52:34,840
create a
19740
16:52:31,360 --> 16:52:37,320
folder and we're going to name it
19741
16:52:34,840 --> 16:52:39,720
checkout and press
19742
16:52:37,320 --> 16:52:42,476
enter and then inside the checkout
19743
16:52:39,720 --> 16:52:44,636
folder we're going to create a new file
19744
16:52:42,476 --> 16:52:48,720
so we'll click this to create a new
19745
16:52:44,636 --> 16:52:53,680
file and we'll name it the same as above
19746
16:52:48,720 --> 16:52:56,520
order summary and ADD test
19747
16:52:53,680 --> 16:52:59,680
.js and press
19748
16:52:56,520 --> 16:53:02,200
enter so by matching the file structure
19749
16:52:59,680 --> 16:53:04,720
it's clear that this test file is going
19750
16:53:02,200 --> 16:53:07,680
to test ORD summary.
19751
16:53:04,720 --> 16:53:10,596
JS and again for the video I'm just
19752
16:53:07,680 --> 16:53:14,880
going to drag this file to the top here
19753
16:53:10,596 --> 16:53:14,880
so we can see this and the test side by
19754
16:53:15,276 --> 16:53:20,200
side and now we're going to test this
19755
16:53:17,436 --> 16:53:22,360
render order summary function so first
19756
16:53:20,200 --> 16:53:26,756
we're going to import this function into
19757
16:53:22,360 --> 16:53:31,956
to our test file at the top we'll import
19758
16:53:26,756 --> 16:53:35,320
curly brackets the render order summary
19759
16:53:31,956 --> 16:53:37,756
function from a string and we're going
19760
16:53:35,320 --> 16:53:40,160
to locate this file so first we need to
19761
16:53:37,756 --> 16:53:42,880
get out of the checkout folder and out
19762
16:53:40,160 --> 16:53:47,000
of the test Jasmine folder so we'll use
19763
16:53:42,880 --> 16:53:48,360
two do do slash do do slash and then
19764
16:53:47,000 --> 16:53:51,320
we're going to go into the scripts
19765
16:53:48,360 --> 16:53:55,916
folder and into the checkout folder
19766
16:53:51,320 --> 16:53:59,680
Scripts slash checkout slash and we'll
19767
16:53:55,916 --> 16:53:59,680
load order
19768
16:54:07,840 --> 16:54:10,840
summary.jpg
19769
16:54:19,590 --> 16:54:23,276
[Music]
19770
16:54:20,756 --> 16:54:27,040
order summary
19771
16:54:23,276 --> 16:54:28,476
a comma and a function brackets arrow
19772
16:54:27,040 --> 16:54:31,636
and curler
19773
16:54:28,476 --> 16:54:35,436
brackets and now what test cases should
19774
16:54:31,636 --> 16:54:38,436
we create render order summary creates a
19775
16:54:35,436 --> 16:54:41,680
part of the page so when we're testing a
19776
16:54:38,436 --> 16:54:44,880
page the two things we need to test is
19777
16:54:41,680 --> 16:54:47,360
how the page looks and how the page
19778
16:54:44,880 --> 16:54:50,880
behaves let's start by testing how the
19779
16:54:47,360 --> 16:54:55,596
page looks inside our test Suite we're
19780
16:54:50,880 --> 16:54:57,956
going to create a test using it brackets
19781
16:54:55,596 --> 16:55:00,400
and we'll name this test with a
19782
16:54:57,956 --> 16:55:03,080
string and this will just be a basic
19783
16:55:00,400 --> 16:55:07,000
test case so we'll describe what this
19784
16:55:03,080 --> 16:55:09,200
function does which is
19785
16:55:07,000 --> 16:55:12,720
displays the
19786
16:55:09,200 --> 16:55:16,560
cart comma and we'll give it a function
19787
16:55:12,720 --> 16:55:19,360
brackets arrow and curly brackets and
19788
16:55:16,560 --> 16:55:22,436
now we're ready to create the
19789
16:55:19,360 --> 16:55:26,276
test so render order summary usually
19790
16:55:22,436 --> 16:55:29,400
displays the cart on the page however in
19791
16:55:26,276 --> 16:55:32,000
our tests where does this cart get
19792
16:55:29,400 --> 16:55:33,360
displayed so if we look at the code in
19793
16:55:32,000 --> 16:55:36,720
this
19794
16:55:33,360 --> 16:55:39,116
function and we scroll down here we
19795
16:55:36,720 --> 16:55:42,476
generate the HTML for the
19796
16:55:39,116 --> 16:55:46,840
cart and then after we generate the
19797
16:55:42,476 --> 16:55:50,360
HTML we put the HTML inside an element
19798
16:55:46,840 --> 16:55:53,000
with the class js- order-
19799
16:55:50,360 --> 16:55:56,040
summary however we don't have this
19800
16:55:53,000 --> 16:55:57,916
element in our tests so to fix this
19801
16:55:56,040 --> 16:56:00,840
we're just going to create an element
19802
16:55:57,916 --> 16:56:03,360
with the class js- order-
19803
16:56:00,840 --> 16:56:05,320
summary to do this we're going to scroll
19804
16:56:03,360 --> 16:56:07,436
down and we're going to open the
19805
16:56:05,320 --> 16:56:10,880
test.html
19806
16:56:07,436 --> 16:56:14,080
file and then at the bottom we're going
19807
16:56:10,880 --> 16:56:17,596
to go to the body and then inside here
19808
16:56:14,080 --> 16:56:19,240
we're going to create a div so less than
19809
16:56:17,596 --> 16:56:21,880
div and greater
19810
16:56:19,240 --> 16:56:23,756
than so remember how we said we need to
19811
16:56:21,880 --> 16:56:27,200
create create an element with the class
19812
16:56:23,756 --> 16:56:30,636
js- order- summary we're going to create
19813
16:56:27,200 --> 16:56:33,240
that element and put it inside this div
19814
16:56:30,636 --> 16:56:36,000
so this div is going to act like a
19815
16:56:33,240 --> 16:56:37,796
container the reason we use a container
19816
16:56:36,000 --> 16:56:40,040
is that when we create elements in our
19817
16:56:37,796 --> 16:56:42,160
test we don't want to be modifying the
19818
16:56:40,040 --> 16:56:44,956
entire body because the body might
19819
16:56:42,160 --> 16:56:46,840
contain our test results from jasine so
19820
16:56:44,956 --> 16:56:49,360
we put everything inside a
19821
16:56:46,840 --> 16:56:52,360
container so now let's give this div a
19822
16:56:49,360 --> 16:56:54,476
class so we can use it in our JavaScript
19823
16:56:52,360 --> 16:56:56,636
we're going to give it a class equals
19824
16:56:54,476 --> 16:57:00,916
double quotes and we're going to call
19825
16:56:56,636 --> 16:57:03,400
this the js- test-
19826
16:57:00,916 --> 16:57:05,756
container to make it clear this is a
19827
16:57:03,400 --> 16:57:08,796
container for all of our test
19828
16:57:05,756 --> 16:57:11,320
code and
19829
16:57:08,796 --> 16:57:14,720
save and now let's get this container
19830
16:57:11,320 --> 16:57:17,476
into our tests we can do that using
19831
16:57:14,720 --> 16:57:20,880
document. query
19832
16:57:17,476 --> 16:57:27,160
selector brackets and a string and we'll
19833
16:57:20,880 --> 16:57:30,116
select the class using using a js- test-
19834
16:57:27,160 --> 16:57:31,956
container and then inside this container
19835
16:57:30,116 --> 16:57:36,200
we're going to create an element with
19836
16:57:31,956 --> 16:57:38,320
the class js- order- summary so to put
19837
16:57:36,200 --> 16:57:42,080
something inside this element we're
19838
16:57:38,320 --> 16:57:43,240
going to use the property do inner
19839
16:57:42,080 --> 16:57:47,720
Capital
19840
16:57:43,240 --> 16:57:47,720
HTML equals a template
19841
16:57:49,956 --> 16:57:56,320
string and inside this template
19842
16:57:52,756 --> 16:57:59,720
let's create a div element less than div
19843
16:57:56,320 --> 16:58:02,320
greater than less than SL div greater
19844
16:57:59,720 --> 16:58:06,880
than and as we mentioned we'll give this
19845
16:58:02,320 --> 16:58:10,080
element a class equals double quotes of
19846
16:58:06,880 --> 16:58:12,796
js- order-
19847
16:58:10,080 --> 16:58:15,436
summary so this basically takes this
19848
16:58:12,796 --> 16:58:19,276
HTML and puts it inside our test
19849
16:58:15,436 --> 16:58:21,360
container so it will put it inside here
19850
16:58:19,276 --> 16:58:24,080
and now we have the element that we need
19851
16:58:21,360 --> 16:58:25,756
for render order summary so when we call
19852
16:58:24,080 --> 16:58:28,916
this function it's going to create the
19853
16:58:25,756 --> 16:58:32,520
cart and display it in this element
19854
16:58:28,916 --> 16:58:35,276
here next if we look at the code for
19855
16:58:32,520 --> 16:58:37,240
render order summary and we scroll to
19856
16:58:35,276 --> 16:58:40,116
the
19857
16:58:37,240 --> 16:58:43,116
top you'll notice that it takes the cart
19858
16:58:40,116 --> 16:58:45,880
and then displays it on the page but
19859
16:58:43,116 --> 16:58:48,636
remember that by default we load this
19860
16:58:45,880 --> 16:58:51,116
cart from local storage and this can
19861
16:58:48,636 --> 16:58:53,956
cause problems in our test depending on
19862
16:58:51,116 --> 16:58:56,520
what is inside local storage so to fix
19863
16:58:53,956 --> 16:58:59,320
this we're going to mock local storage.
19864
16:58:56,520 --> 16:59:02,320
getet item again to control exactly
19865
16:58:59,320 --> 16:59:05,520
what's inside this cart so let's
19866
16:59:02,320 --> 16:59:08,160
actually open the cart test that we had
19867
16:59:05,520 --> 16:59:10,916
before and we're just going to copy
19868
16:59:08,160 --> 16:59:13,756
paste this mock that we created so we're
19869
16:59:10,916 --> 16:59:16,436
going to start from here this function
19870
16:59:13,756 --> 16:59:19,840
and we're going to select the code up to
19871
16:59:16,436 --> 16:59:22,436
spy on get item and then
19872
16:59:19,840 --> 16:59:25,436
rightclick copy
19873
16:59:22,436 --> 16:59:28,276
and then down here we're going to
19874
16:59:25,436 --> 16:59:30,756
rightclick and
19875
16:59:28,276 --> 16:59:33,320
paste and one other thing we need to do
19876
16:59:30,756 --> 16:59:35,200
here is we don't have access to load
19877
16:59:33,320 --> 16:59:38,160
from Storage right now so we need to
19878
16:59:35,200 --> 16:59:41,276
import it at the
19879
16:59:38,160 --> 16:59:44,840
top let's also copy the import that we
19880
16:59:41,276 --> 16:59:47,320
had here so we're going to select this
19881
16:59:44,840 --> 16:59:50,116
and then right click
19882
16:59:47,320 --> 16:59:52,596
copy and then down here we're going to
19883
16:59:50,116 --> 16:59:54,916
rightclick and paste the
19884
16:59:52,596 --> 16:59:58,520
import and we just need to make sure
19885
16:59:54,916 --> 17:00:00,880
that this file path locates cart. JS so
19886
16:59:58,520 --> 17:00:03,880
do/ do slash it's going to go outside
19887
17:00:00,880 --> 17:00:06,636
checkout and outside test- Jasmin and
19888
17:00:03,880 --> 17:00:09,636
then it will go inside the data folder
19889
17:00:06,636 --> 17:00:12,360
and then locate card. JS so this file
19890
17:00:09,636 --> 17:00:14,916
path is correct and currently we're not
19891
17:00:12,360 --> 17:00:17,276
using these two values so we can just
19892
17:00:14,916 --> 17:00:17,276
remove
19893
17:00:19,476 --> 17:00:25,916
them and now let's set up this cart for
19894
17:00:22,756 --> 17:00:28,436
this test so we could just use this cart
19895
17:00:25,916 --> 17:00:33,436
here however to make our test a little
19896
17:00:28,436 --> 17:00:36,880
more detailed let's open the cart. JS
19897
17:00:33,436 --> 17:00:39,680
file and at the top here we're going to
19898
17:00:36,880 --> 17:00:41,240
use this default card instead because it
19899
17:00:39,680 --> 17:00:44,560
has two products with different
19900
17:00:41,240 --> 17:00:46,240
quantities so we can test more things so
19901
17:00:44,560 --> 17:00:49,796
we're just going to select this card
19902
17:00:46,240 --> 17:00:52,840
here and then right click
19903
17:00:49,796 --> 17:00:53,916
copy and then down here open order
19904
17:00:52,840 --> 17:00:57,400
summary
19905
17:00:53,916 --> 17:00:58,520
test and we're going to select this card
19906
17:00:57,400 --> 17:01:01,116
and remove
19907
17:00:58,520 --> 17:01:05,520
it and inside these brackets we're going
19908
17:01:01,116 --> 17:01:09,796
to right click and paste that default
19909
17:01:05,520 --> 17:01:12,240
cart and now that the HTML and the cart
19910
17:01:09,796 --> 17:01:16,320
is set up for this function at the
19911
17:01:12,240 --> 17:01:19,840
bottom we can call the function render
19912
17:01:16,320 --> 17:01:23,840
order summary and
19913
17:01:19,840 --> 17:01:23,840
brackets and Save
19914
17:01:25,116 --> 17:01:31,000
so now let's run this test file we're
19915
17:01:28,116 --> 17:01:34,200
going to open test.html
19916
17:01:31,000 --> 17:01:37,636
and then beneath these tests we're going
19917
17:01:34,200 --> 17:01:42,956
to add another script Tech less than
19918
17:01:37,636 --> 17:01:49,040
script Source equals and we'll load the
19919
17:01:42,956 --> 17:01:51,000
checkout slash order summary test.js
19920
17:01:49,040 --> 17:01:53,520
file and we need to give it the
19921
17:01:51,000 --> 17:01:57,680
attribute type Ty
19922
17:01:53,520 --> 17:02:00,840
equals module because we used
19923
17:01:57,680 --> 17:02:03,436
Imports and let's save so we run this
19924
17:02:00,840 --> 17:02:06,400
test so we'll open our test
19925
17:02:03,436 --> 17:02:10,000
page and you can see that the cart was
19926
17:02:06,400 --> 17:02:11,796
rendered onto this test page and we
19927
17:02:10,000 --> 17:02:14,756
still have our Jasmine results at the
19928
17:02:11,796 --> 17:02:18,276
bottom here so you notice that when we
19929
17:02:14,756 --> 17:02:21,320
render this it didn't load any CSS or
19930
17:02:18,276 --> 17:02:23,840
images and this is okay because we can't
19931
17:02:21,320 --> 17:02:27,116
really use code to check if the page
19932
17:02:23,840 --> 17:02:29,160
visually looks correct however we can
19933
17:02:27,116 --> 17:02:31,520
use this to check the contents of the
19934
17:02:29,160 --> 17:02:33,116
page like if the products and the
19935
17:02:31,520 --> 17:02:36,400
quantities are
19936
17:02:33,116 --> 17:02:38,956
correct so first our cart has two
19937
17:02:36,400 --> 17:02:41,360
products in it so we can check if there
19938
17:02:38,956 --> 17:02:45,560
were two products that were rendered on
19939
17:02:41,360 --> 17:02:48,360
the page let's go back to our
19940
17:02:45,560 --> 17:02:52,880
tests and let's take a look at the
19941
17:02:48,360 --> 17:02:52,880
orderers summary. JS file
19942
17:02:54,200 --> 17:03:00,400
and when we render the order summary we
19943
17:02:56,796 --> 17:03:02,880
scroll down for each product in the cart
19944
17:03:00,400 --> 17:03:04,400
we create an element with the class
19945
17:03:02,880 --> 17:03:06,560
cart--
19946
17:03:04,400 --> 17:03:09,476
container since we have two products in
19947
17:03:06,560 --> 17:03:12,636
the cart let's check that we created two
19948
17:03:09,476 --> 17:03:17,116
of these elements on the page so we're
19949
17:03:12,636 --> 17:03:17,116
going to open the order summary test.js
19950
17:03:18,360 --> 17:03:24,520
file and then in the first test at the
19951
17:03:21,840 --> 17:03:27,080
bottom of this test we're going to add
19952
17:03:24,520 --> 17:03:29,880
some lines and we're going to check if
19953
17:03:27,080 --> 17:03:32,680
we have two of these elements to do that
19954
17:03:29,880 --> 17:03:38,160
we can use the Dom using
19955
17:03:32,680 --> 17:03:41,276
document. query selector all brackets
19956
17:03:38,160 --> 17:03:44,596
and a string and we could select the
19957
17:03:41,276 --> 17:03:47,720
class card- item D container however
19958
17:03:44,596 --> 17:03:48,916
this class is used for CSS so remember
19959
17:03:47,720 --> 17:03:53,240
if we're going to use a class in
19960
17:03:48,916 --> 17:03:55,200
JavaScript we start with js-
19961
17:03:53,240 --> 17:03:58,680
let's add a new class to this element
19962
17:03:55,200 --> 17:04:03,476
that we can use for the test we'll add
19963
17:03:58,680 --> 17:04:05,680
js- cart D item D
19964
17:04:03,476 --> 17:04:08,560
container so now we're going to select
19965
17:04:05,680 --> 17:04:14,636
all the elements with this class
19966
17:04:08,560 --> 17:04:17,320
using js- card- item D
19967
17:04:14,636 --> 17:04:20,400
container and let's save the ORD
19968
17:04:17,320 --> 17:04:20,400
summary. JS
19969
17:04:20,636 --> 17:04:25,720
file and then down here we're going to
19970
17:04:23,360 --> 17:04:28,400
check if we have two of these elements
19971
17:04:25,720 --> 17:04:30,360
on the page so again to check something
19972
17:04:28,400 --> 17:04:34,680
in our tests we're going to use the
19973
17:04:30,360 --> 17:04:37,000
function expect Open Bracket and let's
19974
17:04:34,680 --> 17:04:40,116
create a new line to make it a little
19975
17:04:37,000 --> 17:04:41,916
cleaner and at the end we'll give a Clos
19976
17:04:40,116 --> 17:04:45,476
bracket like
19977
17:04:41,916 --> 17:04:48,040
this and this code gives us an array of
19978
17:04:45,476 --> 17:04:52,080
elements so here we're going to check if
19979
17:04:48,040 --> 17:04:55,276
the dot length of this is equal to to
19980
17:04:52,080 --> 17:05:01,080
two so expect gives us an object which
19981
17:04:55,276 --> 17:05:04,756
has a method called dot 2 equal brackets
19982
17:05:01,080 --> 17:05:08,240
and two so this checks if we have two of
19983
17:05:04,756 --> 17:05:11,080
these elements on the page so let's
19984
17:05:08,240 --> 17:05:14,276
save and then check the test
19985
17:05:11,080 --> 17:05:16,160
page and scroll to the bottom and you'll
19986
17:05:14,276 --> 17:05:18,756
see that this test
19987
17:05:16,160 --> 17:05:22,880
passed so that's how we check if we
19988
17:05:18,756 --> 17:05:22,880
render the page correctly
19989
17:05:23,200 --> 17:05:28,240
next let's do another check of what we
19990
17:05:25,756 --> 17:05:30,520
rendered on the page so another thing we
19991
17:05:28,240 --> 17:05:33,680
can test is If the product quantities
19992
17:05:30,520 --> 17:05:37,000
are correct so first we need to get this
19993
17:05:33,680 --> 17:05:38,520
quantity element into our tests so we'll
19994
17:05:37,000 --> 17:05:42,240
go back to our
19995
17:05:38,520 --> 17:05:45,320
code and then inside the HTML of the
19996
17:05:42,240 --> 17:05:48,560
order summary we're going to scroll
19997
17:05:45,320 --> 17:05:51,040
down until we see a div with the class
19998
17:05:48,560 --> 17:05:53,000
product- quantity and we're displaying
19999
17:05:51,040 --> 17:05:55,276
the Quant
20000
17:05:53,000 --> 17:05:58,240
here so now we're going to take this
20001
17:05:55,276 --> 17:06:00,880
element put it into our test and check
20002
17:05:58,240 --> 17:06:04,000
that the quantity here is
20003
17:06:00,880 --> 17:06:06,116
correct so to do that let's give another
20004
17:06:04,000 --> 17:06:09,116
class to this element so we can select
20005
17:06:06,116 --> 17:06:11,636
it using JavaScript so here we'll add
20006
17:06:09,116 --> 17:06:13,476
another class
20007
17:06:11,636 --> 17:06:15,756
js-
20008
17:06:13,476 --> 17:06:17,720
product-
20009
17:06:15,756 --> 17:06:20,520
quantity and we want to check the
20010
17:06:17,720 --> 17:06:23,436
quantity for each product so we need to
20011
17:06:20,520 --> 17:06:25,596
identify which product this is for we
20012
17:06:23,436 --> 17:06:28,240
can do that by adding a dash to this
20013
17:06:25,596 --> 17:06:32,000
class and then inserting using dollar
20014
17:06:28,240 --> 17:06:36,040
and curly brackets the products ID which
20015
17:06:32,000 --> 17:06:40,476
is the matching product matching
20016
17:06:36,040 --> 17:06:43,320
product. ID and
20017
17:06:40,476 --> 17:06:47,796
save and now let's get this element into
20018
17:06:43,320 --> 17:06:50,436
our test so down here we're going to
20019
17:06:47,796 --> 17:06:52,400
document. query
20020
17:06:50,436 --> 17:06:54,680
selector
20021
17:06:52,400 --> 17:06:56,560
brackets and we'll give it a template
20022
17:06:54,680 --> 17:06:58,916
string because we're going to insert a
20023
17:06:56,560 --> 17:07:05,360
product ID so we're going to select this
20024
17:06:58,916 --> 17:07:09,116
class using a js- product- quantity Dash
20025
17:07:05,360 --> 17:07:11,560
and then insert the product ID so in our
20026
17:07:09,116 --> 17:07:14,596
cart we have two products and let's
20027
17:07:11,560 --> 17:07:17,000
start with the first product ID now to
20028
17:07:14,596 --> 17:07:19,840
make this easier let's put this string
20029
17:07:17,000 --> 17:07:22,840
inside a variable so we can reuse it
20030
17:07:19,840 --> 17:07:27,680
below so above the this let's create a
20031
17:07:22,840 --> 17:07:31,040
variable with const call it product
20032
17:07:27,680 --> 17:07:35,080
id1 equals and we're going to select
20033
17:07:31,040 --> 17:07:40,476
this ID and then right click
20034
17:07:35,080 --> 17:07:40,476
cut and then up here rightclick and
20035
17:07:40,680 --> 17:07:48,160
paste and then we're just going to use
20036
17:07:43,080 --> 17:07:50,720
this variable down here product
20037
17:07:48,160 --> 17:07:53,200
id1 and then when we're getting this
20038
17:07:50,720 --> 17:07:56,796
element into our our code we're also
20039
17:07:53,200 --> 17:07:59,756
going to insert the product ID which is
20040
17:07:56,796 --> 17:08:02,400
product
20041
17:07:59,756 --> 17:08:05,916
id1 but now we're going to check if the
20042
17:08:02,400 --> 17:08:09,080
text inside is correct so for the first
20043
17:08:05,916 --> 17:08:11,476
product we have a quantity of two so the
20044
17:08:09,080 --> 17:08:14,680
text inside this element should say
20045
17:08:11,476 --> 17:08:18,040
Quantity colon
20046
17:08:14,680 --> 17:08:20,636
2 so to check this at the bottom of our
20047
17:08:18,040 --> 17:08:21,956
test as usual we're going to use the
20048
17:08:20,636 --> 17:08:25,720
function
20049
17:08:21,956 --> 17:08:28,040
expect Open Bracket and a new line and
20050
17:08:25,720 --> 17:08:30,000
then here we can remove the semicolon
20051
17:08:28,040 --> 17:08:32,560
and close
20052
17:08:30,000 --> 17:08:34,916
bracket and we're going to get the text
20053
17:08:32,560 --> 17:08:38,520
inside this element now we're not going
20054
17:08:34,916 --> 17:08:41,320
to usein HTML because this element
20055
17:08:38,520 --> 17:08:44,840
contains a bunch of HTML inside but we
20056
17:08:41,320 --> 17:08:50,320
only want the text to get just the text
20057
17:08:44,840 --> 17:08:53,360
we're going to use the property do inner
20058
17:08:50,320 --> 17:08:56,636
text so we expect the text inside this
20059
17:08:53,360 --> 17:08:59,360
element to contain quantity colon
20060
17:08:56,636 --> 17:09:01,756
2 however this element also has some
20061
17:08:59,360 --> 17:09:04,080
other text like update and
20062
17:09:01,756 --> 17:09:06,880
delete so we just want to check if
20063
17:09:04,080 --> 17:09:10,200
quantity 2 is somewhere inside this
20064
17:09:06,880 --> 17:09:11,636
element so how do we check that to do
20065
17:09:10,200 --> 17:09:17,240
that we're going to use a different
20066
17:09:11,636 --> 17:09:19,636
method of expect called dot to
20067
17:09:17,240 --> 17:09:21,756
contain and
20068
17:09:19,636 --> 17:09:23,956
brackets and we're going to give it the
20069
17:09:21,756 --> 17:09:29,680
string that we want to check for which
20070
17:09:23,956 --> 17:09:33,436
is capital Q quantity colon
20071
17:09:29,680 --> 17:09:36,756
2 so the two contain method checks if
20072
17:09:33,436 --> 17:09:39,320
this value contains this string so they
20073
17:09:36,756 --> 17:09:40,520
don't have to be an exact match like
20074
17:09:39,320 --> 17:09:43,956
with two
20075
17:09:40,520 --> 17:09:46,436
equal as long as quantity colon 2 is
20076
17:09:43,956 --> 17:09:49,360
somewhere in this element then this
20077
17:09:46,436 --> 17:09:51,840
expectation will pass and this is
20078
17:09:49,360 --> 17:09:53,796
exactly what we need when this El has
20079
17:09:51,840 --> 17:09:55,160
some extra text that we don't really
20080
17:09:53,796 --> 17:09:58,276
need to
20081
17:09:55,160 --> 17:09:59,560
check so now let's click our test file
20082
17:09:58,276 --> 17:10:02,680
and
20083
17:09:59,560 --> 17:10:05,956
save and open the test
20084
17:10:02,680 --> 17:10:08,796
page and scroll to the bottom and you'll
20085
17:10:05,956 --> 17:10:10,756
notice that the test passed so for the
20086
17:10:08,796 --> 17:10:13,636
first product we're displaying the
20087
17:10:10,756 --> 17:10:16,200
quantity of two
20088
17:10:13,636 --> 17:10:18,840
correctly let's also check the quantity
20089
17:10:16,200 --> 17:10:20,080
of the second product we'll go back to
20090
17:10:18,840 --> 17:10:23,560
our
20091
17:10:20,080 --> 17:10:27,560
tests and and just like before let's
20092
17:10:23,560 --> 17:10:30,840
create a variable to store this ID so
20093
17:10:27,560 --> 17:10:32,476
we'll create a variable with const
20094
17:10:30,840 --> 17:10:36,916
product
20095
17:10:32,476 --> 17:10:39,916
id2 equals and we'll select this
20096
17:10:36,916 --> 17:10:44,796
ID and right click
20097
17:10:39,916 --> 17:10:47,520
copy and then here right click and
20098
17:10:44,796 --> 17:10:53,240
paste and then we'll remove
20099
17:10:47,520 --> 17:10:53,240
this and use the variable product
20100
17:10:53,596 --> 17:10:58,360
id2 and then at the bottom we're going
20101
17:10:56,116 --> 17:11:01,400
to get the quantity element for Product
20102
17:10:58,360 --> 17:11:04,596
2 so let's just copy this code because
20103
17:11:01,400 --> 17:11:07,880
it's very similar we'll select it right
20104
17:11:04,596 --> 17:11:11,200
click copy and then down
20105
17:11:07,880 --> 17:11:13,596
here right click and
20106
17:11:11,200 --> 17:11:17,320
paste so this time we're going to get
20107
17:11:13,596 --> 17:11:20,796
the quantity element for product ID
20108
17:11:17,320 --> 17:11:24,436
2 and in our cart product two has a
20109
17:11:20,796 --> 17:11:27,360
quantity of one so down here we're going
20110
17:11:24,436 --> 17:11:31,040
to check if the text contains quantity
20111
17:11:27,360 --> 17:11:33,560
colon 1 and
20112
17:11:31,040 --> 17:11:36,000
save and let's open our test
20113
17:11:33,560 --> 17:11:39,436
page and scroll to the
20114
17:11:36,000 --> 17:11:41,720
bottom and this test passed so we're
20115
17:11:39,436 --> 17:11:44,276
displaying the quantity of both products
20116
17:11:41,720 --> 17:11:47,040
correctly on the
20117
17:11:44,276 --> 17:11:50,880
page the second thing we can test in an
20118
17:11:47,040 --> 17:11:53,796
integration test is how the page behaves
20119
17:11:50,880 --> 17:11:56,720
for for example on this page we can
20120
17:11:53,796 --> 17:11:59,476
click the delete link to remove a
20121
17:11:56,720 --> 17:12:01,756
product from the page so let's create a
20122
17:11:59,476 --> 17:12:03,596
new test to make sure that the delete
20123
17:12:01,756 --> 17:12:06,636
link behaves
20124
17:12:03,596 --> 17:12:09,840
correctly we'll open our test
20125
17:12:06,636 --> 17:12:13,636
code and at the bottom we're going to
20126
17:12:09,840 --> 17:12:14,680
create a new test using the function it
20127
17:12:13,636 --> 17:12:18,436
and
20128
17:12:14,680 --> 17:12:21,240
brackets we'll give it a name and let's
20129
17:12:18,436 --> 17:12:24,956
describe what the behavior should be
20130
17:12:21,240 --> 17:12:29,116
which is removes a
20131
17:12:24,956 --> 17:12:32,240
product comma and a function brackets
20132
17:12:29,116 --> 17:12:34,796
arrow and curler
20133
17:12:32,240 --> 17:12:37,320
brackets now let's do the same setup as
20134
17:12:34,796 --> 17:12:40,880
the first test so we start with two
20135
17:12:37,320 --> 17:12:43,840
products in the cart so we can select
20136
17:12:40,880 --> 17:12:47,200
from load from storage and we'll select
20137
17:12:43,840 --> 17:12:49,200
all of this code up here and then
20138
17:12:47,200 --> 17:12:52,400
rightclick
20139
17:12:49,200 --> 17:12:56,040
copy and at the bottom
20140
17:12:52,400 --> 17:12:59,276
we're going to right click and
20141
17:12:56,040 --> 17:13:01,436
paste so this will set up the HTML
20142
17:12:59,276 --> 17:13:03,636
element that we need for the order
20143
17:13:01,436 --> 17:13:07,200
summary as well as the
20144
17:13:03,636 --> 17:13:11,320
cart and after this let's render the
20145
17:13:07,200 --> 17:13:16,040
order summary using the function render
20146
17:13:11,320 --> 17:13:16,040
order summary and
20147
17:13:16,160 --> 17:13:20,756
brackets so once we've displayed this on
20148
17:13:18,560 --> 17:13:24,160
the page we're going to get the delete
20149
17:13:20,756 --> 17:13:27,160
link and click it so first let's get the
20150
17:13:24,160 --> 17:13:30,796
delete link into our code so we'll go to
20151
17:13:27,160 --> 17:13:33,240
the orders summary. JS file and inside
20152
17:13:30,796 --> 17:13:37,000
the HTML we're going to scroll down a
20153
17:13:33,240 --> 17:13:39,560
bit till we see the delete quantity link
20154
17:13:37,000 --> 17:13:41,160
and let's test the delete link for the
20155
17:13:39,560 --> 17:13:44,596
first product in the
20156
17:13:41,160 --> 17:13:47,000
cart so first we need to add a class to
20157
17:13:44,596 --> 17:13:50,080
this element so we know which product
20158
17:13:47,000 --> 17:13:53,720
this is for so here we're going to add a
20159
17:13:50,080 --> 17:13:58,200
class JF s- delete
20160
17:13:53,720 --> 17:14:01,240
dink Dash and insert the product ID
20161
17:13:58,200 --> 17:14:01,240
which is the matching
20162
17:14:01,476 --> 17:14:06,080
product
20163
17:14:03,476 --> 17:14:09,680
doid and I'll add a new line to make the
20164
17:14:06,080 --> 17:14:12,240
code a little bit cleaner and now we can
20165
17:14:09,680 --> 17:14:14,320
save and then down here we're going to
20166
17:14:12,240 --> 17:14:19,320
get the delete link for the first
20167
17:14:14,320 --> 17:14:21,916
product ID so at the bottom we use
20168
17:14:19,320 --> 17:14:23,596
document do query
20169
17:14:21,916 --> 17:14:26,040
selector
20170
17:14:23,596 --> 17:14:28,116
brackets and we'll give it a template
20171
17:14:26,040 --> 17:14:31,840
string because we're going to insert the
20172
17:14:28,116 --> 17:14:35,636
product ID and we'll select this class
20173
17:14:31,840 --> 17:14:40,080
using js- delete
20174
17:14:35,636 --> 17:14:44,520
dlink D and then insert dollar curly
20175
17:14:40,080 --> 17:14:47,680
brackets product
20176
17:14:44,520 --> 17:14:50,320
id1 and now we need to click this delete
20177
17:14:47,680 --> 17:14:53,720
link to remove the first product from
20178
17:14:50,320 --> 17:14:56,080
the page and from the cart to click an
20179
17:14:53,720 --> 17:14:59,200
element using Code we can just get it
20180
17:14:56,080 --> 17:15:02,200
using the Dom and then use the method
20181
17:14:59,200 --> 17:15:04,796
dot click and
20182
17:15:02,200 --> 17:15:08,720
brackets so this will click delete on
20183
17:15:04,796 --> 17:15:12,680
the first product and remove it so let's
20184
17:15:08,720 --> 17:15:16,720
save and take a look at our test
20185
17:15:12,680 --> 17:15:18,596
page and unfortunately this test failed
20186
17:15:16,720 --> 17:15:22,160
so let's take a look at the details of
20187
17:15:18,596 --> 17:15:24,116
the failure to figure out how to fix it
20188
17:15:22,160 --> 17:15:27,000
so it's telling us that we cannot set
20189
17:15:24,116 --> 17:15:29,320
properties of null this means that a
20190
17:15:27,000 --> 17:15:32,400
value in our code is null and we're
20191
17:15:29,320 --> 17:15:32,400
trying to give it a
20192
17:15:32,476 --> 17:15:38,240
property and here it will tell us which
20193
17:15:35,000 --> 17:15:41,080
line we got this error from so this
20194
17:15:38,240 --> 17:15:43,436
error happened in our test file and the
20195
17:15:41,080 --> 17:15:45,916
line that created this error was in Ord
20196
17:15:43,436 --> 17:15:48,840
summary. js on line
20197
17:15:45,916 --> 17:15:51,436
132 or whatever line that you see here
20198
17:15:48,840 --> 17:15:54,116
on your page
20199
17:15:51,436 --> 17:15:55,796
so inside our code we're going to open
20200
17:15:54,116 --> 17:15:59,116
orders summary.
20201
17:15:55,796 --> 17:16:01,560
JS and I'm going to scroll down to line
20202
17:15:59,116 --> 17:16:03,796
132 and you can scroll down to the line
20203
17:16:01,560 --> 17:16:07,796
that you got on your
20204
17:16:03,796 --> 17:16:10,436
page so this line of code is actually
20205
17:16:07,796 --> 17:16:13,040
part of the code that we run when we
20206
17:16:10,436 --> 17:16:16,000
click delete so remember that when we
20207
17:16:13,040 --> 17:16:18,680
click delete we also update the payment
20208
17:16:16,000 --> 17:16:21,240
summary on the right side of the page
20209
17:16:18,680 --> 17:16:24,240
and that's what this line does now the
20210
17:16:21,240 --> 17:16:27,360
reason this is not working is if we open
20211
17:16:24,240 --> 17:16:30,596
the payment summary JS file and we look
20212
17:16:27,360 --> 17:16:34,436
at what this does at the bottom after we
20213
17:16:30,596 --> 17:16:38,040
generate the HTML we try to put the HTML
20214
17:16:34,436 --> 17:16:41,000
in an element with a class js- payment D
20215
17:16:38,040 --> 17:16:44,320
summary and this element does not exist
20216
17:16:41,000 --> 17:16:48,240
in our tests so one way to fix this is
20217
17:16:44,320 --> 17:16:48,240
to add this element to our
20218
17:16:48,276 --> 17:16:54,436
test so let's open our test again
20219
17:16:51,916 --> 17:16:56,880
we'll open the order summary
20220
17:16:54,436 --> 17:16:59,956
test.js and then we'll scroll
20221
17:16:56,880 --> 17:17:02,080
up and then here when we create the
20222
17:16:59,956 --> 17:17:04,680
order summary element we're also going
20223
17:17:02,080 --> 17:17:08,080
to create the payment summary
20224
17:17:04,680 --> 17:17:11,116
element so we'll create a less than div
20225
17:17:08,080 --> 17:17:14,880
greater than less than SL div greater
20226
17:17:11,116 --> 17:17:18,040
than and here we'll give it a class
20227
17:17:14,880 --> 17:17:20,360
equals double quotes and we'll give the
20228
17:17:18,040 --> 17:17:21,520
class that the payment summary needs
20229
17:17:20,360 --> 17:17:24,720
which is
20230
17:17:21,520 --> 17:17:28,200
js- payment D
20231
17:17:24,720 --> 17:17:30,636
summary and
20232
17:17:28,200 --> 17:17:33,636
save so now that the payment summary
20233
17:17:30,636 --> 17:17:36,436
element is set up we can open our test
20234
17:17:33,636 --> 17:17:39,080
page and our test should no longer have
20235
17:17:36,436 --> 17:17:40,956
a failure so you also notice that the
20236
17:17:39,080 --> 17:17:43,200
payment summary got rendered or
20237
17:17:40,956 --> 17:17:46,476
displayed on the
20238
17:17:43,200 --> 17:17:48,636
page okay so in our tests we only
20239
17:17:46,476 --> 17:17:50,916
clicked the delete link for the first
20240
17:17:48,636 --> 17:17:52,476
product but we didn't actually check if
20241
17:17:50,916 --> 17:17:54,476
the page looks
20242
17:17:52,476 --> 17:17:57,160
correct and that's what it shows here
20243
17:17:54,476 --> 17:17:59,560
with this yellow dot this test has no
20244
17:17:57,160 --> 17:18:02,916
expectations
20245
17:17:59,560 --> 17:18:05,956
yet so let's go back to our test and add
20246
17:18:02,916 --> 17:18:09,240
some expectations at the bottom so we'll
20247
17:18:05,956 --> 17:18:12,200
scroll down and down
20248
17:18:09,240 --> 17:18:14,840
here after we click delete for the first
20249
17:18:12,200 --> 17:18:17,756
product we expect that there's only one
20250
17:18:14,840 --> 17:18:20,880
element left on the page for the
20251
17:18:17,756 --> 17:18:24,520
cart so in our first test we actually
20252
17:18:20,880 --> 17:18:27,840
had a check for this so we can scroll up
20253
17:18:24,520 --> 17:18:30,840
and here we check if we have two cart
20254
17:18:27,840 --> 17:18:32,880
item containers on the page so let's
20255
17:18:30,840 --> 17:18:37,200
just reuse this check because it's very
20256
17:18:32,880 --> 17:18:39,720
similar we'll select it right click
20257
17:18:37,200 --> 17:18:44,240
copy and then down
20258
17:18:39,720 --> 17:18:47,476
here we're going to right click and
20259
17:18:44,240 --> 17:18:49,840
paste and this time we only expect one
20260
17:18:47,476 --> 17:18:53,116
cart item container to be left on the
20261
17:18:49,840 --> 17:18:54,880
page so so we'll change this to one so
20262
17:18:53,116 --> 17:18:58,840
we'll
20263
17:18:54,880 --> 17:19:01,756
save open the test page scroll down and
20264
17:18:58,840 --> 17:19:01,756
now this test
20265
17:19:02,560 --> 17:19:07,200
passed let's also do a more detailed
20266
17:19:05,116 --> 17:19:11,160
check so we're going to check that the
20267
17:19:07,200 --> 17:19:13,240
first product is no longer on the page
20268
17:19:11,160 --> 17:19:16,520
we'll go back to our
20269
17:19:13,240 --> 17:19:18,880
tests and then down here we're going to
20270
17:19:16,520 --> 17:19:21,520
get the card item container for the
20271
17:19:18,880 --> 17:19:25,360
first product we use
20272
17:19:21,520 --> 17:19:27,840
document. query selector
20273
17:19:25,360 --> 17:19:30,520
brackets and to get the element for the
20274
17:19:27,840 --> 17:19:35,756
first product we're going to open orders
20275
17:19:30,520 --> 17:19:39,080
summary. JS and then scroll up in the
20276
17:19:35,756 --> 17:19:40,200
HTML until we find the cart item
20277
17:19:39,080 --> 17:19:42,276
container
20278
17:19:40,200 --> 17:19:44,476
element and we're going to look for this
20279
17:19:42,276 --> 17:19:48,320
class right here which tells us which
20280
17:19:44,476 --> 17:19:50,240
product this element is for so in here
20281
17:19:48,320 --> 17:19:52,796
we'll give it a template string because
20282
17:19:50,240 --> 17:19:57,160
we'll in insert the product ID and we'll
20283
17:19:52,796 --> 17:20:03,116
look for this class using a
20284
17:19:57,160 --> 17:20:08,200
js-- item Das container Dash and insert
20285
17:20:03,116 --> 17:20:08,200
the first product so product
20286
17:20:09,436 --> 17:20:15,400
id1 and because we removed this product
20287
17:20:12,560 --> 17:20:20,116
from the page we expect this result to
20288
17:20:15,400 --> 17:20:23,360
be null so we'll use the function expect
20289
17:20:20,116 --> 17:20:26,560
open bracket and a new line and then
20290
17:20:23,360 --> 17:20:28,116
down here a close bracket and we'll use
20291
17:20:26,560 --> 17:20:32,756
the method
20292
17:20:28,116 --> 17:20:36,916
do2 equal brackets and we expect this to
20293
17:20:32,756 --> 17:20:39,596
be null and
20294
17:20:36,916 --> 17:20:42,040
save let's also check that the second
20295
17:20:39,596 --> 17:20:43,756
product is still on the page because we
20296
17:20:42,040 --> 17:20:46,436
didn't delete
20297
17:20:43,756 --> 17:20:51,116
it so let's just make a copy of this
20298
17:20:46,436 --> 17:20:52,160
check we'll select it right click copy
20299
17:20:51,116 --> 17:20:56,596
and then
20300
17:20:52,160 --> 17:20:56,596
here right click and
20301
17:20:56,680 --> 17:21:02,916
paste and we'll get the element for
20302
17:20:59,276 --> 17:21:05,276
product ID 2 this time and we want to
20303
17:21:02,916 --> 17:21:08,756
make sure that this exists so that it is
20304
17:21:05,276 --> 17:21:10,360
not equal to null in Jasmine to check if
20305
17:21:08,756 --> 17:21:13,400
something is not equal
20306
17:21:10,360 --> 17:21:17,160
to expect gives us another property we
20307
17:21:13,400 --> 17:21:20,956
can use called dot
20308
17:21:17,160 --> 17:21:24,000
not so if we use theot property it will
20309
17:21:20,956 --> 17:21:27,000
check the opposite of whatever is next
20310
17:21:24,000 --> 17:21:30,276
so this will check if this value is not
20311
17:21:27,000 --> 17:21:33,756
equal to null so remember the code for
20312
17:21:30,276 --> 17:21:37,916
Jasmine is designed to read like
20313
17:21:33,756 --> 17:21:40,276
English let's save and check the test
20314
17:21:37,916 --> 17:21:43,116
page and scroll
20315
17:21:40,276 --> 17:21:45,200
down and this test passed so we're
20316
17:21:43,116 --> 17:21:48,040
displaying the correct products on the
20317
17:21:45,200 --> 17:21:48,040
page after
20318
17:21:48,240 --> 17:21:52,596
deleting now there's one more thing that
20319
17:21:50,200 --> 17:21:56,080
we need to check here which is after
20320
17:21:52,596 --> 17:21:58,756
deleting is the cart array itself
20321
17:21:56,080 --> 17:21:59,796
updated so we'll go back to our code and
20322
17:21:58,756 --> 17:22:02,520
add that
20323
17:21:59,796 --> 17:22:05,240
check so first we need to import the
20324
17:22:02,520 --> 17:22:06,756
cart so we can use it in this test we're
20325
17:22:05,240 --> 17:22:09,240
going to scroll up to the
20326
17:22:06,756 --> 17:22:13,200
top and we're already importing from
20327
17:22:09,240 --> 17:22:14,360
cart. JS so we'll add a comma and import
20328
17:22:13,200 --> 17:22:17,160
the
20329
17:22:14,360 --> 17:22:19,400
cart and then at the
20330
17:22:17,160 --> 17:22:22,436
bottom we're going to check if the card
20331
17:22:19,400 --> 17:22:22,436
is correct
20332
17:22:22,796 --> 17:22:27,880
so the cart started out with two
20333
17:22:24,796 --> 17:22:30,680
products inside after removing the first
20334
17:22:27,880 --> 17:22:33,400
product the card should have a length of
20335
17:22:30,680 --> 17:22:36,680
one and the remaining product should
20336
17:22:33,400 --> 17:22:39,200
have product id2 so let's add both of
20337
17:22:36,680 --> 17:22:41,756
these checks at the bottom so we'll
20338
17:22:39,200 --> 17:22:41,756
scroll back
20339
17:22:42,200 --> 17:22:51,756
down and we'll use expect
20340
17:22:46,200 --> 17:22:55,840
brackets and we'll check if cart. length
20341
17:22:51,756 --> 17:23:00,276
do 2 equal brackets
20342
17:22:55,840 --> 17:23:02,000
1 and we'll also expect brackets and
20343
17:23:00,276 --> 17:23:06,400
we'll check the first product in the
20344
17:23:02,000 --> 17:23:13,000
cart which is cart square bracket 0 and
20345
17:23:06,400 --> 17:23:17,040
we'll check its product ID do2
20346
17:23:13,000 --> 17:23:21,000
equal and it should equal product ID 2
20347
17:23:17,040 --> 17:23:22,040
so product id2
20348
17:23:21,000 --> 17:23:24,636
and
20349
17:23:22,040 --> 17:23:28,360
save so let's open our test
20350
17:23:24,636 --> 17:23:30,956
page and scroll to the bottom and this
20351
17:23:28,360 --> 17:23:34,200
test still passed so once we click
20352
17:23:30,956 --> 17:23:36,680
delete the card array is also
20353
17:23:34,200 --> 17:23:39,720
correct so that's how we create an
20354
17:23:36,680 --> 17:23:43,476
integration test it tests many units of
20355
17:23:39,720 --> 17:23:46,596
code or pieces of code working together
20356
17:23:43,476 --> 17:23:50,636
and it lets us test how our page looks
20357
17:23:46,596 --> 17:23:50,636
and how our page behaves
20358
17:23:51,000 --> 17:23:55,560
now there's one thing that I forgot to
20359
17:23:52,476 --> 17:23:56,756
do when we created these tests if we
20360
17:23:55,560 --> 17:23:59,436
look at our
20361
17:23:56,756 --> 17:24:01,116
code and I'm going to open orders
20362
17:23:59,436 --> 17:24:06,040
summary.
20363
17:24:01,116 --> 17:24:09,276
JS when we click delete at the bottom
20364
17:24:06,040 --> 17:24:10,240
here it uses a function called remove
20365
17:24:09,276 --> 17:24:13,560
from
20366
17:24:10,240 --> 17:24:16,160
cart and if I look at the code for this
20367
17:24:13,560 --> 17:24:18,636
function which is right here remove from
20368
17:24:16,160 --> 17:24:20,840
cart this function actually saves the
20369
17:24:18,636 --> 17:24:23,116
cart to local storage and and calls
20370
17:24:20,840 --> 17:24:26,240
local storage. set
20371
17:24:23,116 --> 17:24:29,796
item however it's recommended not to
20372
17:24:26,240 --> 17:24:32,956
modify local storage in our test so
20373
17:24:29,796 --> 17:24:36,360
inside the order summary test file we
20374
17:24:32,956 --> 17:24:40,200
should also mock local storage. set item
20375
17:24:36,360 --> 17:24:43,240
in this test so we'll scroll to the
20376
17:24:40,200 --> 17:24:48,360
top and at the start of the test let's
20377
17:24:43,240 --> 17:24:51,160
mock set item using spy on
20378
17:24:48,360 --> 17:24:55,880
brackets local
20379
17:24:51,160 --> 17:24:58,160
storage comma the string set
20380
17:24:55,880 --> 17:25:01,756
item and
20381
17:24:58,160 --> 17:25:04,360
save and we'll open the test page and
20382
17:25:01,756 --> 17:25:05,756
make sure that the test still passes and
20383
17:25:04,360 --> 17:25:08,880
we might have messed up our local
20384
17:25:05,756 --> 17:25:11,720
storage because of that mistake so let's
20385
17:25:08,880 --> 17:25:14,360
reset local storage again we'll right
20386
17:25:11,720 --> 17:25:17,520
click on this page
20387
17:25:14,360 --> 17:25:21,880
inspect open the
20388
17:25:17,520 --> 17:25:26,276
console and we'll type the code local
20389
17:25:21,880 --> 17:25:30,476
storage. CLE brackets and press
20390
17:25:26,276 --> 17:25:32,636
enter and refresh the page just to be
20391
17:25:30,476 --> 17:25:35,320
safe now another thing that we might
20392
17:25:32,636 --> 17:25:37,680
want to add is that when we render the
20393
17:25:35,320 --> 17:25:39,756
order summary on the page it's taking up
20394
17:25:37,680 --> 17:25:42,436
a lot of space and it pushes the test
20395
17:25:39,756 --> 17:25:45,160
results to the bottom so what we can do
20396
17:25:42,436 --> 17:25:46,400
is after our test we can actually remove
20397
17:25:45,160 --> 17:25:50,520
all of this
20398
17:25:46,400 --> 17:25:53,040
HTML so let's go back to our code
20399
17:25:50,520 --> 17:25:55,476
in the order summary test file at the
20400
17:25:53,040 --> 17:25:58,636
end of the first test we'll create some
20401
17:25:55,476 --> 17:26:02,796
new lines and remove the HTML that we
20402
17:25:58,636 --> 17:26:06,636
created to do that we can scroll up to
20403
17:26:02,796 --> 17:26:09,956
this code so to remove the HTML we can
20404
17:26:06,636 --> 17:26:13,596
just set this element inner HTML to the
20405
17:26:09,956 --> 17:26:15,720
empty string so we'll select this code
20406
17:26:13,596 --> 17:26:20,200
right click
20407
17:26:15,720 --> 17:26:21,956
copy and then down here right click and
20408
17:26:20,200 --> 17:26:25,240
and
20409
17:26:21,956 --> 17:26:28,160
paste so in our test all the HTML we
20410
17:26:25,240 --> 17:26:30,360
created was placed inside this test
20411
17:26:28,160 --> 17:26:31,796
container and we're just going to remove
20412
17:26:30,360 --> 17:26:35,200
all that
20413
17:26:31,796 --> 17:26:38,040
HTML by setting the inner HTML to the
20414
17:26:35,200 --> 17:26:40,680
empty string and we'll do the same thing
20415
17:26:38,040 --> 17:26:43,436
for the second test so we'll select this
20416
17:26:40,680 --> 17:26:47,320
code rightclick
20417
17:26:43,436 --> 17:26:50,720
copy and then down here at the
20418
17:26:47,320 --> 17:26:53,160
bottom we'll right click and
20419
17:26:50,720 --> 17:26:56,720
paste so this is just some cleanup we
20420
17:26:53,160 --> 17:26:59,436
can do at the end of each test let's
20421
17:26:56,720 --> 17:27:02,240
save and look at our test
20422
17:26:59,436 --> 17:27:04,756
page and now all the HTML that we
20423
17:27:02,240 --> 17:27:07,796
generated is gone and we can see the
20424
17:27:04,756 --> 17:27:07,796
test results more
20425
17:27:08,520 --> 17:27:14,240
clearly lastly we're going to learn a
20426
17:27:11,000 --> 17:27:18,200
shortcut we can use in Jasmine called
20427
17:27:14,240 --> 17:27:21,276
hooks a hook lets us run some code for
20428
17:27:18,200 --> 17:27:24,200
each test for example
20429
17:27:21,276 --> 17:27:26,680
if we go back to our code notice that
20430
17:27:24,200 --> 17:27:29,916
before each of our tests we do a bunch
20431
17:27:26,680 --> 17:27:32,956
of setup here so we can actually share
20432
17:27:29,916 --> 17:27:36,596
all of this code between our two tests
20433
17:27:32,956 --> 17:27:40,320
using a hook so to create a hook we're
20434
17:27:36,596 --> 17:27:41,160
going to scroll up to outside of both of
20435
17:27:40,320 --> 17:27:44,680
these
20436
17:27:41,160 --> 17:27:46,436
tests and at the top of the test Suite
20437
17:27:44,680 --> 17:27:50,360
we're going to use another function
20438
17:27:46,436 --> 17:27:52,040
provided by Jasmine called before
20439
17:27:50,360 --> 17:27:56,160
capital E
20440
17:27:52,040 --> 17:28:00,360
each brackets and we'll give this a
20441
17:27:56,160 --> 17:28:04,080
function brackets arrow and curler
20442
17:28:00,360 --> 17:28:07,400
brackets so this is called a before each
20443
17:28:04,080 --> 17:28:09,240
hook and it will run this function
20444
17:28:07,400 --> 17:28:12,240
before each of our
20445
17:28:09,240 --> 17:28:14,796
tests so inside this function we can put
20446
17:28:12,240 --> 17:28:17,000
our setup code so that we run the setup
20447
17:28:14,796 --> 17:28:19,560
code before each of our
20448
17:28:17,000 --> 17:28:22,040
tests let's actually take the setup code
20449
17:28:19,560 --> 17:28:23,240
for the second test because it's a
20450
17:28:22,040 --> 17:28:25,880
little more
20451
17:28:23,240 --> 17:28:27,796
detailed so down here we're going to
20452
17:28:25,880 --> 17:28:31,040
select the code starting from render
20453
17:28:27,796 --> 17:28:34,276
order summary all the way up to mocking
20454
17:28:31,040 --> 17:28:37,320
local storage. set item and we'll
20455
17:28:34,276 --> 17:28:40,680
rightclick and cut this
20456
17:28:37,320 --> 17:28:44,436
code and remove these new
20457
17:28:40,680 --> 17:28:50,200
lines and then at the top inside before
20458
17:28:44,436 --> 17:28:52,636
each we're going to rightclick and paste
20459
17:28:50,200 --> 17:28:54,400
so now before each of our tests it's
20460
17:28:52,636 --> 17:28:57,520
going to run this function and it's
20461
17:28:54,400 --> 17:28:59,680
going to run all of our setup code so
20462
17:28:57,520 --> 17:29:02,400
this is a great way to share code
20463
17:28:59,680 --> 17:29:04,476
between our tests and remove
20464
17:29:02,400 --> 17:29:07,360
duplication so now that we're running
20465
17:29:04,476 --> 17:29:09,680
this inside before each if we scroll
20466
17:29:07,360 --> 17:29:12,240
down to the first test we don't have to
20467
17:29:09,680 --> 17:29:13,560
run this code again so we can actually
20468
17:29:12,240 --> 17:29:18,116
remove
20469
17:29:13,560 --> 17:29:20,520
it and we'll remove this Mock and we'll
20470
17:29:18,116 --> 17:29:23,320
remove the render order summary as
20471
17:29:20,520 --> 17:29:26,436
W and all we're left with are the
20472
17:29:23,320 --> 17:29:29,560
expectations for our
20473
17:29:26,436 --> 17:29:32,756
test now before we save we need to fix
20474
17:29:29,560 --> 17:29:36,276
one thing with this code here so right
20475
17:29:32,756 --> 17:29:39,520
now these two variables are inside this
20476
17:29:36,276 --> 17:29:42,320
function and because of scope these will
20477
17:29:39,520 --> 17:29:44,796
be contained inside this function and we
20478
17:29:42,320 --> 17:29:47,720
can't use it down here in our
20479
17:29:44,796 --> 17:29:50,276
tests so to fix this we can just move
20480
17:29:47,720 --> 17:29:52,720
these variables outside of this function
20481
17:29:50,276 --> 17:29:56,240
up here so we're going to select these
20482
17:29:52,720 --> 17:29:59,476
lines and then right click
20483
17:29:56,240 --> 17:30:04,160
cut and up
20484
17:29:59,476 --> 17:30:07,916
here we're going to right click and
20485
17:30:04,160 --> 17:30:10,840
paste so now any code inside this outer
20486
17:30:07,916 --> 17:30:12,520
function can use these two variables
20487
17:30:10,840 --> 17:30:15,000
including our
20488
17:30:12,520 --> 17:30:18,000
tests so now let's
20489
17:30:15,000 --> 17:30:20,520
save and check the test
20490
17:30:18,000 --> 17:30:23,796
page and everything is still still
20491
17:30:20,520 --> 17:30:27,360
passing so that's how we use a hook to
20492
17:30:23,796 --> 17:30:29,840
run some code before each test now
20493
17:30:27,360 --> 17:30:32,956
before each is not the only hook that we
20494
17:30:29,840 --> 17:30:35,000
can use Jasmine provides several hooks
20495
17:30:32,956 --> 17:30:38,880
that we can use in our
20496
17:30:35,000 --> 17:30:41,596
tests another common Hook is after each
20497
17:30:38,880 --> 17:30:44,000
which lets us run a function after each
20498
17:30:41,596 --> 17:30:47,276
test so this is really useful for
20499
17:30:44,000 --> 17:30:48,560
cleanup code like we have down here when
20500
17:30:47,276 --> 17:30:52,956
we remove the
20501
17:30:48,560 --> 17:30:55,840
HTML all leave using after each as an
20502
17:30:52,956 --> 17:30:59,000
exercise now let's go into git and save
20503
17:30:55,840 --> 17:31:01,320
our changes and I can close these three
20504
17:30:59,000 --> 17:31:04,160
files at the top for
20505
17:31:01,320 --> 17:31:08,000
now so we'll open the git
20506
17:31:04,160 --> 17:31:11,000
section and then inside orders summary.
20507
17:31:08,000 --> 17:31:13,000
JS we added some classes that we're
20508
17:31:11,000 --> 17:31:17,560
going to use in our
20509
17:31:13,000 --> 17:31:20,520
tests inside test.html we are loading
20510
17:31:17,560 --> 17:31:23,000
our order summary test file and we also
20511
17:31:20,520 --> 17:31:26,636
created a test container where we're
20512
17:31:23,000 --> 17:31:26,636
going to put our HTML that we
20513
17:31:26,720 --> 17:31:32,360
generate and then for the order summary
20514
17:31:29,200 --> 17:31:34,360
test file this contains the test that we
20515
17:31:32,360 --> 17:31:36,796
created for the order
20516
17:31:34,360 --> 17:31:38,080
summary now let's create a message
20517
17:31:36,796 --> 17:31:46,320
describing our
20518
17:31:38,080 --> 17:31:50,840
changes create automated tests for order
20519
17:31:46,320 --> 17:31:50,840
summary and commit
20520
17:31:54,956 --> 17:31:59,116
now that we've created all these tests
20521
17:31:56,880 --> 17:32:02,040
for our project when we make some
20522
17:31:59,116 --> 17:32:05,116
changes to our code we can just open the
20523
17:32:02,040 --> 17:32:06,276
testing page and it will rerun all of
20524
17:32:05,116 --> 17:32:08,916
our
20525
17:32:06,276 --> 17:32:12,200
tests so here's the process that we do
20526
17:32:08,916 --> 17:32:15,880
when we write code first we make changes
20527
17:32:12,200 --> 17:32:18,756
to our code and then we rerun the tests
20528
17:32:15,880 --> 17:32:22,560
to make sure that everything still works
20529
17:32:18,756 --> 17:32:25,116
and finally we save our changes into
20530
17:32:22,560 --> 17:32:27,956
git now before we end the lesson we're
20531
17:32:25,116 --> 17:32:29,436
going to do one more cleanup we'll go
20532
17:32:27,956 --> 17:32:33,040
back to our
20533
17:32:29,436 --> 17:32:36,796
code and we'll open our
20534
17:32:33,040 --> 17:32:40,840
files and here we usually organize all
20535
17:32:36,796 --> 17:32:43,080
of our tests into a folder called tests
20536
17:32:40,840 --> 17:32:46,476
however in this lesson we named this
20537
17:32:43,080 --> 17:32:48,840
folder test- Jasmin because we wanted to
20538
17:32:46,476 --> 17:32:52,000
compare this folder to tests that were
20539
17:32:48,840 --> 17:32:54,040
created without a testing framework but
20540
17:32:52,000 --> 17:32:57,840
now that the lesson's over we're going
20541
17:32:54,040 --> 17:32:59,000
to rename test- Jasmine to just test to
20542
17:32:57,840 --> 17:33:01,320
make it more
20543
17:32:59,000 --> 17:33:04,116
standard first we need to rename this
20544
17:33:01,320 --> 17:33:06,476
folder up here so we'll right
20545
17:33:04,116 --> 17:33:10,956
click
20546
17:33:06,476 --> 17:33:13,276
rename and let's rename it to test-
20547
17:33:10,956 --> 17:33:16,596
simple because this folder contains
20548
17:33:13,276 --> 17:33:19,880
tests that were created without a
20549
17:33:16,596 --> 17:33:22,560
framework let's press enter
20550
17:33:19,880 --> 17:33:26,476
and now we can rename test- Jasmine to
20551
17:33:22,560 --> 17:33:32,200
test by right clicking
20552
17:33:26,476 --> 17:33:32,200
rename and rename it to tests and press
20553
17:33:32,520 --> 17:33:38,956
enter another thing we can do is we're
20554
17:33:35,400 --> 17:33:41,520
going to drag test- simple into the test
20555
17:33:38,956 --> 17:33:44,520
folder so that all of our tests are
20556
17:33:41,520 --> 17:33:47,040
contained in one
20557
17:33:44,520 --> 17:33:51,360
folder so if it asks you to update the
20558
17:33:47,040 --> 17:33:54,200
Imports you can click yes
20559
17:33:51,360 --> 17:33:56,840
and we also need to open money test.js
20560
17:33:54,200 --> 17:34:01,636
in the test- simple folder because it
20561
17:33:56,840 --> 17:34:01,636
updated the Imports and then save this
20562
17:34:03,720 --> 17:34:08,560
file finally we're going to run all of
20563
17:34:06,476 --> 17:34:12,000
our tests again to make sure everything
20564
17:34:08,560 --> 17:34:15,756
still works after we move things around
20565
17:34:12,000 --> 17:34:18,320
so because test.html is inside a
20566
17:34:15,756 --> 17:34:20,240
different folder now we need to reopen
20567
17:34:18,320 --> 17:34:23,400
this with live server
20568
17:34:20,240 --> 17:34:25,680
so we'll rightclick and click open with
20569
17:34:23,400 --> 17:34:25,680
live
20570
17:34:26,240 --> 17:34:31,276
server and it'll show us that all the
20571
17:34:28,680 --> 17:34:32,320
tests are still passing so our code is
20572
17:34:31,276 --> 17:34:34,756
still
20573
17:34:32,320 --> 17:34:37,560
correct so now we can close some of
20574
17:34:34,756 --> 17:34:37,560
these extra tabs
20575
17:34:37,756 --> 17:34:44,880
here and save our changes into git we'll
20576
17:34:42,160 --> 17:34:47,436
open the git
20577
17:34:44,880 --> 17:34:50,320
section and all of these changes are
20578
17:34:47,436 --> 17:34:52,320
related to renaming the folders
20579
17:34:50,320 --> 17:34:58,080
so we'll give a message at the
20580
17:34:52,320 --> 17:35:00,520
top rename test- Jasmine
20581
17:34:58,080 --> 17:35:03,956
folder to
20582
17:35:00,520 --> 17:35:03,956
tests and
20583
17:35:08,040 --> 17:35:13,400
commit and that's the end of this lesson
20584
17:35:11,160 --> 17:35:16,636
in this lesson we learned how to test
20585
17:35:13,400 --> 17:35:19,276
our code using manual and automated
20586
17:35:16,636 --> 17:35:23,476
tests we learned how to organize our
20587
17:35:19,276 --> 17:35:25,880
test using test cases and test Suites we
20588
17:35:23,476 --> 17:35:28,636
learned how to use a testing framework
20589
17:35:25,880 --> 17:35:32,476
like Jasmine to help us write tests
20590
17:35:28,636 --> 17:35:35,680
easier we learned how to Mock and spy on
20591
17:35:32,476 --> 17:35:38,476
methods we learned how to test web pages
20592
17:35:35,680 --> 17:35:41,436
using integration tests and we learned
20593
17:35:38,476 --> 17:35:43,916
about hooks which lets us share code
20594
17:35:41,436 --> 17:35:46,596
between our
20595
17:35:43,916 --> 17:35:48,680
tests here are some exercises to help
20596
17:35:46,596 --> 17:35:52,560
you practice what we learned in this
20597
17:35:48,680 --> 17:35:52,560
lesson e
20598
17:36:33,596 --> 17:36:38,436
in the rest of this course if you get an
20599
17:36:36,000 --> 17:36:41,436
error in your project but your code
20600
17:36:38,436 --> 17:36:44,956
looks correct you may have some bad data
20601
17:36:41,436 --> 17:36:48,276
saved in local storage to fix this you
20602
17:36:44,956 --> 17:36:50,756
can try running local storage. CLE in
20603
17:36:48,276 --> 17:36:51,596
your console to remove everything from
20604
17:36:50,756 --> 17:36:55,796
local
20605
17:36:51,596 --> 17:36:55,796
storage and then refresh the
20606
17:36:56,116 --> 17:37:02,000
page if you see an error like this
20607
17:36:59,276 --> 17:37:04,720
object object that means that you saved
20608
17:37:02,000 --> 17:37:06,956
something directly into local storage
20609
17:37:04,720 --> 17:37:09,476
but you have to jason. stringify it
20610
17:37:06,956 --> 17:37:11,636
first so check your code to make sure
20611
17:37:09,476 --> 17:37:14,360
that you're always stringifying before
20612
17:37:11,636 --> 17:37:19,560
saving to local storage and then clear
20613
17:37:14,360 --> 17:37:19,560
your local storage and refresh the page
20614
17:37:20,400 --> 17:37:24,436
in this lesson we're going to learn
20615
17:37:22,756 --> 17:37:27,116
objectoriented
20616
17:37:24,436 --> 17:37:31,160
programming objectoriented programming
20617
17:37:27,116 --> 17:37:33,160
or oop is another style of programming
20618
17:37:31,160 --> 17:37:36,080
so it's another way that we write our
20619
17:37:33,160 --> 17:37:39,840
code it's useful to know because many
20620
17:37:36,080 --> 17:37:39,840
programming languages use
20621
17:37:40,080 --> 17:37:46,680
oop now how do we use objectoriented
20622
17:37:43,916 --> 17:37:49,476
programming object-oriented programming
20623
17:37:46,680 --> 17:37:50,796
is basically organizing our code into
20624
17:37:49,476 --> 17:37:53,080
into
20625
17:37:50,796 --> 17:37:56,000
objects let's look at an
20626
17:37:53,080 --> 17:37:59,200
example we're going to go to our
20627
17:37:56,000 --> 17:38:03,276
code and we're going to scroll up and
20628
17:37:59,200 --> 17:38:03,276
open data/ cart.
20629
17:38:03,636 --> 17:38:09,200
JS inside this file we have the code for
20630
17:38:06,720 --> 17:38:12,560
our cart and you'll notice that for the
20631
17:38:09,200 --> 17:38:14,796
cart we have some data at the top and
20632
17:38:12,560 --> 17:38:18,040
then we have a bunch of functions at the
20633
17:38:14,796 --> 17:38:19,796
bottom that modify the cart and these
20634
17:38:18,040 --> 17:38:22,360
are separate from each other the data
20635
17:38:19,796 --> 17:38:23,840
and the functions so this style of
20636
17:38:22,360 --> 17:38:25,956
programming that we've been using
20637
17:38:23,840 --> 17:38:29,880
throughout this course is called
20638
17:38:25,956 --> 17:38:32,040
procedural programming procedure means a
20639
17:38:29,880 --> 17:38:35,200
set of step-by-step
20640
17:38:32,040 --> 17:38:38,520
instructions and this is basically a
20641
17:38:35,200 --> 17:38:40,796
function so in procedural programming we
20642
17:38:38,520 --> 17:38:43,200
organize our code into separate
20643
17:38:40,796 --> 17:38:46,596
functions like we did
20644
17:38:43,200 --> 17:38:49,596
here on the other hand in objectoriented
20645
17:38:46,596 --> 17:38:52,320
programming we organize all of this code
20646
17:38:49,596 --> 17:38:55,276
into an object so we put everything
20647
17:38:52,320 --> 17:38:58,160
together into an
20648
17:38:55,276 --> 17:39:00,796
object so let's do an example and
20649
17:38:58,160 --> 17:39:02,400
convert this cart code into
20650
17:39:00,796 --> 17:39:05,040
objectoriented
20651
17:39:02,400 --> 17:39:08,400
programming we're going to click cart.
20652
17:39:05,040 --> 17:39:12,276
JS and inside this folder we're going to
20653
17:39:08,400 --> 17:39:15,756
create a new file by clicking
20654
17:39:12,276 --> 17:39:19,840
here and let's name this file
20655
17:39:15,756 --> 17:39:24,560
C- oop or objectoriented
20656
17:39:19,840 --> 17:39:27,276
programming. JS and press
20657
17:39:24,560 --> 17:39:30,956
enter and now we're going to copy all of
20658
17:39:27,276 --> 17:39:34,160
the code in cart into this new file so
20659
17:39:30,956 --> 17:39:36,916
let's open this and we'll click in this
20660
17:39:34,160 --> 17:39:40,160
file and then we'll type control a or
20661
17:39:36,916 --> 17:39:43,200
command a to select all the code and
20662
17:39:40,160 --> 17:39:47,636
then right click
20663
17:39:43,200 --> 17:39:51,240
copy and inside C- oop we're going to
20664
17:39:47,636 --> 17:39:51,240
rightclick and paste
20665
17:39:52,476 --> 17:39:57,160
and let's scroll back up to the
20666
17:39:54,400 --> 17:39:59,360
top and now to convert this code into
20667
17:39:57,160 --> 17:40:02,240
objectoriented programming we're going
20668
17:39:59,360 --> 17:40:07,116
to group all the data and the functions
20669
17:40:02,240 --> 17:40:09,320
together into an object first at the top
20670
17:40:07,116 --> 17:40:10,796
let's create an object that we can put
20671
17:40:09,320 --> 17:40:14,956
all of these inside
20672
17:40:10,796 --> 17:40:20,160
of so we'll create a variable const
20673
17:40:14,956 --> 17:40:22,756
let's call it cart equals and object
20674
17:40:20,160 --> 17:40:25,720
and now we're going to group our data
20675
17:40:22,756 --> 17:40:28,596
and all of our functions into this
20676
17:40:25,720 --> 17:40:30,520
object so let's do it step by step and
20677
17:40:28,596 --> 17:40:34,400
we'll start with this cart
20678
17:40:30,520 --> 17:40:37,956
variable as a reminder cart semicolon is
20679
17:40:34,400 --> 17:40:40,360
actually a shortcut for cart equals
20680
17:40:37,956 --> 17:40:42,436
undefined to make things easier to
20681
17:40:40,360 --> 17:40:45,636
understand let's actually write this out
20682
17:40:42,436 --> 17:40:51,240
in full instead of using the shortcut so
20683
17:40:45,636 --> 17:40:51,240
we'll type cart equals undefined
20684
17:40:51,436 --> 17:40:56,956
and now we're going to move this into
20685
17:40:53,596 --> 17:40:59,320
the object so we'll select this
20686
17:40:56,956 --> 17:41:01,560
line and then
20687
17:40:59,320 --> 17:41:05,200
rightclick
20688
17:41:01,560 --> 17:41:09,520
cut and then inside the object we're
20689
17:41:05,200 --> 17:41:09,520
going to rightclick and
20690
17:41:09,636 --> 17:41:15,080
paste now inside an object we can't use
20691
17:41:12,880 --> 17:41:18,476
the word export or
20692
17:41:15,080 --> 17:41:20,240
let so to move a variable into an object
20693
17:41:18,476 --> 17:41:23,320
we're going to convert it into a
20694
17:41:20,240 --> 17:41:24,360
property and a value so we'll remove
20695
17:41:23,320 --> 17:41:29,360
these
20696
17:41:24,360 --> 17:41:32,040
words and then type cart and colon
20697
17:41:29,360 --> 17:41:34,560
undefined and remove the semicolon and
20698
17:41:32,040 --> 17:41:37,796
replace it with a
20699
17:41:34,560 --> 17:41:40,796
comma so this is the same thing as cart
20700
17:41:37,796 --> 17:41:42,240
equals undefined but we move that value
20701
17:41:40,796 --> 17:41:45,360
into an
20702
17:41:42,240 --> 17:41:48,000
object now one problem here is that if
20703
17:41:45,360 --> 17:41:50,956
we access this cart property we're going
20704
17:41:48,000 --> 17:41:53,476
to do cart. cart which can be a bit
20705
17:41:50,956 --> 17:41:58,840
confusing so let's actually rename this
20706
17:41:53,476 --> 17:42:00,916
property to cart capital I items instead
20707
17:41:58,840 --> 17:42:03,720
to make it a bit more clear that this
20708
17:42:00,916 --> 17:42:06,796
contains the items in the cart or the
20709
17:42:03,720 --> 17:42:06,796
products that are in the
20710
17:42:07,720 --> 17:42:14,436
cart next we're going to group all of
20711
17:42:10,636 --> 17:42:16,400
our functions into this object as well
20712
17:42:14,436 --> 17:42:18,560
so let's create some new
20713
17:42:16,400 --> 17:42:21,796
lines and we're going to move this
20714
17:42:18,560 --> 17:42:24,000
function inside here so let's select
20715
17:42:21,796 --> 17:42:24,000
this
20716
17:42:24,080 --> 17:42:28,520
function and then
20717
17:42:26,360 --> 17:42:31,040
rightclick
20718
17:42:28,520 --> 17:42:33,240
cut and inside the
20719
17:42:31,040 --> 17:42:36,320
object we're going to
20720
17:42:33,240 --> 17:42:39,160
rightclick and
20721
17:42:36,320 --> 17:42:41,880
paste and again we can't use the word
20722
17:42:39,160 --> 17:42:44,160
export inside an object so we're going
20723
17:42:41,880 --> 17:42:45,436
to convert this into a property and
20724
17:42:44,160 --> 17:42:49,596
value as
20725
17:42:45,436 --> 17:42:51,796
well so let's remove these words
20726
17:42:49,596 --> 17:42:55,400
and let's make the property name load
20727
17:42:51,796 --> 17:42:58,080
from storage and then we'll type a colon
20728
17:42:55,400 --> 17:43:00,956
and we'll make the value a
20729
17:42:58,080 --> 17:43:03,276
function brackets and curly
20730
17:43:00,956 --> 17:43:06,756
brackets so that's how we move a
20731
17:43:03,276 --> 17:43:09,040
function into this object now make sure
20732
17:43:06,756 --> 17:43:11,840
that you use a regular function syntax
20733
17:43:09,040 --> 17:43:14,080
here and not an arrow function and I'll
20734
17:43:11,840 --> 17:43:17,200
explain why later in this
20735
17:43:14,080 --> 17:43:20,080
lesson now as a reminder when we have a
20736
17:43:17,200 --> 17:43:22,040
function inside an object
20737
17:43:20,080 --> 17:43:25,360
we call this a
20738
17:43:22,040 --> 17:43:29,040
method also JavaScript has a shortcut
20739
17:43:25,360 --> 17:43:32,276
for methods called the shorthand method
20740
17:43:29,040 --> 17:43:34,680
syntax so instead of typing colon and
20741
17:43:32,276 --> 17:43:36,000
function we can actually just remove
20742
17:43:34,680 --> 17:43:38,720
this
20743
17:43:36,000 --> 17:43:41,596
code and just type brackets and curly
20744
17:43:38,720 --> 17:43:44,080
brackets after the function name and
20745
17:43:41,596 --> 17:43:46,040
this is a shortcut for the code that we
20746
17:43:44,080 --> 17:43:49,320
had
20747
17:43:46,040 --> 17:43:52,116
before now the code inside this function
20748
17:43:49,320 --> 17:43:55,680
doesn't actually work anymore because
20749
17:43:52,116 --> 17:43:58,436
cart was actually renamed to cart items
20750
17:43:55,680 --> 17:44:01,160
so we have to rename this variable so
20751
17:43:58,436 --> 17:44:03,436
instead of cart we're going to do cart
20752
17:44:01,160 --> 17:44:07,000
dot cart
20753
17:44:03,436 --> 17:44:10,436
items to access this value and same
20754
17:44:07,000 --> 17:44:14,080
thing here cart do cart
20755
17:44:10,436 --> 17:44:17,080
items and here cart
20756
17:44:14,080 --> 17:44:17,080
doart
20757
17:44:17,756 --> 17:44:24,160
items so so this code Works however we
20758
17:44:21,200 --> 17:44:28,000
have a small problem here if we change
20759
17:44:24,160 --> 17:44:29,756
the name of the object up here this code
20760
17:44:28,000 --> 17:44:32,956
will no longer
20761
17:44:29,756 --> 17:44:37,000
work to solve this problem JavaScript
20762
17:44:32,956 --> 17:44:40,116
has a feature called this this gives us
20763
17:44:37,000 --> 17:44:43,636
the object that contains this function
20764
17:44:40,116 --> 17:44:45,916
so it gives us this outer object up here
20765
17:44:43,636 --> 17:44:49,080
so to improve our code we're going to
20766
17:44:45,916 --> 17:44:54,400
change from using a variable named cart
20767
17:44:49,080 --> 17:44:58,636
to this and here as well this. cart
20768
17:44:54,400 --> 17:45:01,956
items and this Dot card
20769
17:44:58,636 --> 17:45:04,560
items so this will give us the outer
20770
17:45:01,956 --> 17:45:06,636
object and now this code will always
20771
17:45:04,560 --> 17:45:08,160
work and it doesn't matter what the
20772
17:45:06,636 --> 17:45:10,320
variable name
20773
17:45:08,160 --> 17:45:12,320
is the last thing we're going to change
20774
17:45:10,320 --> 17:45:15,000
in this function is we're currently
20775
17:45:12,320 --> 17:45:18,080
loading from local storage
20776
17:45:15,000 --> 17:45:21,360
cart however our original cart was also
20777
17:45:18,080 --> 17:45:25,916
loading from local storage cart so let's
20778
17:45:21,360 --> 17:45:29,840
actually change this to C- oop so that
20779
17:45:25,916 --> 17:45:29,840
we don't affect our original
20780
17:45:32,240 --> 17:45:37,596
cart let's move on and we're going to
20781
17:45:34,880 --> 17:45:40,160
move the other functions into this
20782
17:45:37,596 --> 17:45:43,000
object so let's go down to the next
20783
17:45:40,160 --> 17:45:45,796
function which is save to storage we're
20784
17:45:43,000 --> 17:45:47,840
going to select this and then
20785
17:45:45,796 --> 17:45:51,476
rightclick
20786
17:45:47,840 --> 17:45:54,000
cut and then inside this object at the
20787
17:45:51,476 --> 17:45:54,880
end we're going to add a comma and some
20788
17:45:54,000 --> 17:46:00,160
new
20789
17:45:54,880 --> 17:46:02,756
lines and we're going to rightclick and
20790
17:46:00,160 --> 17:46:06,160
paste and we can't use the word function
20791
17:46:02,756 --> 17:46:09,200
at the front here so let's remove this
20792
17:46:06,160 --> 17:46:14,756
word and just use the shorthand method
20793
17:46:09,200 --> 17:46:14,756
syntax so this is a shortcut for colon
20794
17:46:15,080 --> 17:46:19,720
function and here we're saving to local
20795
17:46:18,040 --> 17:46:23,680
storage cart
20796
17:46:19,720 --> 17:46:26,720
so let's also change this to C- oop so
20797
17:46:23,680 --> 17:46:31,360
we don't affect our original cart so
20798
17:46:26,720 --> 17:46:31,360
we'll change it to card-
20799
17:46:31,520 --> 17:46:37,956
oop another thing we need to change is
20800
17:46:34,320 --> 17:46:41,276
that the cart was renamed to cart
20801
17:46:37,956 --> 17:46:45,240
items so here we're going to change from
20802
17:46:41,276 --> 17:46:49,796
cart to this which gives us the outer
20803
17:46:45,240 --> 17:46:52,116
object and then dot cart items
20804
17:46:49,796 --> 17:46:54,360
which is this property so it should do
20805
17:46:52,116 --> 17:46:56,796
the same thing as before except this
20806
17:46:54,360 --> 17:46:59,636
function is now inside an
20807
17:46:56,796 --> 17:47:02,080
object let's continue and move another
20808
17:46:59,636 --> 17:47:05,080
function into the object so we're going
20809
17:47:02,080 --> 17:47:07,680
to do add to cart this time so let's
20810
17:47:05,080 --> 17:47:07,680
select this
20811
17:47:07,720 --> 17:47:11,880
code and then
20812
17:47:10,040 --> 17:47:15,160
rightclick
20813
17:47:11,880 --> 17:47:18,080
cut and inside the object we're going to
20814
17:47:15,160 --> 17:47:20,840
add a comma and some new lines and then
20815
17:47:18,080 --> 17:47:23,636
rightclick and
20816
17:47:20,840 --> 17:47:26,240
paste so again instead of using export
20817
17:47:23,636 --> 17:47:30,200
function we're just going to remove this
20818
17:47:26,240 --> 17:47:33,116
code and use the shorthand method syntax
20819
17:47:30,200 --> 17:47:35,636
which is a shortcut for this
20820
17:47:33,116 --> 17:47:38,560
code and now let's update the code
20821
17:47:35,636 --> 17:47:42,000
inside this function as well so instead
20822
17:47:38,560 --> 17:47:46,916
of the cart we rename this to this. cart
20823
17:47:42,000 --> 17:47:48,956
items so we'll change it to this do cart
20824
17:47:46,916 --> 17:47:51,276
items
20825
17:47:48,956 --> 17:47:56,916
and then down here we're going to change
20826
17:47:51,276 --> 17:47:59,840
from cart to this. cart
20827
17:47:56,916 --> 17:48:03,720
items and also the function save to
20828
17:47:59,840 --> 17:48:06,000
storage was moved inside the object so
20829
17:48:03,720 --> 17:48:09,840
now to access this function we're going
20830
17:48:06,000 --> 17:48:13,080
to get the outer object again using this
20831
17:48:09,840 --> 17:48:18,320
and then dot save to storage so down
20832
17:48:13,080 --> 17:48:21,840
here we'll add this dot in front to
20833
17:48:18,320 --> 17:48:25,276
access the function inside the
20834
17:48:21,840 --> 17:48:27,956
object and now let's move on and move
20835
17:48:25,276 --> 17:48:29,360
the next function into the object so
20836
17:48:27,956 --> 17:48:31,320
we'll select this
20837
17:48:29,360 --> 17:48:33,320
code and then
20838
17:48:31,320 --> 17:48:36,476
rightclick
20839
17:48:33,320 --> 17:48:40,680
cut inside the object add a comma and
20840
17:48:36,476 --> 17:48:44,400
some new lines and right click and
20841
17:48:40,680 --> 17:48:47,436
paste we'll remove export
20842
17:48:44,400 --> 17:48:50,560
function and use the shorthand method
20843
17:48:47,436 --> 17:48:54,000
syntax and again we'll change from cart
20844
17:48:50,560 --> 17:48:57,400
to this. cart
20845
17:48:54,000 --> 17:49:00,680
items we're going to change cart here to
20846
17:48:57,400 --> 17:49:04,956
this.c cart
20847
17:49:00,680 --> 17:49:06,360
items and change save to storage to this
20848
17:49:04,956 --> 17:49:09,596
do save to
20849
17:49:06,360 --> 17:49:11,956
storage so we access save to storage
20850
17:49:09,596 --> 17:49:14,840
inside this
20851
17:49:11,956 --> 17:49:17,840
object next let's move this last
20852
17:49:14,840 --> 17:49:21,956
function into the object so we'll select
20853
17:49:17,840 --> 17:49:24,880
the code and then rightclick
20854
17:49:21,956 --> 17:49:28,160
cut and inside the object we're going to
20855
17:49:24,880 --> 17:49:30,956
type a comma and some new lines right
20856
17:49:28,160 --> 17:49:34,560
click and
20857
17:49:30,956 --> 17:49:36,276
paste we'll remove export function and
20858
17:49:34,560 --> 17:49:38,796
use the shorthand method
20859
17:49:36,276 --> 17:49:42,956
syntax and update the code in this
20860
17:49:38,796 --> 17:49:44,596
method so we'll change cart to this do
20861
17:49:42,956 --> 17:49:49,436
cart
20862
17:49:44,596 --> 17:49:50,840
items and save to storage to this Dove
20863
17:49:49,436 --> 17:49:55,240
to
20864
17:49:50,840 --> 17:49:55,240
storage now let's remove the extra
20865
17:49:56,080 --> 17:50:01,040
lines and the last thing we need to
20866
17:49:58,116 --> 17:50:04,596
update is that load from Storage was
20867
17:50:01,040 --> 17:50:07,436
moved inside the cart object so to
20868
17:50:04,596 --> 17:50:09,400
access this function at the front we're
20869
17:50:07,436 --> 17:50:14,880
going to type
20870
17:50:09,400 --> 17:50:18,240
cart. load from storage and save this
20871
17:50:14,880 --> 17:50:22,000
file and that's it this is the basic
20872
17:50:18,240 --> 17:50:25,596
idea behind objectoriented programming
20873
17:50:22,000 --> 17:50:28,360
we organize our code into objects so we
20874
17:50:25,596 --> 17:50:33,000
group the data and the functions
20875
17:50:28,360 --> 17:50:33,000
together into an object like
20876
17:50:33,320 --> 17:50:38,436
this now let's talk about why do we use
20877
17:50:36,916 --> 17:50:41,240
objectoriented
20878
17:50:38,436 --> 17:50:44,240
programming objectoriented programming
20879
17:50:41,240 --> 17:50:47,840
tries to represent the real
20880
17:50:44,240 --> 17:50:49,956
world in the real world a cart is a
20881
17:50:47,840 --> 17:50:52,560
physical object object so in
20882
17:50:49,956 --> 17:50:55,756
objectoriented programming we represent
20883
17:50:52,560 --> 17:50:58,476
this physical object as a digital object
20884
17:50:55,756 --> 17:51:01,796
or in this case a JavaScript
20885
17:50:58,476 --> 17:51:05,276
object a physical cart can have products
20886
17:51:01,796 --> 17:51:07,596
inside so our JavaScript object can also
20887
17:51:05,276 --> 17:51:11,160
have products
20888
17:51:07,596 --> 17:51:14,476
inside a physical cart also has actions
20889
17:51:11,160 --> 17:51:20,320
we can take to modify the cart like we
20890
17:51:14,476 --> 17:51:23,400
can add a product or remove a product
20891
17:51:20,320 --> 17:51:27,160
our JavaScript object also has actions
20892
17:51:23,400 --> 17:51:30,476
we can take to modify the cart like the
20893
17:51:27,160 --> 17:51:31,400
add to cart function or the remove from
20894
17:51:30,476 --> 17:51:34,200
cart
20895
17:51:31,400 --> 17:51:36,560
function so as you can see
20896
17:51:34,200 --> 17:51:39,560
objectoriented programming tries to
20897
17:51:36,560 --> 17:51:42,160
represent the real world we take a
20898
17:51:39,560 --> 17:51:45,200
physical object like a cart and
20899
17:51:42,160 --> 17:51:46,720
represent it as a digital object like a
20900
17:51:45,200 --> 17:51:48,956
JavaScript
20901
17:51:46,720 --> 17:51:51,520
object and some people feel feel that
20902
17:51:48,956 --> 17:51:54,596
this makes the code more intuitive or
20903
17:51:51,520 --> 17:51:54,596
easier to
20904
17:51:55,160 --> 17:52:00,840
understand now let's try out the code in
20905
17:51:58,040 --> 17:52:04,080
this object to make sure it actually
20906
17:52:00,840 --> 17:52:06,200
works we're going to scroll down to the
20907
17:52:04,080 --> 17:52:10,476
bottom and
20908
17:52:06,200 --> 17:52:12,756
here we're just going to type
20909
17:52:10,476 --> 17:52:15,796
console.log the
20910
17:52:12,756 --> 17:52:19,000
cart and save this
20911
17:52:15,796 --> 17:52:22,160
file and now let's load this code into
20912
17:52:19,000 --> 17:52:24,956
the project to do that we're going to
20913
17:52:22,160 --> 17:52:27,796
open the scripts folder and open the
20914
17:52:24,956 --> 17:52:31,720
file checkout.
20915
17:52:27,796 --> 17:52:34,116
JS and at the top below the Imports
20916
17:52:31,720 --> 17:52:36,000
we're going to import our new file so
20917
17:52:34,116 --> 17:52:38,320
let's type
20918
17:52:36,000 --> 17:52:40,560
import and we're going to use a slightly
20919
17:52:38,320 --> 17:52:41,680
different syntax we're just going to
20920
17:52:40,560 --> 17:52:44,040
type a
20921
17:52:41,680 --> 17:52:49,360
string and give it the file that we want
20922
17:52:44,040 --> 17:52:51,200
to load so we need to load C- oop. Js
20923
17:52:49,360 --> 17:52:54,756
so first we need to get out of the
20924
17:52:51,200 --> 17:52:58,360
scripts folder using do slash and then
20925
17:52:54,756 --> 17:53:00,956
go into the data folder data slash and
20926
17:52:58,360 --> 17:53:02,840
load C-
20927
17:53:00,956 --> 17:53:06,520
oop.
20928
17:53:02,840 --> 17:53:10,200
JS so this is another syntax we can use
20929
17:53:06,520 --> 17:53:13,000
for imports this just runs all the code
20930
17:53:10,200 --> 17:53:15,840
inside this file without importing
20931
17:53:13,000 --> 17:53:20,360
anything which is what we need in this
20932
17:53:15,840 --> 17:53:20,360
situation so let's save this file
20933
17:53:20,400 --> 17:53:25,320
and then open this page in the browser
20934
17:53:23,160 --> 17:53:28,320
so if you don't have this page open you
20935
17:53:25,320 --> 17:53:31,560
can scroll down to checkout. HTML and
20936
17:53:28,320 --> 17:53:35,160
then right click and open with live
20937
17:53:31,560 --> 17:53:37,080
server I already have this page open so
20938
17:53:35,160 --> 17:53:40,400
I'm just going to open that
20939
17:53:37,080 --> 17:53:43,080
Tab and if the page is too big we can
20940
17:53:40,400 --> 17:53:45,720
zoom out by pressing control minus or
20941
17:53:43,080 --> 17:53:48,476
command minus a few
20942
17:53:45,720 --> 17:53:51,040
times and now let's check the console to
20943
17:53:48,476 --> 17:53:52,916
see what the cart looks like on this
20944
17:53:51,040 --> 17:53:55,796
page we're going to
20945
17:53:52,916 --> 17:53:59,116
rightclick and click
20946
17:53:55,796 --> 17:54:02,116
inspect and then open the
20947
17:53:59,116 --> 17:54:05,756
console and in the console we'll see
20948
17:54:02,116 --> 17:54:08,240
this cart object so inside this object
20949
17:54:05,756 --> 17:54:11,160
we have the data as well as all the
20950
17:54:08,240 --> 17:54:14,000
functions for our cart but it's grouped
20951
17:54:11,160 --> 17:54:17,240
inside an object and you'll see that the
20952
17:54:14,000 --> 17:54:20,276
code still works the same as before cart
20953
17:54:17,240 --> 17:54:24,200
items has a the two default
20954
17:54:20,276 --> 17:54:25,880
products if we look at our code and open
20955
17:54:24,200 --> 17:54:29,596
card-
20956
17:54:25,880 --> 17:54:32,436
o at the beginning we run cart. load
20957
17:54:29,596 --> 17:54:35,520
from storage and then inside this
20958
17:54:32,436 --> 17:54:38,276
function if we scroll up it will give
20959
17:54:35,520 --> 17:54:40,956
the cart items this default cart with
20960
17:54:38,276 --> 17:54:44,080
two products inside and that's what we
20961
17:54:40,956 --> 17:54:46,840
see in the console
20962
17:54:44,080 --> 17:54:48,880
here so we know that the code inside
20963
17:54:46,840 --> 17:54:51,240
this object still works works the same
20964
17:54:48,880 --> 17:54:54,040
way as
20965
17:54:51,240 --> 17:54:56,596
before so now let's try another method
20966
17:54:54,040 --> 17:55:00,116
to make sure that it's working so let's
20967
17:54:56,596 --> 17:55:03,756
try using the add to cart method to add
20968
17:55:00,116 --> 17:55:05,080
a product to the cart items up here so
20969
17:55:03,756 --> 17:55:08,436
we'll scroll
20970
17:55:05,080 --> 17:55:11,796
down to the bottom and then above
20971
17:55:08,436 --> 17:55:16,040
console.log cart we're going to call add
20972
17:55:11,796 --> 17:55:19,200
to cart now add to cart was saved inside
20973
17:55:16,040 --> 17:55:21,560
this cart object so to access it we're
20974
17:55:19,200 --> 17:55:26,680
going to type
20975
17:55:21,560 --> 17:55:29,520
cart. add to cart and
20976
17:55:26,680 --> 17:55:32,796
brackets now add to cart takes one
20977
17:55:29,520 --> 17:55:36,400
parameter which is a string and this is
20978
17:55:32,796 --> 17:55:39,200
the product ID that we want to add so to
20979
17:55:36,400 --> 17:55:43,560
find a product ID we can go to the data
20980
17:55:39,200 --> 17:55:47,040
folder and products. JS and then inside
20981
17:55:43,560 --> 17:55:49,436
here we have this list of products so
20982
17:55:47,040 --> 17:55:52,276
let's actually scroll down to the third
20983
17:55:49,436 --> 17:55:54,916
product which is right here so this
20984
17:55:52,276 --> 17:55:58,000
t-shirt product and we're going to add
20985
17:55:54,916 --> 17:56:01,320
this product ID to the cart so let's
20986
17:55:58,000 --> 17:56:03,360
select this ID we're going to
20987
17:56:01,320 --> 17:56:06,796
rightclick
20988
17:56:03,360 --> 17:56:09,436
copy and then inside C-
20989
17:56:06,796 --> 17:56:12,796
oop inside the string we're going to
20990
17:56:09,436 --> 17:56:15,880
rightclick and paste that product
20991
17:56:12,796 --> 17:56:18,880
ID and let's
20992
17:56:15,880 --> 17:56:20,720
save and let's check the console
20993
17:56:18,880 --> 17:56:24,320
so I'll open the console
20994
17:56:20,720 --> 17:56:28,000
Here and Now inside the cart object if
20995
17:56:24,320 --> 17:56:30,400
we expand it cart items now has three
20996
17:56:28,000 --> 17:56:33,400
products because we just added a new
20997
17:56:30,400 --> 17:56:35,680
product to the cart so this shows that
20998
17:56:33,400 --> 17:56:39,360
all of the code is working the exact
20999
17:56:35,680 --> 17:56:44,756
same way as before we just organized it
21000
17:56:39,360 --> 17:56:46,680
into an object and that's objectoriented
21001
17:56:44,756 --> 17:56:49,160
programming now that we're done with
21002
17:56:46,680 --> 17:56:50,796
this example let's remove these two
21003
17:56:49,160 --> 17:56:54,320
lines of
21004
17:56:50,796 --> 17:56:54,320
code and
21005
17:56:56,040 --> 17:57:02,080
save next another reason we use
21006
17:56:59,320 --> 17:57:06,240
objectoriented programming is it's easy
21007
17:57:02,080 --> 17:57:09,520
to create multiple objects for example
21008
17:57:06,240 --> 17:57:11,956
the real amazon.com has a feature called
21009
17:57:09,520 --> 17:57:14,200
Amazon business where you can have a
21010
17:57:11,956 --> 17:57:16,756
separate cart for your business
21011
17:57:14,200 --> 17:57:19,880
purchases so how do we create two
21012
17:57:16,756 --> 17:57:23,476
separate carts in our code with
21013
17:57:19,880 --> 17:57:26,320
objectoriented programming this is easy
21014
17:57:23,476 --> 17:57:29,400
we can just make a copy of the cart
21015
17:57:26,320 --> 17:57:32,116
object so we can scroll up in this
21016
17:57:29,400 --> 17:57:34,880
code and I'm just going to click this
21017
17:57:32,116 --> 17:57:37,796
Arrow here beside the card variable to
21018
17:57:34,880 --> 17:57:40,520
collapse this code and to create a
21019
17:57:37,796 --> 17:57:43,720
separate cart for business purchases
21020
17:57:40,520 --> 17:57:46,636
we're just going to select this code and
21021
17:57:43,720 --> 17:57:48,956
then right click
21022
17:57:46,636 --> 17:57:53,000
copy and at the
21023
17:57:48,956 --> 17:57:57,240
bottom right click and
21024
17:57:53,000 --> 17:57:59,320
paste and now we have two separate cards
21025
17:57:57,240 --> 17:58:03,840
so let's scroll up to the top of the
21026
17:57:59,320 --> 17:58:05,560
second cart which is right here and we
21027
17:58:03,840 --> 17:58:08,796
said that we wanted this card for
21028
17:58:05,560 --> 17:58:10,596
business purchases so let's rename this
21029
17:58:08,796 --> 17:58:13,636
to
21030
17:58:10,596 --> 17:58:17,160
business Capital C
21031
17:58:13,636 --> 17:58:21,840
cart and when we load from Storage let's
21032
17:58:17,160 --> 17:58:23,636
load it from cart Das business instead
21033
17:58:21,840 --> 17:58:24,796
so that it doesn't conflict with the
21034
17:58:23,636 --> 17:58:28,160
cart up
21035
17:58:24,796 --> 17:58:31,476
here and if we scroll down same thing in
21036
17:58:28,160 --> 17:58:34,200
save to storage let's save this cart to
21037
17:58:31,476 --> 17:58:36,796
cart Das
21038
17:58:34,200 --> 17:58:38,596
business and finally let's scroll down
21039
17:58:36,796 --> 17:58:41,720
to the
21040
17:58:38,596 --> 17:58:43,956
bottom and here instead of cart. load
21041
17:58:41,720 --> 17:58:50,040
from Storage we're going to change this
21042
17:58:43,956 --> 17:58:50,040
to business cart. load from Storage
21043
17:58:50,116 --> 17:58:55,360
and that's it we just created a
21044
17:58:52,636 --> 17:58:58,796
completely separate cart simply by
21045
17:58:55,360 --> 17:59:01,476
copying this object so object-oriented
21046
17:58:58,796 --> 17:59:04,240
programming makes it easy to create
21047
17:59:01,476 --> 17:59:04,240
multiple
21048
17:59:05,000 --> 17:59:10,880
objects so now let's console.log both of
21049
17:59:08,000 --> 17:59:12,520
these cards to see what they look like
21050
17:59:10,880 --> 17:59:16,756
we're going to scroll to the
21051
17:59:12,520 --> 17:59:18,880
bottom and here we're going to
21052
17:59:16,756 --> 17:59:21,320
console.log the
21053
17:59:18,880 --> 17:59:28,200
cart and
21054
17:59:21,320 --> 17:59:30,956
console.log the business cart and
21055
17:59:28,200 --> 17:59:32,080
save and if we open the console for the
21056
17:59:30,956 --> 17:59:35,240
checkout
21057
17:59:32,080 --> 17:59:38,560
page it will show us that we have two
21058
17:59:35,240 --> 17:59:41,560
carts the regular cart has three
21059
17:59:38,560 --> 17:59:44,116
products inside and the business cart
21060
17:59:41,560 --> 17:59:46,116
has two products inside and these are
21061
17:59:44,116 --> 17:59:48,720
just the default products that we get
21062
17:59:46,116 --> 17:59:51,080
when we first load the cart
21063
17:59:48,720 --> 17:59:53,116
so you can see that these two cards are
21064
17:59:51,080 --> 17:59:56,320
completely separate from each
21065
17:59:53,116 --> 17:59:58,160
other in the real world we can have two
21066
17:59:56,320 --> 18:00:00,080
physical cards that are completely
21067
17:59:58,160 --> 18:00:02,840
separate from each other and in
21068
18:00:00,080 --> 18:00:04,476
programming we can also have two cards
21069
18:00:02,840 --> 18:00:08,720
that are completely separate from each
21070
18:00:04,476 --> 18:00:11,560
other by simply making a copy of the
21071
18:00:08,720 --> 18:00:13,916
object so again object-oriented
21072
18:00:11,560 --> 18:00:16,916
programming tries to represent the real
21073
18:00:13,916 --> 18:00:16,916
world
21074
18:00:19,160 --> 18:00:24,200
now currently there's an obvious problem
21075
18:00:21,680 --> 18:00:27,200
with how we're creating multiple objects
21076
18:00:24,200 --> 18:00:29,840
which is we're copy pasting a lot of
21077
18:00:27,200 --> 18:00:32,476
code and this can make our code messy
21078
18:00:29,840 --> 18:00:34,520
and hard to manage so now we're going to
21079
18:00:32,476 --> 18:00:37,560
make our code cleaner by using a
21080
18:00:34,520 --> 18:00:40,240
function to create multiple
21081
18:00:37,560 --> 18:00:43,200
objects so first let's delete this
21082
18:00:40,240 --> 18:00:46,000
business card that we copy pasted so
21083
18:00:43,200 --> 18:00:49,000
we're going to select this
21084
18:00:46,000 --> 18:00:51,520
object and then up to here the business
21085
18:00:49,000 --> 18:00:54,320
card we're going to remove
21086
18:00:51,520 --> 18:00:56,840
it and now instead of copy pasting this
21087
18:00:54,320 --> 18:00:59,840
object we're going to use a function to
21088
18:00:56,840 --> 18:01:03,276
generate these objects so at the top of
21089
18:00:59,840 --> 18:01:06,360
this file let's create a new
21090
18:01:03,276 --> 18:01:10,560
function and we'll name it capital c
21091
18:01:06,360 --> 18:01:10,560
cart brackets and curly
21092
18:01:10,956 --> 18:01:16,400
brackets so by the way in objectoriented
21093
18:01:14,000 --> 18:01:19,276
programming a naming convention is to
21094
18:01:16,400 --> 18:01:22,796
use Pascal case for things that create
21095
18:01:19,276 --> 18:01:24,956
or generate objects in Pascal case we
21096
18:01:22,796 --> 18:01:27,240
start every word with a capital
21097
18:01:24,956 --> 18:01:29,520
including the first word so that's why
21098
18:01:27,240 --> 18:01:32,276
we started cart with a Capital
21099
18:01:29,520 --> 18:01:34,080
C now inside this function we're going
21100
18:01:32,276 --> 18:01:36,436
to create cart
21101
18:01:34,080 --> 18:01:38,720
objects so let's actually move this
21102
18:01:36,436 --> 18:01:41,116
object into the function so we can
21103
18:01:38,720 --> 18:01:44,520
create it using the function so we're
21104
18:01:41,116 --> 18:01:45,720
going to select this object to here and
21105
18:01:44,520 --> 18:01:49,000
then we'll right
21106
18:01:45,720 --> 18:01:51,200
click and cut
21107
18:01:49,000 --> 18:01:53,000
and then move it into the function by
21108
18:01:51,200 --> 18:01:56,400
clicking in the function and then
21109
18:01:53,000 --> 18:01:56,400
rightclick and
21110
18:01:56,436 --> 18:02:01,916
paste so now every time we run this
21111
18:01:59,360 --> 18:02:04,560
function it will generate a new cart
21112
18:02:01,916 --> 18:02:06,680
object and we don't have to copy paste
21113
18:02:04,560 --> 18:02:07,796
this code over and over to create
21114
18:02:06,680 --> 18:02:10,360
multiple
21115
18:02:07,796 --> 18:02:12,240
objects so at the bottom I'm going to
21116
18:02:10,360 --> 18:02:14,476
click this Arrow to collapse this object
21117
18:02:12,240 --> 18:02:18,000
for now and at the bottom of this
21118
18:02:14,476 --> 18:02:22,400
function we're going to return this C
21119
18:02:18,000 --> 18:02:22,400
object so we can use it outside the
21120
18:02:22,476 --> 18:02:28,000
function okay now let's give this a try
21121
18:02:25,636 --> 18:02:31,360
and we'll use this function to generate
21122
18:02:28,000 --> 18:02:35,720
cart objects so first let's create the
21123
18:02:31,360 --> 18:02:38,320
normal cart using const cart make it
21124
18:02:35,720 --> 18:02:43,320
equal and we'll run this function to
21125
18:02:38,320 --> 18:02:45,596
generate an object Capital C cart and
21126
18:02:43,320 --> 18:02:49,200
brackets and let's generate another
21127
18:02:45,596 --> 18:02:52,400
object using the function using const
21128
18:02:49,200 --> 18:02:57,796
and we'll name it business
21129
18:02:52,400 --> 18:03:00,116
cart equals Capital C cart and
21130
18:02:57,796 --> 18:03:02,040
brackets and we'll still load from
21131
18:03:00,116 --> 18:03:03,720
storage for both of these and then
21132
18:03:02,040 --> 18:03:06,320
console log both of
21133
18:03:03,720 --> 18:03:08,040
these so basically instead of copy
21134
18:03:06,320 --> 18:03:10,956
pasting all the time we're going to use
21135
18:03:08,040 --> 18:03:14,040
a function to generate
21136
18:03:10,956 --> 18:03:16,476
objects so now let's
21137
18:03:14,040 --> 18:03:18,956
save and then open the
21138
18:03:16,476 --> 18:03:20,116
console and and now we have two cart
21139
18:03:18,956 --> 18:03:23,080
objects
21140
18:03:20,116 --> 18:03:25,160
again however now both of these carts
21141
18:03:23,080 --> 18:03:28,160
have three products
21142
18:03:25,160 --> 18:03:30,400
inside but before the regular card had
21143
18:03:28,160 --> 18:03:32,040
three products and the business card had
21144
18:03:30,400 --> 18:03:33,916
two
21145
18:03:32,040 --> 18:03:37,596
products so what
21146
18:03:33,916 --> 18:03:40,040
happened if we go back to our code and
21147
18:03:37,596 --> 18:03:42,200
look inside this cart
21148
18:03:40,040 --> 18:03:45,000
object you'll notice that we're loading
21149
18:03:42,200 --> 18:03:48,956
from the same key in local storage which
21150
18:03:45,000 --> 18:03:50,916
is C- o that means every cart that we
21151
18:03:48,956 --> 18:03:53,520
generate will be getting its data from
21152
18:03:50,916 --> 18:03:56,116
the same place in local
21153
18:03:53,520 --> 18:04:00,040
storage so to fix this we're going to
21154
18:03:56,116 --> 18:04:02,520
replace C- oop with a parameter so
21155
18:04:00,040 --> 18:04:06,360
different carts can use a different key
21156
18:04:02,520 --> 18:04:11,560
in local storage so at the top let's
21157
18:04:06,360 --> 18:04:14,116
create a parameter called local storage
21158
18:04:11,560 --> 18:04:16,756
key and then instead of using the same
21159
18:04:14,116 --> 18:04:19,916
string every time we're going to use the
21160
18:04:16,756 --> 18:04:23,320
parameter local storage
21161
18:04:19,916 --> 18:04:25,680
key and the same thing for save to
21162
18:04:23,320 --> 18:04:27,636
storage instead of saving to the same
21163
18:04:25,680 --> 18:04:33,476
key every time we're going to replace
21164
18:04:27,636 --> 18:04:36,320
this with the parameter local storage
21165
18:04:33,476 --> 18:04:39,756
key and finally when we run this
21166
18:04:36,320 --> 18:04:42,240
function at the bottom
21167
18:04:39,756 --> 18:04:45,200
here we need to give the function a
21168
18:04:42,240 --> 18:04:49,956
local storage key so for our regular
21169
18:04:45,200 --> 18:04:53,240
cart let's use the string cart C-
21170
18:04:49,956 --> 18:04:57,880
oop and for the business cart we can use
21171
18:04:53,240 --> 18:05:00,276
a different key like the string cart Das
21172
18:04:57,880 --> 18:05:02,400
business so now these two carts will
21173
18:05:00,276 --> 18:05:05,320
load from different keys in local
21174
18:05:02,400 --> 18:05:09,436
storage and they can have different data
21175
18:05:05,320 --> 18:05:12,000
so let's save and then check the
21176
18:05:09,436 --> 18:05:14,040
console and now our regular card has
21177
18:05:12,000 --> 18:05:16,560
three products and our business card has
21178
18:05:14,040 --> 18:05:20,000
two products like
21179
18:05:16,560 --> 18:05:22,720
before so let's go back to our code and
21180
18:05:20,000 --> 18:05:25,276
this is a better way to create multiple
21181
18:05:22,720 --> 18:05:27,840
objects instead of copy pasting a bunch
21182
18:05:25,276 --> 18:05:31,560
of code every time we can create a
21183
18:05:27,840 --> 18:05:31,560
function that generates
21184
18:05:31,840 --> 18:05:37,436
objects so now let's save this example
21185
18:05:34,320 --> 18:05:40,840
into git we'll go into our git
21186
18:05:37,436 --> 18:05:43,276
section and then at the top here we
21187
18:05:40,840 --> 18:05:46,636
created a function to generate these
21188
18:05:43,276 --> 18:05:50,596
objects and in checkout. JS we are
21189
18:05:46,636 --> 18:05:52,880
loading that c - oop practice file so
21190
18:05:50,596 --> 18:05:58,200
we'll type a message to describe these
21191
18:05:52,880 --> 18:06:04,596
changes create oop or objectoriented
21192
18:05:58,200 --> 18:06:04,596
programming version of cart and
21193
18:06:10,240 --> 18:06:17,956
commit next we're going to learn an even
21194
18:06:13,240 --> 18:06:17,956
better way to generate objects
21195
18:06:18,360 --> 18:06:23,636
object-oriented programming has a
21196
18:06:20,116 --> 18:06:26,160
feature called a Class A Class is
21197
18:06:23,636 --> 18:06:31,636
specifically designed for generating
21198
18:06:26,160 --> 18:06:31,636
objects a class is basically an object
21199
18:06:32,276 --> 18:06:38,720
generator So currently if we open our
21200
18:06:35,476 --> 18:06:42,040
code and then open C-
21201
18:06:38,720 --> 18:06:45,560
oop we learn how to use a function to
21202
18:06:42,040 --> 18:06:47,880
generate objects in objectoriented
21203
18:06:45,560 --> 18:06:50,680
programming so now we're going to switch
21204
18:06:47,880 --> 18:06:53,400
this to using a class to generate these
21205
18:06:50,680 --> 18:06:55,596
objects instead because classes are
21206
18:06:53,400 --> 18:06:58,636
cleaner and have more features than
21207
18:06:55,596 --> 18:07:00,756
using a function so first let's create a
21208
18:06:58,636 --> 18:07:03,680
new file for learning
21209
18:07:00,756 --> 18:07:07,000
classes inside the data folder we're
21210
18:07:03,680 --> 18:07:08,160
going to click C- oop and then create a
21211
18:07:07,000 --> 18:07:12,956
new
21212
18:07:08,160 --> 18:07:18,080
file and we'll name this file cart DCL
21213
18:07:12,956 --> 18:07:20,360
class. JS and press enter
21214
18:07:18,080 --> 18:07:23,720
so first let's copy over all the code so
21215
18:07:20,360 --> 18:07:26,520
we can compare it we're going to open C-
21216
18:07:23,720 --> 18:07:29,796
oop click this file and then press
21217
18:07:26,520 --> 18:07:31,000
contrl a or command a to select the code
21218
18:07:29,796 --> 18:07:32,840
and right
21219
18:07:31,000 --> 18:07:35,040
click
21220
18:07:32,840 --> 18:07:40,240
copy and in
21221
18:07:35,040 --> 18:07:43,436
C-Class we're going to right click and
21222
18:07:40,240 --> 18:07:46,596
paste and we'll scroll to the
21223
18:07:43,436 --> 18:07:50,756
top and at the top we're going to create
21224
18:07:46,596 --> 18:07:53,320
our first class class using the word
21225
18:07:50,756 --> 18:07:56,160
class and now we're going to give a name
21226
18:07:53,320 --> 18:08:02,796
to this class so let's name it the same
21227
18:07:56,160 --> 18:08:05,400
as here Capital C cart and then curly
21228
18:08:02,796 --> 18:08:08,040
brackets as a reminder a naming
21229
18:08:05,400 --> 18:08:10,400
convention is to use Pascal case for
21230
18:08:08,040 --> 18:08:12,880
things that generate objects so that's
21231
18:08:10,400 --> 18:08:17,000
why we start this cart with a Capital
21232
18:08:12,880 --> 18:08:20,000
C so this is a class A Class is
21233
18:08:17,000 --> 18:08:23,040
basically an object
21234
18:08:20,000 --> 18:08:25,520
generator so now inside the class we're
21235
18:08:23,040 --> 18:08:28,116
going to put the properties and methods
21236
18:08:25,520 --> 18:08:30,560
that we want for each object that we
21237
18:08:28,116 --> 18:08:32,320
generate so here we have our properties
21238
18:08:30,560 --> 18:08:34,276
and methods we're just going to move
21239
18:08:32,320 --> 18:08:36,680
them into the
21240
18:08:34,276 --> 18:08:37,756
class so first let's select the card
21241
18:08:36,680 --> 18:08:41,520
items
21242
18:08:37,756 --> 18:08:44,916
property we're going to right click
21243
18:08:41,520 --> 18:08:47,720
cut and then move it into the class by
21244
18:08:44,916 --> 18:08:49,840
clicking in here and then right click
21245
18:08:47,720 --> 18:08:52,636
and
21246
18:08:49,840 --> 18:08:55,840
paste and classes use a slightly
21247
18:08:52,636 --> 18:08:58,116
different syntax than objects so to
21248
18:08:55,840 --> 18:09:00,160
create a property called cart items
21249
18:08:58,116 --> 18:09:02,040
we're going to type the property name
21250
18:09:00,160 --> 18:09:05,116
and instead of a colon we're just going
21251
18:09:02,040 --> 18:09:07,436
to make it equal to undefined and
21252
18:09:05,116 --> 18:09:09,680
instead of a comma at the end we're
21253
18:09:07,436 --> 18:09:11,956
going to put a
21254
18:09:09,680 --> 18:09:15,276
semicolon so that's how we add a
21255
18:09:11,956 --> 18:09:17,956
property to a class and now every object
21256
18:09:15,276 --> 18:09:19,400
that we generate will have this property
21257
18:09:17,956 --> 18:09:22,520
just like we did
21258
18:09:19,400 --> 18:09:25,400
before next let's move the methods into
21259
18:09:22,520 --> 18:09:29,240
the class so we'll delete these lines
21260
18:09:25,400 --> 18:09:33,276
for now and we'll move load from Storage
21261
18:09:29,240 --> 18:09:35,360
so we'll select this method and then
21262
18:09:33,276 --> 18:09:38,840
rightclick and
21263
18:09:35,360 --> 18:09:43,360
cut and inside the class we're going to
21264
18:09:38,840 --> 18:09:45,916
move it by right clicking and
21265
18:09:43,360 --> 18:09:48,116
paste and classes use a slightly
21266
18:09:45,916 --> 18:09:50,956
different syntax to create methods as
21267
18:09:48,116 --> 18:09:54,756
well so instead of having a comma at the
21268
18:09:50,956 --> 18:09:56,720
end we can just remove it and every
21269
18:09:54,756 --> 18:09:57,520
object that we generate will now have
21270
18:09:56,720 --> 18:09:59,880
this
21271
18:09:57,520 --> 18:10:02,436
method so now let's move the rest of the
21272
18:09:59,880 --> 18:10:05,080
methods into this class we're going to
21273
18:10:02,436 --> 18:10:08,240
scroll down and we'll move save to
21274
18:10:05,080 --> 18:10:10,756
storage so we'll select the method and
21275
18:10:08,240 --> 18:10:14,200
right click
21276
18:10:10,756 --> 18:10:18,000
cut and at the bottom of the class we're
21277
18:10:14,200 --> 18:10:19,880
going to right click and paste
21278
18:10:18,000 --> 18:10:23,476
and remove the comma at the
21279
18:10:19,880 --> 18:10:25,636
end same with add to cut we'll select
21280
18:10:23,476 --> 18:10:28,240
this
21281
18:10:25,636 --> 18:10:30,436
method and then right
21282
18:10:28,240 --> 18:10:34,116
click
21283
18:10:30,436 --> 18:10:37,200
cut and inside the bottom of the class
21284
18:10:34,116 --> 18:10:41,000
we're going to rightclick and
21285
18:10:37,200 --> 18:10:44,436
paste and remove the comma at the
21286
18:10:41,000 --> 18:10:45,636
end as well as remove from cart so we'll
21287
18:10:44,436 --> 18:10:48,840
select this
21288
18:10:45,636 --> 18:10:52,756
method right click
21289
18:10:48,840 --> 18:10:54,436
cut and at the bottom of the class right
21290
18:10:52,756 --> 18:10:57,916
click and
21291
18:10:54,436 --> 18:11:00,596
paste and remove the comma at the
21292
18:10:57,916 --> 18:11:03,320
end and finally we'll move the last
21293
18:11:00,596 --> 18:11:07,200
method update delivery
21294
18:11:03,320 --> 18:11:10,796
option and right click
21295
18:11:07,200 --> 18:11:13,756
cut inside this class we're going to
21296
18:11:10,796 --> 18:11:16,276
right click and
21297
18:11:13,756 --> 18:11:19,116
paste so this method did not have a
21298
18:11:16,276 --> 18:11:22,636
comma at the end so this looks
21299
18:11:19,116 --> 18:11:24,756
good so that's how we create a class we
21300
18:11:22,636 --> 18:11:27,436
basically give it some properties and
21301
18:11:24,756 --> 18:11:29,756
methods and now when we generate objects
21302
18:11:27,436 --> 18:11:34,276
using this class every object that we
21303
18:11:29,756 --> 18:11:34,276
generate will have these properties and
21304
18:11:34,916 --> 18:11:40,116
methods now one thing we need to fix
21305
18:11:37,200 --> 18:11:43,276
here is that local storage key doesn't
21306
18:11:40,116 --> 18:11:46,756
exist anymore to fix this we're going to
21307
18:11:43,276 --> 18:11:47,636
save this in a property instead so at
21308
18:11:46,756 --> 18:11:49,636
the top
21309
18:11:47,636 --> 18:11:52,796
we're going to give a new property to
21310
18:11:49,636 --> 18:11:58,360
every object that we generate called
21311
18:11:52,796 --> 18:12:00,596
local storage key and make it equal to
21312
18:11:58,360 --> 18:12:03,476
undefined to
21313
18:12:00,596 --> 18:12:07,596
start and then inside the methods we're
21314
18:12:03,476 --> 18:12:10,956
going to switch this to this. local
21315
18:12:07,596 --> 18:12:12,956
storage key so this is going to point to
21316
18:12:10,956 --> 18:12:16,156
the object that we generate just like
21317
18:12:12,956 --> 18:12:19,116
before and then local storage key will
21318
18:12:16,156 --> 18:12:19,116
access this property
21319
18:12:19,400 --> 18:12:24,436
and another place we need to fix this is
21320
18:12:21,600 --> 18:12:27,196
inside save to storage so instead of
21321
18:12:24,436 --> 18:12:30,720
using a variable local storage key we're
21322
18:12:27,196 --> 18:12:33,080
going to use the property this. local
21323
18:12:30,720 --> 18:12:37,400
storage
21324
18:12:33,080 --> 18:12:40,196
key and that's it so if we scroll
21325
18:12:37,400 --> 18:12:43,516
down we basically converted this whole
21326
18:12:40,196 --> 18:12:46,876
function into a class so now we can
21327
18:12:43,516 --> 18:12:46,876
remove it
21328
18:12:49,156 --> 18:12:55,556
and the final step here is now that we
21329
18:12:52,156 --> 18:12:57,196
have this class let's use it to generate
21330
18:12:55,556 --> 18:13:01,476
these two objects
21331
18:12:57,196 --> 18:13:04,400
again to do that instead of this code
21332
18:13:01,476 --> 18:13:06,400
we're going to type the word new and
21333
18:13:04,400 --> 18:13:10,720
then type the class name which is
21334
18:13:06,400 --> 18:13:13,640
capital c cart and
21335
18:13:10,720 --> 18:13:16,360
brackets so you see that a class uses a
21336
18:13:13,640 --> 18:13:19,476
similar syntax as a function except we
21337
18:13:16,360 --> 18:13:23,360
use the word new in front of
21338
18:13:19,476 --> 18:13:25,000
it so this generates a new object using
21339
18:13:23,360 --> 18:13:27,796
our
21340
18:13:25,000 --> 18:13:30,680
class and this new object will have all
21341
18:13:27,796 --> 18:13:33,116
the properties and methods that we added
21342
18:13:30,680 --> 18:13:35,156
above so let's do the same thing for the
21343
18:13:33,116 --> 18:13:38,116
business card we'll use the class to
21344
18:13:35,156 --> 18:13:41,756
generate it we'll remove this
21345
18:13:38,116 --> 18:13:46,360
code and then we'll type new and the
21346
18:13:41,756 --> 18:13:50,600
class name Capital C cart and brackets
21347
18:13:46,360 --> 18:13:52,640
to generate another object using this
21348
18:13:50,600 --> 18:13:55,360
class now there's one thing we need to
21349
18:13:52,640 --> 18:13:58,080
fix here each of these objects has a
21350
18:13:55,360 --> 18:14:00,040
property called local storage key and
21351
18:13:58,080 --> 18:14:02,196
they're currently undefined so we need
21352
18:14:00,040 --> 18:14:05,436
to set this
21353
18:14:02,196 --> 18:14:07,836
property so at the bottom here we're
21354
18:14:05,436 --> 18:14:12,720
going to type
21355
18:14:07,836 --> 18:14:14,556
cart. local storage key and we'll make
21356
18:14:12,720 --> 18:14:17,196
it
21357
18:14:14,556 --> 18:14:21,244
equal and we'll use the same string as
21358
18:14:17,196 --> 18:14:23,516
before which is C-
21359
18:14:21,244 --> 18:14:26,600
oop and we'll do the same thing for the
21360
18:14:23,516 --> 18:14:28,796
business cart we'll type the
21361
18:14:26,600 --> 18:14:32,796
business
21362
18:14:28,796 --> 18:14:35,876
cart. local storage
21363
18:14:32,796 --> 18:14:41,756
key and make it equal the same string
21364
18:14:35,876 --> 18:14:41,756
that we had before which is cart Das
21365
18:14:42,080 --> 18:14:47,320
business and then we'll load the cart
21366
18:14:44,600 --> 18:14:50,400
from Storage as well as the business C
21367
18:14:47,320 --> 18:14:53,756
from storage and we'll console.log
21368
18:14:50,400 --> 18:14:55,876
them so we have the same code as before
21369
18:14:53,756 --> 18:14:57,244
except we converted it from a function
21370
18:14:55,876 --> 18:14:59,756
to a
21371
18:14:57,244 --> 18:15:03,360
class so now let's
21372
18:14:59,756 --> 18:15:06,080
save and we're going to run this code So
21373
18:15:03,360 --> 18:15:07,720
currently if we go into our code and
21374
18:15:06,080 --> 18:15:11,000
open checkout.
21375
18:15:07,720 --> 18:15:13,516
JS we're still loading C-
21376
18:15:11,000 --> 18:15:14,756
oop so we're just going to update this
21377
18:15:13,516 --> 18:15:19,080
and load
21378
18:15:14,756 --> 18:15:22,400
C-Class instead and
21379
18:15:19,080 --> 18:15:26,080
save and we'll open cart Das class
21380
18:15:22,400 --> 18:15:28,796
again and now if we open the
21381
18:15:26,080 --> 18:15:31,796
console you can see that we created two
21382
18:15:28,796 --> 18:15:34,244
cart objects just like we did
21383
18:15:31,796 --> 18:15:37,000
before and the regular card has three
21384
18:15:34,244 --> 18:15:39,360
products inside and the business card
21385
18:15:37,000 --> 18:15:42,796
has two products
21386
18:15:39,360 --> 18:15:45,640
inside and if we click this Arrow beside
21387
18:15:42,796 --> 18:15:48,000
prototype we can see the methods that
21388
18:15:45,640 --> 18:15:49,960
each of these objects have
21389
18:15:48,000 --> 18:15:52,600
so we're basically creating the same
21390
18:15:49,960 --> 18:15:54,796
objects that we had before except this
21391
18:15:52,600 --> 18:15:58,280
time we used a
21392
18:15:54,796 --> 18:16:00,876
class by the way each object that we
21393
18:15:58,280 --> 18:16:02,876
generate from a class is called an
21394
18:16:00,876 --> 18:16:06,476
instance of the
21395
18:16:02,876 --> 18:16:10,920
class we can also check if an object is
21396
18:16:06,476 --> 18:16:16,116
an instance of a class using the code
21397
18:16:10,920 --> 18:16:19,080
business cart and then instance of and
21398
18:16:16,116 --> 18:16:21,920
then the class name name Capital C
21399
18:16:19,080 --> 18:16:25,320
cart so this will check if this object
21400
18:16:21,920 --> 18:16:28,360
was generated from this class so we can
21401
18:16:25,320 --> 18:16:32,720
console.log this result
21402
18:16:28,360 --> 18:16:34,876
console.log and close bracket and
21403
18:16:32,720 --> 18:16:37,320
save and then check the
21404
18:16:34,876 --> 18:16:41,156
console and it will tell us that this is
21405
18:16:37,320 --> 18:16:43,436
true so business card was generated from
21406
18:16:41,156 --> 18:16:43,436
this
21407
18:16:43,796 --> 18:16:50,196
class okay don't worry if class are a
21408
18:16:47,516 --> 18:16:52,796
bit confusing at first just remember
21409
18:16:50,196 --> 18:16:56,080
that objectoriented programming means
21410
18:16:52,796 --> 18:16:59,116
organizing our code into objects because
21411
18:16:56,080 --> 18:17:02,280
this tries to represent the real
21412
18:16:59,116 --> 18:17:05,360
world and then classes are a feature
21413
18:17:02,280 --> 18:17:08,680
that help us generate these objects so
21414
18:17:05,360 --> 18:17:12,196
they make it easier to create these
21415
18:17:08,680 --> 18:17:15,196
objects a class is basically an object
21416
18:17:12,196 --> 18:17:15,196
generator
21417
18:17:17,156 --> 18:17:21,796
now that we learned how classes work
21418
18:17:19,320 --> 18:17:24,796
let's talk about the benefits of
21419
18:17:21,796 --> 18:17:28,000
classes if we scroll
21420
18:17:24,796 --> 18:17:30,320
up when we generate an object it's going
21421
18:17:28,000 --> 18:17:33,116
to have these properties and these
21422
18:17:30,320 --> 18:17:37,400
methods and you'll notice that a class
21423
18:17:33,116 --> 18:17:37,400
actually looks like the object that we
21424
18:17:37,756 --> 18:17:44,876
generate and this is cleaner than using
21425
18:17:40,436 --> 18:17:44,876
a function like we had before
21426
18:17:46,836 --> 18:17:53,640
another benefit of classes is that they
21427
18:17:49,080 --> 18:17:53,640
have extra features for object-oriented
21428
18:17:54,080 --> 18:17:59,196
programming the first feature is called
21429
18:17:56,516 --> 18:18:02,516
a Constructor which lets us run some
21430
18:17:59,196 --> 18:18:06,796
setup code after creating an
21431
18:18:02,516 --> 18:18:06,796
object so if we scroll down in our
21432
18:18:06,836 --> 18:18:13,516
code you'll notice that after we create
21433
18:18:09,680 --> 18:18:16,116
these objects we run some setup code a
21434
18:18:13,516 --> 18:18:19,000
Constructor lets us put the setup code
21435
18:18:16,116 --> 18:18:21,556
inside the class and this makes our code
21436
18:18:19,000 --> 18:18:24,000
cleaner because we can group everything
21437
18:18:21,556 --> 18:18:26,796
together inside the
21438
18:18:24,000 --> 18:18:30,196
class to create a Constructor we're
21439
18:18:26,796 --> 18:18:33,196
going to scroll up in the
21440
18:18:30,196 --> 18:18:37,400
class and Below these properties we're
21441
18:18:33,196 --> 18:18:41,640
going to create a new method called
21442
18:18:37,400 --> 18:18:44,796
Constructor brackets and curly
21443
18:18:41,640 --> 18:18:47,516
brackets so the Constructor method works
21444
18:18:44,796 --> 18:18:49,836
like a normal method we can put code
21445
18:18:47,516 --> 18:18:52,156
inside and it will run the
21446
18:18:49,836 --> 18:18:54,680
code but the special thing about the
21447
18:18:52,156 --> 18:18:57,516
Constructor is that when we generate an
21448
18:18:54,680 --> 18:18:59,680
object it will run this Constructor
21449
18:18:57,516 --> 18:19:01,796
automatically so this is a great place
21450
18:18:59,680 --> 18:19:05,600
to put our setup
21451
18:19:01,796 --> 18:19:08,600
code so let's scroll down to the
21452
18:19:05,600 --> 18:19:11,196
bottom and here instead of running the
21453
18:19:08,600 --> 18:19:13,600
setup code outside the class we're just
21454
18:19:11,196 --> 18:19:16,244
going to move this into the class and
21455
18:19:13,600 --> 18:19:18,080
into the Constructor so we'll select
21456
18:19:16,244 --> 18:19:21,196
this code
21457
18:19:18,080 --> 18:19:24,360
and then right click
21458
18:19:21,196 --> 18:19:27,080
cut and scroll to the
21459
18:19:24,360 --> 18:19:30,960
top and inside the Constructor we're
21460
18:19:27,080 --> 18:19:30,960
going to rightclick and
21461
18:19:31,476 --> 18:19:38,320
paste so now after we create an object
21462
18:19:35,680 --> 18:19:41,244
it will run the code in the Constructor
21463
18:19:38,320 --> 18:19:43,320
and set up the
21464
18:19:41,244 --> 18:19:46,400
object so there's a few things that we
21465
18:19:43,320 --> 18:19:48,156
need to fix here the first thing is each
21466
18:19:46,400 --> 18:19:51,196
object object that we create is going to
21467
18:19:48,156 --> 18:19:54,040
run the Constructor so we only need one
21468
18:19:51,196 --> 18:19:57,400
of each of these lines so let's remove
21469
18:19:54,040 --> 18:19:57,400
the setup for the business
21470
18:20:02,320 --> 18:20:08,680
card so now the setup code has two steps
21471
18:20:06,116 --> 18:20:12,244
we set the local storage key and then we
21472
18:20:08,680 --> 18:20:14,756
load from Storage the next problem is
21473
18:20:12,244 --> 18:20:18,000
that the object that we create is not
21474
18:20:14,756 --> 18:20:21,476
going to be called cart every time
21475
18:20:18,000 --> 18:20:25,836
to solve this we can replace cart with
21476
18:20:21,476 --> 18:20:29,680
this and here as well this. load from
21477
18:20:25,836 --> 18:20:32,360
Storage so as a reminder this points to
21478
18:20:29,680 --> 18:20:34,196
the object that we generate so whatever
21479
18:20:32,360 --> 18:20:37,360
object that we generate we're going to
21480
18:20:34,196 --> 18:20:39,040
get its local storage key and set it and
21481
18:20:37,360 --> 18:20:42,600
we're going to get its load from Storage
21482
18:20:39,040 --> 18:20:42,600
method and run that
21483
18:20:42,836 --> 18:20:47,836
method now the second problem here is
21484
18:20:45,720 --> 18:20:50,360
that we don't want local storage key to
21485
18:20:47,836 --> 18:20:53,640
be card- oop every
21486
18:20:50,360 --> 18:20:56,280
time to fix this the Constructor can
21487
18:20:53,640 --> 18:20:58,920
also have parameters let's give the
21488
18:20:56,280 --> 18:21:00,196
Constructor a parameter and we'll name
21489
18:20:58,920 --> 18:21:04,796
it
21490
18:21:00,196 --> 18:21:07,280
local storage key and instead of the
21491
18:21:04,796 --> 18:21:11,436
same string every time we're going to
21492
18:21:07,280 --> 18:21:14,516
use local storage
21493
18:21:11,436 --> 18:21:17,960
key now the last thing is how do we save
21494
18:21:14,516 --> 18:21:21,040
a value into this parameter
21495
18:21:17,960 --> 18:21:21,040
so if we scroll down to the
21496
18:21:22,244 --> 18:21:27,960
bottom when we call the class between
21497
18:21:25,556 --> 18:21:31,196
these brackets we can put the parameters
21498
18:21:27,960 --> 18:21:33,040
for the Constructor so for the cart we
21499
18:21:31,196 --> 18:21:38,640
want the local storage key to be the
21500
18:21:33,040 --> 18:21:40,876
string C- oop and for the business cart
21501
18:21:38,640 --> 18:21:44,280
we want the local storage key to be the
21502
18:21:40,876 --> 18:21:47,796
string cart Das
21503
18:21:44,280 --> 18:21:49,960
business so the values inside here are
21504
18:21:47,796 --> 18:21:53,720
saved in the parameters in the
21505
18:21:49,960 --> 18:21:56,080
Constructor so C- oop will be saved
21506
18:21:53,720 --> 18:21:58,920
inside local storage key and then we use
21507
18:21:56,080 --> 18:22:02,756
it and then the same thing for cart D
21508
18:21:58,920 --> 18:22:06,720
business so now let's save this
21509
18:22:02,756 --> 18:22:06,720
code and then open the
21510
18:22:07,280 --> 18:22:12,040
console and you'll see that the cart
21511
18:22:09,280 --> 18:22:15,476
objects are correct so after we
21512
18:22:12,040 --> 18:22:18,360
generated each object we also ran this
21513
18:22:15,476 --> 18:22:21,360
setup code so that's how the Constructor
21514
18:22:18,360 --> 18:22:24,516
works every time we generate an object
21515
18:22:21,360 --> 18:22:27,080
it will run the code inside here so this
21516
18:22:24,516 --> 18:22:29,836
is a great place to put setup code and
21517
18:22:27,080 --> 18:22:29,836
make our code
21518
18:22:30,000 --> 18:22:33,720
cleaner so here are a few more details
21519
18:22:32,720 --> 18:22:36,360
about the
21520
18:22:33,720 --> 18:22:38,600
Constructor the method has to be named
21521
18:22:36,360 --> 18:22:41,436
Constructor we can't just use any name
21522
18:22:38,600 --> 18:22:44,516
that we want we also should not return
21523
18:22:41,436 --> 18:22:44,516
anything from a
21524
18:22:44,960 --> 18:22:50,720
Constructor so last ly a shortcut that
21525
18:22:47,796 --> 18:22:53,436
we can use in a class is when we have a
21526
18:22:50,720 --> 18:22:56,756
property and it's equal undefined we can
21527
18:22:53,436 --> 18:22:59,360
actually remove equal undefined and just
21528
18:22:56,756 --> 18:23:02,796
use a semicolon so this is the same
21529
18:22:59,360 --> 18:23:06,476
thing as the code before and same thing
21530
18:23:02,796 --> 18:23:11,000
here we can remove equal undefined and
21531
18:23:06,476 --> 18:23:13,756
just use a semicolon and
21532
18:23:11,000 --> 18:23:16,796
save so we finished converting our code
21533
18:23:13,756 --> 18:23:19,436
from using a function to using a class
21534
18:23:16,796 --> 18:23:22,156
and as you can see a class is just a
21535
18:23:19,436 --> 18:23:25,156
better way to generate objects in
21536
18:23:22,156 --> 18:23:25,156
objectoriented
21537
18:23:25,680 --> 18:23:31,680
programming so now let's save our code
21538
18:23:27,920 --> 18:23:34,796
into git we'll open the git section
21539
18:23:31,680 --> 18:23:38,836
inside cart Das class we created our
21540
18:23:34,796 --> 18:23:41,116
cart class and inside checkout. JS we're
21541
18:23:38,836 --> 18:23:43,796
basically loading the cart Das class
21542
18:23:41,116 --> 18:23:47,040
file so we'll type a message to describe
21543
18:23:43,796 --> 18:23:48,556
this change create
21544
18:23:47,040 --> 18:23:54,000
class
21545
18:23:48,556 --> 18:23:54,000
version of cart and
21546
18:23:59,400 --> 18:24:04,556
commit next we're going to learn an
21547
18:24:01,920 --> 18:24:07,400
important feature of classes called
21548
18:24:04,556 --> 18:24:10,556
private properties and
21549
18:24:07,400 --> 18:24:12,836
methods so let's open our code again and
21550
18:24:10,556 --> 18:24:15,196
open
21551
18:24:12,836 --> 18:24:17,876
C-Class and you'll see that this class
21552
18:24:15,196 --> 18:24:20,920
has a property called local storage
21553
18:24:17,876 --> 18:24:23,400
key so this property is useful inside
21554
18:24:20,920 --> 18:24:27,516
the class but it's not really meant to
21555
18:24:23,400 --> 18:24:28,720
be used outside the class for example at
21556
18:24:27,516 --> 18:24:31,920
the bottom
21557
18:24:28,720 --> 18:24:35,116
here we could take this
21558
18:24:31,920 --> 18:24:41,400
object cart and then change the local
21559
18:24:35,116 --> 18:24:43,796
storage key using dot local storage key
21560
18:24:41,400 --> 18:24:46,756
equals something
21561
18:24:43,796 --> 18:24:49,476
else now this is a problem because it
21562
18:24:46,756 --> 18:24:51,320
will mess up how this object works and
21563
18:24:49,476 --> 18:24:54,436
it will start saving to a different
21564
18:24:51,320 --> 18:24:56,960
local storage key so this is a common
21565
18:24:54,436 --> 18:24:59,320
problem in programming where if you're
21566
18:24:56,960 --> 18:25:01,116
working on a team somebody might
21567
18:24:59,320 --> 18:25:04,436
accidentally change properties that
21568
18:25:01,116 --> 18:25:06,796
they're not supposed to to prevent this
21569
18:25:04,436 --> 18:25:09,720
classes let us make a property or a
21570
18:25:06,796 --> 18:25:13,476
method private which means it can only
21571
18:25:09,720 --> 18:25:13,476
be accessed inside the
21572
18:25:14,000 --> 18:25:18,244
class so let's remove this line
21573
18:25:18,600 --> 18:25:24,436
and scroll
21574
18:25:20,400 --> 18:25:27,080
up and to make local storage key private
21575
18:25:24,436 --> 18:25:28,796
we're just going to add a number sign in
21576
18:25:27,080 --> 18:25:31,756
front or a
21577
18:25:28,796 --> 18:25:34,320
hash and also whenever we access this
21578
18:25:31,756 --> 18:25:37,116
property inside the class we're going to
21579
18:25:34,320 --> 18:25:41,876
add the hash in front so we'll type
21580
18:25:37,116 --> 18:25:46,920
this. has local storage key this.h local
21581
18:25:41,876 --> 18:25:49,556
storage key and inside save to storage
21582
18:25:46,920 --> 18:25:53,600
this.h local storage
21583
18:25:49,556 --> 18:25:56,556
key so this is called a private property
21584
18:25:53,600 --> 18:25:58,960
this means it can only be used inside
21585
18:25:56,556 --> 18:26:02,280
this class or inside these curly
21586
18:25:58,960 --> 18:26:05,516
brackets it cannot be used outside the
21587
18:26:02,280 --> 18:26:08,476
class a property without a hash in front
21588
18:26:05,516 --> 18:26:11,040
is called a public property meaning it
21589
18:26:08,476 --> 18:26:13,720
can be accessed
21590
18:26:11,040 --> 18:26:18,156
anywhere so now let's
21591
18:26:13,720 --> 18:26:18,156
save and open the console
21592
18:26:19,320 --> 18:26:22,436
and the code still
21593
18:26:22,476 --> 18:26:28,556
works so we made this property private
21594
18:26:25,720 --> 18:26:31,040
and we're able to access it inside the
21595
18:26:28,556 --> 18:26:33,280
class so now let's try accessing this
21596
18:26:31,040 --> 18:26:36,960
property outside the class to see what
21597
18:26:33,280 --> 18:26:41,000
happens we're going to scroll
21598
18:26:36,960 --> 18:26:46,876
down and we're going to try to access
21599
18:26:41,000 --> 18:26:50,080
cart. hash local storage key
21600
18:26:46,876 --> 18:26:52,796
and change it to something else like
21601
18:26:50,080 --> 18:26:55,836
test and
21602
18:26:52,796 --> 18:26:58,436
save and if we open our
21603
18:26:55,836 --> 18:27:01,196
console you'll see that when we try to
21604
18:26:58,436 --> 18:27:04,156
access a private property here it will
21605
18:27:01,196 --> 18:27:07,436
give us a syntax error saying this is a
21606
18:27:04,156 --> 18:27:10,436
private field and by the way a field is
21607
18:27:07,436 --> 18:27:10,436
the same thing as a
21608
18:27:10,796 --> 18:27:15,196
property so that's how a private
21609
18:27:13,000 --> 18:27:16,756
property works it prevents us from
21610
18:27:15,196 --> 18:27:19,640
accessing this property
21611
18:27:16,756 --> 18:27:23,876
outside the object and messing it
21612
18:27:19,640 --> 18:27:26,960
up we can also have private
21613
18:27:23,876 --> 18:27:30,680
methods so let's remove this
21614
18:27:26,960 --> 18:27:30,680
line and scroll
21615
18:27:31,244 --> 18:27:37,516
up and the method load from Storage
21616
18:27:35,040 --> 18:27:40,080
should also only be used inside this
21617
18:27:37,516 --> 18:27:43,080
class there's really no reason for code
21618
18:27:40,080 --> 18:27:45,320
outside to be calling load from Storage
21619
18:27:43,080 --> 18:27:47,436
so to make our code safer we're going to
21620
18:27:45,320 --> 18:27:50,436
make this a private
21621
18:27:47,436 --> 18:27:52,720
method to make a method private we're
21622
18:27:50,436 --> 18:27:54,876
going to do the same thing in front of
21623
18:27:52,720 --> 18:27:58,320
the method we're going to add a number
21624
18:27:54,876 --> 18:28:00,400
sign or a hash and we're going to update
21625
18:27:58,320 --> 18:28:04,556
the rest of our code so we're going to
21626
18:28:00,400 --> 18:28:07,156
do this dot hash load from
21627
18:28:04,556 --> 18:28:10,080
storage and now we can
21628
18:28:07,156 --> 18:28:12,876
save and check the console to make sure
21629
18:28:10,080 --> 18:28:16,556
that everything is still working so
21630
18:28:12,876 --> 18:28:18,680
everything still looks good
21631
18:28:16,556 --> 18:28:21,876
because we're only using this private
21632
18:28:18,680 --> 18:28:25,436
method inside this
21633
18:28:21,876 --> 18:28:27,720
class so a class Let's us create private
21634
18:28:25,436 --> 18:28:30,244
properties and methods and this is
21635
18:28:27,720 --> 18:28:32,756
useful on a bigger project where people
21636
18:28:30,244 --> 18:28:34,920
might not be sure which properties and
21637
18:28:32,756 --> 18:28:37,876
methods they're supposed to use outside
21638
18:28:34,920 --> 18:28:40,876
the class and which ones to
21639
18:28:37,876 --> 18:28:44,680
avoid so now let's save our changes into
21640
18:28:40,876 --> 18:28:47,720
git we'll go into the git section and
21641
18:28:44,680 --> 18:28:50,876
inside here we we made local storage key
21642
18:28:47,720 --> 18:28:53,080
and load from Storage
21643
18:28:50,876 --> 18:28:57,516
private we'll create a message to
21644
18:28:53,080 --> 18:29:03,960
describe these changes make local
21645
18:28:57,516 --> 18:29:07,320
storage key and load from Storage
21646
18:29:03,960 --> 18:29:07,320
private and
21647
18:29:12,476 --> 18:29:16,280
commit now that we learned
21648
18:29:14,360 --> 18:29:19,720
objectoriented programming and and
21649
18:29:16,280 --> 18:29:22,796
classes we're going to use it in our
21650
18:29:19,720 --> 18:29:25,280
project so one thing we could do is to
21651
18:29:22,796 --> 18:29:28,436
take this card class and replace
21652
18:29:25,280 --> 18:29:30,876
everywhere we use cart in our project
21653
18:29:28,436 --> 18:29:32,876
however we use cart in a lot of places
21654
18:29:30,876 --> 18:29:35,080
and this would take too much time so I'm
21655
18:29:32,876 --> 18:29:36,244
going to leave replacing the cart as a
21656
18:29:35,080 --> 18:29:39,080
challenge
21657
18:29:36,244 --> 18:29:41,320
exercise instead we're going to work on
21658
18:29:39,080 --> 18:29:44,556
the
21659
18:29:41,320 --> 18:29:47,960
homepage so first let's go back to our
21660
18:29:44,556 --> 18:29:50,756
code and we're going to open checkout.
21661
18:29:47,960 --> 18:29:53,196
JS and we're just going to comment out
21662
18:29:50,756 --> 18:29:56,556
this import because we're just using
21663
18:29:53,196 --> 18:29:59,000
this file for practice so let's save
21664
18:29:56,556 --> 18:30:01,960
this and then let's open the checkout
21665
18:29:59,000 --> 18:30:04,156
page so I already have it open if you
21666
18:30:01,960 --> 18:30:09,400
don't have it open you can rightclick
21667
18:30:04,156 --> 18:30:09,400
checkout. HTML and open with live
21668
18:30:11,040 --> 18:30:16,516
server on the checkout page we're going
21669
18:30:13,556 --> 18:30:18,920
to click this icon in the top left to go
21670
18:30:16,516 --> 18:30:18,920
to the
21671
18:30:19,080 --> 18:30:24,640
homepage on this page we have a list of
21672
18:30:22,600 --> 18:30:28,476
products
21673
18:30:24,640 --> 18:30:30,400
here and the code for these products is
21674
18:30:28,476 --> 18:30:33,244
if we go back to vs
21675
18:30:30,400 --> 18:30:34,640
code and on the left side we're going to
21676
18:30:33,244 --> 18:30:37,640
open
21677
18:30:34,640 --> 18:30:37,640
dataproducts
21678
18:30:38,080 --> 18:30:44,516
DJs so here is the code or the data for
21679
18:30:42,000 --> 18:30:47,516
all the products on the homepage and
21680
18:30:44,516 --> 18:30:49,960
you'll notice that each product is an
21681
18:30:47,516 --> 18:30:54,196
object we're going to learn a technique
21682
18:30:49,960 --> 18:30:57,156
called converting an object into a
21683
18:30:54,196 --> 18:30:59,836
class so what this means is instead of
21684
18:30:57,156 --> 18:31:02,476
using regular objects in this array
21685
18:30:59,836 --> 18:31:06,244
we're going to use a class to generate
21686
18:31:02,476 --> 18:31:10,720
these objects so Above This array let's
21687
18:31:06,244 --> 18:31:14,516
create a new class using the word class
21688
18:31:10,720 --> 18:31:17,116
and let's call it capital P product and
21689
18:31:14,516 --> 18:31:20,360
curly brackets
21690
18:31:17,116 --> 18:31:23,040
because this class is meant to generate
21691
18:31:20,360 --> 18:31:25,040
products so now each of our products is
21692
18:31:23,040 --> 18:31:28,436
going to have some properties like the
21693
18:31:25,040 --> 18:31:31,960
ID image and the name so let's add these
21694
18:31:28,436 --> 18:31:34,960
to the class We'll add the ID property
21695
18:31:31,960 --> 18:31:38,400
and a semicolon so that it starts off as
21696
18:31:34,960 --> 18:31:40,000
undefined and then an image property and
21697
18:31:38,400 --> 18:31:42,556
a name
21698
18:31:40,000 --> 18:31:47,920
property and each product will also have
21699
18:31:42,556 --> 18:31:49,876
a rating and the price sets rating and
21700
18:31:47,920 --> 18:31:52,600
price
21701
18:31:49,876 --> 18:31:55,516
set and you'll notice each object here
21702
18:31:52,600 --> 18:31:57,280
also has a property called keywords now
21703
18:31:55,516 --> 18:31:59,280
we're not currently using this in our
21704
18:31:57,280 --> 18:32:01,920
project so we're going to leave it out
21705
18:31:59,280 --> 18:32:04,876
of the class for now and if we need to
21706
18:32:01,920 --> 18:32:07,516
use it later we can always add it back
21707
18:32:04,876 --> 18:32:10,516
in so now we have all the properties
21708
18:32:07,516 --> 18:32:13,080
that we want for each product so now
21709
18:32:10,516 --> 18:32:16,280
let's test this by generating a product
21710
18:32:13,080 --> 18:32:20,244
using this class so that here
21711
18:32:16,280 --> 18:32:24,080
let's create a variable const product
21712
18:32:20,244 --> 18:32:26,796
one equals and to generate an object
21713
18:32:24,080 --> 18:32:32,796
we're going to use the word new and then
21714
18:32:26,796 --> 18:32:35,600
the class name capital P product and
21715
18:32:32,796 --> 18:32:38,556
brackets and let's console.log this to
21716
18:32:35,600 --> 18:32:43,836
see if it worked
21717
18:32:38,556 --> 18:32:46,196
console.log product one and
21718
18:32:43,836 --> 18:32:50,196
save so now we're going to open the web
21719
18:32:46,196 --> 18:32:52,320
page and then open the console so right
21720
18:32:50,196 --> 18:32:54,876
click and
21721
18:32:52,320 --> 18:32:57,436
inspect and open the
21722
18:32:54,876 --> 18:33:01,196
console and inside here you'll see that
21723
18:32:57,436 --> 18:33:03,720
we created a product object using the
21724
18:33:01,196 --> 18:33:06,280
class so right now all of these
21725
18:33:03,720 --> 18:33:09,640
properties are undefined so now let's
21726
18:33:06,280 --> 18:33:11,196
set the values of these properties we'll
21727
18:33:09,640 --> 18:33:14,876
go back to our
21728
18:33:11,196 --> 18:33:16,920
code don't follow along here but one way
21729
18:33:14,876 --> 18:33:19,156
to set set these prop properties is to
21730
18:33:16,920 --> 18:33:23,516
access them outside the
21731
18:33:19,156 --> 18:33:28,000
class for example product
21732
18:33:23,516 --> 18:33:32,000
1. equals something and then do product
21733
18:33:28,000 --> 18:33:35,516
1. image equals something and then
21734
18:33:32,000 --> 18:33:38,360
product one. name and so
21735
18:33:35,516 --> 18:33:40,320
on so this is not a good way to set
21736
18:33:38,360 --> 18:33:42,836
these properties because we have to do
21737
18:33:40,320 --> 18:33:46,116
this for each product that we create so
21738
18:33:42,836 --> 18:33:48,600
it makes our code repetitive and messy
21739
18:33:46,116 --> 18:33:51,400
instead notice that when we create a
21740
18:33:48,600 --> 18:33:53,920
product this is kind of like the setup
21741
18:33:51,400 --> 18:33:55,436
code we create a product and then set
21742
18:33:53,920 --> 18:33:58,400
all of its
21743
18:33:55,436 --> 18:34:01,196
properties and remember classes have a
21744
18:33:58,400 --> 18:34:03,000
specific feature for setup code called
21745
18:34:01,196 --> 18:34:05,836
The
21746
18:34:03,000 --> 18:34:08,960
Constructor and now you can follow
21747
18:34:05,836 --> 18:34:12,244
along so inside this class we're going
21748
18:34:08,960 --> 18:34:16,876
to create a
21749
18:34:12,244 --> 18:34:19,360
Constructor brackets and curly brackets
21750
18:34:16,876 --> 18:34:21,360
so whenever we generate an object it's
21751
18:34:19,360 --> 18:34:24,040
going to automatically run this
21752
18:34:21,360 --> 18:34:26,516
Constructor so this Constructor is where
21753
18:34:24,040 --> 18:34:30,116
we should put our setup
21754
18:34:26,516 --> 18:34:33,796
code so let's remove this
21755
18:34:30,116 --> 18:34:36,516
code and then do all of that inside the
21756
18:34:33,796 --> 18:34:41,756
Constructor so first we want to set the
21757
18:34:36,516 --> 18:34:45,080
ID property we're going to do this do ID
21758
18:34:41,756 --> 18:34:48,920
and make it equal and now what value do
21759
18:34:45,080 --> 18:34:51,640
we set the ID to so the value of the ID
21760
18:34:48,920 --> 18:34:54,920
is inside each of these
21761
18:34:51,640 --> 18:34:57,640
objects so when we create a product up
21762
18:34:54,920 --> 18:34:59,796
here we're going to put this object
21763
18:34:57,640 --> 18:35:01,836
inside these
21764
18:34:59,796 --> 18:35:05,080
brackets and then that's going to go
21765
18:35:01,836 --> 18:35:07,436
into the Constructor in here so in the
21766
18:35:05,080 --> 18:35:13,156
Constructor let's create a parameter to
21767
18:35:07,436 --> 18:35:15,556
save this data so we'll name it product
21768
18:35:13,156 --> 18:35:17,876
details and now to save something inside
21769
18:35:15,556 --> 18:35:20,116
ins this parameter we're going to put it
21770
18:35:17,876 --> 18:35:22,244
between these
21771
18:35:20,116 --> 18:35:25,920
brackets so let's actually give this
21772
18:35:22,244 --> 18:35:25,920
entire object to the
21773
18:35:26,040 --> 18:35:32,196
Constructor so we're going to right
21774
18:35:28,796 --> 18:35:32,196
click and
21775
18:35:32,920 --> 18:35:39,476
copy and then between these brackets
21776
18:35:35,400 --> 18:35:41,920
we're going to rightclick and
21777
18:35:39,476 --> 18:35:44,000
paste so whenever we create a new
21778
18:35:41,920 --> 18:35:46,080
product we're going to give it this
21779
18:35:44,000 --> 18:35:48,680
object with all the details
21780
18:35:46,080 --> 18:35:50,680
it's going to get saved in here and now
21781
18:35:48,680 --> 18:35:53,680
we can set the
21782
18:35:50,680 --> 18:35:56,836
properties so this. ID is going to be
21783
18:35:53,680 --> 18:36:00,360
equal to the product details. ID
21784
18:35:56,836 --> 18:36:02,600
property so product
21785
18:36:00,360 --> 18:36:06,436
details.
21786
18:36:02,600 --> 18:36:12,600
ID and for the image we're going to do
21787
18:36:06,436 --> 18:36:15,556
this. image equals the product details
21788
18:36:12,600 --> 18:36:18,244
which is this object that we passed in
21789
18:36:15,556 --> 18:36:21,680
dot the image
21790
18:36:18,244 --> 18:36:26,080
property same thing for the name so this
21791
18:36:21,680 --> 18:36:29,720
do name equals product
21792
18:36:26,080 --> 18:36:33,640
details. name which is this property
21793
18:36:29,720 --> 18:36:39,040
here same thing for the rating this.
21794
18:36:33,640 --> 18:36:41,920
rating equals product details.
21795
18:36:39,040 --> 18:36:47,720
rating and finally the price
21796
18:36:41,920 --> 18:36:49,516
sense this. price sense equals the
21797
18:36:47,720 --> 18:36:52,516
product
21798
18:36:49,516 --> 18:36:56,040
details. Price
21799
18:36:52,516 --> 18:37:00,476
sets so this is called converting an
21800
18:36:56,040 --> 18:37:02,836
object into a class what we're doing is
21801
18:37:00,476 --> 18:37:07,116
we're basically taking a regular object
21802
18:37:02,836 --> 18:37:09,960
like this we put it inside a class and
21803
18:37:07,116 --> 18:37:12,280
then we copy over the
21804
18:37:09,960 --> 18:37:15,196
properties you can also visualize it
21805
18:37:12,280 --> 18:37:17,920
like this we have a regular object and
21806
18:37:15,196 --> 18:37:20,640
we're basically wrapping it inside a
21807
18:37:17,920 --> 18:37:23,640
class and the reason we do this is that
21808
18:37:20,640 --> 18:37:26,244
classes have extra features we can use
21809
18:37:23,640 --> 18:37:29,280
like we can add methods and we can also
21810
18:37:26,244 --> 18:37:31,920
have private properties and private
21811
18:37:29,280 --> 18:37:34,640
methods so we basically have these same
21812
18:37:31,920 --> 18:37:38,000
object as before except we have an
21813
18:37:34,640 --> 18:37:41,556
enhanced version of that object it has
21814
18:37:38,000 --> 18:37:41,556
some extra features from
21815
18:37:41,920 --> 18:37:49,156
classes so for now let's save this code
21816
18:37:46,556 --> 18:37:51,436
and then down here we console.log
21817
18:37:49,156 --> 18:37:54,244
product one so let's take a look at it
21818
18:37:51,436 --> 18:37:56,476
in our console so we'll open the
21819
18:37:54,244 --> 18:37:59,516
console and now we can see that we
21820
18:37:56,476 --> 18:38:02,556
created a product object so it's the
21821
18:37:59,516 --> 18:38:07,400
same object as before except now it's
21822
18:38:02,556 --> 18:38:07,400
enhanced it has some extra features from
21823
18:38:08,960 --> 18:38:14,360
classes so next we're going to take this
21824
18:38:11,720 --> 18:38:17,040
technique and apply it to this entire
21825
18:38:14,360 --> 18:38:19,360
array so instead of having an array of
21826
18:38:17,040 --> 18:38:23,116
regular objects we're going to convert
21827
18:38:19,360 --> 18:38:26,600
each of these objects into the product
21828
18:38:23,116 --> 18:38:28,756
class now one way we could do this is
21829
18:38:26,600 --> 18:38:33,800
that in front of the object we can just
21830
18:38:28,756 --> 18:38:35,832
type new product Open Bracket and then
21831
18:38:33,800 --> 18:38:38,440
close bracket at the
21832
18:38:35,832 --> 18:38:41,360
bottom and this will essentially convert
21833
18:38:38,440 --> 18:38:43,512
this regular object into the product
21834
18:38:41,360 --> 18:38:46,360
class however we're going to have to
21835
18:38:43,512 --> 18:38:48,832
repeat this code for every object in the
21836
18:38:46,360 --> 18:38:50,160
array and it's going to be a lot of work
21837
18:38:48,832 --> 18:38:53,360
and
21838
18:38:50,160 --> 18:38:56,080
repetition so instead let's just Loop
21839
18:38:53,360 --> 18:38:58,960
through this array and then use code to
21840
18:38:56,080 --> 18:39:00,960
convert each of these objects so instead
21841
18:38:58,960 --> 18:39:03,480
of typing this out manually we're going
21842
18:39:00,960 --> 18:39:06,360
to remove this and remove the round
21843
18:39:03,480 --> 18:39:09,720
bracket at the end and then I'm going to
21844
18:39:06,360 --> 18:39:10,872
click this Arrow beside the array to
21845
18:39:09,720 --> 18:39:13,832
collapse
21846
18:39:10,872 --> 18:39:17,512
it and at the end of the array we're
21847
18:39:13,832 --> 18:39:20,080
going to use an array method called do
21848
18:39:17,512 --> 18:39:23,120
map and
21849
18:39:20,080 --> 18:39:26,552
brackets so map basically Loops through
21850
18:39:23,120 --> 18:39:28,920
an array and for each value it runs a
21851
18:39:26,552 --> 18:39:31,360
function so we're going to give this a
21852
18:39:28,920 --> 18:39:34,480
function that we want to run for each
21853
18:39:31,360 --> 18:39:36,832
value so arrow and curly
21854
18:39:34,480 --> 18:39:39,040
brackets and this inner function is
21855
18:39:36,832 --> 18:39:42,000
going to get a
21856
18:39:39,040 --> 18:39:43,760
parameter so this parameter is basically
21857
18:39:42,000 --> 18:39:46,400
each value in the
21858
18:39:43,760 --> 18:39:49,000
array so it's going to take the first
21859
18:39:46,400 --> 18:39:51,360
value and then save it inside this
21860
18:39:49,000 --> 18:39:53,600
parameter run the function and then take
21861
18:39:51,360 --> 18:39:57,080
the second value save it in here run the
21862
18:39:53,600 --> 18:40:00,080
function third value save it and run the
21863
18:39:57,080 --> 18:40:02,640
function so let's name this parameter
21864
18:40:00,080 --> 18:40:05,160
the product
21865
18:40:02,640 --> 18:40:08,440
details because each object in this
21866
18:40:05,160 --> 18:40:11,192
array contains product details so now
21867
18:40:08,440 --> 18:40:15,512
it's going to take each object save it
21868
18:40:11,192 --> 18:40:17,360
in the parameter and run the function
21869
18:40:15,512 --> 18:40:20,720
and here we're going to convert the
21870
18:40:17,360 --> 18:40:24,720
object into a class to do that we're
21871
18:40:20,720 --> 18:40:26,720
going to use the code new capital P
21872
18:40:24,720 --> 18:40:29,192
product
21873
18:40:26,720 --> 18:40:34,832
brackets and we're going to give it this
21874
18:40:29,192 --> 18:40:34,832
regular object which is the product
21875
18:40:35,760 --> 18:40:43,360
details and now there's a second part to
21876
18:40:38,440 --> 18:40:45,600
how Map works so map creates a new array
21877
18:40:43,360 --> 18:40:49,552
and whatever we return from this inner
21878
18:40:45,600 --> 18:40:54,360
function is going to go inside that new
21879
18:40:49,552 --> 18:40:57,360
array so here we're going to return this
21880
18:40:54,360 --> 18:41:00,480
class so this result is going to be put
21881
18:40:57,360 --> 18:41:04,120
inside a new array so you can think of
21882
18:41:00,480 --> 18:41:06,512
map as we take each value in an array we
21883
18:41:04,120 --> 18:41:10,832
run this function on it and we transform
21884
18:41:06,512 --> 18:41:10,832
it and then put it inside a new
21885
18:41:10,920 --> 18:41:15,920
array so here we're essentially
21886
18:41:13,552 --> 18:41:19,280
transforming each of these products or
21887
18:41:15,920 --> 18:41:23,600
these regular objects into a
21888
18:41:19,280 --> 18:41:26,320
class so at the bottom let's
21889
18:41:23,600 --> 18:41:29,760
console.log the products array to
21890
18:41:26,320 --> 18:41:32,600
confirm this so we'll
21891
18:41:29,760 --> 18:41:35,280
save and open the
21892
18:41:32,600 --> 18:41:38,192
console and now you can see we have an
21893
18:41:35,280 --> 18:41:40,960
array and each of the values is a
21894
18:41:38,192 --> 18:41:43,960
product class instead of just a regular
21895
18:41:40,960 --> 18:41:43,960
object
21896
18:41:45,512 --> 18:41:51,832
so we converted all of our products from
21897
18:41:47,960 --> 18:41:54,120
regular objects into this product class
21898
18:41:51,832 --> 18:41:55,720
and now let's open the web page to make
21899
18:41:54,120 --> 18:41:58,080
sure that everything still
21900
18:41:55,720 --> 18:42:00,440
works so if we open the
21901
18:41:58,080 --> 18:42:01,680
page you notice that everything is still
21902
18:42:00,440 --> 18:42:04,320
working
21903
18:42:01,680 --> 18:42:07,720
correctly and that's because we have the
21904
18:42:04,320 --> 18:42:11,720
exact same objects as before except
21905
18:42:07,720 --> 18:42:14,720
they're now just sort of enhanced
21906
18:42:11,720 --> 18:42:17,920
objects next let's use those extra
21907
18:42:14,720 --> 18:42:21,320
features of classes to simplify our code
21908
18:42:17,920 --> 18:42:25,120
for this page we'll go back to our
21909
18:42:21,320 --> 18:42:26,832
code and on the left side let's open
21910
18:42:25,120 --> 18:42:30,680
amazon.
21911
18:42:26,832 --> 18:42:33,120
JS so this is the code that creates the
21912
18:42:30,680 --> 18:42:35,872
homepage so in here we're going to
21913
18:42:33,120 --> 18:42:38,512
scroll down until we see the rating
21914
18:42:35,872 --> 18:42:40,320
section where we calculate the stars and
21915
18:42:38,512 --> 18:42:44,360
the rating
21916
18:42:40,320 --> 18:42:47,440
account so notice that inside our HTML
21917
18:42:44,360 --> 18:42:49,600
we're constru in this URL here for the
21918
18:42:47,440 --> 18:42:52,440
number of stars a product
21919
18:42:49,600 --> 18:42:55,040
has and we're also creating the price
21920
18:42:52,440 --> 18:42:57,680
that we want to display on the
21921
18:42:55,040 --> 18:43:01,400
page now instead of doing this all in
21922
18:42:57,680 --> 18:43:04,920
the HTML our code would be cleaner if we
21923
18:43:01,400 --> 18:43:07,160
moved this logic into our class because
21924
18:43:04,920 --> 18:43:09,400
we want to group this related code
21925
18:43:07,160 --> 18:43:12,120
together so let's use the features of
21926
18:43:09,400 --> 18:43:17,040
classes to make this code a little bit
21927
18:43:12,120 --> 18:43:17,040
cleaner we'll open products. Js
21928
18:43:17,120 --> 18:43:24,160
and we'll scroll up to the product class
21929
18:43:21,040 --> 18:43:27,080
and inside here let's add some methods
21930
18:43:24,160 --> 18:43:29,920
for calculating the stars and the
21931
18:43:27,080 --> 18:43:37,192
price so we're going to add a method and
21932
18:43:29,920 --> 18:43:40,192
call it get Stars URL brackets and curly
21933
18:43:37,192 --> 18:43:44,760
brackets and let's create another method
21934
18:43:40,192 --> 18:43:47,040
called get price brackets and curly
21935
18:43:44,760 --> 18:43:47,040
brackets
21936
18:43:47,160 --> 18:43:52,720
and now we're going to move the code
21937
18:43:48,832 --> 18:43:55,000
from our HTML into this class so we'll
21938
18:43:52,720 --> 18:43:58,240
open amazon.
21939
18:43:55,000 --> 18:44:01,000
JS and then here we're creating the URL
21940
18:43:58,240 --> 18:44:01,960
of the Stars so let's actually select
21941
18:44:01,000 --> 18:44:04,552
all this
21942
18:44:01,960 --> 18:44:06,320
code and
21943
18:44:04,552 --> 18:44:09,192
rightclick
21944
18:44:06,320 --> 18:44:12,760
copy and inside products.
21945
18:44:09,192 --> 18:44:16,960
JS inside get Stars URL we're going to
21946
18:44:12,760 --> 18:44:16,960
rightclick and paste
21947
18:44:17,832 --> 18:44:23,120
and this is going to be a string so at
21948
18:44:20,040 --> 18:44:25,080
the front let's add a back tick so we're
21949
18:44:23,120 --> 18:44:28,120
going to use a template string because
21950
18:44:25,080 --> 18:44:30,872
we're going to insert a value inside and
21951
18:44:28,120 --> 18:44:33,552
at the end we'll add another back
21952
18:44:30,872 --> 18:44:35,360
tick so now that we created the string
21953
18:44:33,552 --> 18:44:37,440
we're going to return it from this
21954
18:44:35,360 --> 18:44:40,512
method so
21955
18:44:37,440 --> 18:44:43,832
return and semicolon at the
21956
18:44:40,512 --> 18:44:47,480
end and one thing we need to fix is that
21957
18:44:43,832 --> 18:44:50,160
product is not defined anywhere so to
21958
18:44:47,480 --> 18:44:53,872
get the rating property of whatever
21959
18:44:50,160 --> 18:44:56,832
object this is we're going to use this.
21960
18:44:53,872 --> 18:44:56,832
ratings.
21961
18:44:57,960 --> 18:45:05,240
Stars so now each product is able to
21962
18:45:01,080 --> 18:45:07,160
construct its own Stars URL here so
21963
18:45:05,240 --> 18:45:10,552
let's save this
21964
18:45:07,160 --> 18:45:13,160
file and then inside amazon.
21965
18:45:10,552 --> 18:45:15,600
JS instead of doing this calculation
21966
18:45:13,160 --> 18:45:18,120
directly inside the HTML
21967
18:45:15,600 --> 18:45:21,440
we're going to delete it and we're going
21968
18:45:18,120 --> 18:45:27,552
to insert the
21969
18:45:21,440 --> 18:45:29,640
product. getet Stars URL method and
21970
18:45:27,552 --> 18:45:32,360
brackets so you'll notice that we have
21971
18:45:29,640 --> 18:45:35,640
the same product object as before but
21972
18:45:32,360 --> 18:45:38,552
now it's sort of an enhanced product we
21973
18:45:35,640 --> 18:45:42,320
can add methods to group related code
21974
18:45:38,552 --> 18:45:44,920
together and make our code
21975
18:45:42,320 --> 18:45:47,400
cleaner let's do the same thing with the
21976
18:45:44,920 --> 18:45:49,512
price down here we're going to calculate
21977
18:45:47,400 --> 18:45:50,800
this using the method instead of
21978
18:45:49,512 --> 18:45:53,960
directly in the
21979
18:45:50,800 --> 18:45:57,080
HTML so we're going to select this code
21980
18:45:53,960 --> 18:45:59,872
and then right click
21981
18:45:57,080 --> 18:46:03,512
copy inside products.
21982
18:45:59,872 --> 18:46:05,040
JS inside the get price method we're
21983
18:46:03,512 --> 18:46:08,480
going to
21984
18:46:05,040 --> 18:46:08,480
rightclick and
21985
18:46:08,600 --> 18:46:14,160
paste and again we want to return the
21986
18:46:11,280 --> 18:46:16,320
price as a string so at the front we'll
21987
18:46:14,160 --> 18:46:17,480
create a template string because we're
21988
18:46:16,320 --> 18:46:20,512
inserting a
21989
18:46:17,480 --> 18:46:23,872
value and at the back a template string
21990
18:46:20,512 --> 18:46:26,360
or a back tick and we're going to return
21991
18:46:23,872 --> 18:46:28,832
this from the
21992
18:46:26,360 --> 18:46:31,800
method and another thing we need to fix
21993
18:46:28,832 --> 18:46:33,800
is that product is undefined so to get
21994
18:46:31,800 --> 18:46:37,680
the price sets property we're going to
21995
18:46:33,800 --> 18:46:40,192
use this Price
21996
18:46:37,680 --> 18:46:42,120
sets now one extra thing we need to do
21997
18:46:40,192 --> 18:46:44,440
here is that we're using the format
21998
18:46:42,120 --> 18:46:47,640
currency function but we didn't import
21999
18:46:44,440 --> 18:46:50,400
it so we're going to scroll to the
22000
18:46:47,640 --> 18:46:54,872
top and import format
22001
18:46:50,400 --> 18:46:59,280
currency import curly brackets the
22002
18:46:54,872 --> 18:47:02,000
format currency function from a
22003
18:46:59,280 --> 18:47:04,760
string and here we're going to locate
22004
18:47:02,000 --> 18:47:06,552
this function so we're inside the data
22005
18:47:04,760 --> 18:47:10,240
folder we need to get out of the data
22006
18:47:06,552 --> 18:47:13,120
folder using do slash and then go into
22007
18:47:10,240 --> 18:47:17,440
the scripts folder into the UTS folder
22008
18:47:13,120 --> 18:47:20,440
and load money. JS so scripts SL
22009
18:47:17,440 --> 18:47:20,440
utils
22010
18:47:26,000 --> 18:47:29,000
money.jpg
22011
18:47:30,680 --> 18:47:36,960
and instead of calculating the price
22012
18:47:33,872 --> 18:47:41,160
inside the HTML we're going to remove
22013
18:47:36,960 --> 18:47:45,680
this and then insert the
22014
18:47:41,160 --> 18:47:48,280
product. getet price method and
22015
18:47:45,680 --> 18:47:51,192
brackets so now let's
22016
18:47:48,280 --> 18:47:53,000
save and let's open the homepage to make
22017
18:47:51,192 --> 18:47:55,480
sure that it's
22018
18:47:53,000 --> 18:47:59,192
working so now you see that everything
22019
18:47:55,480 --> 18:48:01,440
is still working including the stars and
22020
18:47:59,192 --> 18:48:01,440
the
22021
18:48:03,040 --> 18:48:08,960
prices so we'll go back to our
22022
18:48:06,040 --> 18:48:12,040
code and now that we have these methods
22023
18:48:08,960 --> 18:48:14,720
let's use them in our other page which
22024
18:48:12,040 --> 18:48:16,400
is the checkout page so we'll open
22025
18:48:14,720 --> 18:48:18,080
scripts
22026
18:48:16,400 --> 18:48:20,720
checkout.
22027
18:48:18,080 --> 18:48:24,040
JS and this basically displays the
22028
18:48:20,720 --> 18:48:28,040
products on the checkout
22029
18:48:24,040 --> 18:48:31,040
page if we scroll to the HTML and find
22030
18:48:28,040 --> 18:48:33,680
the delivery date the product image and
22031
18:48:31,040 --> 18:48:35,920
the product name we're going to see that
22032
18:48:33,680 --> 18:48:39,512
here we're also calculating the
22033
18:48:35,920 --> 18:48:42,360
product's price directly in the
22034
18:48:39,512 --> 18:48:45,080
HTML so instead of doing this let's use
22035
18:48:42,360 --> 18:48:50,160
the method we just created so select
22036
18:48:45,080 --> 18:48:52,872
this code and remove it and insert the
22037
18:48:50,160 --> 18:48:54,480
matching product this time so
22038
18:48:52,872 --> 18:48:57,280
matching
22039
18:48:54,480 --> 18:49:00,080
product and remember we converted all of
22040
18:48:57,280 --> 18:49:02,680
our products into classes so this is not
22041
18:49:00,080 --> 18:49:05,720
a regular object anymore it's more of an
22042
18:49:02,680 --> 18:49:09,040
enhanced object it's a product
22043
18:49:05,720 --> 18:49:16,600
class and that means this will have the
22044
18:49:09,040 --> 18:49:18,872
method. get price and brackets and Save
22045
18:49:16,600 --> 18:49:21,720
so now let's open the checkout page to
22046
18:49:18,872 --> 18:49:24,000
see if this works we'll open the web
22047
18:49:21,720 --> 18:49:25,640
page and then at the top right we're
22048
18:49:24,000 --> 18:49:27,872
going to click the
22049
18:49:25,640 --> 18:49:30,192
cart and now you can see that on the
22050
18:49:27,872 --> 18:49:32,960
checkout page the price is still
22051
18:49:30,192 --> 18:49:32,960
displayed
22052
18:49:33,360 --> 18:49:37,192
correctly and that's it if we go back to
22053
18:49:36,320 --> 18:49:39,920
our
22054
18:49:37,192 --> 18:49:42,680
code you'll see that by converting our
22055
18:49:39,920 --> 18:49:46,000
objects into classes we're able to use
22056
18:49:42,680 --> 18:49:48,080
extra features of classes like methods
22057
18:49:46,000 --> 18:49:50,400
to make our code
22058
18:49:48,080 --> 18:49:53,400
cleaner so now let's make sure that all
22059
18:49:50,400 --> 18:49:56,040
of our tests are passing we'll go to the
22060
18:49:53,400 --> 18:49:59,280
left and scroll down and we're going to
22061
18:49:56,040 --> 18:50:02,040
open test.html in the browser so if you
22062
18:49:59,280 --> 18:50:05,080
don't have it open you can right click
22063
18:50:02,040 --> 18:50:07,640
and open with live server but for me I
22064
18:50:05,080 --> 18:50:10,240
already have it open so I'm going to
22065
18:50:07,640 --> 18:50:13,280
open the test page and all of our tests
22066
18:50:10,240 --> 18:50:15,120
are still passing so our code is still
22067
18:50:13,280 --> 18:50:19,240
correct and now now let's save our
22068
18:50:15,120 --> 18:50:22,920
changes into git we'll open the git
22069
18:50:19,240 --> 18:50:26,400
section and in products. JS we created
22070
18:50:22,920 --> 18:50:28,832
the products class and at the bottom we
22071
18:50:26,400 --> 18:50:30,480
converted all of our objects into the
22072
18:50:28,832 --> 18:50:32,872
products
22073
18:50:30,480 --> 18:50:36,320
class so actually one thing I forgot to
22074
18:50:32,872 --> 18:50:38,320
do is to clean up these console. logs so
22075
18:50:36,320 --> 18:50:42,640
let's do that right now we're going to
22076
18:50:38,320 --> 18:50:45,920
open our code and go into products.
22077
18:50:42,640 --> 18:50:49,120
JS and we'll scroll down right after the
22078
18:50:45,920 --> 18:50:52,720
product class and let's remove this
22079
18:50:49,120 --> 18:50:54,920
product one because it was just an
22080
18:50:52,720 --> 18:50:57,240
example and we'll also remove the
22081
18:50:54,920 --> 18:50:59,920
console.log products at the
22082
18:50:57,240 --> 18:51:04,080
end and
22083
18:50:59,920 --> 18:51:07,280
save so now if we go back into git and
22084
18:51:04,080 --> 18:51:10,120
open products. JS we just have the code
22085
18:51:07,280 --> 18:51:12,552
where we convert our objects into a
22086
18:51:10,120 --> 18:51:15,240
class in amazon.
22087
18:51:12,552 --> 18:51:18,120
JS we use the feature of classes called
22088
18:51:15,240 --> 18:51:22,000
Methods to make our code cleaner in
22089
18:51:18,120 --> 18:51:24,760
checkout. JS we stop loading our cart
22090
18:51:22,000 --> 18:51:27,832
class practice file and in orders
22091
18:51:24,760 --> 18:51:30,280
summary. JS we also use a method to make
22092
18:51:27,832 --> 18:51:32,800
our code
22093
18:51:30,280 --> 18:51:34,600
cleaner so now let's create a message to
22094
18:51:32,800 --> 18:51:36,512
describe these
22095
18:51:34,600 --> 18:51:44,960
changes
22096
18:51:36,512 --> 18:51:44,960
convert products into classes and commit
22097
18:51:50,832 --> 18:51:55,480
next we're going to learn an important
22098
18:51:52,832 --> 18:51:56,720
feature of object-oriented programming
22099
18:51:55,480 --> 18:51:59,800
called
22100
18:51:56,720 --> 18:52:01,680
inheritance inheritance lets us reuse
22101
18:51:59,800 --> 18:52:04,832
code between
22102
18:52:01,680 --> 18:52:06,000
classes so first let's learn the concept
22103
18:52:04,832 --> 18:52:08,280
of
22104
18:52:06,000 --> 18:52:09,760
inheritance to do that we're going to
22105
18:52:08,280 --> 18:52:13,600
open our
22106
18:52:09,760 --> 18:52:15,160
project so we'll open this page here to
22107
18:52:13,600 --> 18:52:17,240
our checkout page
22108
18:52:15,160 --> 18:52:20,120
and we're going to go to the homepage by
22109
18:52:17,240 --> 18:52:20,120
clicking the top
22110
18:52:20,280 --> 18:52:26,240
left and on this page we have a bunch of
22111
18:52:23,800 --> 18:52:28,720
products but you also notice that we
22112
18:52:26,240 --> 18:52:30,832
have different types of products for
22113
18:52:28,720 --> 18:52:34,400
example we have clothing like this
22114
18:52:30,832 --> 18:52:38,040
t-shirt and we have appliances like this
22115
18:52:34,400 --> 18:52:41,440
toaster so clothing and appliances are
22116
18:52:38,040 --> 18:52:44,552
still products they have a name a price
22117
18:52:41,440 --> 18:52:48,512
and a rating but they are a more
22118
18:52:44,552 --> 18:52:50,720
specific type of product for example
22119
18:52:48,512 --> 18:52:53,512
clothing can have all the properties of
22120
18:52:50,720 --> 18:52:56,360
a regular product but it can also have
22121
18:52:53,512 --> 18:52:59,080
specific properties like a size
22122
18:52:56,360 --> 18:53:01,872
chart so how do we represent this kind
22123
18:52:59,080 --> 18:53:04,512
of relationship in our code we have a
22124
18:53:01,872 --> 18:53:05,920
product and then we have a more specific
22125
18:53:04,512 --> 18:53:08,680
type of
22126
18:53:05,920 --> 18:53:11,960
product one way to represent this is to
22127
18:53:08,680 --> 18:53:13,832
create a new class called clothing and
22128
18:53:11,960 --> 18:53:16,400
this class will have all the properties
22129
18:53:13,832 --> 18:53:18,320
of a regular product but also more
22130
18:53:16,400 --> 18:53:20,400
specific
22131
18:53:18,320 --> 18:53:22,760
properties however there's a problem
22132
18:53:20,400 --> 18:53:24,720
with this which is we're duplicating a
22133
18:53:22,760 --> 18:53:28,192
lot of
22134
18:53:24,720 --> 18:53:30,760
code instead objectoriented programming
22135
18:53:28,192 --> 18:53:33,600
has a feature called inheritance that
22136
18:53:30,760 --> 18:53:35,920
allows one class to get all the
22137
18:53:33,600 --> 18:53:38,552
properties and methods from another
22138
18:53:35,920 --> 18:53:39,512
class so we don't have to copy paste
22139
18:53:38,552 --> 18:53:42,832
this
22140
18:53:39,512 --> 18:53:46,240
code for example we can make a clothing
22141
18:53:42,832 --> 18:53:48,552
class and then use inheritance to get
22142
18:53:46,240 --> 18:53:49,832
all the properties and methods from the
22143
18:53:48,552 --> 18:53:52,920
product
22144
18:53:49,832 --> 18:53:55,512
class this is similar to how a child
22145
18:53:52,920 --> 18:53:57,832
inherits things from their parents like
22146
18:53:55,512 --> 18:54:01,192
their hair color or the shape of their
22147
18:53:57,832 --> 18:54:03,552
eyes in fact we call the product class
22148
18:54:01,192 --> 18:54:07,832
the parent class and we call the
22149
18:54:03,552 --> 18:54:07,832
clothing class the child
22150
18:54:08,080 --> 18:54:13,920
class so now let's learn how to use
22151
18:54:10,720 --> 18:54:16,040
inheritance in our code we're going to
22152
18:54:13,920 --> 18:54:19,832
open VSS
22153
18:54:16,040 --> 18:54:22,832
code and open our code on the left and
22154
18:54:19,832 --> 18:54:26,320
then open products.
22155
18:54:22,832 --> 18:54:29,800
JS and we're going to scroll to the
22156
18:54:26,320 --> 18:54:31,920
product class and then below this class
22157
18:54:29,800 --> 18:54:35,080
we're going to create a more specific
22158
18:54:31,920 --> 18:54:38,512
type of product called
22159
18:54:35,080 --> 18:54:41,480
class and capital c
22160
18:54:38,512 --> 18:54:44,480
clothing and curly
22161
18:54:41,480 --> 18:54:47,800
brackets so we said that clothing is is
22162
18:54:44,480 --> 18:54:50,040
just a specific type of product so that
22163
18:54:47,800 --> 18:54:52,600
means clothing should have all the
22164
18:54:50,040 --> 18:54:56,280
properties and methods of a
22165
18:54:52,600 --> 18:54:59,080
product so first let's inherit all these
22166
18:54:56,280 --> 18:55:02,760
properties and methods into the clothing
22167
18:54:59,080 --> 18:55:06,800
class to use inheritance after the class
22168
18:55:02,760 --> 18:55:08,960
name we're going to use the word
22169
18:55:06,800 --> 18:55:12,080
extends and then we're going to give it
22170
18:55:08,960 --> 18:55:15,192
the class that we want to inherit from
22171
18:55:12,080 --> 18:55:18,280
which is the product class
22172
18:55:15,192 --> 18:55:20,960
Above So this means that clothing will
22173
18:55:18,280 --> 18:55:24,360
get all the properties and methods of
22174
18:55:20,960 --> 18:55:26,720
this class or it will inherit all the
22175
18:55:24,360 --> 18:55:29,720
properties and
22176
18:55:26,720 --> 18:55:33,512
methods to demonstrate this let's leave
22177
18:55:29,720 --> 18:55:35,600
this empty and create a new clothing
22178
18:55:33,512 --> 18:55:39,080
object so down
22179
18:55:35,600 --> 18:55:42,552
here let's create a variable first using
22180
18:55:39,080 --> 18:55:45,400
const and we'll name it a
22181
18:55:42,552 --> 18:55:48,872
t-shirt make it equal
22182
18:55:45,400 --> 18:55:52,400
and we'll generate a new clothing object
22183
18:55:48,872 --> 18:55:57,440
to do that we'll use the word New
22184
18:55:52,400 --> 18:56:00,000
Capital C clothing and
22185
18:55:57,440 --> 18:56:02,640
brackets and next we're going to expand
22186
18:56:00,000 --> 18:56:06,080
the products array and we're going to
22187
18:56:02,640 --> 18:56:07,760
give the product details to this class
22188
18:56:06,080 --> 18:56:11,920
so we're going to scroll down to the
22189
18:56:07,760 --> 18:56:13,872
third product which is the
22190
18:56:11,920 --> 18:56:14,960
t-shirt and we're going to select this
22191
18:56:13,872 --> 18:56:16,320
object
22192
18:56:14,960 --> 18:56:18,240
and then right
22193
18:56:16,320 --> 18:56:20,872
click
22194
18:56:18,240 --> 18:56:24,000
copy and scroll
22195
18:56:20,872 --> 18:56:27,360
up and now between these brackets we're
22196
18:56:24,000 --> 18:56:30,400
going to right click and
22197
18:56:27,360 --> 18:56:33,240
paste so now we created a new closing
22198
18:56:30,400 --> 18:56:36,320
class we gave it all the data that it
22199
18:56:33,240 --> 18:56:38,872
needs and let's console.log it to see
22200
18:56:36,320 --> 18:56:40,760
what it looks like so down here we're
22201
18:56:38,872 --> 18:56:43,920
going to
22202
18:56:40,760 --> 18:56:48,000
console.log brackets and the variable
22203
18:56:43,920 --> 18:56:51,360
name which is t-shirt so here
22204
18:56:48,000 --> 18:56:54,480
t-shirt and
22205
18:56:51,360 --> 18:56:57,320
save and now let's open the console so
22206
18:56:54,480 --> 18:56:59,192
we'll open our web page and then on this
22207
18:56:57,320 --> 18:57:01,400
page we're going to right
22208
18:56:59,192 --> 18:57:04,080
click
22209
18:57:01,400 --> 18:57:06,360
inspect and open the
22210
18:57:04,080 --> 18:57:07,832
console and you'll see that we created a
22211
18:57:06,360 --> 18:57:11,000
new clothing
22212
18:57:07,832 --> 18:57:13,120
object and if we open it you'll see that
22213
18:57:11,000 --> 18:57:14,640
this has the same properties as the
22214
18:57:13,120 --> 18:57:17,640
product class
22215
18:57:14,640 --> 18:57:18,640
so this inherited all the properties
22216
18:57:17,640 --> 18:57:21,400
from
22217
18:57:18,640 --> 18:57:24,480
product so let's see if we inherited the
22218
18:57:21,400 --> 18:57:28,120
methods as well we'll go to our
22219
18:57:24,480 --> 18:57:30,080
code and let's try the method get price
22220
18:57:28,120 --> 18:57:31,920
so we'll
22221
18:57:30,080 --> 18:57:36,040
console.log
22222
18:57:31,920 --> 18:57:38,920
t-shirt. getet price and
22223
18:57:36,040 --> 18:57:42,280
brackets and
22224
18:57:38,920 --> 18:57:44,960
save and now if we open the console
22225
18:57:42,280 --> 18:57:48,760
again you'll see that get price also
22226
18:57:44,960 --> 18:57:51,512
works so clothing inherited the methods
22227
18:57:48,760 --> 18:57:56,320
from product as well so even though this
22228
18:57:51,512 --> 18:57:59,720
is empty this class gets or inherits all
22229
18:57:56,320 --> 18:58:02,640
the properties and methods of
22230
18:57:59,720 --> 18:58:05,512
product so we use inheritance when we
22231
18:58:02,640 --> 18:58:08,552
have one class which is a more specific
22232
18:58:05,512 --> 18:58:11,640
type of another class for example
22233
18:58:08,552 --> 18:58:14,400
clothing is a more specific type of
22234
18:58:11,640 --> 18:58:16,760
product we want all the properties and
22235
18:58:14,400 --> 18:58:19,080
methods of the product still but we just
22236
18:58:16,760 --> 18:58:22,280
don't want to copy paste all this code
22237
18:58:19,080 --> 18:58:25,720
down here so inheritance lets us reuse
22238
18:58:22,280 --> 18:58:25,720
code between
22239
18:58:29,240 --> 18:58:33,600
classes so now that we have this
22240
18:58:31,192 --> 18:58:37,160
clothing class we can add properties and
22241
18:58:33,600 --> 18:58:40,760
methods that are more specific to
22242
18:58:37,160 --> 18:58:42,440
clothing for example clothing can have a
22243
18:58:40,760 --> 18:58:45,552
size
22244
18:58:42,440 --> 18:58:48,280
chart so for con convenience inside this
22245
18:58:45,552 --> 18:58:52,080
t-shirt object I've actually added a
22246
18:58:48,280 --> 18:58:55,360
size chart link so let's add this to our
22247
18:58:52,080 --> 18:58:56,400
clothing class so up here we're going to
22248
18:58:55,360 --> 18:59:00,800
add a
22249
18:58:56,400 --> 18:59:03,680
property size chart
22250
18:59:00,800 --> 18:59:06,800
link and now to set this value we're
22251
18:59:03,680 --> 18:59:11,360
going to use the Constructor like we did
22252
18:59:06,800 --> 18:59:15,960
before so down here we're going to use a
22253
18:59:11,360 --> 18:59:15,960
Constructor brackets and curly brackets
22254
18:59:16,512 --> 18:59:22,760
and we're going to give this a parameter
22255
18:59:18,512 --> 18:59:22,760
called Product
22256
18:59:24,000 --> 18:59:29,800
details so when we create the clothing
22257
18:59:26,720 --> 18:59:31,480
we save this object into product details
22258
18:59:29,800 --> 18:59:35,240
and then we can use it to set the
22259
18:59:31,480 --> 18:59:40,480
properties up here so we're going to do
22260
18:59:35,240 --> 18:59:44,640
this do size chart link and make it
22261
18:59:40,480 --> 18:59:46,800
equal to the product details
22262
18:59:44,640 --> 18:59:49,512
which is this object and we're going to
22263
18:59:46,800 --> 18:59:55,040
get the size chart link
22264
18:59:49,512 --> 18:59:58,192
property dot size chart
22265
18:59:55,040 --> 19:00:00,552
link now one problem we have here is
22266
18:59:58,192 --> 19:00:04,000
that clothing inherits all the
22267
19:00:00,552 --> 19:00:07,160
properties from the product so we also
22268
19:00:04,000 --> 19:00:11,480
need to set the ID the image the name
22269
19:00:07,160 --> 19:00:16,400
and so on so if we scroll down we could
22270
19:00:11,480 --> 19:00:18,960
do something like this . ID equals
22271
19:00:16,400 --> 19:00:22,080
product details.
22272
19:00:18,960 --> 19:00:25,120
ID however instead of doing this one by
22273
19:00:22,080 --> 19:00:28,640
one all over again inheritance gives us
22274
19:00:25,120 --> 19:00:33,160
a shortcut we can actually just use the
22275
19:00:28,640 --> 19:00:36,920
Constructor in the parent class up
22276
19:00:33,160 --> 19:00:38,760
here so to call the parents Constructor
22277
19:00:36,920 --> 19:00:44,320
we're going to use a special feature of
22278
19:00:38,760 --> 19:00:47,720
classes called super and brackets
22279
19:00:44,320 --> 19:00:50,440
so super basically calls the Constructor
22280
19:00:47,720 --> 19:00:52,920
of the parent class which is the product
22281
19:00:50,440 --> 19:00:55,440
so this will call the Constructor up
22282
19:00:52,920 --> 19:00:58,512
here and we also need to give this the
22283
19:00:55,440 --> 19:01:04,680
product details so down here we're going
22284
19:00:58,512 --> 19:01:04,680
to call Super and give it the product
22285
19:01:05,360 --> 19:01:09,440
details so this will call the
22286
19:01:07,280 --> 19:01:12,320
Constructor of the parent class which is
22287
19:01:09,440 --> 19:01:14,832
product and that will set the ID the
22288
19:01:12,320 --> 19:01:16,512
name and the rating
22289
19:01:14,832 --> 19:01:20,280
so now let's save
22290
19:01:16,512 --> 19:01:23,600
this and check our console
22291
19:01:20,280 --> 19:01:25,800
again and open up the clothing object
22292
19:01:23,600 --> 19:01:27,680
and you'll see that now we have a size
22293
19:01:25,800 --> 19:01:31,040
chart link
22294
19:01:27,680 --> 19:01:34,480
property so that's how inheritance Works
22295
19:01:31,040 --> 19:01:37,120
a class can get or inherit all the
22296
19:01:34,480 --> 19:01:40,280
properties and methods of another class
22297
19:01:37,120 --> 19:01:42,160
and reuse that code and this class can
22298
19:01:40,280 --> 19:01:46,192
also have more specific properties and
22299
19:01:42,160 --> 19:01:46,192
methods like a size chart
22300
19:01:46,960 --> 19:01:52,320
link one last thing to know is that if
22301
19:01:49,552 --> 19:01:55,120
we don't create a Constructor by default
22302
19:01:52,320 --> 19:01:57,280
it will run the parents Constructor so
22303
19:01:55,120 --> 19:01:59,920
that's why when this class was empty the
22304
19:01:57,280 --> 19:01:59,920
code still
22305
19:02:02,480 --> 19:02:08,832
worked now that we have this clothing
22306
19:02:04,832 --> 19:02:08,832
class we're going to use it in our
22307
19:02:09,000 --> 19:02:14,192
project so right now if we scroll down
22308
19:02:11,832 --> 19:02:16,760
to our products array we can converted
22309
19:02:14,192 --> 19:02:19,000
all of these into a product
22310
19:02:16,760 --> 19:02:22,040
class however we're going to convert
22311
19:02:19,000 --> 19:02:25,120
some of them like the t-shirt into a
22312
19:02:22,040 --> 19:02:27,832
clothing class instead to make it more
22313
19:02:25,120 --> 19:02:30,240
specific so how do we know which objects
22314
19:02:27,832 --> 19:02:33,360
to convert into a product and which ones
22315
19:02:30,240 --> 19:02:36,920
to convert into clothing to help us do
22316
19:02:33,360 --> 19:02:38,920
that I included a property called type
22317
19:02:36,920 --> 19:02:42,360
so type tells us which class we should
22318
19:02:38,920 --> 19:02:44,832
use when we're converting this into a
22319
19:02:42,360 --> 19:02:47,680
class this is sometimes called a
22320
19:02:44,832 --> 19:02:50,480
discriminator property it tells us which
22321
19:02:47,680 --> 19:02:52,640
class we should convert this
22322
19:02:50,480 --> 19:02:55,280
to so we're going to go down to the
22323
19:02:52,640 --> 19:02:57,552
bottom of this code so I'm going to do a
22324
19:02:55,280 --> 19:03:00,480
trick here I'm going to scroll up to the
22325
19:02:57,552 --> 19:03:03,600
products array and click this Arrow to
22326
19:03:00,480 --> 19:03:05,760
collapse it and then at the bottom we're
22327
19:03:03,600 --> 19:03:09,960
going to use that type property to
22328
19:03:05,760 --> 19:03:12,360
decide which class to use so inside this
22329
19:03:09,960 --> 19:03:15,120
function we're going to use an if
22330
19:03:12,360 --> 19:03:17,960
statement bracket ET and curler
22331
19:03:15,120 --> 19:03:19,160
brackets and inside we're going to check
22332
19:03:17,960 --> 19:03:22,240
the type
22333
19:03:19,160 --> 19:03:24,120
property product
22334
19:03:22,240 --> 19:03:28,400
details.
22335
19:03:24,120 --> 19:03:31,440
type and we'll check if it is equal to
22336
19:03:28,400 --> 19:03:31,440
the string
22337
19:03:32,512 --> 19:03:37,160
clothing if it is equal to clothing
22338
19:03:35,120 --> 19:03:41,960
we're going to convert this object into
22339
19:03:37,160 --> 19:03:47,160
a clothing class instead so let's
22340
19:03:41,960 --> 19:03:49,440
return new Capital C clothing and
22341
19:03:47,160 --> 19:03:53,720
brackets and we're going to give the
22342
19:03:49,440 --> 19:03:53,720
Constructor product
22343
19:03:55,360 --> 19:04:02,512
details so now our array will contain a
22344
19:03:58,320 --> 19:04:05,872
mix of regular products and
22345
19:04:02,512 --> 19:04:07,720
clothing next for each of our clothing
22346
19:04:05,872 --> 19:04:10,832
we're going to display the size chart
22347
19:04:07,720 --> 19:04:13,440
link on the
22348
19:04:10,832 --> 19:04:16,360
page but first let's make sure that we
22349
19:04:13,440 --> 19:04:19,640
have this image here the closing size
22350
19:04:16,360 --> 19:04:22,440
chart so if we go into our images
22351
19:04:19,640 --> 19:04:24,320
folder you might see the image here
22352
19:04:22,440 --> 19:04:26,552
called clothing siiz
22353
19:04:24,320 --> 19:04:29,760
chart.png but currently I don't have
22354
19:04:26,552 --> 19:04:31,760
this so I need to download this first to
22355
19:04:29,760 --> 19:04:34,120
do that we're going to click this link
22356
19:04:31,760 --> 19:04:34,120
in the
22357
19:04:38,720 --> 19:04:43,920
description which will open the size
22358
19:04:40,920 --> 19:04:43,920
chart
22359
19:04:46,552 --> 19:04:51,480
and then on this image we're going to
22360
19:04:48,320 --> 19:04:53,960
right click save image
22361
19:04:51,480 --> 19:04:56,320
as and then find the folder that
22362
19:04:53,960 --> 19:04:57,680
contains all our code so for me it's on
22363
19:04:56,320 --> 19:05:01,192
the
22364
19:04:57,680 --> 19:05:04,800
desktop inside a JavaScript Amazon
22365
19:05:01,192 --> 19:05:08,600
Project and inside the images
22366
19:05:04,800 --> 19:05:08,600
folder and we'll save it
22367
19:05:10,552 --> 19:05:16,480
here and if we go back to our code we
22368
19:05:13,680 --> 19:05:19,640
should have the closing size chart image
22369
19:05:16,480 --> 19:05:22,480
inside the images
22370
19:05:19,640 --> 19:05:24,320
folder now let's display the size chart
22371
19:05:22,480 --> 19:05:26,832
on the
22372
19:05:24,320 --> 19:05:29,360
page so if I go to the
22373
19:05:26,832 --> 19:05:31,800
homepage whenever we have a clothing
22374
19:05:29,360 --> 19:05:35,160
product like this t-shirt we're going to
22375
19:05:31,800 --> 19:05:38,240
display a size chart
22376
19:05:35,160 --> 19:05:42,040
underneath let's go back to our
22377
19:05:38,240 --> 19:05:43,680
code and open amazon. JS which creates
22378
19:05:42,040 --> 19:05:45,280
the homepage
22379
19:05:43,680 --> 19:05:47,872
which is right
22380
19:05:45,280 --> 19:05:51,320
here and we're going to scroll down the
22381
19:05:47,872 --> 19:05:56,600
HTML below the product price and the
22382
19:05:51,320 --> 19:05:56,600
quantity selector here and underneath
22383
19:05:57,040 --> 19:06:02,760
this if we have a clothing product we're
22384
19:06:00,000 --> 19:06:06,440
going to display a size chart link under
22385
19:06:02,760 --> 19:06:06,440
the quantity selector like
22386
19:06:06,872 --> 19:06:12,232
this so one way we can do this is to use
22387
19:06:10,040 --> 19:06:16,120
something like an if statement or a
22388
19:06:12,232 --> 19:06:18,760
turnery like a this if it's a clothing
22389
19:06:16,120 --> 19:06:22,360
then display some HTML if it's not a
22390
19:06:18,760 --> 19:06:22,360
clothing then just display
22391
19:06:23,120 --> 19:06:28,080
nothing however we're going to learn a
22392
19:06:25,552 --> 19:06:30,440
different way to do this using
22393
19:06:28,080 --> 19:06:32,872
inheritance so first we're going to
22394
19:06:30,440 --> 19:06:35,760
create a new method on the clothing
22395
19:06:32,872 --> 19:06:38,400
class that's going to generate the HTML
22396
19:06:35,760 --> 19:06:41,760
that we need here so we're going to go
22397
19:06:38,400 --> 19:06:44,400
to our code and scroll up and open
22398
19:06:41,760 --> 19:06:46,232
products. Js
22399
19:06:44,400 --> 19:06:47,320
and we're going to scroll up to the
22400
19:06:46,232 --> 19:06:49,800
clothing
22401
19:06:47,320 --> 19:06:53,600
class and at the bottom we're going to
22402
19:06:49,800 --> 19:06:55,232
create a new method and let's call it
22403
19:06:53,600 --> 19:06:56,960
extra
22404
19:06:55,232 --> 19:07:01,320
info
22405
19:06:56,960 --> 19:07:01,320
HTML brackets and Cur
22406
19:07:02,000 --> 19:07:07,040
brackets so this method will generate
22407
19:07:04,512 --> 19:07:09,872
some HTML that contains some extra
22408
19:07:07,040 --> 19:07:11,080
information about this product like the
22409
19:07:09,872 --> 19:07:16,000
size
22410
19:07:11,080 --> 19:07:18,360
chart so here we're going to return some
22411
19:07:16,000 --> 19:07:20,160
HTML and we use a template string
22412
19:07:18,360 --> 19:07:24,320
because we're going to insert some
22413
19:07:20,160 --> 19:07:27,480
values inside and inside here let's
22414
19:07:24,320 --> 19:07:30,040
create some HTML for a
22415
19:07:27,480 --> 19:07:34,040
link to create a link we're going to use
22416
19:07:30,040 --> 19:07:38,400
the code less than a greater than less
22417
19:07:34,040 --> 19:07:41,480
than SL a greater than so this HTML
22418
19:07:38,400 --> 19:07:44,360
element creates a link when we click
22419
19:07:41,480 --> 19:07:48,000
this link it will open another page
22420
19:07:44,360 --> 19:07:51,080
page inside this link let's put the text
22421
19:07:48,000 --> 19:07:52,832
size chart so this is what's going to
22422
19:07:51,080 --> 19:07:56,160
show up on the
22423
19:07:52,832 --> 19:07:59,512
page and Link elements have two
22424
19:07:56,160 --> 19:08:01,920
attributes the first attribute is called
22425
19:07:59,512 --> 19:08:04,720
hre Equals double
22426
19:08:01,920 --> 19:08:08,080
quotes So this tells the computer which
22427
19:08:04,720 --> 19:08:11,232
page this should open when we click this
22428
19:08:08,080 --> 19:08:14,600
link inside here we're going to insert
22429
19:08:11,232 --> 19:08:20,440
the size chart link so we're going to
22430
19:08:14,600 --> 19:08:23,400
insert this. siiz chart
22431
19:08:20,440 --> 19:08:27,512
link so when we click this it will open
22432
19:08:23,400 --> 19:08:30,720
a page containing the size chart
22433
19:08:27,512 --> 19:08:33,552
image we'll scroll back
22434
19:08:30,720 --> 19:08:37,552
up and Link elements can have another
22435
19:08:33,552 --> 19:08:39,600
attribute called Target equals double
22436
19:08:37,552 --> 19:08:43,680
quotes and we're going to give it a
22437
19:08:39,600 --> 19:08:45,680
value of underscore blank
22438
19:08:43,680 --> 19:08:48,680
and I'll add some new lines here to make
22439
19:08:45,680 --> 19:08:51,920
it a little easier to
22440
19:08:48,680 --> 19:08:54,280
read so Target equals blank tells the
22441
19:08:51,920 --> 19:08:57,400
link to open in a new
22442
19:08:54,280 --> 19:09:00,400
tab so now let's save this
22443
19:08:57,400 --> 19:09:04,680
file and we'll go back to the homepage
22444
19:09:00,400 --> 19:09:07,920
so I'll scroll down here to amazon.
22445
19:09:04,680 --> 19:09:09,872
JS and below the quantity
22446
19:09:07,920 --> 19:09:12,400
selector let's
22447
19:09:09,872 --> 19:09:15,832
insert and we'll call the method that we
22448
19:09:12,400 --> 19:09:19,872
just created which is the
22449
19:09:15,832 --> 19:09:22,800
product. extra info
22450
19:09:19,872 --> 19:09:26,232
HTML and
22451
19:09:22,800 --> 19:09:28,480
brackets so this will ins some HTML
22452
19:09:26,232 --> 19:09:30,640
containing extra information about the
22453
19:09:28,480 --> 19:09:33,320
product like the size
22454
19:09:30,640 --> 19:09:35,680
chart now before we run this code
22455
19:09:33,320 --> 19:09:38,800
there's one thing that we need to fix
22456
19:09:35,680 --> 19:09:39,960
currently only the clothing class has
22457
19:09:38,800 --> 19:09:42,960
this
22458
19:09:39,960 --> 19:09:44,832
method if it's just a regular product
22459
19:09:42,960 --> 19:09:47,360
it's not going to have this method and
22460
19:09:44,832 --> 19:09:50,160
it's going to cause an
22461
19:09:47,360 --> 19:09:53,720
error to fix this we're also going to
22462
19:09:50,160 --> 19:09:55,512
create this method on the product class
22463
19:09:53,720 --> 19:09:58,800
so we'll go back to our
22464
19:09:55,512 --> 19:10:01,920
code and open products.
22465
19:09:58,800 --> 19:10:05,000
JS and we're going to scroll up to the
22466
19:10:01,920 --> 19:10:08,440
products class here and at the bottom
22467
19:10:05,000 --> 19:10:08,440
we're going to add the same
22468
19:10:10,192 --> 19:10:17,680
method extra info HTML brackets and
22469
19:10:15,600 --> 19:10:20,600
curly
22470
19:10:17,680 --> 19:10:22,680
brackets and for regular products we
22471
19:10:20,600 --> 19:10:27,600
don't have any extra info we want to
22472
19:10:22,680 --> 19:10:30,120
display so let's just return and empty
22473
19:10:27,600 --> 19:10:34,192
string and
22474
19:10:30,120 --> 19:10:36,512
save so now if we call extra info HTML
22475
19:10:34,192 --> 19:10:39,232
it doesn't matter if it's a product or a
22476
19:10:36,512 --> 19:10:40,760
clothing both of these will have this
22477
19:10:39,232 --> 19:10:44,512
method
22478
19:10:40,760 --> 19:10:47,400
defined so we'll go back to amazon.
22479
19:10:44,512 --> 19:10:51,832
JS and now this should always
22480
19:10:47,400 --> 19:10:54,800
work so let's click this file and
22481
19:10:51,832 --> 19:10:55,960
save and then open the web page to see
22482
19:10:54,800 --> 19:10:58,960
the
22483
19:10:55,960 --> 19:11:01,920
result so now you notice that products
22484
19:10:58,960 --> 19:11:04,480
that are clothing have a size chart
22485
19:11:01,920 --> 19:11:06,680
underneath and regular products don't
22486
19:11:04,480 --> 19:11:08,872
have any extra
22487
19:11:06,680 --> 19:11:12,160
information and if we click the size
22488
19:11:08,872 --> 19:11:15,160
chart link it will open a new tab to the
22489
19:11:12,160 --> 19:11:15,160
size chart image
22490
19:11:15,600 --> 19:11:22,120
so that's how we create this size chart
22491
19:11:17,920 --> 19:11:22,120
link for only the clothing
22492
19:11:24,232 --> 19:11:28,512
products let's go back to our code and
22493
19:11:26,872 --> 19:11:31,552
we'll learn more about this new
22494
19:11:28,512 --> 19:11:34,232
technique that we just
22495
19:11:31,552 --> 19:11:37,320
used so on the left we'll go back to
22496
19:11:34,232 --> 19:11:37,320
products. JS
22497
19:11:38,160 --> 19:11:44,552
first so notice that the product class
22498
19:11:41,192 --> 19:11:47,040
has a method called extra info HT ML and
22499
19:11:44,552 --> 19:11:49,320
then clothing extends this
22500
19:11:47,040 --> 19:11:53,600
class that means clothing will
22501
19:11:49,320 --> 19:11:56,832
automatically get the extra info HTML
22502
19:11:53,600 --> 19:11:58,512
method but then we Define this method
22503
19:11:56,832 --> 19:12:01,552
again inside
22504
19:11:58,512 --> 19:12:04,960
clothing so this will actually override
22505
19:12:01,552 --> 19:12:08,800
or replace the parents method and this
22506
19:12:04,960 --> 19:12:08,800
technique is called method
22507
19:12:09,320 --> 19:12:14,400
overwriting one more thing to know about
22508
19:12:11,552 --> 19:12:17,512
method overwriting is that if we really
22509
19:12:14,400 --> 19:12:20,832
need access to the parents method
22510
19:12:17,512 --> 19:12:24,080
there's a feature that we can use called
22511
19:12:20,832 --> 19:12:25,280
super so super gives us access to the
22512
19:12:24,080 --> 19:12:27,760
parent
22513
19:12:25,280 --> 19:12:32,552
class so if we want to call this method
22514
19:12:27,760 --> 19:12:35,512
up here we can do super and then extra
22515
19:12:32,552 --> 19:12:35,512
info
22516
19:12:36,080 --> 19:12:42,080
HTML so it's the same super as we used
22517
19:12:39,160 --> 19:12:45,040
up here except this calls the parents
22518
19:12:42,080 --> 19:12:47,360
Constructor and this calls one of the
22519
19:12:45,040 --> 19:12:49,800
parents
22520
19:12:47,360 --> 19:12:52,480
methods so let's comment this out since
22521
19:12:49,800 --> 19:12:52,480
it's just an
22522
19:12:52,720 --> 19:13:00,832
example and let's
22523
19:12:55,720 --> 19:13:04,080
save and lastly let's go back to amazon.
22524
19:13:00,832 --> 19:13:07,040
JS and we'll take a look at this code
22525
19:13:04,080 --> 19:13:10,552
and notice that when we call extra info
22526
19:13:07,040 --> 19:13:13,120
HTML we don't know what class this is
22527
19:13:10,552 --> 19:13:15,320
this might be a clothing class or a
22528
19:13:13,120 --> 19:13:18,680
might just be a product
22529
19:13:15,320 --> 19:13:20,872
class this technique is called
22530
19:13:18,680 --> 19:13:23,720
polymorphism which means we can use a
22531
19:13:20,872 --> 19:13:25,480
method without needing to know exactly
22532
19:13:23,720 --> 19:13:28,280
what class this
22533
19:13:25,480 --> 19:13:31,192
is polymorphism is sort of like an
22534
19:13:28,280 --> 19:13:33,960
alternative to doing if statements here
22535
19:13:31,192 --> 19:13:36,160
instead of doing if it's clothing do
22536
19:13:33,960 --> 19:13:38,640
this if it's a regular product do
22537
19:13:36,160 --> 19:13:41,640
something else we can just have both of
22538
19:13:38,640 --> 19:13:43,680
the classes use the same method and then
22539
19:13:41,640 --> 19:13:45,512
the class itself will Det determine what
22540
19:13:43,680 --> 19:13:48,760
this method
22541
19:13:45,512 --> 19:13:51,120
does if we add a new class like an
22542
19:13:48,760 --> 19:13:53,552
appliance class we don't need to change
22543
19:13:51,120 --> 19:13:58,120
any of this code the appliance class
22544
19:13:53,552 --> 19:13:58,120
will determine what extra info HTML
22545
19:13:59,400 --> 19:14:05,120
does and that's it we learned about
22546
19:14:02,360 --> 19:14:07,920
inheritance which lets us reuse code
22547
19:14:05,120 --> 19:14:10,720
between classes and we learn some of the
22548
19:14:07,920 --> 19:14:13,080
techniques we can do with inheritance
22549
19:14:10,720 --> 19:14:16,960
like method overwriting and polymorph
22550
19:14:13,080 --> 19:14:19,280
PRM which can make our code a little bit
22551
19:14:16,960 --> 19:14:21,720
cleaner now let's check our test to make
22552
19:14:19,280 --> 19:14:24,280
sure that everything still works so
22553
19:14:21,720 --> 19:14:26,960
we'll open the test page and make sure
22554
19:14:24,280 --> 19:14:29,280
that everything is still passing and
22555
19:14:26,960 --> 19:14:32,720
then we'll go back to our code and we'll
22556
19:14:29,280 --> 19:14:36,640
save this into git open the git
22557
19:14:32,720 --> 19:14:36,640
section and in products.
22558
19:14:37,920 --> 19:14:43,760
JS we created the clothing class which
22559
19:14:41,160 --> 19:14:45,640
inherits from product
22560
19:14:43,760 --> 19:14:47,640
and one thing I forgot to do is to
22561
19:14:45,640 --> 19:14:50,440
remove this practice
22562
19:14:47,640 --> 19:14:53,320
code so let's actually go back to our
22563
19:14:50,440 --> 19:14:57,160
code in products.
22564
19:14:53,320 --> 19:14:59,760
JS and below the clothing let's remove
22565
19:14:57,160 --> 19:14:59,760
this practice
22566
19:14:59,800 --> 19:15:04,512
code and
22567
19:15:02,040 --> 19:15:08,872
save we'll go back to
22568
19:15:04,512 --> 19:15:11,552
git and just make sure that it's been
22569
19:15:08,872 --> 19:15:13,280
removed and then we added the size chart
22570
19:15:11,552 --> 19:15:16,872
image
22571
19:15:13,280 --> 19:15:19,552
and in amazon. JS we used polymorphism
22572
19:15:16,872 --> 19:15:21,960
to add some extra info below each
22573
19:15:19,552 --> 19:15:23,360
product so let's create a message
22574
19:15:21,960 --> 19:15:27,080
describing our
22575
19:15:23,360 --> 19:15:30,600
changes use
22576
19:15:27,080 --> 19:15:35,760
inheritance and
22577
19:15:30,600 --> 19:15:38,760
polymorphism to add size chart and
22578
19:15:35,760 --> 19:15:38,760
commit
22579
19:15:43,120 --> 19:15:48,160
in the rest of this lesson we're going
22580
19:15:44,832 --> 19:15:51,680
to learn more details about classes the
22581
19:15:48,160 --> 19:15:54,000
first detail is how to test classes so
22582
19:15:51,680 --> 19:15:55,512
testing classes is the same as writing
22583
19:15:54,000 --> 19:15:58,552
normal
22584
19:15:55,512 --> 19:16:01,680
tests so we generate an object using a
22585
19:15:58,552 --> 19:16:03,800
class and then we test if its properties
22586
19:16:01,680 --> 19:16:06,512
and methods are
22587
19:16:03,800 --> 19:16:10,000
correct I'll leave writing tests as an
22588
19:16:06,512 --> 19:16:10,000
exercise at the end of this
22589
19:16:10,040 --> 19:16:14,480
lesson the second detail we're going to
22590
19:16:12,120 --> 19:16:16,680
learn is built in
22591
19:16:14,480 --> 19:16:19,680
classes these are classes that are
22592
19:16:16,680 --> 19:16:19,680
provided by the
22593
19:16:20,192 --> 19:16:26,720
language so let's go back to our
22594
19:16:23,232 --> 19:16:29,160
code and open products. JS
22595
19:16:26,720 --> 19:16:30,640
again and we're going to practice using
22596
19:16:29,160 --> 19:16:35,480
a buil-in
22597
19:16:30,640 --> 19:16:38,552
class an example of a built-in class is
22598
19:16:35,480 --> 19:16:42,960
date this class generates an object that
22599
19:16:38,552 --> 19:16:42,960
represents the current date
22600
19:16:44,120 --> 19:16:48,440
below the classes that we created we're
22601
19:16:46,512 --> 19:16:50,360
going to create some new lines and we're
22602
19:16:48,440 --> 19:16:51,960
going to practice using the built-in
22603
19:16:50,360 --> 19:16:55,360
date
22604
19:16:51,960 --> 19:16:59,440
class first we'll generate a new date
22605
19:16:55,360 --> 19:17:04,320
object using the code new and then the
22606
19:16:59,440 --> 19:17:06,872
class capital D date and
22607
19:17:04,320 --> 19:17:10,080
brackets and now let's save this object
22608
19:17:06,872 --> 19:17:13,512
in a variable so at the front we'll use
22609
19:17:10,080 --> 19:17:16,640
const and we'll call it date and make it
22610
19:17:13,512 --> 19:17:19,920
equal to this object that we just
22611
19:17:16,640 --> 19:17:22,552
generated and below this let's
22612
19:17:19,920 --> 19:17:25,232
console.log the date to see what it
22613
19:17:22,552 --> 19:17:27,680
looks like so we'll
22614
19:17:25,232 --> 19:17:30,160
save and then open the
22615
19:17:27,680 --> 19:17:32,000
page and we'll go back to our project
22616
19:17:30,160 --> 19:17:35,160
here and we're going to check the
22617
19:17:32,000 --> 19:17:38,280
console so right click
22618
19:17:35,160 --> 19:17:40,920
inspect and the
22619
19:17:38,280 --> 19:17:43,552
console and we can see that the date
22620
19:17:40,920 --> 19:17:45,960
object represents the current date and
22621
19:17:43,552 --> 19:17:49,280
time so this is the current date and
22622
19:17:45,960 --> 19:17:49,280
time that I'm recording this
22623
19:17:49,320 --> 19:17:54,760
video so this date object has properties
22624
19:17:52,600 --> 19:17:56,192
and methods that we can use that are
22625
19:17:54,760 --> 19:18:00,320
related to the
22626
19:17:56,192 --> 19:18:03,440
date for example we'll go back to our
22627
19:18:00,320 --> 19:18:06,960
code and every date object has a method
22628
19:18:03,440 --> 19:18:09,960
called two local time string this
22629
19:18:06,960 --> 19:18:12,720
basically gives us the current
22630
19:18:09,960 --> 19:18:16,720
time so let's try it out we'll create
22631
19:18:12,720 --> 19:18:24,232
create a new line and type the code date
22632
19:18:16,720 --> 19:18:26,760
dot to local time string and brackets so
22633
19:18:24,232 --> 19:18:29,440
make sure that this is in cam case two
22634
19:18:26,760 --> 19:18:30,552
is lowercase and every other word starts
22635
19:18:29,440 --> 19:18:33,280
with an
22636
19:18:30,552 --> 19:18:35,720
uppercase and we'll console.log this to
22637
19:18:33,280 --> 19:18:40,192
see what it looks like
22638
19:18:35,720 --> 19:18:40,192
console. log and
22639
19:18:40,320 --> 19:18:46,680
brackets so let's save this file
22640
19:18:44,080 --> 19:18:50,000
and open the
22641
19:18:46,680 --> 19:18:52,320
console and that method gave us the time
22642
19:18:50,000 --> 19:18:54,872
so for you you should see your current
22643
19:18:52,320 --> 19:18:54,872
time
22644
19:18:55,720 --> 19:19:01,680
here so that's the built-in date class
22645
19:18:59,360 --> 19:19:04,080
it lets us create objects that represent
22646
19:19:01,680 --> 19:19:06,832
the current date and
22647
19:19:04,080 --> 19:19:10,040
time an interesting thing to know is
22648
19:19:06,832 --> 19:19:13,680
that we used the external Library DJs
22649
19:19:10,040 --> 19:19:15,552
earlier in the project DJs uses this
22650
19:19:13,680 --> 19:19:18,800
date class behind the
22651
19:19:15,552 --> 19:19:22,192
scenes however DJs gives us a lot of
22652
19:19:18,800 --> 19:19:26,040
extra features so we usually use DJs
22653
19:19:22,192 --> 19:19:26,040
instead of using the date class
22654
19:19:26,360 --> 19:19:31,400
directly so now let's comment out this
22655
19:19:28,680 --> 19:19:33,720
code because it was just an example so
22656
19:19:31,400 --> 19:19:38,760
at the top we'll type
22657
19:19:33,720 --> 19:19:38,760
slashstar and below it star
22658
19:19:39,440 --> 19:19:44,960
slash the last thing we're going to
22659
19:19:41,232 --> 19:19:46,800
learn is more detail dets about
22660
19:19:44,960 --> 19:19:49,760
this as a
22661
19:19:46,800 --> 19:19:53,400
reminder inside an object we can use the
22662
19:19:49,760 --> 19:19:54,720
value this and this will point to the
22663
19:19:53,400 --> 19:19:57,720
outer
22664
19:19:54,720 --> 19:20:00,832
object so this feature lets an object
22665
19:19:57,720 --> 19:20:04,400
access its own
22666
19:20:00,832 --> 19:20:07,120
properties now in JavaScript this can
22667
19:20:04,400 --> 19:20:10,280
actually be used anywhere in our
22668
19:20:07,120 --> 19:20:13,120
code for example we're going to create
22669
19:20:10,280 --> 19:20:17,552
some new lines
22670
19:20:13,120 --> 19:20:20,512
and here we can just directly
22671
19:20:17,552 --> 19:20:23,600
console.log
22672
19:20:20,512 --> 19:20:27,480
this so here we're using this but we're
22673
19:20:23,600 --> 19:20:30,600
using it outside of any object in this
22674
19:20:27,480 --> 19:20:34,720
situation there's no object for this to
22675
19:20:30,600 --> 19:20:36,512
point to so this will be undefined which
22676
19:20:34,720 --> 19:20:38,512
actually makes
22677
19:20:36,512 --> 19:20:43,080
sense if we
22678
19:20:38,512 --> 19:20:45,512
save and we check our console
22679
19:20:43,080 --> 19:20:49,040
this will equal
22680
19:20:45,512 --> 19:20:51,552
undefined now originally this actually
22681
19:20:49,040 --> 19:20:54,832
equaled the window
22682
19:20:51,552 --> 19:20:56,760
object however this Behavior caused
22683
19:20:54,832 --> 19:21:00,480
confusion so when they release
22684
19:20:56,760 --> 19:21:04,832
JavaScript modules inside a module this
22685
19:21:00,480 --> 19:21:04,832
is now undefined which makes more
22686
19:21:06,080 --> 19:21:11,600
sense let's go back to our code and
22687
19:21:09,440 --> 19:21:14,680
another place we can use this is when
22688
19:21:11,600 --> 19:21:17,192
we're creating an object so let's go
22689
19:21:14,680 --> 19:21:20,920
down here and we're going to create a
22690
19:21:17,192 --> 19:21:24,680
new object using const we'll call it
22691
19:21:20,920 --> 19:21:26,552
object two and make it equal to curly
22692
19:21:24,680 --> 19:21:29,872
brackets and we're going to give this
22693
19:21:26,552 --> 19:21:33,720
object a property let's just call it a
22694
19:21:29,872 --> 19:21:36,640
colon give it a value of two comma and
22695
19:21:33,720 --> 19:21:39,232
add another property B
22696
19:21:36,640 --> 19:21:43,600
colon and we'll set the value of this
22697
19:21:39,232 --> 19:21:46,600
property to this Dot
22698
19:21:43,600 --> 19:21:50,040
a now you might think that because we're
22699
19:21:46,600 --> 19:21:54,120
inside this object this will point to
22700
19:21:50,040 --> 19:21:57,920
object 2 however at this point in the
22701
19:21:54,120 --> 19:22:00,320
code object 2 has not been created yet
22702
19:21:57,920 --> 19:22:04,160
so this doesn't have anything to point
22703
19:22:00,320 --> 19:22:04,160
to and this will be
22704
19:22:05,360 --> 19:22:10,960
undefined if we
22705
19:22:07,600 --> 19:22:14,080
save and then open the
22706
19:22:10,960 --> 19:22:16,832
console it will give us an error because
22707
19:22:14,080 --> 19:22:16,832
this is
22708
19:22:17,192 --> 19:22:23,680
undefined let's go back to our
22709
19:22:19,640 --> 19:22:26,080
code so so far if we're inside a method
22710
19:22:23,680 --> 19:22:29,040
we can use this and it will point to the
22711
19:22:26,080 --> 19:22:31,760
object if we're outside of a method
22712
19:22:29,040 --> 19:22:32,920
there's no object to point to and this
22713
19:22:31,760 --> 19:22:37,000
will be
22714
19:22:32,920 --> 19:22:41,280
undefined and everything makes sense so
22715
19:22:37,000 --> 19:22:46,320
far so let's comment this out using SL
22716
19:22:41,280 --> 19:22:46,320
star and and at the bottom start
22717
19:22:46,960 --> 19:22:54,080
slash now the last important place we
22718
19:22:49,680 --> 19:22:54,080
can use this is inside a
22719
19:22:54,552 --> 19:23:00,160
function so at the bottom here we're
22720
19:22:57,440 --> 19:23:00,160
going to create a
22721
19:23:00,192 --> 19:23:06,440
function and let's call it log this
22722
19:23:04,552 --> 19:23:09,512
brackets and curly
22723
19:23:06,440 --> 19:23:14,360
brackets and inside we're just going to
22724
19:23:09,512 --> 19:23:14,360
console. log this
22725
19:23:14,760 --> 19:23:21,920
so again we're not inside of any object
22726
19:23:18,480 --> 19:23:24,640
so there's nothing for this to point2
22727
19:23:21,920 --> 19:23:27,760
and in this situation this will be
22728
19:23:24,640 --> 19:23:27,760
undefined as
22729
19:23:28,000 --> 19:23:36,080
well below this if we run the function
22730
19:23:31,600 --> 19:23:38,440
log this and brackets and
22731
19:23:36,080 --> 19:23:41,280
save and check the
22732
19:23:38,440 --> 19:23:43,920
console it will tell us that this is
22733
19:23:41,280 --> 19:23:45,512
undefined when it's just inside a
22734
19:23:43,920 --> 19:23:48,800
regular
22735
19:23:45,512 --> 19:23:49,832
function next this actually has a
22736
19:23:48,800 --> 19:23:52,760
special
22737
19:23:49,832 --> 19:23:56,440
feature so inside a function we can
22738
19:23:52,760 --> 19:24:01,400
change this to whatever we want to do
22739
19:23:56,440 --> 19:24:04,960
that functions have a method called
22740
19:24:01,400 --> 19:24:09,600
call So Below this line let's type the
22741
19:24:04,960 --> 19:24:13,800
function name log this and use a method
22742
19:24:09,600 --> 19:24:17,160
do call and brackets
22743
19:24:13,800 --> 19:24:20,080
so call runs this function so it does
22744
19:24:17,160 --> 19:24:22,440
the same thing as the line above except
22745
19:24:20,080 --> 19:24:25,760
we can set the value of this to be
22746
19:24:22,440 --> 19:24:28,000
whatever we want so the first value that
22747
19:24:25,760 --> 19:24:31,440
we give to do call is going to be the
22748
19:24:28,000 --> 19:24:34,232
value of this for example we can give it
22749
19:24:31,440 --> 19:24:37,480
the string
22750
19:24:34,232 --> 19:24:40,872
hello and now this will run the function
22751
19:24:37,480 --> 19:24:42,960
and this will be equal to hello if we
22752
19:24:40,872 --> 19:24:44,360
save
22753
19:24:42,960 --> 19:24:47,320
and open the
22754
19:24:44,360 --> 19:24:50,232
console you can see that we set this to
22755
19:24:47,320 --> 19:24:53,360
be equal to
22756
19:24:50,232 --> 19:24:57,080
hello so that's a special feature of
22757
19:24:53,360 --> 19:25:00,512
this inside just a function we can
22758
19:24:57,080 --> 19:25:03,872
change this to whatever we want using a
22759
19:25:00,512 --> 19:25:07,512
method like
22760
19:25:03,872 --> 19:25:10,120
call so call is the same as calling or
22761
19:25:07,512 --> 19:25:13,192
running the function except we add an
22762
19:25:10,120 --> 19:25:16,960
extra parameter in front this first
22763
19:25:13,192 --> 19:25:16,960
parameter is the value of
22764
19:25:18,400 --> 19:25:23,800
this the last important thing to know
22765
19:25:21,040 --> 19:25:26,400
about this is that Arrow functions do
22766
19:25:23,800 --> 19:25:30,192
not change the value of
22767
19:25:26,400 --> 19:25:32,800
this for example below this let's create
22768
19:25:30,192 --> 19:25:36,040
a method by using an arrow function this
22769
19:25:32,800 --> 19:25:38,360
time so we'll create some new lines and
22770
19:25:36,040 --> 19:25:39,552
first we're going to create an object
22771
19:25:38,360 --> 19:25:44,360
using
22772
19:25:39,552 --> 19:25:45,760
const we'll call it object three equals
22773
19:25:44,360 --> 19:25:49,280
curly
22774
19:25:45,760 --> 19:25:52,160
brackets and inside will give it a
22775
19:25:49,280 --> 19:25:54,040
method and colon and we're going to
22776
19:25:52,160 --> 19:25:57,832
create this method using an arrow
22777
19:25:54,040 --> 19:26:01,800
function this time brackets arrow and
22778
19:25:57,832 --> 19:26:06,120
curly brackets and inside we'll just
22779
19:26:01,800 --> 19:26:10,320
console. log
22780
19:26:06,120 --> 19:26:12,832
this so usually this will point to the
22781
19:26:10,320 --> 19:26:15,280
object itself
22782
19:26:12,832 --> 19:26:17,600
however Arrow functions do not change
22783
19:26:15,280 --> 19:26:22,040
the value of
22784
19:26:17,600 --> 19:26:24,480
this here this will have the same value
22785
19:26:22,040 --> 19:26:27,080
as outside the arrow
22786
19:26:24,480 --> 19:26:28,872
function outside the arrow function
22787
19:26:27,080 --> 19:26:33,680
let's type
22788
19:26:28,872 --> 19:26:35,760
this here this has no object to point to
22789
19:26:33,680 --> 19:26:38,360
so this will be
22790
19:26:35,760 --> 19:26:42,232
undefined and then inside the arrow
22791
19:26:38,360 --> 19:26:45,160
function it will also be undefined
22792
19:26:42,232 --> 19:26:48,920
basically this keeps the value that it
22793
19:26:45,160 --> 19:26:48,920
had outside the arrow
22794
19:26:50,552 --> 19:26:58,600
function as a test below this we'll run
22795
19:26:54,640 --> 19:27:00,680
object 3. method and
22796
19:26:58,600 --> 19:27:04,280
brackets if we
22797
19:27:00,680 --> 19:27:04,280
save and check the
22798
19:27:06,160 --> 19:27:13,080
console it will show us that inside here
22799
19:27:09,832 --> 19:27:15,872
this is also undefined
22800
19:27:13,080 --> 19:27:20,360
so in an arrow function this will be
22801
19:27:15,872 --> 19:27:20,360
whatever the value is outside the arrow
22802
19:27:20,720 --> 19:27:27,080
function now you might be wondering why
22803
19:27:23,400 --> 19:27:29,920
are Arrow functions designed this
22804
19:27:27,080 --> 19:27:33,720
way so JavaScript had a common problem
22805
19:27:29,920 --> 19:27:36,680
in the past when we are inside a method
22806
19:27:33,720 --> 19:27:40,280
this points to the object but if we try
22807
19:27:36,680 --> 19:27:42,800
to do a for each Loop inside the for
22808
19:27:40,280 --> 19:27:46,512
each Loop this does not point to the
22809
19:27:42,800 --> 19:27:48,320
object anymore it points to undefined
22810
19:27:46,512 --> 19:27:51,920
and that's because we created a whole
22811
19:27:48,320 --> 19:27:55,720
new function here and remember inside a
22812
19:27:51,920 --> 19:27:58,080
regular function this becomes
22813
19:27:55,720 --> 19:28:00,192
undefined so this caused problems
22814
19:27:58,080 --> 19:28:02,760
because we no longer had access to the
22815
19:28:00,192 --> 19:28:05,400
outer object up
22816
19:28:02,760 --> 19:28:07,512
here so that's why we created Arrow
22817
19:28:05,400 --> 19:28:10,400
functions if we replace this with an
22818
19:28:07,512 --> 19:28:12,440
arrow function this would be equal to
22819
19:28:10,400 --> 19:28:15,360
whatever it is outside the Arrow
22820
19:28:12,440 --> 19:28:17,120
function Arrow functions do not change
22821
19:28:15,360 --> 19:28:20,640
the value of
22822
19:28:17,120 --> 19:28:24,640
this so outside for each this points to
22823
19:28:20,640 --> 19:28:26,280
the object and inside for each this also
22824
19:28:24,640 --> 19:28:29,000
points to the
22825
19:28:26,280 --> 19:28:32,120
object so that's why Arrow functions are
22826
19:28:29,000 --> 19:28:34,800
designed this way to avoid accidentally
22827
19:28:32,120 --> 19:28:37,760
overwriting
22828
19:28:34,800 --> 19:28:41,832
this so let's summarize what we learned
22829
19:28:37,760 --> 19:28:45,960
about this inside a method this points
22830
19:28:41,832 --> 19:28:48,720
to to the outer object inside a function
22831
19:28:45,960 --> 19:28:51,800
this is undefined but we can change it
22832
19:28:48,720 --> 19:28:54,832
to whatever we want using something like
22833
19:28:51,800 --> 19:28:57,080
call and arrow functions do not change
22834
19:28:54,832 --> 19:28:59,800
the value of
22835
19:28:57,080 --> 19:29:02,192
this don't worry if these rules are a
22836
19:28:59,800 --> 19:29:03,480
bit confusing at first they are actually
22837
19:29:02,192 --> 19:29:05,680
sort of
22838
19:29:03,480 --> 19:29:08,640
reasonable if there's an object to point
22839
19:29:05,680 --> 19:29:10,872
to this will point to that object if
22840
19:29:08,640 --> 19:29:14,720
there's no object to point to this will
22841
19:29:10,872 --> 19:29:16,600
be undefined and we have tools like call
22842
19:29:14,720 --> 19:29:19,000
and arrow functions to kind of
22843
19:29:16,600 --> 19:29:21,760
manipulate the value of this to be what
22844
19:29:19,000 --> 19:29:25,280
we want the more that you work with it
22845
19:29:21,760 --> 19:29:25,280
the more you just get used to
22846
19:29:27,080 --> 19:29:33,192
it so now let's comment out this
22847
19:29:29,600 --> 19:29:37,960
practice code at the top we'll type
22848
19:29:33,192 --> 19:29:39,680
slashstar and at the bottom star slash
22849
19:29:37,960 --> 19:29:42,872
and
22850
19:29:39,680 --> 19:29:44,552
save and we'll save to get
22851
19:29:42,872 --> 19:29:48,000
we'll open the git
22852
19:29:44,552 --> 19:29:50,552
section inside products. JS we added
22853
19:29:48,000 --> 19:29:53,480
some practice code to learn more details
22854
19:29:50,552 --> 19:29:57,040
about classes and
22855
19:29:53,480 --> 19:30:03,600
this let's type a message describing our
22856
19:29:57,040 --> 19:30:09,120
changes learn more details about classes
22857
19:30:03,600 --> 19:30:09,120
and this and commit
22858
19:30:13,360 --> 19:30:18,400
now that we learned object-oriented
22859
19:30:15,160 --> 19:30:21,232
programming you might notice that it's a
22860
19:30:18,400 --> 19:30:23,920
very different style of programming than
22861
19:30:21,232 --> 19:30:26,552
just writing out a bunch of functions
22862
19:30:23,920 --> 19:30:29,040
directly so you might be wondering which
22863
19:30:26,552 --> 19:30:31,872
style of programming should we use
22864
19:30:29,040 --> 19:30:34,080
objectoriented programming or procedural
22865
19:30:31,872 --> 19:30:37,512
programming which is the step-by-step
22866
19:30:34,080 --> 19:30:41,192
style that we used in the earlier
22867
19:30:37,512 --> 19:30:43,440
lessons the answer is it's up to you I
22868
19:30:41,192 --> 19:30:45,872
personally prefer procedural programming
22869
19:30:43,440 --> 19:30:48,480
in JavaScript because I think it's
22870
19:30:45,872 --> 19:30:50,832
simpler I only use objectoriented
22871
19:30:48,480 --> 19:30:54,552
programming if I'm working on a team
22872
19:30:50,832 --> 19:30:56,552
that also uses it also object-oriented
22873
19:30:54,552 --> 19:30:59,600
programming is much more popular in
22874
19:30:56,552 --> 19:31:02,232
other languages so it's still useful to
22875
19:30:59,600 --> 19:31:03,800
know object-oriented programming in case
22876
19:31:02,232 --> 19:31:06,720
you work with other programming
22877
19:31:03,800 --> 19:31:06,720
languages in the
22878
19:31:06,960 --> 19:31:12,120
future and that's the end of this lesson
22879
19:31:10,192 --> 19:31:14,600
in this lesson we learned about
22880
19:31:12,120 --> 19:31:18,160
objectoriented programming which means
22881
19:31:14,600 --> 19:31:20,040
we organize our code into objects we
22882
19:31:18,160 --> 19:31:22,920
learned how to use a function to
22883
19:31:20,040 --> 19:31:26,360
generate objects and we improve that by
22884
19:31:22,920 --> 19:31:28,552
using a class to generate objects we
22885
19:31:26,360 --> 19:31:31,360
learned that classes can have private
22886
19:31:28,552 --> 19:31:34,192
properties and methods we learned about
22887
19:31:31,360 --> 19:31:37,160
inheritance which lets us reuse code
22888
19:31:34,192 --> 19:31:40,360
between classes and we learned about
22889
19:31:37,160 --> 19:31:42,440
method overwriting and polymorphism
22890
19:31:40,360 --> 19:31:45,320
which lets us call a method without
22891
19:31:42,440 --> 19:31:47,832
needing to know what the class is and
22892
19:31:45,320 --> 19:31:52,680
lastly we learned more details about
22893
19:31:47,832 --> 19:31:52,680
this and how to control the value of
22894
19:31:54,360 --> 19:31:59,400
this thanks for watching this course so
22895
19:31:56,920 --> 19:32:01,400
far if you want to support this channel
22896
19:31:59,400 --> 19:32:03,680
you can check out the premium version of
22897
19:32:01,400 --> 19:32:06,120
my courses just like this one where you
22898
19:32:03,680 --> 19:32:08,552
can get a certificate of completion and
22899
19:32:06,120 --> 19:32:11,280
a Better Learning platform if you're
22900
19:32:08,552 --> 19:32:13,832
interested in extra videos from me more
22901
19:32:11,280 --> 19:32:16,552
in-depth videos and behind the scenes
22902
19:32:13,832 --> 19:32:19,280
content you can check out these links
22903
19:32:16,552 --> 19:32:22,120
here you can also support the channel by
22904
19:32:19,280 --> 19:32:24,920
liking the video subscribing and sharing
22905
19:32:22,120 --> 19:32:27,600
this video with others thanks again and
22906
19:32:24,920 --> 19:32:30,280
let's continue with the
22907
19:32:27,600 --> 19:32:32,400
course here are some exercises to help
22908
19:32:30,280 --> 19:32:35,400
you practice what we learned in this
22909
19:32:32,400 --> 19:32:35,400
lesson
22910
19:33:03,000 --> 19:33:07,480
in this lesson we're going to learn
22911
19:33:04,680 --> 19:33:10,160
about backend and this will prepare you
22912
19:33:07,480 --> 19:33:12,320
for the next step after finishing this
22913
19:33:10,160 --> 19:33:15,872
course first of all
22914
19:33:12,320 --> 19:33:18,400
what is backend a backend is just
22915
19:33:15,872 --> 19:33:19,872
another computer that manages the data
22916
19:33:18,400 --> 19:33:22,680
of a
22917
19:33:19,872 --> 19:33:25,280
website for example in our Amazon
22918
19:33:22,680 --> 19:33:28,192
Project we created this website where we
22919
19:33:25,280 --> 19:33:31,080
can pick which products we want but how
22920
19:33:28,192 --> 19:33:32,800
does Amazon the company know which
22921
19:33:31,080 --> 19:33:35,800
products that we
22922
19:33:32,800 --> 19:33:37,920
ordered in this situation there has to
22923
19:33:35,800 --> 19:33:39,320
be a second computer somewhere that's
22924
19:33:37,920 --> 19:33:42,480
owned by
22925
19:33:39,320 --> 19:33:44,960
Amazon and then our computer sends the
22926
19:33:42,480 --> 19:33:47,760
order information to this second
22927
19:33:44,960 --> 19:33:48,960
computer and now Amazon will know what
22928
19:33:47,760 --> 19:33:52,040
we
22929
19:33:48,960 --> 19:33:55,232
ordered so this second computer is
22930
19:33:52,040 --> 19:33:59,080
called the backend computer or just the
22931
19:33:55,232 --> 19:34:02,440
backend it manages the data of a
22932
19:33:59,080 --> 19:34:04,960
website on the other hand our computer
22933
19:34:02,440 --> 19:34:07,160
or the web page where we can see and
22934
19:34:04,960 --> 19:34:11,192
interact with the products this is
22935
19:34:07,160 --> 19:34:11,192
called the front end
22936
19:34:12,280 --> 19:34:18,360
now that we know what a backend is how
22937
19:34:14,960 --> 19:34:22,000
does our computer or the front end send
22938
19:34:18,360 --> 19:34:24,872
information to the back end when two
22939
19:34:22,000 --> 19:34:27,832
computers are connected to the internet
22940
19:34:24,872 --> 19:34:31,080
they can actually send messages to each
22941
19:34:27,832 --> 19:34:34,800
other using a feature called
22942
19:34:31,080 --> 19:34:38,160
HTTP or hypertext transfer
22943
19:34:34,800 --> 19:34:40,680
protocol in an HTTP message we can
22944
19:34:38,160 --> 19:34:42,640
actually attach information like our
22945
19:34:40,680 --> 19:34:45,720
Amazon order
22946
19:34:42,640 --> 19:34:50,512
when Amazon's backend receives this HTTP
22947
19:34:45,720 --> 19:34:54,480
message now Amazon will know what we
22948
19:34:50,512 --> 19:34:58,800
ordered now that we know what HTTP is
22949
19:34:54,480 --> 19:35:02,040
let's send our first HTTP message using
22950
19:34:58,800 --> 19:35:03,872
JavaScript so we'll go to our code and
22951
19:35:02,040 --> 19:35:06,760
on the left we're going to create a new
22952
19:35:03,872 --> 19:35:09,720
file just for practicing backend so
22953
19:35:06,760 --> 19:35:12,040
we'll scroll up to the data folder and
22954
19:35:09,720 --> 19:35:13,512
we'll click inside this folder and then
22955
19:35:12,040 --> 19:35:17,832
create a new
22956
19:35:13,512 --> 19:35:19,720
file and let's name this file backend
22957
19:35:17,832 --> 19:35:24,440
Das
22958
19:35:19,720 --> 19:35:24,440
practice. JS and press
22959
19:35:24,640 --> 19:35:32,120
enter and now to send an HTTP message
22960
19:35:28,680 --> 19:35:36,680
we're going to use a class called XML
22961
19:35:32,120 --> 19:35:39,480
HTTP request so this is a built in class
22962
19:35:36,680 --> 19:35:42,600
meaning it's provided by
22963
19:35:39,480 --> 19:35:46,320
JavaScript first we gener at an object
22964
19:35:42,600 --> 19:35:49,440
using this class using the code
22965
19:35:46,320 --> 19:35:53,960
new and the class name
22966
19:35:49,440 --> 19:36:00,080
XML all capital capital
22967
19:35:53,960 --> 19:36:00,080
HTTP capital r request and
22968
19:36:00,280 --> 19:36:05,800
brackets so this creates a new HTTP
22969
19:36:03,512 --> 19:36:10,512
message that we want to send to the
22970
19:36:05,800 --> 19:36:13,640
backend a message is also known as a
22971
19:36:10,512 --> 19:36:16,640
request so now let's save this request
22972
19:36:13,640 --> 19:36:20,120
in a variable at the front we'll create
22973
19:36:16,640 --> 19:36:24,440
a variable with const and name it
22974
19:36:20,120 --> 19:36:27,800
xhr equals this
22975
19:36:24,440 --> 19:36:31,360
request next we need to set up this
22976
19:36:27,800 --> 19:36:35,280
request so we'll create a new line and
22977
19:36:31,360 --> 19:36:38,640
to set it up we'll do xhr
22978
19:36:35,280 --> 19:36:38,640
doop and
22979
19:36:38,800 --> 19:36:45,080
brackets and to set up this request
22980
19:36:42,040 --> 19:36:48,040
we're going to give open two
22981
19:36:45,080 --> 19:36:50,920
parameters the first parameter is what
22982
19:36:48,040 --> 19:36:54,360
type of HTTP message to
22983
19:36:50,920 --> 19:36:56,832
send so one type of message we can send
22984
19:36:54,360 --> 19:36:59,960
is the string
22985
19:36:56,832 --> 19:37:01,960
get get means we want to get some
22986
19:36:59,960 --> 19:37:04,680
information from the back
22987
19:37:01,960 --> 19:37:07,040
end there are several common types of
22988
19:37:04,680 --> 19:37:11,680
requests that we can give to the backend
22989
19:37:07,040 --> 19:37:11,680
but we're going to start by learning get
22990
19:37:12,360 --> 19:37:18,832
next we're going to give open a second
22991
19:37:16,120 --> 19:37:23,280
parameter and this parameter tells a
22992
19:37:18,832 --> 19:37:27,000
computer where to send this HTTP message
22993
19:37:23,280 --> 19:37:29,600
so using HTTP we can send a message to
22994
19:37:27,000 --> 19:37:32,440
any computer that's connected to the
22995
19:37:29,600 --> 19:37:35,680
internet now to locate another computer
22996
19:37:32,440 --> 19:37:39,720
on the internet we need to use a
22997
19:37:35,680 --> 19:37:42,832
url url stands for uniform resource
22998
19:37:39,720 --> 19:37:46,192
locator and it's kind of like an address
22999
19:37:42,832 --> 19:37:49,960
but for the internet a URL helps us
23000
19:37:46,192 --> 19:37:54,160
locate another computer on the
23001
19:37:49,960 --> 19:37:57,400
internet so URLs look like this this is
23002
19:37:54,160 --> 19:38:01,232
the URL for Amazon YouTube and my
23003
19:37:57,400 --> 19:38:04,920
website the https in front means we're
23004
19:38:01,232 --> 19:38:08,512
using HTTP to communicate with this
23005
19:38:04,920 --> 19:38:13,192
computer the S after the http means
23006
19:38:08,512 --> 19:38:15,640
we're using a secure version of http
23007
19:38:13,192 --> 19:38:18,920
the second part of a URL is called a
23008
19:38:15,640 --> 19:38:21,552
domain name this is like an address it
23009
19:38:18,920 --> 19:38:25,280
points to another computer on the
23010
19:38:21,552 --> 19:38:28,552
internet so amazon.com points to one of
23011
19:38:25,280 --> 19:38:31,040
Amazon's backend computers youtube.com
23012
19:38:28,552 --> 19:38:34,480
points to one of YouTube's backend
23013
19:38:31,040 --> 19:38:37,080
computers and superimple dodev points to
23014
19:38:34,480 --> 19:38:39,192
one of my backend
23015
19:38:37,080 --> 19:38:41,400
computers if you want to learn more
23016
19:38:39,192 --> 19:38:43,720
about domain names and how the internet
23017
19:38:41,400 --> 19:38:47,080
works you can check out my video on how
23018
19:38:43,720 --> 19:38:50,040
to put a website on the
23019
19:38:47,080 --> 19:38:52,480
internet now for this lesson I actually
23020
19:38:50,040 --> 19:38:56,192
set up a backend computer that we can
23021
19:38:52,480 --> 19:38:58,120
practice with so my backend is located
23022
19:38:56,192 --> 19:39:02,280
at the URL
23023
19:38:58,120 --> 19:39:06,000
https super simple backend
23024
19:39:02,280 --> 19:39:07,720
dodev so in the second parameter of open
23025
19:39:06,000 --> 19:39:09,872
we're going to give it a
23026
19:39:07,720 --> 19:39:12,400
string and we're going to give it the
23027
19:39:09,872 --> 19:39:13,800
URL of the back end end that we want to
23028
19:39:12,400 --> 19:39:18,400
send the message
23029
19:39:13,800 --> 19:39:25,960
to so the URL for my backend is
23030
19:39:18,400 --> 19:39:28,600
https colon SL SL super simple
23031
19:39:25,960 --> 19:39:31,640
backend.
23032
19:39:28,600 --> 19:39:34,280
death so that's how we set up an HTTP
23033
19:39:31,640 --> 19:39:37,552
message we give it the type of message
23034
19:39:34,280 --> 19:39:42,232
we want to send and also the URL which
23035
19:39:37,552 --> 19:39:42,232
is where to send this message to
23036
19:39:42,360 --> 19:39:48,040
the last step is to just send this
23037
19:39:44,720 --> 19:39:51,232
message so we'll create a new line and
23038
19:39:48,040 --> 19:39:56,120
we'll type xhr
23039
19:39:51,232 --> 19:39:56,120
doent brackets and
23040
19:39:56,680 --> 19:40:03,872
save so this creates a new HTTP message
23041
19:40:00,760 --> 19:40:06,360
sets it up and then sends this message
23042
19:40:03,872 --> 19:40:09,832
across the internet to my backend
23043
19:40:06,360 --> 19:40:13,160
computer located at superimple backend.
23044
19:40:09,832 --> 19:40:15,760
deev so now let's actually run this code
23045
19:40:13,160 --> 19:40:18,440
and see the results we're going to go to
23046
19:40:15,760 --> 19:40:20,232
the left and we're going to open
23047
19:40:18,440 --> 19:40:23,800
checkout.
23048
19:40:20,232 --> 19:40:25,960
JS and in here just like we did before
23049
19:40:23,800 --> 19:40:28,320
we're going to load that practice file
23050
19:40:25,960 --> 19:40:32,280
that we just created so we'll create a
23051
19:40:28,320 --> 19:40:35,600
new line and we're going to import a
23052
19:40:32,280 --> 19:40:37,480
file or a string and we'll locate that
23053
19:40:35,600 --> 19:40:39,960
practice
23054
19:40:37,480 --> 19:40:45,232
file so first we need to go to the data
23055
19:40:39,960 --> 19:40:47,192
folder using using do dot SL dat slash
23056
19:40:45,232 --> 19:40:49,832
and load
23057
19:40:47,192 --> 19:40:54,720
backend D
23058
19:40:49,832 --> 19:40:54,720
practice. JS and
23059
19:40:55,280 --> 19:41:01,360
save so we'll go back to the practice
23060
19:40:58,440 --> 19:41:04,720
file and now when we open the website it
23061
19:41:01,360 --> 19:41:07,440
will run this code and send the HTTP
23062
19:41:04,720 --> 19:41:10,680
message to see that let's open the
23063
19:41:07,440 --> 19:41:12,600
website so we'll scroll down and if you
23064
19:41:10,680 --> 19:41:15,120
don't have the website open you can open
23065
19:41:12,600 --> 19:41:18,080
it again by right clicking checkout.
23066
19:41:15,120 --> 19:41:21,120
HTML and then open with live
23067
19:41:18,080 --> 19:41:22,920
server I already have the website open
23068
19:41:21,120 --> 19:41:25,120
so I'm going to open
23069
19:41:22,920 --> 19:41:26,920
it and then I'm going to go to the
23070
19:41:25,120 --> 19:41:29,120
checkout
23071
19:41:26,920 --> 19:41:32,040
page and now we're going to look at the
23072
19:41:29,120 --> 19:41:35,320
console so we'll right
23073
19:41:32,040 --> 19:41:37,832
click and
23074
19:41:35,320 --> 19:41:40,360
inspect and this time instead of going
23075
19:41:37,832 --> 19:41:42,480
to the console tab we're going to go to
23076
19:41:40,360 --> 19:41:44,832
a new tab
23077
19:41:42,480 --> 19:41:47,680
called the network
23078
19:41:44,832 --> 19:41:50,480
tab if you don't see this tab you can
23079
19:41:47,680 --> 19:41:52,320
make this window wider or you might find
23080
19:41:50,480 --> 19:41:56,640
it under these
23081
19:41:52,320 --> 19:41:56,640
arrows so we'll open the network
23082
19:41:59,920 --> 19:42:06,680
Tab and in here this will show us all
23083
19:42:03,600 --> 19:42:08,720
the HTTP messages that are coming in and
23084
19:42:06,680 --> 19:42:11,000
out of our
23085
19:42:08,720 --> 19:42:13,480
computer now before we start looking at
23086
19:42:11,000 --> 19:42:15,080
the the HTTP messages there's one
23087
19:42:13,480 --> 19:42:18,440
important thing to know about the
23088
19:42:15,080 --> 19:42:22,080
network Tab and that is messages will
23089
19:42:18,440 --> 19:42:25,160
only appear here after we open the
23090
19:42:22,080 --> 19:42:27,320
console if we send some messages and
23091
19:42:25,160 --> 19:42:28,920
then we open the console it's not going
23092
19:42:27,320 --> 19:42:32,720
to show up
23093
19:42:28,920 --> 19:42:35,512
here so to make sure our HTTP messages
23094
19:42:32,720 --> 19:42:38,080
are recorded here we need to open the
23095
19:42:35,512 --> 19:42:42,920
network tab first and then we're going
23096
19:42:38,080 --> 19:42:45,760
to refresh the page to resend those
23097
19:42:42,920 --> 19:42:48,872
messages and now if we open the network
23098
19:42:45,760 --> 19:42:52,040
tab we should be able to see the HTTP
23099
19:42:48,872 --> 19:42:52,040
messages at the
23100
19:42:52,480 --> 19:42:58,192
bottom okay so inside this list we
23101
19:42:56,192 --> 19:43:02,400
should be able to see that we sent a
23102
19:42:58,192 --> 19:43:04,832
message to superimple backend. deev if
23103
19:43:02,400 --> 19:43:08,872
you don't see it we can also search this
23104
19:43:04,832 --> 19:43:12,080
list by using the text box up
23105
19:43:08,872 --> 19:43:15,080
here so in here we can type part of the
23106
19:43:12,080 --> 19:43:18,640
URL that we sent the message to for
23107
19:43:15,080 --> 19:43:21,192
example super
23108
19:43:18,640 --> 19:43:24,440
simple and the message that we sent
23109
19:43:21,192 --> 19:43:28,000
should appear here so now we can click
23110
19:43:24,440 --> 19:43:31,120
this message to get more details about
23111
19:43:28,000 --> 19:43:34,640
it on the right side we have several
23112
19:43:31,120 --> 19:43:38,600
tabs here the headers tab gives us
23113
19:43:34,640 --> 19:43:41,360
details about our message or about our
23114
19:43:38,600 --> 19:43:44,440
request so it tells us which type of
23115
19:43:41,360 --> 19:43:47,512
requests that we sent which is get and
23116
19:43:44,440 --> 19:43:49,960
the URL that we sent it to which is
23117
19:43:47,512 --> 19:43:53,320
super simple backend.
23118
19:43:49,960 --> 19:43:55,320
Dev this sends the request across the
23119
19:43:53,320 --> 19:43:58,232
internet to my
23120
19:43:55,320 --> 19:44:01,360
backend and then when my backend
23121
19:43:58,232 --> 19:44:04,320
receives this message or this request it
23122
19:44:01,360 --> 19:44:06,192
will send back a message which is called
23123
19:44:04,320 --> 19:44:09,040
a
23124
19:44:06,192 --> 19:44:12,872
response to see the response from my
23125
19:44:09,040 --> 19:44:15,600
backend we can open the the response
23126
19:44:12,872 --> 19:44:18,320
Tab and you can see that my backend
23127
19:44:15,600 --> 19:44:20,720
responded with hello this is super
23128
19:44:18,320 --> 19:44:23,080
simple dev's back end and a
23129
19:44:20,720 --> 19:44:26,760
documentation page that we can check
23130
19:44:23,080 --> 19:44:30,552
out so we have successfully sent an HTTP
23131
19:44:26,760 --> 19:44:33,080
message or a request to my backend and
23132
19:44:30,552 --> 19:44:36,080
we got back a
23133
19:44:33,080 --> 19:44:38,760
response another useful tab here is the
23134
19:44:36,080 --> 19:44:41,400
preview tab it basically takes a
23135
19:44:38,760 --> 19:44:43,440
response and displays it in an easy to
23136
19:44:41,400 --> 19:44:46,680
read
23137
19:44:43,440 --> 19:44:49,192
format so now let's learn some
23138
19:44:46,680 --> 19:44:52,192
terminology when we send a message to
23139
19:44:49,192 --> 19:44:54,920
the backend this message is called a
23140
19:44:52,192 --> 19:44:55,640
request we are requesting something from
23141
19:44:54,920 --> 19:44:58,400
the
23142
19:44:55,640 --> 19:45:01,800
backend when the backend receives our
23143
19:44:58,400 --> 19:45:04,872
request it will send an HTTP message
23144
19:45:01,800 --> 19:45:06,080
back to us and this message is called
23145
19:45:04,872 --> 19:45:09,040
the
23146
19:45:06,080 --> 19:45:12,000
response so each request that we make
23147
19:45:09,040 --> 19:45:15,120
will get one response from the back
23148
19:45:12,000 --> 19:45:18,512
end and this is called a request
23149
19:45:15,120 --> 19:45:20,872
response cycle it's always one request
23150
19:45:18,512 --> 19:45:20,872
one
23151
19:45:22,600 --> 19:45:28,800
response next currently we're viewing
23152
19:45:25,760 --> 19:45:31,512
the response in the network tab but we
23153
19:45:28,800 --> 19:45:34,192
can actually get this response in our
23154
19:45:31,512 --> 19:45:37,872
code and then do something with this
23155
19:45:34,192 --> 19:45:40,960
response so let's go back to our
23156
19:45:37,872 --> 19:45:43,600
code and here after we send the requ
23157
19:45:40,960 --> 19:45:48,960
Quest we can get the response using a
23158
19:45:43,600 --> 19:45:48,960
property called xhr do
23159
19:45:49,000 --> 19:45:54,800
response however there's a slight
23160
19:45:51,600 --> 19:45:57,800
problem with doing this when we send a
23161
19:45:54,800 --> 19:46:00,000
request to the backend it takes time for
23162
19:45:57,800 --> 19:46:02,760
the request to travel across the
23163
19:46:00,000 --> 19:46:04,440
internet to the back end and for the
23164
19:46:02,760 --> 19:46:07,680
response to come
23165
19:46:04,440 --> 19:46:11,320
back so the response is not available
23166
19:46:07,680 --> 19:46:15,832
right away and xr. response will be
23167
19:46:11,320 --> 19:46:19,280
undefined at first so xr. send is known
23168
19:46:15,832 --> 19:46:21,920
as asynchronous code asynchronous code
23169
19:46:19,280 --> 19:46:25,192
means it does not wait for this line of
23170
19:46:21,920 --> 19:46:27,552
code to finish it just sends the request
23171
19:46:25,192 --> 19:46:30,320
and then immediately goes to the next
23172
19:46:27,552 --> 19:46:32,512
line the response might come back later
23173
19:46:30,320 --> 19:46:34,600
in the future but we don't have access
23174
19:46:32,512 --> 19:46:38,552
to it
23175
19:46:34,600 --> 19:46:41,600
here so in this situation in order to
23176
19:46:38,552 --> 19:46:44,360
get this response we need to wait for
23177
19:46:41,600 --> 19:46:46,400
the response to come back first and then
23178
19:46:44,360 --> 19:46:49,040
we can access do
23179
19:46:46,400 --> 19:46:52,600
response in order to wait for the
23180
19:46:49,040 --> 19:46:53,872
response to come back at the top after
23181
19:46:52,600 --> 19:46:58,040
we create the
23182
19:46:53,872 --> 19:47:04,800
xhr we're going to use this code
23183
19:46:58,040 --> 19:47:07,800
xhr do add capital E Event capital L
23184
19:47:04,800 --> 19:47:11,640
listener and
23185
19:47:07,800 --> 19:47:15,192
brackets so this method listens or waits
23186
19:47:11,640 --> 19:47:17,872
for an event and then it can run a
23187
19:47:15,192 --> 19:47:20,400
function so this method takes two
23188
19:47:17,872 --> 19:47:23,000
parameters the first parameter is the
23189
19:47:20,400 --> 19:47:26,280
event that we want to listen for or to
23190
19:47:23,000 --> 19:47:28,800
wait for in this case we want to wait
23191
19:47:26,280 --> 19:47:32,600
for the response to come back so we're
23192
19:47:28,800 --> 19:47:36,192
going to give it the string load load
23193
19:47:32,600 --> 19:47:36,192
means the response has
23194
19:47:36,440 --> 19:47:41,232
loaded the second parameter is a
23195
19:47:39,120 --> 19:47:43,360
function that we want to run
23196
19:47:41,232 --> 19:47:45,760
after this event
23197
19:47:43,360 --> 19:47:48,552
happens so in this case after the
23198
19:47:45,760 --> 19:47:54,000
response has loaded we're going to run a
23199
19:47:48,552 --> 19:47:54,000
function brackets arrow and curly
23200
19:47:54,040 --> 19:48:00,192
brackets so because this function runs
23201
19:47:56,960 --> 19:48:04,400
after the response loaded inside here we
23202
19:48:00,192 --> 19:48:07,512
can access xhr do
23203
19:48:04,400 --> 19:48:09,512
response and this will not be undefined
23204
19:48:07,512 --> 19:48:11,280
it will contain the response that we saw
23205
19:48:09,512 --> 19:48:14,160
earlier in the network
23206
19:48:11,280 --> 19:48:17,080
tab so let's console.log this to see
23207
19:48:14,160 --> 19:48:19,640
what it looks like
23208
19:48:17,080 --> 19:48:22,232
console.log and
23209
19:48:19,640 --> 19:48:23,400
brackets and we'll remove this line at
23210
19:48:22,232 --> 19:48:26,600
the
23211
19:48:23,400 --> 19:48:29,480
end and
23212
19:48:26,600 --> 19:48:32,640
save so now let's go back and check the
23213
19:48:29,480 --> 19:48:33,800
console for the response so we'll open
23214
19:48:32,640 --> 19:48:37,640
the
23215
19:48:33,800 --> 19:48:40,320
console and then open the console
23216
19:48:37,640 --> 19:48:43,192
Tab and here you can see that we have
23217
19:48:40,320 --> 19:48:45,040
the response in our code and we console.
23218
19:48:43,192 --> 19:48:47,400
logged
23219
19:48:45,040 --> 19:48:51,280
it so this
23220
19:48:47,400 --> 19:48:53,640
response is a string and now we can save
23221
19:48:51,280 --> 19:48:57,080
this in a variable or do whatever we
23222
19:48:53,640 --> 19:48:57,080
want with it in our
23223
19:48:57,400 --> 19:49:01,832
code now one thing you might be
23224
19:48:59,440 --> 19:49:05,512
wondering is why do we put the event
23225
19:49:01,832 --> 19:49:08,440
listener up here at the top so first we
23226
19:49:05,512 --> 19:49:11,480
need to set up the event listener and
23227
19:49:08,440 --> 19:49:13,872
then trigger the event or send the
23228
19:49:11,480 --> 19:49:16,960
request this is the same as setting up
23229
19:49:13,872 --> 19:49:18,800
an event listener for clicking a button
23230
19:49:16,960 --> 19:49:22,760
we need to set up the event listener
23231
19:49:18,800 --> 19:49:25,600
first and then we click the button
23232
19:49:22,760 --> 19:49:28,760
after so that's how we send a request to
23233
19:49:25,600 --> 19:49:32,680
the back end wait for the response and
23234
19:49:28,760 --> 19:49:32,680
then save the response in our
23235
19:49:33,160 --> 19:49:39,512
code next we can send different messages
23236
19:49:36,680 --> 19:49:41,160
or different requests to the backend
23237
19:49:39,512 --> 19:49:45,040
using URL
23238
19:49:41,160 --> 19:49:48,280
paths a URL path is the part that comes
23239
19:49:45,040 --> 19:49:53,600
after the domain name for example in
23240
19:49:48,280 --> 19:49:58,232
this URL the URL path is /hello in this
23241
19:49:53,600 --> 19:50:02,720
URL the URL path is/ products
23242
19:49:58,232 --> 19:50:06,000
slir in this URL if there is no URL path
23243
19:50:02,720 --> 19:50:09,640
the URL path is
23244
19:50:06,000 --> 19:50:12,832
slash we can send a request to these URL
23245
19:50:09,640 --> 19:50:14,480
paths and each URL path will give us a
23246
19:50:12,832 --> 19:50:17,120
different
23247
19:50:14,480 --> 19:50:19,872
response so let's try sending requests
23248
19:50:17,120 --> 19:50:22,920
to different URL paths and see what
23249
19:50:19,872 --> 19:50:26,160
different responses that we
23250
19:50:22,920 --> 19:50:29,600
get so for this example let's send the
23251
19:50:26,160 --> 19:50:36,232
request to super simple backend. deev
23252
19:50:29,600 --> 19:50:39,000
and then the URL path SL hello and
23253
19:50:36,232 --> 19:50:42,232
save and now let's open our console to
23254
19:50:39,000 --> 19:50:45,120
see the response
23255
19:50:42,232 --> 19:50:48,760
and here you can see that this URL path
23256
19:50:45,120 --> 19:50:52,192
gave us a different response than last
23257
19:50:48,760 --> 19:50:55,232
time let's go back and try another URL
23258
19:50:52,192 --> 19:50:58,680
path to see what it looks like so we'll
23259
19:50:55,232 --> 19:51:02,000
delete this and then send the request to
23260
19:50:58,680 --> 19:51:04,800
slash products
23261
19:51:02,000 --> 19:51:07,480
slir and
23262
19:51:04,800 --> 19:51:09,160
save and we'll open the console to view
23263
19:51:07,480 --> 19:51:12,720
the
23264
19:51:09,160 --> 19:51:15,600
response and here here this URL path
23265
19:51:12,720 --> 19:51:18,040
give us a Json and this contains the
23266
19:51:15,600 --> 19:51:20,280
details of the first product in our
23267
19:51:18,040 --> 19:51:23,160
Amazon
23268
19:51:20,280 --> 19:51:25,872
Project so we can send requests to
23269
19:51:23,160 --> 19:51:29,600
different URL paths and we will get
23270
19:51:25,872 --> 19:51:29,600
different responses from the
23271
19:51:29,832 --> 19:51:37,480
backend next a backend only supports a
23272
19:51:33,600 --> 19:51:40,080
certain set of URL paths for example
23273
19:51:37,480 --> 19:51:44,280
when I created my backend super simple
23274
19:51:40,080 --> 19:51:47,232
backend .d I had to decide which URL
23275
19:51:44,280 --> 19:51:51,320
paths are supported and how my backend
23276
19:51:47,232 --> 19:51:54,360
would respond to each URL path if we
23277
19:51:51,320 --> 19:51:56,760
send a request to a URL path that is not
23278
19:51:54,360 --> 19:51:59,000
supported the back end will respond with
23279
19:51:56,760 --> 19:51:59,000
an
23280
19:51:59,080 --> 19:52:04,920
error let's go back to our
23281
19:52:01,680 --> 19:52:06,552
code and we'll try a URL path that is
23282
19:52:04,920 --> 19:52:08,872
not
23283
19:52:06,552 --> 19:52:11,232
supported so let's remove this at the
23284
19:52:08,872 --> 19:52:14,120
end
23285
19:52:11,232 --> 19:52:16,920
and we'll try sending the request to
23286
19:52:14,120 --> 19:52:20,080
not-
23287
19:52:16,920 --> 19:52:23,720
supported and
23288
19:52:20,080 --> 19:52:26,000
save and now if we look at our
23289
19:52:23,720 --> 19:52:28,800
console you'll see that the backend
23290
19:52:26,000 --> 19:52:31,120
responded with an error message saying
23291
19:52:28,800 --> 19:52:33,160
this URL path is not
23292
19:52:31,120 --> 19:52:36,000
supported the browser will also
23293
19:52:33,160 --> 19:52:38,800
console.log this red error
23294
19:52:36,000 --> 19:52:42,440
message this red message is displayed
23295
19:52:38,800 --> 19:52:42,440
automatically when there's an error
23296
19:52:43,552 --> 19:52:49,600
so this message tells us the type of
23297
19:52:45,960 --> 19:52:53,120
request that we sent which is get and
23298
19:52:49,600 --> 19:52:55,960
the URL that we sent it to and also this
23299
19:52:53,120 --> 19:52:58,720
number which is called the status
23300
19:52:55,960 --> 19:53:01,320
code whenever we get a response from the
23301
19:52:58,720 --> 19:53:04,360
backend the backend also gives us a
23302
19:53:01,320 --> 19:53:06,512
status code which tells us if a request
23303
19:53:04,360 --> 19:53:09,160
succeeded or
23304
19:53:06,512 --> 19:53:12,120
failed a status code that starts with
23305
19:53:09,160 --> 19:53:15,000
four or five means the response
23306
19:53:12,120 --> 19:53:18,800
failed starting with four means it was
23307
19:53:15,000 --> 19:53:20,320
our problem we sent the request to a URL
23308
19:53:18,800 --> 19:53:23,040
path that was not
23309
19:53:20,320 --> 19:53:25,680
supported starting with five means it
23310
19:53:23,040 --> 19:53:27,552
was the backends problem for example the
23311
19:53:25,680 --> 19:53:30,040
backend
23312
19:53:27,552 --> 19:53:33,832
crashed a status code starting with a
23313
19:53:30,040 --> 19:53:33,832
two means the response was
23314
19:53:34,040 --> 19:53:38,920
successful so we can also see the status
23315
19:53:36,640 --> 19:53:42,800
code in the network
23316
19:53:38,920 --> 19:53:45,440
tab so we can search for our request and
23317
19:53:42,800 --> 19:53:47,800
then when we click the request in the
23318
19:53:45,440 --> 19:53:49,400
headers tab it will show us the status
23319
19:53:47,800 --> 19:53:52,192
code in this
23320
19:53:49,400 --> 19:53:54,720
row so this tells us if our request
23321
19:53:52,192 --> 19:53:57,512
succeeded or
23322
19:53:54,720 --> 19:54:00,960
failed so now you might be wondering how
23323
19:53:57,512 --> 19:54:02,280
do we know which URL paths are supported
23324
19:54:00,960 --> 19:54:05,040
and which are
23325
19:54:02,280 --> 19:54:08,280
not so there's actually no way to figure
23326
19:54:05,040 --> 19:54:11,080
out all the URL paths that are supported
23327
19:54:08,280 --> 19:54:13,640
and this is for security reasons
23328
19:54:11,080 --> 19:54:16,552
however some backends do provide a
23329
19:54:13,640 --> 19:54:18,920
documentation page that lists the URL
23330
19:54:16,552 --> 19:54:21,832
paths that are supported and also what
23331
19:54:18,920 --> 19:54:24,832
kind of response that they give for my
23332
19:54:21,832 --> 19:54:27,000
backend I created a documentation page
23333
19:54:24,832 --> 19:54:28,720
and we're going to take a look at that
23334
19:54:27,000 --> 19:54:30,920
so we'll open the
23335
19:54:28,720 --> 19:54:32,440
browser and at the top we're going to
23336
19:54:30,920 --> 19:54:35,360
create a new
23337
19:54:32,440 --> 19:54:39,000
tab and to see the documentation for my
23338
19:54:35,360 --> 19:54:44,800
backend we're going to go to super
23339
19:54:39,000 --> 19:54:48,360
simple back back end dodev SL
23340
19:54:44,800 --> 19:54:48,360
documentation and press
23341
19:54:49,000 --> 19:54:55,440
enter so this is the documentation page
23342
19:54:52,232 --> 19:54:58,680
for my backend it gives us a list of
23343
19:54:55,440 --> 19:55:01,872
which URL paths that are supported and
23344
19:54:58,680 --> 19:55:04,760
what each URL path does so when we make
23345
19:55:01,872 --> 19:55:07,552
a request to slash it will give us this
23346
19:55:04,760 --> 19:55:10,360
message which we saw earlier if we make
23347
19:55:07,552 --> 19:55:14,000
a request to/ hello it will give us this
23348
19:55:10,360 --> 19:55:14,000
message which we also saw
23349
19:55:14,160 --> 19:55:20,552
earlier so by the way the list of all
23350
19:55:17,872 --> 19:55:23,280
the URL paths that are supported is
23351
19:55:20,552 --> 19:55:27,160
called the backend
23352
19:55:23,280 --> 19:55:29,720
API API means application programming
23353
19:55:27,160 --> 19:55:33,000
interface interface means how we
23354
19:55:29,720 --> 19:55:35,920
interact with something so this list of
23355
19:55:33,000 --> 19:55:38,832
URL paths are all the ways that we can
23356
19:55:35,920 --> 19:55:43,000
interact with the backend and that's why
23357
19:55:38,832 --> 19:55:43,000
we call this the backend
23358
19:55:43,480 --> 19:55:50,040
API next the backend can respond with
23359
19:55:46,760 --> 19:55:53,480
different types of data so one type of
23360
19:55:50,040 --> 19:55:56,320
data the back end can respond with is
23361
19:55:53,480 --> 19:56:00,320
text for example when we sent the
23362
19:55:56,320 --> 19:56:01,760
request to get/ hello it gave us some
23363
19:56:00,320 --> 19:56:03,872
text
23364
19:56:01,760 --> 19:56:08,192
back so in our
23365
19:56:03,872 --> 19:56:10,640
code if we change this URL path to
23366
19:56:08,192 --> 19:56:11,920
/hello
23367
19:56:10,640 --> 19:56:15,000
and
23368
19:56:11,920 --> 19:56:18,000
save and we open the
23369
19:56:15,000 --> 19:56:21,360
console and click the console
23370
19:56:18,000 --> 19:56:23,800
tab it gives us back some
23371
19:56:21,360 --> 19:56:26,280
text we can also see what type of
23372
19:56:23,800 --> 19:56:29,800
response that we got using the network
23373
19:56:26,280 --> 19:56:31,360
tab so we'll open the network Tab and
23374
19:56:29,800 --> 19:56:34,920
then search for the
23375
19:56:31,360 --> 19:56:38,800
request and then here when we click
23376
19:56:34,920 --> 19:56:40,960
it inside the headers tab if we scroll
23377
19:56:38,800 --> 19:56:44,040
down to the response
23378
19:56:40,960 --> 19:56:47,320
section here it will give us the content
23379
19:56:44,040 --> 19:56:50,800
type or the type of response that we got
23380
19:56:47,320 --> 19:56:55,120
back so in this example /hello gave us
23381
19:56:50,800 --> 19:56:55,120
some text and the type is text
23382
19:56:55,160 --> 19:57:00,640
slpl another type of data the backend
23383
19:56:57,760 --> 19:57:04,280
can respond with is
23384
19:57:00,640 --> 19:57:08,600
Json so if we go back to our code and
23385
19:57:04,280 --> 19:57:11,760
change the url path to products
23386
19:57:08,600 --> 19:57:15,120
slir and
23387
19:57:11,760 --> 19:57:18,120
save and then look at our
23388
19:57:15,120 --> 19:57:21,512
console in the network tab we'll open
23389
19:57:18,120 --> 19:57:23,832
this request and inside the headers if
23390
19:57:21,512 --> 19:57:26,552
we scroll
23391
19:57:23,832 --> 19:57:30,232
down it will tell us that the type of
23392
19:57:26,552 --> 19:57:33,920
the response is application SL
23393
19:57:30,232 --> 19:57:37,680
Json so the backend sent us back some
23394
19:57:33,920 --> 19:57:41,512
Json if we open the console tab we can
23395
19:57:37,680 --> 19:57:43,720
see the Json string here
23396
19:57:41,512 --> 19:57:47,552
so once we get this Json from the
23397
19:57:43,720 --> 19:57:50,480
backend we can use json.parse to convert
23398
19:57:47,552 --> 19:57:53,760
this back into a JavaScript
23399
19:57:50,480 --> 19:57:56,480
object basically this allows us to send
23400
19:57:53,760 --> 19:57:58,640
JavaScript objects across the internet
23401
19:57:56,480 --> 19:58:01,360
to the back
23402
19:57:58,640 --> 19:58:05,000
end another type of data the back end
23403
19:58:01,360 --> 19:58:07,832
can respond with is
23404
19:58:05,000 --> 19:58:14,512
HTML we'll go back to our
23405
19:58:07,832 --> 19:58:16,360
code and we'll change the URL path to
23406
19:58:14,512 --> 19:58:19,600
documentation so this was the
23407
19:58:16,360 --> 19:58:21,160
documentation page that we saw earlier
23408
19:58:19,600 --> 19:58:24,872
if we
23409
19:58:21,160 --> 19:58:24,872
save and then open the
23410
19:58:25,440 --> 19:58:29,872
console you'll see that the back end
23411
19:58:27,640 --> 19:58:33,680
responded with a bunch of
23412
19:58:29,872 --> 19:58:36,280
HTML if we look at the network Tab and
23413
19:58:33,680 --> 19:58:39,480
search for the request and open the
23414
19:58:36,280 --> 19:58:40,960
request here and in the headers tab we
23415
19:58:39,480 --> 19:58:43,760
scroll down
23416
19:58:40,960 --> 19:58:49,400
to the content type it will tell us that
23417
19:58:43,760 --> 19:58:49,400
the type of the response was text/html
23418
19:58:50,320 --> 19:58:56,760
finally another type of data the backend
23419
19:58:53,160 --> 19:58:59,960
can respond with is an
23420
19:58:56,760 --> 19:59:06,600
image for example we'll go back to our
23421
19:58:59,960 --> 19:59:06,600
code and change the url path to
23422
19:59:06,832 --> 19:59:11,192
imagesapple
23423
19:59:08,440 --> 19:59:13,872
jpg and say
23424
19:59:11,192 --> 19:59:17,192
save and we'll open the
23425
19:59:13,872 --> 19:59:19,440
console and in the network tab we can
23426
19:59:17,192 --> 19:59:22,440
open this
23427
19:59:19,440 --> 19:59:25,160
request and in the headers tab we can
23428
19:59:22,440 --> 19:59:29,160
scroll down and it will tell us that the
23429
19:59:25,160 --> 19:59:29,160
type of response was an
23430
19:59:29,480 --> 19:59:35,160
image/jpeg as you can see the backend
23431
19:59:32,160 --> 19:59:37,680
can respond with different types of data
23432
19:59:35,160 --> 19:59:37,680
not just
23433
19:59:38,680 --> 19:59:44,160
text okay so we got this image back from
23434
19:59:42,120 --> 19:59:48,120
the back end but what does this look
23435
19:59:44,160 --> 19:59:50,360
like in the console we'll open the
23436
19:59:48,120 --> 19:59:53,040
console and we'll see that we just get a
23437
19:59:50,360 --> 19:59:54,720
bunch of random characters here and
23438
19:59:53,040 --> 19:59:57,640
that's because the console is trying to
23439
19:59:54,720 --> 19:59:58,872
display the image as text but the image
23440
19:59:57,640 --> 20:00:02,040
is not really
23441
19:59:58,872 --> 20:00:03,720
text this is the image's raw data so
23442
20:00:02,040 --> 20:00:05,480
that's why it shows all these random
23443
20:00:03,720 --> 20:00:08,400
characters
23444
20:00:05,480 --> 20:00:11,000
here however it would be better to
23445
20:00:08,400 --> 20:00:12,640
display this as an actual ual image
23446
20:00:11,000 --> 20:00:16,232
instead of raw
23447
20:00:12,640 --> 20:00:17,360
data we can display this as an image by
23448
20:00:16,232 --> 20:00:20,480
using the
23449
20:00:17,360 --> 20:00:24,040
browser so if we open the
23450
20:00:20,480 --> 20:00:27,040
browser when we type a URL at the top of
23451
20:00:24,040 --> 20:00:30,000
the browser it actually sends a get
23452
20:00:27,040 --> 20:00:33,400
request to that
23453
20:00:30,000 --> 20:00:37,360
URL so typing in here actually does the
23454
20:00:33,400 --> 20:00:40,000
same thing as our code it makes a get
23455
20:00:37,360 --> 20:00:42,232
request the one big difference is that
23456
20:00:40,000 --> 20:00:44,440
that in the browser when it gets back
23457
20:00:42,232 --> 20:00:46,440
the response it will display the
23458
20:00:44,440 --> 20:00:50,000
response on the
23459
20:00:46,440 --> 20:00:54,600
page for example if we enter superimple
23460
20:00:50,000 --> 20:00:59,232
backend dodev and change the url path to
23461
20:00:54,600 --> 20:01:02,872
just nothing or slash and press
23462
20:00:59,232 --> 20:01:06,320
enter this actually sends a get request
23463
20:01:02,872 --> 20:01:09,400
to my back end the backend responds with
23464
20:01:06,320 --> 20:01:11,280
some text and it displays this response
23465
20:01:09,400 --> 20:01:14,232
on the
23466
20:01:11,280 --> 20:01:17,760
page so using the browser is the same
23467
20:01:14,232 --> 20:01:17,760
thing as making a get
23468
20:01:18,080 --> 20:01:23,800
request now the cool thing about this is
23469
20:01:21,000 --> 20:01:26,400
that if the browser gets back an image
23470
20:01:23,800 --> 20:01:29,040
it will display it as an actual image
23471
20:01:26,400 --> 20:01:32,600
instead of raw data that we saw in the
23472
20:01:29,040 --> 20:01:33,552
console so here if we change the url
23473
20:01:32,600 --> 20:01:36,760
path
23474
20:01:33,552 --> 20:01:41,832
to/ images
23475
20:01:36,760 --> 20:01:41,832
slapple jpg and press enter
23476
20:01:41,960 --> 20:01:46,320
it will get back the same image as
23477
20:01:43,832 --> 20:01:50,080
before except the browser will display
23478
20:01:46,320 --> 20:01:52,800
it as an actual image on the
23479
20:01:50,080 --> 20:01:54,320
page same thing happens with the backend
23480
20:01:52,800 --> 20:01:58,160
responds with
23481
20:01:54,320 --> 20:02:01,800
HTML so at the Top If we change the url
23482
20:01:58,160 --> 20:02:05,120
path to slash
23483
20:02:01,800 --> 20:02:07,872
documentation and press
23484
20:02:05,120 --> 20:02:11,080
enter if the response from the back end
23485
20:02:07,872 --> 20:02:14,440
is HTML theow browser will display this
23486
20:02:11,080 --> 20:02:16,440
HTML as an actual web page instead of
23487
20:02:14,440 --> 20:02:19,800
raw
23488
20:02:16,440 --> 20:02:22,680
HTML so again using the browser is the
23489
20:02:19,800 --> 20:02:25,440
same thing as making a get
23490
20:02:22,680 --> 20:02:27,872
request and depending on the type of
23491
20:02:25,440 --> 20:02:31,600
response the browser can display the
23492
20:02:27,872 --> 20:02:34,552
response in a more useful way on the
23493
20:02:31,600 --> 20:02:36,920
page and that's it we learn the basics
23494
20:02:34,552 --> 20:02:39,000
of how a backend Works how to send
23495
20:02:36,920 --> 20:02:41,232
requests to a backend and how to send
23496
20:02:39,000 --> 20:02:44,552
requests to different different URL
23497
20:02:41,232 --> 20:02:49,232
paths so now let's go back into our
23498
20:02:44,552 --> 20:02:52,080
code and we'll remove this URL path and
23499
20:02:49,232 --> 20:02:56,080
just dodev so that we don't keep console
23500
20:02:52,080 --> 20:02:58,800
logging and image and then
23501
20:02:56,080 --> 20:03:03,280
save and let's save this practice code
23502
20:02:58,800 --> 20:03:03,280
into git we'll open the kit
23503
20:03:03,320 --> 20:03:09,120
section in backend practice we learn how
23504
20:03:06,320 --> 20:03:12,280
to make requests to the backend and in
23505
20:03:09,120 --> 20:03:13,480
checkout. as we loaded that backend
23506
20:03:12,280 --> 20:03:16,232
practice
23507
20:03:13,480 --> 20:03:17,480
file so let's type a message describing
23508
20:03:16,232 --> 20:03:21,720
our
23509
20:03:17,480 --> 20:03:26,320
changes add backend
23510
20:03:21,720 --> 20:03:26,320
practice file and
23511
20:03:31,080 --> 20:03:35,640
commit now that we learned what a
23512
20:03:33,232 --> 20:03:38,720
backend is and how to communicate with a
23513
20:03:35,640 --> 20:03:40,192
backend let's use a backend in our
23514
20:03:38,720 --> 20:03:43,400
project
23515
20:03:40,192 --> 20:03:44,832
so first we're going to open our code
23516
20:03:43,400 --> 20:03:46,000
and we're actually going to open
23517
20:03:44,832 --> 20:03:48,720
checkout.
23518
20:03:46,000 --> 20:03:50,832
JS and we're going to comment out this
23519
20:03:48,720 --> 20:03:53,480
import statement because we're not going
23520
20:03:50,832 --> 20:03:55,800
to run the practice file anymore so
23521
20:03:53,480 --> 20:03:59,080
we'll type double slash to comment that
23522
20:03:55,800 --> 20:03:59,080
out and
23523
20:03:59,440 --> 20:04:06,360
save next super simple backend dodev has
23524
20:04:03,192 --> 20:04:09,320
a URL path called slash
23525
20:04:06,360 --> 20:04:12,920
products this gives us a list of all the
23526
20:04:09,320 --> 20:04:16,192
products in the Amazon Project so first
23527
20:04:12,920 --> 20:04:19,360
let's open our browser and visit this
23528
20:04:16,192 --> 20:04:23,400
URL path to see what the response looks
23529
20:04:19,360 --> 20:04:26,080
like we'll open this tab to super simple
23530
20:04:23,400 --> 20:04:30,000
backend dodev and we're going to change
23531
20:04:26,080 --> 20:04:33,552
the url path at the end to slash
23532
20:04:30,000 --> 20:04:33,552
products and press
23533
20:04:33,920 --> 20:04:40,680
enter and you can see that this URL path
23534
20:04:37,400 --> 20:04:43,400
gives us a Json response so this
23535
20:04:40,680 --> 20:04:45,160
contains all the details of the products
23536
20:04:43,400 --> 20:04:48,192
for our
23537
20:04:45,160 --> 20:04:50,872
project now instead of using a file on
23538
20:04:48,192 --> 20:04:54,832
our computer to load the products let's
23539
20:04:50,872 --> 20:04:54,832
use the backend to load the
23540
20:04:54,960 --> 20:05:01,872
products so let's go back into our
23541
20:04:58,192 --> 20:05:05,400
code and on the left we're going to open
23542
20:05:01,872 --> 20:05:08,800
data/ products.
23543
20:05:05,400 --> 20:05:12,040
JS and we're going to scroll down to the
23544
20:05:08,800 --> 20:05:13,800
array of prodct S at the end so now
23545
20:05:12,040 --> 20:05:15,552
instead of loading the products from
23546
20:05:13,800 --> 20:05:18,320
this file we're going to load the
23547
20:05:15,552 --> 20:05:21,120
products from the back end so first
23548
20:05:18,320 --> 20:05:23,440
let's comment out all this code if you
23549
20:05:21,120 --> 20:05:26,320
need to you can click this arrow on the
23550
20:05:23,440 --> 20:05:29,000
left to collapse this array and we're
23551
20:05:26,320 --> 20:05:32,920
going to comment this out using slash
23552
20:05:29,000 --> 20:05:36,000
star and at the end star
23553
20:05:32,920 --> 20:05:39,720
slash and above this we're going to load
23554
20:05:36,000 --> 20:05:41,640
the products from the back end
23555
20:05:39,720 --> 20:05:45,640
first let's create a variable to save
23556
20:05:41,640 --> 20:05:49,800
the products again so we use let
23557
20:05:45,640 --> 20:05:52,120
products equal and empty array and let's
23558
20:05:49,800 --> 20:05:55,160
export this so we can use it outside of
23559
20:05:52,120 --> 20:05:58,080
this file like before at the front we'll
23560
20:05:55,160 --> 20:05:58,080
type
23561
20:05:58,600 --> 20:06:04,832
export next let's create a function to
23562
20:06:01,960 --> 20:06:06,400
load these products from the back end
23563
20:06:04,832 --> 20:06:10,640
we'll create a
23564
20:06:06,400 --> 20:06:13,960
function and let's name it load products
23565
20:06:10,640 --> 20:06:13,960
brackets and curly
23566
20:06:14,080 --> 20:06:20,280
brackets and inside here we're going to
23567
20:06:16,600 --> 20:06:22,040
create an XML HTTP request again to make
23568
20:06:20,280 --> 20:06:24,832
a request to my
23569
20:06:22,040 --> 20:06:31,192
backend so to create a request we're
23570
20:06:24,832 --> 20:06:34,800
going to use new in the class XML HTTP
23571
20:06:31,192 --> 20:06:38,232
request and brackets so this will
23572
20:06:34,800 --> 20:06:40,120
generate a new request object and let's
23573
20:06:38,232 --> 20:06:42,800
save this in a variable
23574
20:06:40,120 --> 20:06:47,920
so at the front we'll use const and
23575
20:06:42,800 --> 20:06:50,760
we'll name it xhr equals this
23576
20:06:47,920 --> 20:06:56,040
object next we're going to set up the
23577
20:06:50,760 --> 20:06:58,960
request using xhr doop and
23578
20:06:56,040 --> 20:07:00,872
brackets so open takes two parameters
23579
20:06:58,960 --> 20:07:03,512
the first parameter is the type of
23580
20:07:00,872 --> 20:07:05,800
request that we want to send in this
23581
20:07:03,512 --> 20:07:09,640
case the type of request will be the
23582
20:07:05,800 --> 20:07:11,280
string get
23583
20:07:09,640 --> 20:07:13,760
and we're going to give open a second
23584
20:07:11,280 --> 20:07:16,920
parameter which is the URL that we want
23585
20:07:13,760 --> 20:07:22,040
to send this request to so we'll give it
23586
20:07:16,920 --> 20:07:30,232
a string and the URL of my backend is
23587
20:07:22,040 --> 20:07:33,680
https colon slash super simple backend
23588
20:07:30,232 --> 20:07:37,440
dodev and then we'll add the URL path
23589
20:07:33,680 --> 20:07:37,440
which is slash
23590
20:07:37,480 --> 20:07:47,872
products finally we're going to send
23591
20:07:40,440 --> 20:07:47,872
this request using the code xr. send and
23592
20:07:48,512 --> 20:07:54,960
brackets so this will create and set up
23593
20:07:51,160 --> 20:07:57,872
a request and then send it to my backend
23594
20:07:54,960 --> 20:07:59,720
now remember that do send is
23595
20:07:57,872 --> 20:08:02,360
asynchronous that means it will just
23596
20:07:59,720 --> 20:08:04,280
send the request but it will not wait
23597
20:08:02,360 --> 20:08:07,960
for a response to come
23598
20:08:04,280 --> 20:08:10,232
back in order to wait for a response
23599
20:08:07,960 --> 20:08:12,832
above this code we're going to create
23600
20:08:10,232 --> 20:08:15,160
some new lines and set up an event
23601
20:08:12,832 --> 20:08:21,640
listener using
23602
20:08:15,160 --> 20:08:24,552
xr. add event listener and
23603
20:08:21,640 --> 20:08:26,192
brackets and this takes two parameters
23604
20:08:24,552 --> 20:08:29,680
the first one is the event we want to
23605
20:08:26,192 --> 20:08:32,680
listen for in this case it's the string
23606
20:08:29,680 --> 20:08:35,120
load which means the response has
23607
20:08:32,680 --> 20:08:38,160
loaded next we're going to give it a
23608
20:08:35,120 --> 20:08:40,600
second parameter which is a function so
23609
20:08:38,160 --> 20:08:43,232
brackets Arrow and curly
23610
20:08:40,600 --> 20:08:47,600
brackets and this is a function that we
23611
20:08:43,232 --> 20:08:51,360
want to run after the response has
23612
20:08:47,600 --> 20:08:57,192
loaded so inside here after the response
23613
20:08:51,360 --> 20:09:00,120
has loaded we can access it using xhr do
23614
20:08:57,192 --> 20:09:04,232
response for now let's console.log this
23615
20:09:00,120 --> 20:09:08,760
to see what it looks like so we console.
23616
20:09:04,232 --> 20:09:08,760
log and brackets
23617
20:09:09,920 --> 20:09:16,160
finally let's run this function so that
23618
20:09:12,640 --> 20:09:20,360
we run all this code at the bottom we're
23619
20:09:16,160 --> 20:09:23,192
going to load products and
23620
20:09:20,360 --> 20:09:26,040
brackets and
23621
20:09:23,192 --> 20:09:28,080
save so this will send a request to my
23622
20:09:26,040 --> 20:09:32,120
backend and then once we get the
23623
20:09:28,080 --> 20:09:34,920
response it will display it in the
23624
20:09:32,120 --> 20:09:37,760
console so now let's go to our
23625
20:09:34,920 --> 20:09:39,400
website we're going to open the project
23626
20:09:37,760 --> 20:09:41,232
tab
23627
20:09:39,400 --> 20:09:44,120
and don't worry if the page is blank for
23628
20:09:41,232 --> 20:09:46,400
you we're going to fix this in a bit for
23629
20:09:44,120 --> 20:09:47,192
now we're going to open the console by
23630
20:09:46,400 --> 20:09:48,720
right
23631
20:09:47,192 --> 20:09:52,400
clicking
23632
20:09:48,720 --> 20:09:52,400
inspect and open the
23633
20:09:52,720 --> 20:09:58,872
console and in here you'll see that xr.
23634
20:09:55,640 --> 20:10:01,120
response gave us this Json and this
23635
20:09:58,872 --> 20:10:03,720
represents all the products in our
23636
20:10:01,120 --> 20:10:03,720
Amazon
23637
20:10:05,280 --> 20:10:10,440
Project now that we have all this Json
23638
20:10:08,400 --> 20:10:13,000
we're going to convert this back into a
23639
20:10:10,440 --> 20:10:16,720
JavaScript object and then use it in the
23640
20:10:13,000 --> 20:10:20,080
rest of our code let's go back to our
23641
20:10:16,720 --> 20:10:22,680
code and here the response is a
23642
20:10:20,080 --> 20:10:25,552
Json we're going to convert it back into
23643
20:10:22,680 --> 20:10:29,160
a JavaScript object or in this case a
23644
20:10:25,552 --> 20:10:33,800
JavaScript array using the code
23645
20:10:29,160 --> 20:10:33,800
json. pars and
23646
20:10:34,192 --> 20:10:38,920
brackets so once we' converted this back
23647
20:10:36,720 --> 20:10:41,480
to an array we're going to replace the
23648
20:10:38,920 --> 20:10:44,640
product up here with what we loaded from
23649
20:10:41,480 --> 20:10:48,120
the back end to do that we'll do
23650
20:10:44,640 --> 20:10:51,760
products and make it equal to this
23651
20:10:48,120 --> 20:10:51,760
result that we got from the back
23652
20:10:51,872 --> 20:10:57,552
end now one more thing we need to do is
23653
20:10:54,960 --> 20:11:00,640
previously we converted the product
23654
20:10:57,552 --> 20:11:03,680
objects into a class so we're just going
23655
20:11:00,640 --> 20:11:08,232
to do that again with this
23656
20:11:03,680 --> 20:11:10,360
array so we'll select the code from map
23657
20:11:08,232 --> 20:11:13,680
all the way to the end
23658
20:11:10,360 --> 20:11:16,360
and then right click
23659
20:11:13,680 --> 20:11:19,192
copy and
23660
20:11:16,360 --> 20:11:21,320
here after this products array that we
23661
20:11:19,192 --> 20:11:24,600
got from the back
23662
20:11:21,320 --> 20:11:27,680
end right click
23663
20:11:24,600 --> 20:11:31,720
paste we're also going to transform this
23664
20:11:27,680 --> 20:11:35,000
array from objects into these
23665
20:11:31,720 --> 20:11:36,960
classes and at the end let's console.log
23666
20:11:35,000 --> 20:11:39,720
this products array to see what it looks
23667
20:11:36,960 --> 20:11:42,280
like now so we'll console
23668
20:11:39,720 --> 20:11:45,080
. log
23669
20:11:42,280 --> 20:11:48,232
products and
23670
20:11:45,080 --> 20:11:49,080
save and now if we open the console for
23671
20:11:48,232 --> 20:11:51,920
our
23672
20:11:49,080 --> 20:11:55,800
project you'll see that products is now
23673
20:11:51,920 --> 20:11:58,552
an array of product classes and clothing
23674
20:11:55,800 --> 20:12:02,920
classes so we converted the response
23675
20:11:58,552 --> 20:12:05,960
from a Json into a JavaScript array and
23676
20:12:02,920 --> 20:12:05,960
then into these
23677
20:12:06,440 --> 20:12:11,320
classes so that's how we load data from
23678
20:12:09,000 --> 20:12:14,280
the the back end and then convert it
23679
20:12:11,320 --> 20:12:17,400
into a JavaScript object or array that
23680
20:12:14,280 --> 20:12:17,400
we can use in our
23681
20:12:18,160 --> 20:12:24,720
code next let's go back to our code and
23682
20:12:22,920 --> 20:12:26,720
instead of console. loging the products
23683
20:12:24,720 --> 20:12:28,720
every time which will display a lot of
23684
20:12:26,720 --> 20:12:31,040
stuff in the console let's just
23685
20:12:28,720 --> 20:12:33,872
console.log a message to make sure that
23686
20:12:31,040 --> 20:12:39,680
this is working so we'll change this to
23687
20:12:33,872 --> 20:12:39,680
the string load products
23688
20:12:40,080 --> 20:12:45,832
and now that we have this function let's
23689
20:12:42,400 --> 20:12:48,640
use it in each of our
23690
20:12:45,832 --> 20:12:51,232
Pages first we're going to remove
23691
20:12:48,640 --> 20:12:53,360
calling this function for now and we're
23692
20:12:51,232 --> 20:12:57,640
going to export this function so we can
23693
20:12:53,360 --> 20:13:01,800
use it outside of this file so
23694
20:12:57,640 --> 20:13:01,800
export and save this
23695
20:13:01,872 --> 20:13:07,512
file and we're going to start from the
23696
20:13:05,440 --> 20:13:11,040
homepage so we'll scroll down to the
23697
20:13:07,512 --> 20:13:11,040
bottom to amazon.
23698
20:13:11,280 --> 20:13:19,280
JS and we're going to scroll to the
23699
20:13:15,232 --> 20:13:21,800
top and first we're going to import load
23700
20:13:19,280 --> 20:13:25,360
products we're already importing from
23701
20:13:21,800 --> 20:13:28,720
products. JS so we'll just add a comma
23702
20:13:25,360 --> 20:13:31,680
and load
23703
20:13:28,720 --> 20:13:35,720
products and now before we run all of
23704
20:13:31,680 --> 20:13:40,720
this code at the top we're going to load
23705
20:13:35,720 --> 20:13:42,680
the products first and brackets
23706
20:13:40,720 --> 20:13:46,000
so now let's
23707
20:13:42,680 --> 20:13:48,400
save and open the project in our
23708
20:13:46,000 --> 20:13:51,400
browser and we'll click the top left
23709
20:13:48,400 --> 20:13:53,080
icon to go to the
23710
20:13:51,400 --> 20:13:55,960
homepage and you'll see that the
23711
20:13:53,080 --> 20:13:57,120
homepage is actually empty so what went
23712
20:13:55,960 --> 20:14:01,440
wrong
23713
20:13:57,120 --> 20:14:04,960
here remember that HTTP requests are
23714
20:14:01,440 --> 20:14:08,160
asynchronous if we go back into our
23715
20:14:04,960 --> 20:14:09,800
code load products will send a request
23716
20:14:08,160 --> 20:14:11,872
to my backend
23717
20:14:09,800 --> 20:14:15,160
but it takes time for the request to
23718
20:14:11,872 --> 20:14:17,512
travel across the internet to my backend
23719
20:14:15,160 --> 20:14:20,120
and to travel
23720
20:14:17,512 --> 20:14:22,680
back so here it will just send the
23721
20:14:20,120 --> 20:14:26,000
request and at the next line the
23722
20:14:22,680 --> 20:14:28,120
response has not loaded yet so the
23723
20:14:26,000 --> 20:14:30,832
products array is still
23724
20:14:28,120 --> 20:14:35,120
empty and when we run this code with an
23725
20:14:30,832 --> 20:14:35,120
empty array the page will be
23726
20:14:35,400 --> 20:14:41,480
empty to solve this problem we need to
23727
20:14:38,440 --> 20:14:44,480
wait for this HTTP request to finish
23728
20:14:41,480 --> 20:14:46,320
first and for the response to come back
23729
20:14:44,480 --> 20:14:47,040
and then we're going to run the rest of
23730
20:14:46,320 --> 20:14:49,960
this
23731
20:14:47,040 --> 20:14:52,800
code so how do we do
23732
20:14:49,960 --> 20:14:55,440
that so we're going to go to the left
23733
20:14:52,800 --> 20:14:56,920
and we're going to scroll up to data/
23734
20:14:55,440 --> 20:14:59,360
products.
23735
20:14:56,920 --> 20:15:03,832
JS and I'm going to drag this file to
23736
20:14:59,360 --> 20:15:07,232
the top so we can see the code side by
23737
20:15:03,832 --> 20:15:10,040
side and I'll scroll down to the HTTP
23738
20:15:07,232 --> 20:15:13,040
request
23739
20:15:10,040 --> 20:15:13,040
which is right
23740
20:15:13,192 --> 20:15:18,360
here and remember that we used an event
23741
20:15:16,232 --> 20:15:21,512
listener to wait for the response to
23742
20:15:18,360 --> 20:15:24,320
come back once the response is loaded
23743
20:15:21,512 --> 20:15:27,800
we're going to run this
23744
20:15:24,320 --> 20:15:31,600
function so basically we want to run all
23745
20:15:27,800 --> 20:15:36,000
of this code at the bottom of this event
23746
20:15:31,600 --> 20:15:38,232
listener so after we've loaded our
23747
20:15:36,000 --> 20:15:41,080
products so one way to solve this
23748
20:15:38,232 --> 20:15:43,320
problem is maybe we can just copy all
23749
20:15:41,080 --> 20:15:45,512
this code and then paste it at the
23750
20:15:43,320 --> 20:15:47,960
bottom
23751
20:15:45,512 --> 20:15:50,040
here now obviously this doesn't make
23752
20:15:47,960 --> 20:15:52,600
sense because we're copy pasting a bunch
23753
20:15:50,040 --> 20:15:54,512
of code and then we can't really reuse
23754
20:15:52,600 --> 20:15:57,600
this
23755
20:15:54,512 --> 20:16:00,400
function a better solution is we're
23756
20:15:57,600 --> 20:16:03,040
going to put all this code in a
23757
20:16:00,400 --> 20:16:06,512
function and then we can give this
23758
20:16:03,040 --> 20:16:09,160
function to load products let's do this
23759
20:16:06,512 --> 20:16:11,680
step by step
23760
20:16:09,160 --> 20:16:14,320
so first at the top let's create a
23761
20:16:11,680 --> 20:16:17,440
function to group all of this code
23762
20:16:14,320 --> 20:16:21,872
together we'll use the word
23763
20:16:17,440 --> 20:16:26,280
function and let's name it render
23764
20:16:21,872 --> 20:16:28,552
products grid brackets and curly
23765
20:16:26,280 --> 20:16:30,760
brackets and now we're going to move all
23766
20:16:28,552 --> 20:16:33,480
of this code into the
23767
20:16:30,760 --> 20:16:36,280
function so we can do that by removing
23768
20:16:33,480 --> 20:16:38,872
this closing curly
23769
20:16:36,280 --> 20:16:41,280
bracket and then at the bottom we we're
23770
20:16:38,872 --> 20:16:44,832
going to scroll down all the way to the
23771
20:16:41,280 --> 20:16:47,440
bottom here we're going to add back the
23772
20:16:44,832 --> 20:16:50,400
closing curler bracket to put all this
23773
20:16:47,440 --> 20:16:53,400
code inside the function and now let's
23774
20:16:50,400 --> 20:16:57,040
also select this code so we can fix the
23775
20:16:53,400 --> 20:16:58,360
index so we'll select it all the way up
23776
20:16:57,040 --> 20:17:03,160
to
23777
20:16:58,360 --> 20:17:06,160
here and then press tab to add an indet
23778
20:17:03,160 --> 20:17:09,600
so now we put all the code inside render
23779
20:17:06,160 --> 20:17:09,600
products grid
23780
20:17:09,960 --> 20:17:17,000
next we're going to put this function
23781
20:17:12,920 --> 20:17:19,120
inside load products using a parameter
23782
20:17:17,000 --> 20:17:20,832
so between these brackets we're going to
23783
20:17:19,120 --> 20:17:22,400
give it this
23784
20:17:20,832 --> 20:17:26,360
function
23785
20:17:22,400 --> 20:17:29,720
render products
23786
20:17:26,360 --> 20:17:32,960
grid so remember in JavaScript functions
23787
20:17:29,720 --> 20:17:33,800
are values and we can use a function as
23788
20:17:32,960 --> 20:17:36,960
a
23789
20:17:33,800 --> 20:17:41,120
parameter so now inside load products if
23790
20:17:36,960 --> 20:17:44,040
we go up here at the top this function
23791
20:17:41,120 --> 20:17:46,280
will be saved in a parameter so let's
23792
20:17:44,040 --> 20:17:50,080
create a parameter at the top and we'll
23793
20:17:46,280 --> 20:17:53,192
name it fun to say that this parameter
23794
20:17:50,080 --> 20:17:53,192
will contain a
23795
20:17:53,360 --> 20:18:00,640
function so we basically saved this
23796
20:17:56,800 --> 20:18:02,760
function inside this parameter and now
23797
20:18:00,640 --> 20:18:05,360
after we load the response we're going
23798
20:18:02,760 --> 20:18:05,360
to run the
23799
20:18:05,440 --> 20:18:11,400
function so at the bottom here after
23800
20:18:08,280 --> 20:18:16,680
we've created the products array we're
23801
20:18:11,400 --> 20:18:16,680
going to run font and
23802
20:18:16,872 --> 20:18:22,680
brackets so that's how we run all of
23803
20:18:19,600 --> 20:18:25,440
this code after we've loaded the
23804
20:18:22,680 --> 20:18:27,872
products we group this code into a
23805
20:18:25,440 --> 20:18:31,552
function and then we save the function
23806
20:18:27,872 --> 20:18:34,040
up here after we load the response we're
23807
20:18:31,552 --> 20:18:37,192
going to run the
23808
20:18:34,040 --> 20:18:40,000
function so let's save these two files
23809
20:18:37,192 --> 20:18:43,512
we'll save products. Js
23810
20:18:40,000 --> 20:18:45,920
and then down here we'll save amazon.
23811
20:18:43,512 --> 20:18:48,192
JS and then open our
23812
20:18:45,920 --> 20:18:50,760
website and you'll see that the products
23813
20:18:48,192 --> 20:18:53,320
loaded again because this time we're
23814
20:18:50,760 --> 20:18:56,400
waiting for the response to come back
23815
20:18:53,320 --> 20:18:56,400
and then we run our
23816
20:18:56,872 --> 20:19:04,360
code so that's how we wait for an HTTP
23817
20:19:00,832 --> 20:19:06,680
request to finish first and then we run
23818
20:19:04,360 --> 20:19:06,680
some
23819
20:19:07,400 --> 20:19:13,800
code by the the way this function that
23820
20:19:10,440 --> 20:19:17,040
we provide to load products this is
23821
20:19:13,800 --> 20:19:19,232
known as a call back because we're
23822
20:19:17,040 --> 20:19:22,960
giving it a function to run in the
23823
20:19:19,232 --> 20:19:27,920
future or to call in the future so this
23824
20:19:22,960 --> 20:19:30,440
function will be called back in the
23825
20:19:27,920 --> 20:19:33,640
future and we've actually used call
23826
20:19:30,440 --> 20:19:36,360
backs before when we wrote the code set
23827
20:19:33,640 --> 20:19:38,960
timeout we provided set timeout a
23828
20:19:36,360 --> 20:19:42,040
function to run in the future or or to
23829
20:19:38,960 --> 20:19:44,760
call in the future so this function is
23830
20:19:42,040 --> 20:19:47,640
also known as a call
23831
20:19:44,760 --> 20:19:50,232
back don't worry if this technique is a
23832
20:19:47,640 --> 20:19:52,280
little complicated at first the more you
23833
20:19:50,232 --> 20:19:54,192
work with callbacks the more you'll get
23834
20:19:52,280 --> 20:19:57,192
used to
23835
20:19:54,192 --> 20:19:59,960
it let's get some more practice and use
23836
20:19:57,192 --> 20:20:02,800
the backend and callbacks on the
23837
20:19:59,960 --> 20:20:07,120
checkout page so we're going to open
23838
20:20:02,800 --> 20:20:09,600
checkout. JS which is the checkout page
23839
20:20:07,120 --> 20:20:13,480
and first we're going to in import load
23840
20:20:09,600 --> 20:20:18,480
products so at the top we'll create an
23841
20:20:13,480 --> 20:20:21,640
import curly brackets load
23842
20:20:18,480 --> 20:20:25,000
products from a
23843
20:20:21,640 --> 20:20:28,080
string and we'll locate products. JS so
23844
20:20:25,000 --> 20:20:30,552
inside here we're in the scripts folder
23845
20:20:28,080 --> 20:20:32,800
we're going to get out of it using do do
23846
20:20:30,552 --> 20:20:35,232
slash and then we're going to go into
23847
20:20:32,800 --> 20:20:35,232
the data
23848
20:20:35,720 --> 20:20:44,320
folder and then we'll add slash data
23849
20:20:39,760 --> 20:20:44,320
slash and we'll load products.
23850
20:20:45,960 --> 20:20:54,192
JS and then down here we're also going
23851
20:20:49,160 --> 20:20:56,600
to load products and
23852
20:20:54,192 --> 20:20:59,600
brackets and again we're going to give
23853
20:20:56,600 --> 20:21:02,720
load products a call back or a function
23854
20:20:59,600 --> 20:21:05,400
that we want to run in the
23855
20:21:02,720 --> 20:21:07,440
future this time instead of creating a
23856
20:21:05,400 --> 20:21:09,192
whole new function we're just going to
23857
20:21:07,440 --> 20:21:15,400
create a function in inside these
23858
20:21:09,192 --> 20:21:15,400
brackets using brackets arrow and curly
23859
20:21:15,480 --> 20:21:20,400
brackets so we don't need to create a
23860
20:21:17,800 --> 20:21:23,232
function name every time we can also
23861
20:21:20,400 --> 20:21:25,280
just create an anonymous function or a
23862
20:21:23,232 --> 20:21:28,512
function without a
23863
20:21:25,280 --> 20:21:29,920
name and then give this to load products
23864
20:21:28,512 --> 20:21:32,920
to run in the
23865
20:21:29,920 --> 20:21:34,872
future now inside this Anonymous
23866
20:21:32,920 --> 20:21:38,760
function we're just going to move this
23867
20:21:34,872 --> 20:21:41,552
code into here so we'll select this code
23868
20:21:38,760 --> 20:21:44,800
and then rightclick
23869
20:21:41,552 --> 20:21:47,960
cut and then inside here we're going to
23870
20:21:44,800 --> 20:21:52,440
rightclick and
23871
20:21:47,960 --> 20:21:55,480
paste and if you need to you can fix the
23872
20:21:52,440 --> 20:21:59,280
formatting so again this is going to
23873
20:21:55,480 --> 20:22:02,192
save this function inside the parameter
23874
20:21:59,280 --> 20:22:05,680
fun and then we're going to call fun
23875
20:22:02,192 --> 20:22:09,360
after we've loaded all the
23876
20:22:05,680 --> 20:22:10,920
products so let's save this file
23877
20:22:09,360 --> 20:22:13,440
and open our
23878
20:22:10,920 --> 20:22:16,512
website and we'll click the cart in the
23879
20:22:13,440 --> 20:22:20,400
top right to go to the checkout page and
23880
20:22:16,512 --> 20:22:23,680
now the checkout page is loading
23881
20:22:20,400 --> 20:22:27,512
again so that's how we use a backend in
23882
20:22:23,680 --> 20:22:31,040
our project we need to send a request
23883
20:22:27,512 --> 20:22:35,192
and then use a call back to wait for a
23884
20:22:31,040 --> 20:22:38,192
response and then run the rest of our
23885
20:22:35,192 --> 20:22:39,552
code so now let's save our changes into
23886
20:22:38,192 --> 20:22:41,360
G
23887
20:22:39,552 --> 20:22:45,440
we'll go to the git
23888
20:22:41,360 --> 20:22:45,440
section and in products.
23889
20:22:49,320 --> 20:22:56,760
JS we created the load products
23890
20:22:54,160 --> 20:23:00,360
function in amazon.
23891
20:22:56,760 --> 20:23:01,872
JS we used load products and gave it a
23892
20:23:00,360 --> 20:23:06,000
call
23893
20:23:01,872 --> 20:23:09,040
back and in checkout. JS we also used
23894
20:23:06,000 --> 20:23:11,320
load products and we gave it a call back
23895
20:23:09,040 --> 20:23:13,872
using an anonymous function or a
23896
20:23:11,320 --> 20:23:16,552
function without a
23897
20:23:13,872 --> 20:23:18,160
name let's create a message describing
23898
20:23:16,552 --> 20:23:25,000
our
23899
20:23:18,160 --> 20:23:27,360
changes load products from the backend
23900
20:23:25,000 --> 20:23:27,360
and
23901
20:23:30,872 --> 20:23:36,040
commit next we're going to learn testing
23902
20:23:34,000 --> 20:23:38,512
with a
23903
20:23:36,040 --> 20:23:41,800
backend now that we're using a back back
23904
20:23:38,512 --> 20:23:45,360
end in our code we need to update our
23905
20:23:41,800 --> 20:23:47,920
tests first let's go to our code and
23906
20:23:45,360 --> 20:23:50,512
we're going to run our tests so we'll
23907
20:23:47,920 --> 20:23:52,872
scroll to the bottom and if you don't
23908
20:23:50,512 --> 20:23:56,320
have the tests open we can run them by
23909
20:23:52,872 --> 20:23:59,552
right clicking test.html and then click
23910
20:23:56,320 --> 20:24:02,080
open with live server now I already have
23911
20:23:59,552 --> 20:24:04,760
the test open in my browser so I'm just
23912
20:24:02,080 --> 20:24:07,832
going to open that
23913
20:24:04,760 --> 20:24:10,160
Tab and for the video I'll zoom in using
23914
20:24:07,832 --> 20:24:13,040
control equals or command
23915
20:24:10,160 --> 20:24:16,160
equals and we have some failing tests
23916
20:24:13,040 --> 20:24:18,600
now so if you did the exercises from the
23917
20:24:16,160 --> 20:24:20,640
previous few lessons you might have more
23918
20:24:18,600 --> 20:24:23,320
than two failing tests but we're going
23919
20:24:20,640 --> 20:24:25,232
to focus on fixing these two tests here
23920
20:24:23,320 --> 20:24:28,192
for the
23921
20:24:25,232 --> 20:24:31,960
video so first let's open the code for
23922
20:24:28,192 --> 20:24:34,600
our order summary tests we'll open vs
23923
20:24:31,960 --> 20:24:37,920
code and then on the left we're going to
23924
20:24:34,600 --> 20:24:40,960
go into the test folder SL checkout SL
23925
20:24:37,920 --> 20:24:40,960
Ord summary
23926
20:24:42,552 --> 20:24:48,512
test.js so now we're going to scroll
23927
20:24:44,760 --> 20:24:51,800
down in this test and notice that here
23928
20:24:48,512 --> 20:24:55,552
we are rendering the order summary which
23929
20:24:51,800 --> 20:24:58,760
creates the cart on the checkout
23930
20:24:55,552 --> 20:25:01,832
page however this card requires the
23931
20:24:58,760 --> 20:25:03,760
products to be loaded from the back end
23932
20:25:01,832 --> 20:25:06,480
and currently we're not loading the
23933
20:25:03,760 --> 20:25:09,160
products in our tests so that's why the
23934
20:25:06,480 --> 20:25:11,040
tests are failing we need to to load the
23935
20:25:09,160 --> 20:25:14,720
products
23936
20:25:11,040 --> 20:25:17,400
first to do that let's import the load
23937
20:25:14,720 --> 20:25:18,360
products function at the top so we'll
23938
20:25:17,400 --> 20:25:21,552
scroll
23939
20:25:18,360 --> 20:25:26,232
up and we're going to add another
23940
20:25:21,552 --> 20:25:30,400
import curly brackets the load products
23941
20:25:26,232 --> 20:25:33,040
function from a string and we'll locate
23942
20:25:30,400 --> 20:25:36,080
products. JS so we need to get out of
23943
20:25:33,040 --> 20:25:38,920
checkout and out of tests using do do
23944
20:25:36,080 --> 20:25:43,280
slash do do slash and and then we'll go
23945
20:25:38,920 --> 20:25:46,280
into the data folder data/ and load
23946
20:25:43,280 --> 20:25:46,280
products.
23947
20:25:46,400 --> 20:25:53,000
JS and now we could call load products
23948
20:25:50,400 --> 20:25:55,760
inside before each but this will load
23949
20:25:53,000 --> 20:25:58,192
the products before each of our tests so
23950
20:25:55,760 --> 20:26:00,440
it will load it multiple times and we
23951
20:25:58,192 --> 20:26:02,832
don't really need to do this we only
23952
20:26:00,440 --> 20:26:04,872
need to load the products once for all
23953
20:26:02,832 --> 20:26:07,832
of our
23954
20:26:04,872 --> 20:26:11,080
tests to do that we're going to use
23955
20:26:07,832 --> 20:26:13,040
another hook provided by Jasmine called
23956
20:26:11,080 --> 20:26:15,872
before
23957
20:26:13,040 --> 20:26:18,872
all so above before
23958
20:26:15,872 --> 20:26:23,160
each we're going to use the function
23959
20:26:18,872 --> 20:26:26,800
before all and
23960
20:26:23,160 --> 20:26:30,120
brackets so this is the before all hook
23961
20:26:26,800 --> 20:26:32,680
it will run a function before all of our
23962
20:26:30,120 --> 20:26:35,680
tests inside these brackets we're going
23963
20:26:32,680 --> 20:26:39,640
to give it a function to run so brackets
23964
20:26:35,680 --> 20:26:42,280
arrow and curly brackets
23965
20:26:39,640 --> 20:26:46,800
and now before all of our tests we're
23966
20:26:42,280 --> 20:26:49,680
going to load the products so let's load
23967
20:26:46,800 --> 20:26:52,280
products and
23968
20:26:49,680 --> 20:26:55,920
brackets and
23969
20:26:52,280 --> 20:26:58,872
save and now let's open our tests in the
23970
20:26:55,920 --> 20:27:00,192
browser and unfortunately the tests are
23971
20:26:58,872 --> 20:27:02,800
still
23972
20:27:00,192 --> 20:27:06,680
failing let's go back to our code and
23973
20:27:02,800 --> 20:27:09,232
see what the problem is we'll open vs
23974
20:27:06,680 --> 20:27:12,232
code and here
23975
20:27:09,232 --> 20:27:14,872
remember that load products is
23976
20:27:12,232 --> 20:27:17,040
asynchronous that means it just sends a
23977
20:27:14,872 --> 20:27:20,160
request to my back end but it doesn't
23978
20:27:17,040 --> 20:27:22,192
wait for the response to come back so it
23979
20:27:20,160 --> 20:27:25,480
would just send a request and then
23980
20:27:22,192 --> 20:27:28,920
continue with the rest of the test
23981
20:27:25,480 --> 20:27:31,920
code and unfortunately at this point the
23982
20:27:28,920 --> 20:27:34,160
response has not come back yet products
23983
20:27:31,920 --> 20:27:37,232
is still an empty
23984
20:27:34,160 --> 20:27:40,400
array to fix this issue we need to wait
23985
20:27:37,232 --> 20:27:44,440
for a load products to finish first and
23986
20:27:40,400 --> 20:27:48,000
then continue with the rest of the
23987
20:27:44,440 --> 20:27:50,480
test to do that Jasmine has a feature
23988
20:27:48,000 --> 20:27:53,552
for waiting for some code to finish
23989
20:27:50,480 --> 20:27:53,552
called a done
23990
20:27:53,600 --> 20:28:02,232
function so in before all we can give
23991
20:27:56,920 --> 20:28:05,680
this inner Function One parameter called
23992
20:28:02,232 --> 20:28:09,120
done so done is a function and it's
23993
20:28:05,680 --> 20:28:12,480
provided by Jasmine when we we add this
23994
20:28:09,120 --> 20:28:15,640
done parameter before all will not
23995
20:28:12,480 --> 20:28:18,280
automatically go to the next step now
23996
20:28:15,640 --> 20:28:20,800
it's just going to wait and it will only
23997
20:28:18,280 --> 20:28:24,552
go to the next step when we call this
23998
20:28:20,800 --> 20:28:28,080
done function so when we do done and
23999
20:28:24,552 --> 20:28:31,680
brackets then it will go to the next
24000
20:28:28,080 --> 20:28:34,800
step if we don't call done then before
24001
20:28:31,680 --> 20:28:38,160
all we'll just keep waiting forever so
24002
20:28:34,800 --> 20:28:40,640
this done function allows us to control
24003
20:28:38,160 --> 20:28:43,280
exactly when before all finishes and
24004
20:28:40,640 --> 20:28:46,080
goes to the next
24005
20:28:43,280 --> 20:28:48,800
step and this is what we need to fix the
24006
20:28:46,080 --> 20:28:51,320
test we need to wait for load products
24007
20:28:48,800 --> 20:28:56,160
to finish first and then we're going to
24008
20:28:51,320 --> 20:28:56,160
call done and then go to the next
24009
20:28:56,192 --> 20:29:02,320
step to wait for load products to finish
24010
20:29:00,280 --> 20:29:04,920
remember we're going to give it a
24011
20:29:02,320 --> 20:29:08,192
function so between these brackets we'll
24012
20:29:04,920 --> 20:29:10,640
create a function using brackets Arrow
24013
20:29:08,192 --> 20:29:13,320
and curly
24014
20:29:10,640 --> 20:29:15,720
brackets now once the products have
24015
20:29:13,320 --> 20:29:19,120
finished loading it will run the
24016
20:29:15,720 --> 20:29:22,400
function inside here we're going to call
24017
20:29:19,120 --> 20:29:24,400
done and
24018
20:29:22,400 --> 20:29:26,960
brackets so this makes sure that the
24019
20:29:24,400 --> 20:29:30,680
products load first and then we call
24020
20:29:26,960 --> 20:29:32,960
done and then it goes to the next step
24021
20:29:30,680 --> 20:29:35,280
which is the before each hook and then
24022
20:29:32,960 --> 20:29:38,280
eventually it runs the tests at the
24023
20:29:35,280 --> 20:29:38,280
bottom
24024
20:29:38,320 --> 20:29:43,872
so now let's
24025
20:29:40,000 --> 20:29:45,600
save and take a look at our test page
24026
20:29:43,872 --> 20:29:48,400
and you'll see that those order summary
24027
20:29:45,600 --> 20:29:52,320
tests are now passing if you have any
24028
20:29:48,400 --> 20:29:56,080
other fail tests I'll leave that as an
24029
20:29:52,320 --> 20:29:56,080
exercise let's go back to our
24030
20:29:56,960 --> 20:30:03,120
code and that's how we test with a
24031
20:30:00,160 --> 20:30:05,680
backend we wait until the backend code
24032
20:30:03,120 --> 20:30:08,800
is finished and then we use the done
24033
20:30:05,680 --> 20:30:12,232
function to control exactly when to go
24034
20:30:08,800 --> 20:30:15,600
to the next step by the way we can also
24035
20:30:12,232 --> 20:30:20,360
use done inside before each and inside
24036
20:30:15,600 --> 20:30:20,360
it as well to wait for backend code to
24037
20:30:20,640 --> 20:30:26,040
finish now let's save our changes into
24038
20:30:23,192 --> 20:30:28,920
git we'll open the get section and
24039
20:30:26,040 --> 20:30:31,960
inside order summary test we imported
24040
20:30:28,920 --> 20:30:34,760
load products and then we called load
24041
20:30:31,960 --> 20:30:36,320
products and use the done function to
24042
20:30:34,760 --> 20:30:39,800
make sure that the products are loaded
24043
20:30:36,320 --> 20:30:42,512
first and then we go to The Next
24044
20:30:39,800 --> 20:30:43,872
Step let's create a message describing
24045
20:30:42,512 --> 20:30:51,552
our
24046
20:30:43,872 --> 20:30:53,920
changes load products in before all hook
24047
20:30:51,552 --> 20:30:53,920
and
24048
20:30:58,720 --> 20:31:03,552
commit next we're going to learn
24049
20:31:01,320 --> 20:31:06,832
promises which are a better way to
24050
20:31:03,552 --> 20:31:09,480
handle asynchronous code promises are
24051
20:31:06,832 --> 20:31:12,080
similar to Jasmine done function that we
24052
20:31:09,480 --> 20:31:14,960
just learned they let us wait for some
24053
20:31:12,080 --> 20:31:17,552
asynchronous code to finish before going
24054
20:31:14,960 --> 20:31:17,552
to the next
24055
20:31:18,600 --> 20:31:25,640
step so now let's create our first
24056
20:31:22,160 --> 20:31:27,600
promise we're going to open our code and
24057
20:31:25,640 --> 20:31:30,440
on the left we're going to go to
24058
20:31:27,600 --> 20:31:30,440
checkout.
24059
20:31:31,512 --> 20:31:38,640
JS and in here at the top we're going to
24060
20:31:35,832 --> 20:31:40,960
practice promises
24061
20:31:38,640 --> 20:31:46,120
promise is a class so we're going to
24062
20:31:40,960 --> 20:31:49,600
type the code new capital P promise and
24063
20:31:46,120 --> 20:31:52,360
brackets to create a new promise
24064
20:31:49,600 --> 20:31:55,920
object now inside these brackets we're
24065
20:31:52,360 --> 20:31:58,720
going to give it a function so brackets
24066
20:31:55,920 --> 20:32:01,440
arrow and curly
24067
20:31:58,720 --> 20:32:04,440
brackets so that's just how promises are
24068
20:32:01,440 --> 20:32:06,920
designed it's a built-in class and when
24069
20:32:04,440 --> 20:32:09,760
we create a promise we need to give it a
24070
20:32:06,920 --> 20:32:09,760
function
24071
20:32:10,080 --> 20:32:15,832
so when we create This Promise it's
24072
20:32:12,280 --> 20:32:15,832
going to run this function
24073
20:32:16,872 --> 20:32:23,960
immediately so inside here let's
24074
20:32:21,040 --> 20:32:27,160
console.log the string
24075
20:32:23,960 --> 20:32:30,000
promise to show that it runs
24076
20:32:27,160 --> 20:32:32,800
immediately so we'll save this
24077
20:32:30,000 --> 20:32:35,360
file and then go to the
24078
20:32:32,800 --> 20:32:38,000
website and we'll open the tab for our
24079
20:32:35,360 --> 20:32:39,640
project
24080
20:32:38,000 --> 20:32:43,080
and I'm going to zoom out a bit by
24081
20:32:39,640 --> 20:32:43,080
pressing control or command
24082
20:32:43,232 --> 20:32:48,440
minus and then open the console right
24083
20:32:46,720 --> 20:32:51,400
click
24084
20:32:48,440 --> 20:32:55,512
inspect and the
24085
20:32:51,400 --> 20:32:55,512
console and you'll see a logged
24086
20:32:55,600 --> 20:33:02,872
promise so when we create a promise it
24087
20:32:59,080 --> 20:33:02,872
runs this inner function
24088
20:33:03,512 --> 20:33:09,512
immediately now this inner function gets
24089
20:33:06,440 --> 20:33:13,600
a parameter called called
24090
20:33:09,512 --> 20:33:16,480
resolve and resolve is a function and it
24091
20:33:13,600 --> 20:33:19,920
works very similar to Jasmine's done
24092
20:33:16,480 --> 20:33:22,960
function so resolve lets us control when
24093
20:33:19,920 --> 20:33:22,960
to go to the next
24094
20:33:23,192 --> 20:33:29,000
step for example let's add some
24095
20:33:26,192 --> 20:33:32,360
asynchronous code into this
24096
20:33:29,000 --> 20:33:34,800
promise we'll remove the
24097
20:33:32,360 --> 20:33:37,760
console.log and we're going to run load
24098
20:33:34,800 --> 20:33:43,480
products which is asynchronous
24099
20:33:37,760 --> 20:33:45,760
so here we'll type load products and
24100
20:33:43,480 --> 20:33:48,360
brackets and now we're going to give
24101
20:33:45,760 --> 20:33:50,320
load products a callback function like
24102
20:33:48,360 --> 20:33:54,960
we did down
24103
20:33:50,320 --> 20:33:57,760
here brackets arrow and curly
24104
20:33:54,960 --> 20:34:00,160
brackets so it will run this function
24105
20:33:57,760 --> 20:34:02,552
after load products is
24106
20:34:00,160 --> 20:34:05,232
finished once this is finished we want
24107
20:34:02,552 --> 20:34:11,360
to go to the next step so here we're
24108
20:34:05,232 --> 20:34:13,832
going to call resolve so resolve and
24109
20:34:11,360 --> 20:34:16,440
brackets so you can see that the syntax
24110
20:34:13,832 --> 20:34:19,640
here is very similar to jasmin's done
24111
20:34:16,440 --> 20:34:21,680
function we run some asynchronous code
24112
20:34:19,640 --> 20:34:26,232
and then we wait for it to finish and
24113
20:34:21,680 --> 20:34:26,232
then we call resolve to go to the next
24114
20:34:26,600 --> 20:34:33,552
step now what is the next step to This
24115
20:34:31,120 --> 20:34:36,360
Promise so you might think that this
24116
20:34:33,552 --> 20:34:39,720
code down here is the next
24117
20:34:36,360 --> 20:34:42,640
step however a promise actually creates
24118
20:34:39,720 --> 20:34:44,120
a separate line of code or a separate
24119
20:34:42,640 --> 20:34:48,040
thread of
24120
20:34:44,120 --> 20:34:51,040
code so here these two groups of code
24121
20:34:48,040 --> 20:34:52,832
are sort of running at the same time
24122
20:34:51,040 --> 20:34:55,600
feel free to pause the video to get a
24123
20:34:52,832 --> 20:34:58,440
longer look at this
24124
20:34:55,600 --> 20:35:01,320
diagram the reason promises are designed
24125
20:34:58,440 --> 20:35:04,960
this way is it allows JavaScript to do
24126
20:35:01,320 --> 20:35:08,160
multiple things at the same
24127
20:35:04,960 --> 20:35:11,872
time so when the promise finishes it can
24128
20:35:08,160 --> 20:35:13,800
do a Next Step but this next step is
24129
20:35:11,872 --> 20:35:17,000
going to be separate from the rest of
24130
20:35:13,800 --> 20:35:19,512
the code it sort of does the next step
24131
20:35:17,000 --> 20:35:19,512
on the
24132
20:35:19,600 --> 20:35:26,160
side so right now this promise creates a
24133
20:35:23,760 --> 20:35:28,360
separate thread of code but this
24134
20:35:26,160 --> 20:35:32,400
separate thread doesn't actually have a
24135
20:35:28,360 --> 20:35:32,400
next step so we're going to add
24136
20:35:33,320 --> 20:35:39,872
one to add a next step to a promise at
24137
20:35:37,192 --> 20:35:44,552
the end and we're going to use a method
24138
20:35:39,872 --> 20:35:47,760
called dot then and
24139
20:35:44,552 --> 20:35:50,832
brackets and we need to give then a
24140
20:35:47,760 --> 20:35:52,480
function so we're going to type brackets
24141
20:35:50,832 --> 20:35:56,960
arrow and Cur
24142
20:35:52,480 --> 20:36:01,760
brackets and inside here let's just
24143
20:35:56,960 --> 20:36:05,440
console.log the string Next
24144
20:36:01,760 --> 20:36:08,640
Step so first we run this asynchronous
24145
20:36:05,440 --> 20:36:11,280
code and then we wait for it to finish
24146
20:36:08,640 --> 20:36:14,440
and then we run resolve and resolve
24147
20:36:11,280 --> 20:36:14,440
makes it go to the next
24148
20:36:14,480 --> 20:36:19,640
step to make this easier to see in the
24149
20:36:16,960 --> 20:36:23,040
console let's actually add some console.
24150
20:36:19,640 --> 20:36:26,160
logs to track the progress of this code
24151
20:36:23,040 --> 20:36:30,360
so at the top let's
24152
20:36:26,160 --> 20:36:35,640
console.log the string start
24153
20:36:30,360 --> 20:36:38,320
promise and then in here let's
24154
20:36:35,640 --> 20:36:40,832
console.log the string
24155
20:36:38,320 --> 20:36:43,760
finished
24156
20:36:40,832 --> 20:36:45,832
loading and we'll also comment out the
24157
20:36:43,760 --> 20:36:48,480
code that we had
24158
20:36:45,832 --> 20:36:52,720
before so we'll type
24159
20:36:48,480 --> 20:36:54,192
slashstar and at the bottom star slash
24160
20:36:52,720 --> 20:36:57,872
and now let's
24161
20:36:54,192 --> 20:36:57,872
save and check our
24162
20:37:00,760 --> 20:37:06,720
console so let's go through this step by
24163
20:37:03,680 --> 20:37:07,960
step first we start the promise which we
24164
20:37:06,720 --> 20:37:10,480
see here
24165
20:37:07,960 --> 20:37:13,720
and then we call load products which we
24166
20:37:10,480 --> 20:37:16,832
see here once the products are finished
24167
20:37:13,720 --> 20:37:19,600
loading it's going to run this function
24168
20:37:16,832 --> 20:37:21,720
and then we'll display finish loading
24169
20:37:19,600 --> 20:37:24,512
and then we're going to call resolve
24170
20:37:21,720 --> 20:37:28,280
which goes to the next step which runs
24171
20:37:24,512 --> 20:37:32,000
this function and we display Next
24172
20:37:28,280 --> 20:37:33,800
Step so resolve lets us control when to
24173
20:37:32,000 --> 20:37:37,160
go to the next
24174
20:37:33,800 --> 20:37:39,720
step in this case we waited until load
24175
20:37:37,160 --> 20:37:42,872
product prods was finished and then we
24176
20:37:39,720 --> 20:37:46,040
called resolve to go to the next
24177
20:37:42,872 --> 20:37:48,640
step so that's how promises work they
24178
20:37:46,040 --> 20:37:51,640
let us split our code into separate
24179
20:37:48,640 --> 20:37:56,000
steps and then we can wait for one step
24180
20:37:51,640 --> 20:37:59,232
to finish before going to the next
24181
20:37:56,000 --> 20:38:01,192
step now that we understand promises
24182
20:37:59,232 --> 20:38:06,160
let's convert the code that we had
24183
20:38:01,192 --> 20:38:06,160
before from a call back to using a
24184
20:38:06,360 --> 20:38:11,120
promise so first let's remove these
24185
20:38:08,680 --> 20:38:13,640
console. logs to make our code a little
24186
20:38:11,120 --> 20:38:13,640
easier to
24187
20:38:15,512 --> 20:38:21,800
read now in our previous code we
24188
20:38:18,872 --> 20:38:25,080
actually had two steps the first step is
24189
20:38:21,800 --> 20:38:28,400
to call load products and then once this
24190
20:38:25,080 --> 20:38:31,960
is finished the second step is to call
24191
20:38:28,400 --> 20:38:34,440
render order summary and render payment
24192
20:38:31,960 --> 20:38:37,000
summary and in our promise we have the
24193
20:38:34,440 --> 20:38:38,400
same thing our first step is load
24194
20:38:37,000 --> 20:38:40,000
product
24195
20:38:38,400 --> 20:38:42,832
once this is finished we're going to
24196
20:38:40,000 --> 20:38:45,680
call resolve and then go to the Second
24197
20:38:42,832 --> 20:38:49,920
Step so we're just going to copy this
24198
20:38:45,680 --> 20:38:52,832
second step into the second step up here
24199
20:38:49,920 --> 20:38:54,640
so we'll select this code and then right
24200
20:38:52,832 --> 20:38:58,320
click
24201
20:38:54,640 --> 20:39:01,760
copy and in do then we're going to right
24202
20:38:58,320 --> 20:39:01,760
click and
24203
20:39:04,440 --> 20:39:10,320
paste and now let's save
24204
20:39:08,080 --> 20:39:13,120
and let's check the web page so we'll
24205
20:39:10,320 --> 20:39:16,320
open the project and you can see that
24206
20:39:13,120 --> 20:39:16,320
everything is loading
24207
20:39:18,280 --> 20:39:23,600
correctly So This Promise does the same
24208
20:39:20,960 --> 20:39:25,960
thing as a call back that we had before
24209
20:39:23,600 --> 20:39:29,280
both of them have two steps the first
24210
20:39:25,960 --> 20:39:32,320
step is to load the products and then we
24211
20:39:29,280 --> 20:39:34,480
wait for the products to finish loading
24212
20:39:32,320 --> 20:39:38,360
and then we do the Second Step which is
24213
20:39:34,480 --> 20:39:38,360
to render the page
24214
20:39:40,360 --> 20:39:45,320
so now you might be wondering why do we
24215
20:39:42,760 --> 20:39:48,360
use promises it looks like it's more
24216
20:39:45,320 --> 20:39:51,960
work and more code than just using a
24217
20:39:48,360 --> 20:39:54,680
callback so callbacks have a big problem
24218
20:39:51,960 --> 20:39:56,920
which is multiple callbacks cause a lot
24219
20:39:54,680 --> 20:39:56,920
of
24220
20:39:57,232 --> 20:40:02,640
nesting nesting means having code inside
24221
20:40:00,872 --> 20:40:05,872
code like
24222
20:40:02,640 --> 20:40:08,280
this to see why this is a problem let's
24223
20:40:05,872 --> 20:40:11,800
say that we want to load the cart from
24224
20:40:08,280 --> 20:40:14,800
the back end as well I actually set up a
24225
20:40:11,800 --> 20:40:17,000
URL path that we can use to practice
24226
20:40:14,800 --> 20:40:21,160
called SLC
24227
20:40:17,000 --> 20:40:24,832
cart so first let's go into products.
24228
20:40:21,160 --> 20:40:27,080
JS and we're going to copy load products
24229
20:40:24,832 --> 20:40:30,040
and change it to load the
24230
20:40:27,080 --> 20:40:32,400
cart so we'll select this
24231
20:40:30,040 --> 20:40:34,440
function and then
24232
20:40:32,400 --> 20:40:38,120
rightclick
24233
20:40:34,440 --> 20:40:39,872
copy and let's open cart. Js
24234
20:40:38,120 --> 20:40:42,800
since we're going to load the cart from
24235
20:40:39,872 --> 20:40:44,960
the back end and let's scroll down to
24236
20:40:42,800 --> 20:40:44,960
the
24237
20:40:46,000 --> 20:40:53,160
bottom and here we'll right click and
24238
20:40:50,440 --> 20:40:56,080
paste that
24239
20:40:53,160 --> 20:40:59,192
code and now instead of loading the
24240
20:40:56,080 --> 20:41:01,440
products let's load the cart from the
24241
20:40:59,192 --> 20:41:07,320
backend so first let's rename this
24242
20:41:01,440 --> 20:41:08,872
function to load Capital C cart
24243
20:41:07,320 --> 20:41:12,040
and the first thing we need to change is
24244
20:41:08,872 --> 20:41:15,600
the URL path so instead of loading SL
24245
20:41:12,040 --> 20:41:16,872
products we're going to load slash cart
24246
20:41:15,600 --> 20:41:20,920
from my
24247
20:41:16,872 --> 20:41:23,360
backend so normally when we load SL cart
24248
20:41:20,920 --> 20:41:25,640
the backend will give us a cart
24249
20:41:23,360 --> 20:41:28,192
array however since we're just
24250
20:41:25,640 --> 20:41:32,232
practicing my backend will just give us
24251
20:41:28,192 --> 20:41:32,232
some text when we load SL
24252
20:41:33,800 --> 20:41:40,080
cart next we don't need this products
24253
20:41:36,680 --> 20:41:41,160
code anymore so we can select it and
24254
20:41:40,080 --> 20:41:48,160
then delete
24255
20:41:41,160 --> 20:41:50,552
it and instead let's just console. log
24256
20:41:48,160 --> 20:41:56,000
brackets and we just display the
24257
20:41:50,552 --> 20:42:00,400
response that we get back xhr do
24258
20:41:56,000 --> 20:42:00,400
response and we can remove this other
24259
20:42:00,552 --> 20:42:04,000
console.log and
24260
20:42:05,232 --> 20:42:10,280
save so now let's use load cart in our
24261
20:42:08,512 --> 20:42:13,400
previous
24262
20:42:10,280 --> 20:42:15,552
example on the left we'll scroll down
24263
20:42:13,400 --> 20:42:20,040
and open checkout.
24264
20:42:15,552 --> 20:42:25,400
JS and at the top let's import load cart
24265
20:42:20,040 --> 20:42:29,480
so here we'll import curly brackets load
24266
20:42:25,400 --> 20:42:32,400
cart from a string and we'll go to the
24267
20:42:29,480 --> 20:42:38,480
data folder which is do
24268
20:42:32,400 --> 20:42:38,480
dotdata slash and we'll load C.J
24269
20:42:40,280 --> 20:42:46,872
and now we're going to use this in our
24270
20:42:42,600 --> 20:42:49,640
callback code to show the problem with
24271
20:42:46,872 --> 20:42:54,080
callbacks first let's comment out this
24272
20:42:49,640 --> 20:42:57,832
promise so we can focus on the Callback
24273
20:42:54,080 --> 20:43:00,640
code at the top we'll type
24274
20:42:57,832 --> 20:43:03,000
slashstar and here star
24275
20:43:00,640 --> 20:43:05,120
slash and we'll remove the comments for
24276
20:43:03,000 --> 20:43:08,280
the
24277
20:43:05,120 --> 20:43:10,640
Callback and after we load the products
24278
20:43:08,280 --> 20:43:13,400
we're also going to load the
24279
20:43:10,640 --> 20:43:17,832
cart so inside this function we're going
24280
20:43:13,400 --> 20:43:20,720
to type load cart brackets and we're
24281
20:43:17,832 --> 20:43:20,720
going to give it a
24282
20:43:22,280 --> 20:43:27,440
function so this function is going to
24283
20:43:24,512 --> 20:43:29,640
run after the cart has
24284
20:43:27,440 --> 20:43:32,080
loaded so now let's say that we want to
24285
20:43:29,640 --> 20:43:35,280
wait for the products and the cart to
24286
20:43:32,080 --> 20:43:38,280
load before we render the
24287
20:43:35,280 --> 20:43:42,120
page to do that we need to move this
24288
20:43:38,280 --> 20:43:45,120
code inside this inner
24289
20:43:42,120 --> 20:43:47,040
function so we'll select this and then
24290
20:43:45,120 --> 20:43:50,320
right click
24291
20:43:47,040 --> 20:43:52,800
cut inside load cart we're going to
24292
20:43:50,320 --> 20:43:56,552
right click and
24293
20:43:52,800 --> 20:43:59,680
paste and remove this extra
24294
20:43:56,552 --> 20:44:02,720
line so now this code is going to load
24295
20:43:59,680 --> 20:44:05,000
the products wait for it to finish and
24296
20:44:02,720 --> 20:44:07,480
then it's going to load the cart and
24297
20:44:05,000 --> 20:44:09,512
then wait for the cart to finish
24298
20:44:07,480 --> 20:44:13,120
and then it will render the page or
24299
20:44:09,512 --> 20:44:16,640
display the page so let's
24300
20:44:13,120 --> 20:44:19,320
save and check the
24301
20:44:16,640 --> 20:44:22,552
console and now you can see that we
24302
20:44:19,320 --> 20:44:25,800
loaded the products and then we loaded
24303
20:44:22,552 --> 20:44:29,480
the cart and if we open the
24304
20:44:25,800 --> 20:44:32,872
page everything was displayed
24305
20:44:29,480 --> 20:44:35,512
properly so now let's go back to our
24306
20:44:32,872 --> 20:44:38,192
code and notice that when we added
24307
20:44:35,512 --> 20:44:39,600
another call back we we created another
24308
20:44:38,192 --> 20:44:43,480
layer of
24309
20:44:39,600 --> 20:44:45,360
nesting so we have code inside code
24310
20:44:43,480 --> 20:44:48,720
inside
24311
20:44:45,360 --> 20:44:51,680
code the problem with this is that each
24312
20:44:48,720 --> 20:44:54,680
layer of nesting adds some indents at
24313
20:44:51,680 --> 20:44:57,360
the front or spaces at the
24314
20:44:54,680 --> 20:45:00,080
front this means if we have lots of
24315
20:44:57,360 --> 20:45:02,552
callbacks our code will become more and
24316
20:45:00,080 --> 20:45:05,552
more nested like
24317
20:45:02,552 --> 20:45:08,440
this this is a big problem with
24318
20:45:05,552 --> 20:45:11,680
callbacks multi multiple callbacks cause
24319
20:45:08,440 --> 20:45:15,440
a lot of nesting and all these indents
24320
20:45:11,680 --> 20:45:15,440
make our code hard to work
24321
20:45:16,760 --> 20:45:23,512
with the promises solve this problem by
24322
20:45:20,232 --> 20:45:27,000
letting us flatten our
24323
20:45:23,512 --> 20:45:29,512
code for example let's load the products
24324
20:45:27,000 --> 20:45:31,232
and the carts again but this time using
24325
20:45:29,512 --> 20:45:33,512
our promise
24326
20:45:31,232 --> 20:45:35,640
instead first let's comment out the
24327
20:45:33,512 --> 20:45:38,920
Callback using
24328
20:45:35,640 --> 20:45:41,960
slashstar and and at the bottom star
24329
20:45:38,920 --> 20:45:46,280
slash and we're going to uncomment the
24330
20:45:41,960 --> 20:45:46,280
promise so here we'll remove the
24331
20:45:48,720 --> 20:45:54,920
comments and then in the next
24332
20:45:51,920 --> 20:45:58,120
step instead of rendering the
24333
20:45:54,920 --> 20:46:03,280
page we're going to load the cart like
24334
20:45:58,120 --> 20:46:05,000
we did down here so we'll type load cart
24335
20:46:03,280 --> 20:46:08,160
and
24336
20:46:05,000 --> 20:46:11,120
brackets now we have a problem here we
24337
20:46:08,160 --> 20:46:15,000
want to wait for load card to finish and
24338
20:46:11,120 --> 20:46:17,720
then go to the next step however we
24339
20:46:15,000 --> 20:46:21,400
usually do this using resolve but we
24340
20:46:17,720 --> 20:46:25,160
don't have resolve inside this
24341
20:46:21,400 --> 20:46:28,480
function to solve this problem inside.
24342
20:46:25,160 --> 20:46:32,512
then we can actually return a new
24343
20:46:28,480 --> 20:46:38,280
promise so at the top we're going to
24344
20:46:32,512 --> 20:46:40,360
return a new promise and
24345
20:46:38,280 --> 20:46:45,000
brackets so we're going to give this
24346
20:46:40,360 --> 20:46:48,552
promise a function just like we did up
24347
20:46:45,000 --> 20:46:49,800
here so we'll type brackets arrow and
24348
20:46:48,552 --> 20:46:52,400
curly
24349
20:46:49,800 --> 20:46:56,360
brackets and this function gets one
24350
20:46:52,400 --> 20:46:56,360
parameter called
24351
20:46:56,680 --> 20:47:03,600
resolve so inside do then if we want to
24352
20:47:00,920 --> 20:47:08,760
use resolve to wait for some code to
24353
20:47:03,600 --> 20:47:08,760
finish we can return a new promise
24354
20:47:09,160 --> 20:47:14,832
so now let's move our code into this new
24355
20:47:11,440 --> 20:47:19,160
promise so we can use resolve so we'll
24356
20:47:14,832 --> 20:47:23,360
select this code and then right click
24357
20:47:19,160 --> 20:47:25,232
cut and inside here we're going to right
24358
20:47:23,360 --> 20:47:28,720
click and
24359
20:47:25,232 --> 20:47:31,360
paste and remove these new
24360
20:47:28,720 --> 20:47:34,232
lines and we can give load card a
24361
20:47:31,360 --> 20:47:38,600
function to run when it's finished so
24362
20:47:34,232 --> 20:47:41,800
we'll type brackets arrow and and curler
24363
20:47:38,600 --> 20:47:44,800
brackets once load card is finished it
24364
20:47:41,800 --> 20:47:47,080
runs this function and then inside here
24365
20:47:44,800 --> 20:47:52,160
we're going to call resolve so that we
24366
20:47:47,080 --> 20:47:55,640
move to the next step so here we'll call
24367
20:47:52,160 --> 20:47:55,640
resolve and
24368
20:47:55,872 --> 20:48:01,760
brackets so now this will go to the next
24369
20:47:59,232 --> 20:48:04,640
step and we currently don't have a next
24370
20:48:01,760 --> 20:48:09,000
step to This Promise so let's add The
24371
20:48:04,640 --> 20:48:12,872
Next Step at the end to add another step
24372
20:48:09,000 --> 20:48:16,080
we're going to use dot then
24373
20:48:12,872 --> 20:48:20,360
brackets and we'll give this a function
24374
20:48:16,080 --> 20:48:20,360
brackets arrow and curler
24375
20:48:20,920 --> 20:48:26,512
brackets so the third step is to render
24376
20:48:24,600 --> 20:48:29,280
the page so we're going to do the same
24377
20:48:26,512 --> 20:48:33,800
thing inside
24378
20:48:29,280 --> 20:48:37,080
here so let's select this code and we'll
24379
20:48:33,800 --> 20:48:39,160
rightclick copy
24380
20:48:37,080 --> 20:48:42,232
inside the third step we're going to
24381
20:48:39,160 --> 20:48:45,000
right click and
24382
20:48:42,232 --> 20:48:46,280
paste and adjust the formatting if you
24383
20:48:45,000 --> 20:48:49,832
need
24384
20:48:46,280 --> 20:48:53,552
to so that's how we do these three steps
24385
20:48:49,832 --> 20:48:57,000
in the Callback using a
24386
20:48:53,552 --> 20:49:00,000
promise we do the first step wait for it
24387
20:48:57,000 --> 20:49:03,480
to finish call resolve and then it goes
24388
20:49:00,000 --> 20:49:06,720
to the second step we do the Second Step
24389
20:49:03,480 --> 20:49:10,040
wait for it to finish call resolve and
24390
20:49:06,720 --> 20:49:10,040
and then we go to the third
24391
20:49:10,080 --> 20:49:16,920
step so we promise let us have as many
24392
20:49:13,552 --> 20:49:19,920
steps as we want and we can use resolve
24393
20:49:16,920 --> 20:49:22,800
to wait for each step to finish before
24394
20:49:19,920 --> 20:49:26,600
going to the next
24395
20:49:22,800 --> 20:49:29,120
step so let's save this and check the
24396
20:49:26,600 --> 20:49:30,360
console to make sure it worked so we'll
24397
20:49:29,120 --> 20:49:33,832
open the
24398
20:49:30,360 --> 20:49:37,320
console and inside here we have the same
24399
20:49:33,832 --> 20:49:40,080
messages as last time first we load the
24400
20:49:37,320 --> 20:49:42,600
products we wait for it to finish and
24401
20:49:40,080 --> 20:49:43,400
then go to the next step then we load
24402
20:49:42,600 --> 20:49:46,360
the
24403
20:49:43,400 --> 20:49:49,192
cart wait for it to finish and then go
24404
20:49:46,360 --> 20:49:53,000
to the next step and then we render or
24405
20:49:49,192 --> 20:49:56,920
display the page if we open the page
24406
20:49:53,000 --> 20:49:56,920
you'll see that everything displayed
24407
20:49:57,512 --> 20:50:02,960
properly so now let's go back and
24408
20:49:59,872 --> 20:50:05,400
compare promises and
24409
20:50:02,960 --> 20:50:08,480
callbacks so even though promises
24410
20:50:05,400 --> 20:50:11,320
require a bunch of setup code you can
24411
20:50:08,480 --> 20:50:14,400
see that it keeps our code relatively
24412
20:50:11,320 --> 20:50:18,512
flat the third step doesn't get more and
24413
20:50:14,400 --> 20:50:18,512
more nested like in
24414
20:50:19,000 --> 20:50:24,832
callbacks so if we have lots of steps in
24415
20:50:22,080 --> 20:50:27,872
our promise this is what the code will
24416
20:50:24,832 --> 20:50:31,000
look like you can see that even when we
24417
20:50:27,872 --> 20:50:32,640
add more steps the code does not become
24418
20:50:31,000 --> 20:50:35,920
more and more
24419
20:50:32,640 --> 20:50:37,040
nested so promises help keep our code
24420
20:50:35,920 --> 20:50:39,320
flat
24421
20:50:37,040 --> 20:50:42,320
and avoid too much
24422
20:50:39,320 --> 20:50:46,440
nesting so that's why it's recommended
24423
20:50:42,320 --> 20:50:50,600
to use promises instead of callbacks
24424
20:50:46,440 --> 20:50:50,600
promises will keep our code more
24425
20:50:52,920 --> 20:50:58,120
flat so let's actually add some new
24426
20:50:55,512 --> 20:51:01,760
lines here as well as
24427
20:50:58,120 --> 20:51:05,800
here to better separate these steps so
24428
20:51:01,760 --> 20:51:05,800
it's a little easier to read
24429
20:51:07,160 --> 20:51:10,512
lastly we're going to learn two more
24430
20:51:09,000 --> 20:51:13,640
features of
24431
20:51:10,512 --> 20:51:17,832
promises the first feature is we can
24432
20:51:13,640 --> 20:51:21,080
give resolve a value so inside here
24433
20:51:17,832 --> 20:51:23,192
let's give it a value like the string
24434
20:51:21,080 --> 20:51:26,480
value
24435
20:51:23,192 --> 20:51:29,512
one so whatever we give to resolve is
24436
20:51:26,480 --> 20:51:32,832
going to be saved in a parameter inside
24437
20:51:29,512 --> 20:51:36,552
doth so inside this function we can add
24438
20:51:32,832 --> 20:51:39,232
a parameter called value
24439
20:51:36,552 --> 20:51:42,080
and now whatever we give to resolve is
24440
20:51:39,232 --> 20:51:43,480
going to be saved inside here and now we
24441
20:51:42,080 --> 20:51:47,120
can use
24442
20:51:43,480 --> 20:51:50,400
it so this lets us share a value between
24443
20:51:47,120 --> 20:51:50,400
two steps of a
24444
20:51:50,512 --> 20:51:57,160
promise so in here let's check if this
24445
20:51:53,680 --> 20:51:59,040
worked using
24446
20:51:57,160 --> 20:52:01,280
console.log
24447
20:51:59,040 --> 20:52:04,760
value and
24448
20:52:01,280 --> 20:52:07,280
save and if we look inside our
24449
20:52:04,760 --> 20:52:08,192
console you'll see that it displayed
24450
20:52:07,280 --> 20:52:11,192
value
24451
20:52:08,192 --> 20:52:14,280
one so whatever we give to resolve will
24452
20:52:11,192 --> 20:52:14,280
be saved in this
24453
20:52:15,800 --> 20:52:22,640
parameter the second feature is we can
24454
20:52:18,760 --> 20:52:25,832
run multiple Promises at the same time
24455
20:52:22,640 --> 20:52:29,040
currently we wait for things to load one
24456
20:52:25,832 --> 20:52:31,800
at a time for example we wait for the
24457
20:52:29,040 --> 20:52:34,552
products to load and then we wait for
24458
20:52:31,800 --> 20:52:37,960
the cart to load and then we go to the
24459
20:52:34,552 --> 20:52:40,760
next step to make this more efficient we
24460
20:52:37,960 --> 20:52:42,800
can actually load the products and the
24461
20:52:40,760 --> 20:52:45,800
cart at the same
24462
20:52:42,800 --> 20:52:47,400
time to do that we can use a feature
24463
20:52:45,800 --> 20:52:50,360
called
24464
20:52:47,400 --> 20:52:53,320
promise.all promise.all lets us run
24465
20:52:50,360 --> 20:52:57,040
multiple Promises at the same time and
24466
20:52:53,320 --> 20:52:57,040
wait for all of them to
24467
20:52:57,640 --> 20:53:02,960
finish so let's scroll to the top and
24468
20:53:01,000 --> 20:53:07,080
we'll do an
24469
20:53:02,960 --> 20:53:10,480
example so here we'll type the code
24470
20:53:07,080 --> 20:53:10,480
capital P
24471
20:53:10,680 --> 20:53:16,480
promise.all and
24472
20:53:13,720 --> 20:53:18,872
brackets inside these brackets we're
24473
20:53:16,480 --> 20:53:22,080
going to give this an
24474
20:53:18,872 --> 20:53:25,120
array inside this array we can give it
24475
20:53:22,080 --> 20:53:27,960
multiple promises to wait
24476
20:53:25,120 --> 20:53:31,552
for so let's just copy paste the two
24477
20:53:27,960 --> 20:53:34,552
promises that we have here into this
24478
20:53:31,552 --> 20:53:36,960
array so we'll start from here at the
24479
20:53:34,552 --> 20:53:41,280
end of the first promise and we'll
24480
20:53:36,960 --> 20:53:44,000
select this code right click
24481
20:53:41,280 --> 20:53:47,440
copy and in this array we're going to
24482
20:53:44,000 --> 20:53:47,440
right click and
24483
20:53:48,512 --> 20:53:54,640
paste and remove this line so we have
24484
20:53:51,680 --> 20:53:56,920
our first promise and at the end we're
24485
20:53:54,640 --> 20:53:59,800
going to add a comma and we're going to
24486
20:53:56,920 --> 20:54:02,920
give it a second promise so we'll scroll
24487
20:53:59,800 --> 20:54:05,512
down to our second promise here and
24488
20:54:02,920 --> 20:54:06,920
we're going to select this code starting
24489
20:54:05,512 --> 20:54:11,600
from here
24490
20:54:06,920 --> 20:54:15,192
and select the promise right click
24491
20:54:11,600 --> 20:54:18,600
copy and at the top we're going to right
24492
20:54:15,192 --> 20:54:18,600
click and
24493
20:54:19,320 --> 20:54:25,120
paste so we basically created an array
24494
20:54:22,552 --> 20:54:26,960
of promises and then we're going to give
24495
20:54:25,120 --> 20:54:29,040
this array to
24496
20:54:26,960 --> 20:54:31,640
promise.all and it's going to wait for
24497
20:54:29,040 --> 20:54:33,680
all of the promises to finish before
24498
20:54:31,640 --> 20:54:36,760
going to the next
24499
20:54:33,680 --> 20:54:40,832
step so now let's add a next
24500
20:54:36,760 --> 20:54:45,160
Step at the end to add a Next Step we're
24501
20:54:40,832 --> 20:54:47,480
going to use dot then and brackets and
24502
20:54:45,160 --> 20:54:49,232
we'll add a new line to make it a little
24503
20:54:47,480 --> 20:54:53,232
easier to
24504
20:54:49,232 --> 20:54:55,512
read so as usual dot then adds a next
24505
20:54:53,232 --> 20:54:58,160
step to a
24506
20:54:55,512 --> 20:55:02,872
promise it will give it a function to
24507
20:54:58,160 --> 20:55:02,872
run so brackets arrow and curling
24508
20:55:03,160 --> 20:55:09,480
brackets after we load the products and
24509
20:55:06,400 --> 20:55:12,320
load the cart we're going to render the
24510
20:55:09,480 --> 20:55:15,552
page so let's copy paste that code
24511
20:55:12,320 --> 20:55:19,512
inside this next step so we'll scroll
24512
20:55:15,552 --> 20:55:22,600
down to the render code and we'll select
24513
20:55:19,512 --> 20:55:26,832
it right click
24514
20:55:22,600 --> 20:55:30,232
copy and at the top inside then we'll
24515
20:55:26,832 --> 20:55:30,232
right click and
24516
20:55:30,920 --> 20:55:38,192
paste so now let's comment out our old
24517
20:55:33,832 --> 20:55:41,160
promise and try out promise do
24518
20:55:38,192 --> 20:55:42,600
all above our old promise we're going to
24519
20:55:41,160 --> 20:55:45,872
type
24520
20:55:42,600 --> 20:55:47,832
slashstar and below it we're going to
24521
20:55:45,872 --> 20:55:51,160
type star
24522
20:55:47,832 --> 20:55:54,000
slash and let's
24523
20:55:51,160 --> 20:55:56,232
save we'll go to our
24524
20:55:54,000 --> 20:55:59,600
console and you can see that it did the
24525
20:55:56,232 --> 20:56:01,720
same thing it loaded the products and it
24526
20:55:59,600 --> 20:56:04,760
loaded the cart and it's going to wait
24527
20:56:01,720 --> 20:56:07,160
for both of them to call resolve before
24528
20:56:04,760 --> 20:56:10,280
going to the next step which is to
24529
20:56:07,160 --> 20:56:12,400
render or display the page if we open
24530
20:56:10,280 --> 20:56:14,832
the page you'll see that everything
24531
20:56:12,400 --> 20:56:17,192
displayed
24532
20:56:14,832 --> 20:56:20,280
properly so that's
24533
20:56:17,192 --> 20:56:23,000
promise.all we can give it an array of
24534
20:56:20,280 --> 20:56:25,760
promises and it will run both of them at
24535
20:56:23,000 --> 20:56:28,960
the same time instead of waiting for
24536
20:56:25,760 --> 20:56:32,400
each promise one by
24537
20:56:28,960 --> 20:56:35,800
one also the values that we give to
24538
20:56:32,400 --> 20:56:38,920
resolve are saved in a parameter so
24539
20:56:35,800 --> 20:56:40,400
inside do then we can add a parameter
24540
20:56:38,920 --> 20:56:43,192
called
24541
20:56:40,400 --> 20:56:45,440
values and then these values that we
24542
20:56:43,192 --> 20:56:49,920
give to resolve are going to be saved
24543
20:56:45,440 --> 20:56:51,552
inside here so if we
24544
20:56:49,920 --> 20:56:53,480
console.log
24545
20:56:51,552 --> 20:56:57,040
values and
24546
20:56:53,480 --> 20:56:59,800
save and check the
24547
20:56:57,040 --> 20:57:03,320
console and it gives us an array of
24548
20:56:59,800 --> 20:57:06,160
values the first value is from the first
24549
20:57:03,320 --> 20:57:09,000
promise and the second value is from the
24550
20:57:06,160 --> 20:57:11,512
the second promise so here we didn't
24551
20:57:09,000 --> 20:57:14,320
give anything to resolve so the second
24552
20:57:11,512 --> 20:57:14,320
value is
24553
20:57:14,400 --> 20:57:18,920
undefined so that's an overview of
24554
20:57:16,832 --> 20:57:21,800
promises and
24555
20:57:18,920 --> 20:57:24,960
promise.all promises are a better way to
24556
20:57:21,800 --> 20:57:26,040
wait for asynchronous code to finish
24557
20:57:24,960 --> 20:57:28,440
versus
24558
20:57:26,040 --> 20:57:32,120
callbacks because they help us avoid
24559
20:57:28,440 --> 20:57:35,360
nesting and keep our code relatively
24560
20:57:32,120 --> 20:57:38,440
flat promises also have more features
24561
20:57:35,360 --> 20:57:41,400
like promise all which lets us run
24562
20:57:38,440 --> 20:57:45,192
multiple Promises at the same
24563
20:57:41,400 --> 20:57:47,512
time now let's save our changes into git
24564
20:57:45,192 --> 20:57:50,552
we're going to open the git
24565
20:57:47,512 --> 20:57:53,512
section inside cart.
24566
20:57:50,552 --> 20:57:55,640
JS we added a function to practice
24567
20:57:53,512 --> 20:57:58,440
loading the cart from the back
24568
20:57:55,640 --> 20:58:02,080
end and then in checkout.
24569
20:57:58,440 --> 20:58:06,800
JS we learn a promises and converted our
24570
20:58:02,080 --> 20:58:09,512
code from a callback to a promise
24571
20:58:06,800 --> 20:58:12,600
let's type a message describing our
24572
20:58:09,512 --> 20:58:19,320
changes learn
24573
20:58:12,600 --> 20:58:21,720
promises and convert code to promises
24574
20:58:19,320 --> 20:58:21,720
and
24575
20:58:26,360 --> 20:58:30,872
commit now that we learned promises
24576
20:58:29,040 --> 20:58:32,080
we're going to learn another feature
24577
20:58:30,872 --> 20:58:36,000
called
24578
20:58:32,080 --> 20:58:38,512
fetch fetch is a better way to make htd
24579
20:58:36,000 --> 20:58:38,512
PP
24580
20:58:39,040 --> 20:58:45,512
requests let's go back to our
24581
20:58:41,600 --> 20:58:48,232
code and we're going to open products.
24582
20:58:45,512 --> 20:58:50,512
JS and we're going to scroll down to the
24583
20:58:48,232 --> 20:58:54,640
load products
24584
20:58:50,512 --> 20:58:58,232
function currently we're using XML HTTP
24585
20:58:54,640 --> 20:59:00,512
request to make requests to the back end
24586
20:58:58,232 --> 20:59:04,120
and this uses a call
24587
20:59:00,512 --> 20:59:08,232
back fetch also lets us make requests to
24588
20:59:04,120 --> 20:59:11,232
the backend but fetch uses a
24589
20:59:08,232 --> 20:59:14,360
promise so let's do an example and we'll
24590
20:59:11,232 --> 20:59:15,232
make the same request except using fetch
24591
20:59:14,360 --> 20:59:19,600
this
24592
20:59:15,232 --> 20:59:22,512
time we'll scroll up and above load
24593
20:59:19,600 --> 20:59:23,512
products let's create another function
24594
20:59:22,512 --> 20:59:29,040
using
24595
20:59:23,512 --> 20:59:33,760
function and we'll name it load products
24596
20:59:29,040 --> 20:59:36,480
Fetch and brackets and curly
24597
20:59:33,760 --> 20:59:41,400
brackets and to use fetch we're going to
24598
20:59:36,480 --> 20:59:45,640
use the built-in function Fetch and
24599
20:59:41,400 --> 20:59:48,480
brackets so this makes an HTTP request
24600
20:59:45,640 --> 20:59:52,480
just like we did down here so let's make
24601
20:59:48,480 --> 20:59:52,480
the same request as we did in this
24602
20:59:53,000 --> 20:59:59,192
function at the bottom we made a get
24603
20:59:56,400 --> 21:00:03,552
request to this
24604
20:59:59,192 --> 21:00:05,920
URL so by default fetch will make a get
24605
21:00:03,552 --> 21:00:09,080
request so we just need to give it the
24606
21:00:05,920 --> 21:00:13,800
the URL that we want to make the request
24607
21:00:09,080 --> 21:00:16,320
to so at the bottom let's select this
24608
21:00:13,800 --> 21:00:18,400
URL and we're just going to
24609
21:00:16,320 --> 21:00:22,320
rightclick
24610
21:00:18,400 --> 21:00:26,000
copy and at the top inside fetch we're
24611
21:00:22,320 --> 21:00:28,920
going to right click and
24612
21:00:26,000 --> 21:00:31,832
paste so this will make the exact same
24613
21:00:28,920 --> 21:00:34,400
request as we did
24614
21:00:31,832 --> 21:00:38,512
below so you can see that fetch is a lot
24615
21:00:34,400 --> 21:00:41,192
more simple than XML HTTP request we
24616
21:00:38,512 --> 21:00:44,000
don't have to create a new object or do
24617
21:00:41,192 --> 21:00:48,192
any setup we can just call Fetch and
24618
21:00:44,000 --> 21:00:48,192
tell it where we want the request to
24619
21:00:48,280 --> 21:00:54,232
go so this will send a request to the
24620
21:00:51,280 --> 21:00:57,320
back end and now how do we get the
24621
21:00:54,232 --> 21:01:01,920
response so instead of using a call back
24622
21:00:57,320 --> 21:01:05,080
to get the response fetch uses a
24623
21:01:01,920 --> 21:01:08,192
promise when we call fetch this is going
24624
21:01:05,080 --> 21:01:13,552
to create a promise and we can add a
24625
21:01:08,192 --> 21:01:14,800
next step to This Promise using dot then
24626
21:01:13,552 --> 21:01:17,320
and
24627
21:01:14,800 --> 21:01:22,000
brackets so we'll give dot then a
24628
21:01:17,320 --> 21:01:24,760
function brackets arrow and curly
24629
21:01:22,000 --> 21:01:26,960
brackets so the way this works is that
24630
21:01:24,760 --> 21:01:29,960
fetch is going to send a request to the
24631
21:01:26,960 --> 21:01:32,232
backend when we get a response it's
24632
21:01:29,960 --> 21:01:34,480
going to go to the next
24633
21:01:32,232 --> 21:01:37,360
step it's also going to save the
24634
21:01:34,480 --> 21:01:41,552
response inside inside a parameter in
24635
21:01:37,360 --> 21:01:43,640
here so we'll add a parameter called
24636
21:01:41,552 --> 21:01:45,800
response and this will contain the
24637
21:01:43,640 --> 21:01:49,160
response from the back
24638
21:01:45,800 --> 21:01:52,512
end so instead of using a call back to
24639
21:01:49,160 --> 21:01:54,640
wait for the response fetch uses a
24640
21:01:52,512 --> 21:01:58,320
promise to wait for the
24641
21:01:54,640 --> 21:02:00,920
response so here let's
24642
21:01:58,320 --> 21:02:03,192
console.log the response to see what it
24643
21:02:00,920 --> 21:02:03,192
looks
24644
21:02:03,400 --> 21:02:07,640
like and now let's run this code
24645
21:02:06,832 --> 21:02:11,120
at the
24646
21:02:07,640 --> 21:02:15,600
bottom we'll run this function using
24647
21:02:11,120 --> 21:02:18,280
load products Fetch and
24648
21:02:15,600 --> 21:02:22,512
brackets so now let's
24649
21:02:18,280 --> 21:02:22,512
save and take a look at the
24650
21:02:22,600 --> 21:02:29,680
console so here's the response that we
24651
21:02:25,232 --> 21:02:31,800
get from Fetch if we open it you can see
24652
21:02:29,680 --> 21:02:34,832
it gives us a bunch of information about
24653
21:02:31,800 --> 21:02:36,440
the response like the status or whether
24654
21:02:34,832 --> 21:02:39,360
it succeeded or
24655
21:02:36,440 --> 21:02:41,440
failed as well as the URL that we made
24656
21:02:39,360 --> 21:02:44,192
the request
24657
21:02:41,440 --> 21:02:46,512
to so how do we get the data for the
24658
21:02:44,192 --> 21:02:50,360
products from this
24659
21:02:46,512 --> 21:02:53,552
response to do that we'll go back to our
24660
21:02:50,360 --> 21:02:54,512
code and to get data that's attached to
24661
21:02:53,552 --> 21:02:58,232
this
24662
21:02:54,512 --> 21:03:02,120
response we're going to use
24663
21:02:58,232 --> 21:03:05,360
response. Json and
24664
21:03:02,120 --> 21:03:08,832
brackets so this gives us the Json or
24665
21:03:05,360 --> 21:03:12,360
the data attached to the response in
24666
21:03:08,832 --> 21:03:17,040
this case it's our products
24667
21:03:12,360 --> 21:03:20,800
data next response. Jon is actually
24668
21:03:17,040 --> 21:03:23,232
asynchronous it returns a
24669
21:03:20,800 --> 21:03:25,832
promise so we need to wait for this
24670
21:03:23,232 --> 21:03:28,080
promise to finish before we continue to
24671
21:03:25,832 --> 21:03:32,400
the next
24672
21:03:28,080 --> 21:03:36,160
step to do that inside. then we can
24673
21:03:32,400 --> 21:03:40,920
actually return another promise so here
24674
21:03:36,160 --> 21:03:44,320
we're going to return this
24675
21:03:40,920 --> 21:03:46,760
promise when we return a promise it will
24676
21:03:44,320 --> 21:03:48,680
wait for this promise to finish before
24677
21:03:46,760 --> 21:03:51,512
going to the next
24678
21:03:48,680 --> 21:03:56,832
step so now let's add another step to
24679
21:03:51,512 --> 21:03:59,480
This Promise using dot then brackets and
24680
21:03:56,832 --> 21:04:03,192
we'll give this a function again so
24681
21:03:59,480 --> 21:04:06,640
brackets arrow and curly
24682
21:04:03,192 --> 21:04:08,280
brackets when response. Json finishes
24683
21:04:06,640 --> 21:04:10,600
it's going to give us the data that's
24684
21:04:08,280 --> 21:04:14,160
attached to the response and it's going
24685
21:04:10,600 --> 21:04:16,600
to save it inside this
24686
21:04:14,160 --> 21:04:19,720
parameter so this response should
24687
21:04:16,600 --> 21:04:20,480
contain our products data so let's name
24688
21:04:19,720 --> 21:04:24,720
this
24689
21:04:20,480 --> 21:04:26,832
parameter products data and let's
24690
21:04:24,720 --> 21:04:29,920
console.log this to see what it looks
24691
21:04:26,832 --> 21:04:32,872
like so here we
24692
21:04:29,920 --> 21:04:34,400
console. log the
24693
21:04:32,872 --> 21:04:36,960
products
24694
21:04:34,400 --> 21:04:40,720
data and and
24695
21:04:36,960 --> 21:04:43,280
save and let's open the
24696
21:04:40,720 --> 21:04:46,872
console and you see here that the
24697
21:04:43,280 --> 21:04:49,720
products data is the array of products
24698
21:04:46,872 --> 21:04:52,400
that we're going to use in our Amazon
24699
21:04:49,720 --> 21:04:55,320
Project you'll also notice that instead
24700
21:04:52,400 --> 21:04:58,512
of giving us just a big Json string like
24701
21:04:55,320 --> 21:05:02,640
before it actually converted the Json
24702
21:04:58,512 --> 21:05:05,680
into an array so basically it did json.
24703
21:05:02,640 --> 21:05:08,160
pars on the response for us so this this
24704
21:05:05,680 --> 21:05:10,832
saved us a little bit of
24705
21:05:08,160 --> 21:05:13,040
code finally now that we have the
24706
21:05:10,832 --> 21:05:16,512
products array let's do the same thing
24707
21:05:13,040 --> 21:05:19,400
that we did down here so we'll scroll
24708
21:05:16,512 --> 21:05:21,832
down and select all of this
24709
21:05:19,400 --> 21:05:23,640
code and we'll right
24710
21:05:21,832 --> 21:05:26,000
click
24711
21:05:23,640 --> 21:05:28,552
copy and then up
24712
21:05:26,000 --> 21:05:32,832
here we'll remove
24713
21:05:28,552 --> 21:05:35,232
this and rightclick and
24714
21:05:32,832 --> 21:05:36,040
paste so we'll do the same steps as
24715
21:05:35,232 --> 21:05:38,720
before
24716
21:05:36,040 --> 21:05:42,160
except using a promise this
24717
21:05:38,720 --> 21:05:44,640
time first instead of doing json. pars
24718
21:05:42,160 --> 21:05:49,040
on the response we already have the
24719
21:05:44,640 --> 21:05:53,320
array of products so we can remove this
24720
21:05:49,040 --> 21:05:55,600
and replace it with products
24721
21:05:53,320 --> 21:05:58,920
data and then we're still going to
24722
21:05:55,600 --> 21:06:02,552
convert this from objects to classes
24723
21:05:58,920 --> 21:06:06,512
like before we'll keep this console.log
24724
21:06:02,552 --> 21:06:09,320
so we can track the progress
24725
21:06:06,512 --> 21:06:12,832
this last line of code let us do
24726
21:06:09,320 --> 21:06:15,800
something after we finish loading the
24727
21:06:12,832 --> 21:06:18,552
products however instead of using a call
24728
21:06:15,800 --> 21:06:19,640
back like before we're going to remove
24729
21:06:18,552 --> 21:06:23,920
this
24730
21:06:19,640 --> 21:06:27,232
line and to do something after this step
24731
21:06:23,920 --> 21:06:30,192
we can actually return this entire
24732
21:06:27,232 --> 21:06:33,360
promise so to make it easier to read
24733
21:06:30,192 --> 21:06:36,040
let's save this entire promise into a
24734
21:06:33,360 --> 21:06:41,512
variable using const
24735
21:06:36,040 --> 21:06:45,872
let's call it promise equals
24736
21:06:41,512 --> 21:06:48,832
fetch so let's add some new lines here
24737
21:06:45,872 --> 21:06:50,832
as well as here to make the code a
24738
21:06:48,832 --> 21:06:53,920
little easier to
24739
21:06:50,832 --> 21:06:56,680
read so we're basically calling fetch
24740
21:06:53,920 --> 21:07:01,480
which creates a promise and then we're
24741
21:06:56,680 --> 21:07:01,480
going to save this promise inside this
24742
21:07:01,760 --> 21:07:06,192
variable and then at the end of this
24743
21:07:04,040 --> 21:07:08,960
function we can just
24744
21:07:06,192 --> 21:07:12,120
return the promise so we're just going
24745
21:07:08,960 --> 21:07:14,920
to return this whole promise out of the
24746
21:07:12,120 --> 21:07:17,552
function and then we can add even more
24747
21:07:14,920 --> 21:07:21,080
steps after this
24748
21:07:17,552 --> 21:07:23,600
promise so down here this is going to
24749
21:07:21,080 --> 21:07:28,320
give us the promise and then we can
24750
21:07:23,600 --> 21:07:31,120
attach another step using dot then
24751
21:07:28,320 --> 21:07:31,920
brackets and inside here we can give it
24752
21:07:31,120 --> 21:07:35,000
a
24753
21:07:31,920 --> 21:07:37,440
function brackets arrow and curly
24754
21:07:35,000 --> 21:07:37,440
brackets
24755
21:07:39,040 --> 21:07:44,800
so this attaches another step to the end
24756
21:07:42,360 --> 21:07:46,360
of This Promise so basically attaches
24757
21:07:44,800 --> 21:07:49,512
another step
24758
21:07:46,360 --> 21:07:52,552
here so after we load all the products
24759
21:07:49,512 --> 21:07:54,960
let's just
24760
21:07:52,552 --> 21:07:57,480
console.log next
24761
21:07:54,960 --> 21:08:00,552
step and
24762
21:07:57,480 --> 21:08:03,680
save so we'll check the
24763
21:08:00,552 --> 21:08:08,960
console and we'll see that we loaded the
24764
21:08:03,680 --> 21:08:08,960
products and then after we did The Next
24765
21:08:10,760 --> 21:08:16,512
Step so we can actually return a promise
24766
21:08:14,280 --> 21:08:19,600
out of a function and then keep
24767
21:08:16,512 --> 21:08:23,192
attaching more steps to that
24768
21:08:19,600 --> 21:08:26,680
promise so that's how we use fetch it's
24769
21:08:23,192 --> 21:08:30,232
a better way to make HTTP requests
24770
21:08:26,680 --> 21:08:30,232
because it uses promises
24771
21:08:31,872 --> 21:08:38,160
directly so now let's use fetch in our
24772
21:08:34,640 --> 21:08:41,080
project instead of using XML HTTP
24773
21:08:38,160 --> 21:08:43,440
request so first let's comment out this
24774
21:08:41,080 --> 21:08:44,960
code because we were just practicing
24775
21:08:43,440 --> 21:08:48,800
we'll type
24776
21:08:44,960 --> 21:08:52,040
slashstar and at the bottom star
24777
21:08:48,800 --> 21:08:54,920
slash and let's scroll up to load
24778
21:08:52,040 --> 21:08:55,872
products Fetch and we're going to export
24779
21:08:54,920 --> 21:08:59,400
this
24780
21:08:55,872 --> 21:09:02,232
function so we can use it outside this
24781
21:08:59,400 --> 21:09:05,512
file let's
24782
21:09:02,232 --> 21:09:08,552
save we'll go to the left
24783
21:09:05,512 --> 21:09:11,920
and open checkout.
24784
21:09:08,552 --> 21:09:14,640
JS and here instead of using load
24785
21:09:11,920 --> 21:09:18,280
products which uses callbacks let's
24786
21:09:14,640 --> 21:09:20,512
switch to load products fetch which uses
24787
21:09:18,280 --> 21:09:22,920
promises we'll scroll
24788
21:09:20,512 --> 21:09:25,720
up and we're going to import load
24789
21:09:22,920 --> 21:09:28,760
products fetch so here we're already
24790
21:09:25,720 --> 21:09:33,832
importing from products. JS we'll type a
24791
21:09:28,760 --> 21:09:37,832
comma load products
24792
21:09:33,832 --> 21:09:40,232
Fetch and now will replace load products
24793
21:09:37,832 --> 21:09:43,512
so remember that we need to give this a
24794
21:09:40,232 --> 21:09:47,080
promise and also remember that fetch
24795
21:09:43,512 --> 21:09:51,552
returns a promise so all we need to do
24796
21:09:47,080 --> 21:09:56,720
is to remove this code and just call
24797
21:09:51,552 --> 21:10:00,160
load products Fetch and
24798
21:09:56,720 --> 21:10:02,000
brackets this will return a promise and
24799
21:10:00,160 --> 21:10:05,680
we can use it with
24800
21:10:02,000 --> 21:10:07,720
promise.all so now let's save
24801
21:10:05,680 --> 21:10:09,720
we'll check our
24802
21:10:07,720 --> 21:10:11,040
website and you'll see that everything
24803
21:10:09,720 --> 21:10:14,000
is still
24804
21:10:11,040 --> 21:10:16,480
working so fetch helps us make our code
24805
21:10:14,000 --> 21:10:18,720
a lot cleaner because it can return a
24806
21:10:16,480 --> 21:10:22,080
promise directly and we don't have to
24807
21:10:18,720 --> 21:10:26,640
type out all of this extra
24808
21:10:22,080 --> 21:10:30,080
code finally let's use fetch inside our
24809
21:10:26,640 --> 21:10:32,440
tests on the left we'll open order
24810
21:10:30,080 --> 21:10:35,720
summary
24811
21:10:32,440 --> 21:10:38,920
test.js and remember that inside here we
24812
21:10:35,720 --> 21:10:42,480
used load products so let's switch this
24813
21:10:38,920 --> 21:10:45,080
to using load products fetch instead
24814
21:10:42,480 --> 21:10:48,192
first we'll import it at the top we're
24815
21:10:45,080 --> 21:10:54,232
importing from products. JS so we'll
24816
21:10:48,192 --> 21:10:57,680
type comma and import load products
24817
21:10:54,232 --> 21:11:02,760
Fetch and instead of load products we're
24818
21:10:57,680 --> 21:11:06,360
going to call load products
24819
21:11:02,760 --> 21:11:09,600
Fetch and brackets
24820
21:11:06,360 --> 21:11:11,920
so remember that this returns a promise
24821
21:11:09,600 --> 21:11:16,872
and we can attach more steps to This
24822
21:11:11,920 --> 21:11:19,640
Promise using the method dot then and
24823
21:11:16,872 --> 21:11:24,920
brackets and we'll give then a function
24824
21:11:19,640 --> 21:11:24,920
to run so brackets arrow and curly
24825
21:11:25,280 --> 21:11:31,400
brackets once the products are finished
24826
21:11:27,832 --> 21:11:34,360
loading it's going to run then and
24827
21:11:31,400 --> 21:11:38,120
inside here we're going to call done to
24828
21:11:34,360 --> 21:11:41,440
go to the next step of the test so here
24829
21:11:38,120 --> 21:11:44,872
we'll just call done and
24830
21:11:41,440 --> 21:11:47,832
brackets and we'll remove the old
24831
21:11:44,872 --> 21:11:48,760
code so now let's save to make sure this
24832
21:11:47,832 --> 21:11:51,920
is
24833
21:11:48,760 --> 21:11:55,040
working and we'll open the tests go to
24834
21:11:51,920 --> 21:11:57,960
the browser and open the
24835
21:11:55,040 --> 21:11:59,960
test and the order summary test should
24836
21:11:57,960 --> 21:12:02,512
be
24837
21:11:59,960 --> 21:12:06,120
passing so now let's save our changes
24838
21:12:02,512 --> 21:12:09,760
into git we'll open the git set
24839
21:12:06,120 --> 21:12:13,360
section inside products. JS we learned
24840
21:12:09,760 --> 21:12:17,480
how to use fetch which returns a promise
24841
21:12:13,360 --> 21:12:21,160
directly inside checkout. JS we used
24842
21:12:17,480 --> 21:12:22,872
load products fetch inside our project
24843
21:12:21,160 --> 21:12:26,000
and in order summary
24844
21:12:22,872 --> 21:12:29,360
test.js we use load products fetch
24845
21:12:26,000 --> 21:12:30,872
inside our tests let's create a message
24846
21:12:29,360 --> 21:12:35,680
describing these
24847
21:12:30,872 --> 21:12:43,192
changes convert load products
24848
21:12:35,680 --> 21:12:45,552
from xhr or XML HTTP request to fetch
24849
21:12:43,192 --> 21:12:45,552
and
24850
21:12:49,440 --> 21:12:55,280
commit next we're going to learn async
24851
21:12:52,360 --> 21:12:58,600
await which is an even better way to
24852
21:12:55,280 --> 21:12:58,600
handle asynchronous
24853
21:12:58,680 --> 21:13:06,440
code let's go back to our
24854
21:13:01,000 --> 21:13:06,440
code and we'll open checkout. Js
24855
21:13:06,640 --> 21:13:11,920
currently we're using promises to handle
24856
21:13:09,232 --> 21:13:14,400
asynchronous code but the problem with
24857
21:13:11,920 --> 21:13:17,512
promises is that it creates a lot of
24858
21:13:14,400 --> 21:13:20,920
extra code for example we need to create
24859
21:13:17,512 --> 21:13:23,360
a new promise we need to use resolve and
24860
21:13:20,920 --> 21:13:26,872
we need to use do
24861
21:13:23,360 --> 21:13:30,680
that async await is a shortcut for
24862
21:13:26,872 --> 21:13:33,512
promises and it removes all this extra
24863
21:13:30,680 --> 21:13:38,040
code so let's do our first example of
24864
21:13:33,512 --> 21:13:41,360
asyn a weit we're going to scroll
24865
21:13:38,040 --> 21:13:44,080
up and at the top we're going to create
24866
21:13:41,360 --> 21:13:48,640
a function using
24867
21:13:44,080 --> 21:13:51,832
function and let's name it load page
24868
21:13:48,640 --> 21:13:51,832
brackets and curly
24869
21:13:51,960 --> 21:14:00,832
brackets and inside we're going to
24870
21:13:55,872 --> 21:14:03,512
console.log the string load
24871
21:14:00,832 --> 21:14:06,280
page and now we'll learn the first part
24872
21:14:03,512 --> 21:14:09,280
of async await which is
24873
21:14:06,280 --> 21:14:13,400
async in front of the word function
24874
21:14:09,280 --> 21:14:18,120
we're going to add the word async and
24875
21:14:13,400 --> 21:14:21,600
space so async makes a function return a
24876
21:14:18,120 --> 21:14:25,000
promise so this code is a shortcut for
24877
21:14:21,600 --> 21:14:27,280
this code it basically wraps the code in
24878
21:14:25,000 --> 21:14:27,280
a
24879
21:14:28,760 --> 21:14:33,440
promise so now let's run this function
24880
21:14:31,480 --> 21:14:35,120
to show that it actually returns a
24881
21:14:33,440 --> 21:14:39,872
promise
24882
21:14:35,120 --> 21:14:42,440
So Below this we'll call load page and
24883
21:14:39,872 --> 21:14:45,760
brackets and because this returns a
24884
21:14:42,440 --> 21:14:50,280
promise we can add a next step to This
24885
21:14:45,760 --> 21:14:54,160
Promise using dot then
24886
21:14:50,280 --> 21:14:56,552
brackets and we'll give then a function
24887
21:14:54,160 --> 21:15:01,160
brackets arrow and curly
24888
21:14:56,552 --> 21:15:06,920
brackets and inside here let's just
24889
21:15:01,160 --> 21:15:08,360
console.log the string Next Step
24890
21:15:06,920 --> 21:15:11,320
now let's
24891
21:15:08,360 --> 21:15:12,960
save and we'll check the console so
24892
21:15:11,320 --> 21:15:15,360
we'll open the
24893
21:15:12,960 --> 21:15:19,000
console and you'll see that we loaded
24894
21:15:15,360 --> 21:15:23,040
the page and then in the next step we
24895
21:15:19,000 --> 21:15:25,680
displayed Next Step so when we put a
24896
21:15:23,040 --> 21:15:28,080
sync in front of function it makes this
24897
21:15:25,680 --> 21:15:31,512
function return a
24898
21:15:28,080 --> 21:15:34,512
promise this code is a shortcut for this
24899
21:15:31,512 --> 21:15:34,512
code
24900
21:15:36,160 --> 21:15:41,800
next if we return something from this
24901
21:15:38,720 --> 21:15:46,552
function for example we're going to
24902
21:15:41,800 --> 21:15:50,192
return a value like the string value
24903
21:15:46,552 --> 21:15:52,552
two this gets converted into resolve
24904
21:15:50,192 --> 21:15:52,552
value
24905
21:15:54,512 --> 21:16:01,720
two so this value is going to be saved
24906
21:15:57,800 --> 21:16:05,360
in a parameter in The Next Step so here
24907
21:16:01,720 --> 21:16:09,120
we'll add a parameter value and value
24908
21:16:05,360 --> 21:16:10,800
two is going to be saved inside here if
24909
21:16:09,120 --> 21:16:14,800
we
24910
21:16:10,800 --> 21:16:17,360
console.log the value and
24911
21:16:14,800 --> 21:16:21,080
save and then check the
24912
21:16:17,360 --> 21:16:23,360
console we'll see that value is equal to
24913
21:16:21,080 --> 21:16:23,360
this
24914
21:16:23,640 --> 21:16:30,920
string and that's it for async it just
24915
21:16:27,360 --> 21:16:33,360
makes a function return a
24916
21:16:30,920 --> 21:16:36,000
promise now you might be wondering
24917
21:16:33,360 --> 21:16:38,960
what's the point of this feature
24918
21:16:36,000 --> 21:16:43,872
so the reason we use async is because it
24919
21:16:38,960 --> 21:16:43,872
lets us use the second feature called
24920
21:16:44,960 --> 21:16:52,640
await await lets us wait for a promise
24921
21:16:48,280 --> 21:16:52,640
to finish before going to the next
24922
21:16:53,512 --> 21:17:02,280
line so let's do an example inside here
24923
21:16:58,000 --> 21:17:02,280
let's run some code that creates a
24924
21:17:02,320 --> 21:17:12,440
promise let's run load products fetch so
24925
21:17:06,680 --> 21:17:15,640
we'll type load products Fetch and
24926
21:17:12,440 --> 21:17:19,600
brackets so this loads the products from
24927
21:17:15,640 --> 21:17:22,232
the back end and usually this returns a
24928
21:17:19,600 --> 21:17:26,280
promise so one way to wait for this to
24929
21:17:22,232 --> 21:17:27,920
finish is to use do then and then give
24930
21:17:26,280 --> 21:17:31,160
it a
24931
21:17:27,920 --> 21:17:35,160
function so this runs this function
24932
21:17:31,160 --> 21:17:38,400
after load products has finished
24933
21:17:35,160 --> 21:17:41,080
now await gives us another way to wait
24934
21:17:38,400 --> 21:17:43,080
for this promise to finish instead of
24935
21:17:41,080 --> 21:17:48,480
using
24936
21:17:43,080 --> 21:17:48,480
then at the front we can just type
24937
21:17:50,320 --> 21:17:57,552
await so await lets us write
24938
21:17:53,400 --> 21:18:00,440
asynchronous code like normal code so
24939
21:17:57,552 --> 21:18:03,440
now it will wait for this line to finish
24940
21:18:00,440 --> 21:18:06,192
and get the response from the back end
24941
21:18:03,440 --> 21:18:09,280
before going to the next next line so we
24942
21:18:06,192 --> 21:18:13,360
don't have to do any more do then we
24943
21:18:09,280 --> 21:18:18,800
just write it like normal code line by
24944
21:18:13,360 --> 21:18:18,800
line this code is a shortcut for this
24945
21:18:21,552 --> 21:18:28,800
code and this makes our code a lot
24946
21:18:24,120 --> 21:18:28,800
easier to read than what we have down
24947
21:18:28,960 --> 21:18:35,232
here so now let's see what this looks
24948
21:18:31,360 --> 21:18:37,440
like in the console before we save let's
24949
21:18:35,232 --> 21:18:39,320
comment out this promise at the bottom
24950
21:18:37,440 --> 21:18:42,280
so we don't get
24951
21:18:39,320 --> 21:18:46,232
confused so we'll type
24952
21:18:42,280 --> 21:18:49,832
slashstar and at the bottom star
24953
21:18:46,232 --> 21:18:52,440
slash and now we're going to save this
24954
21:18:49,832 --> 21:18:53,640
code and check the console to see what
24955
21:18:52,440 --> 21:18:57,080
it
24956
21:18:53,640 --> 21:18:59,480
did so you see that we loaded the page
24957
21:18:57,080 --> 21:19:02,280
and then notice that it finish loading
24958
21:18:59,480 --> 21:19:05,160
the products before going to the next
24959
21:19:02,280 --> 21:19:08,080
step so this actually Waits for this
24960
21:19:05,160 --> 21:19:10,760
line to finish before going to the next
24961
21:19:08,080 --> 21:19:13,192
line in the code and this makes our code
24962
21:19:10,760 --> 21:19:15,760
a lot
24963
21:19:13,192 --> 21:19:19,080
cleaner now one very important thing to
24964
21:19:15,760 --> 21:19:22,080
know is that we can only use a weight
24965
21:19:19,080 --> 21:19:24,440
when we're inside an async
24966
21:19:22,080 --> 21:19:27,800
function that's actually the main reason
24967
21:19:24,440 --> 21:19:30,832
we use async so that we can use a weight
24968
21:19:27,800 --> 21:19:30,832
to make our code
24969
21:19:32,360 --> 21:19:38,400
cleaner now that we learned asyn wait
24970
21:19:35,320 --> 21:19:41,800
let's use it in our
24971
21:19:38,400 --> 21:19:44,800
project so previously we loaded the
24972
21:19:41,800 --> 21:19:47,800
products and then we loaded the cart and
24973
21:19:44,800 --> 21:19:50,600
then we rendered the page so let's
24974
21:19:47,800 --> 21:19:54,120
recreate this using async
24975
21:19:50,600 --> 21:19:56,000
await first we want to load the products
24976
21:19:54,120 --> 21:19:58,960
which we did here and we're going to
24977
21:19:56,000 --> 21:20:01,160
wait for this to finish and then we're
24978
21:19:58,960 --> 21:20:04,760
going to load the
24979
21:20:01,160 --> 21:20:08,480
cart so to load the cart let's use this
24980
21:20:04,760 --> 21:20:10,800
promise down here asyn await can only be
24981
21:20:08,480 --> 21:20:13,872
used with promises it doesn't do
24982
21:20:10,800 --> 21:20:13,872
anything with a call
24983
21:20:14,400 --> 21:20:20,320
back so we'll select this promise and
24984
21:20:18,512 --> 21:20:23,512
rightclick
24985
21:20:20,320 --> 21:20:26,552
copy and then up here we're going to
24986
21:20:23,512 --> 21:20:29,080
load the cart with a promise by right
24987
21:20:26,552 --> 21:20:32,000
clicking and
24988
21:20:29,080 --> 21:20:34,640
paste so now we want to wait for this
24989
21:20:32,000 --> 21:20:38,320
promise to finish before going to the
24990
21:20:34,640 --> 21:20:41,552
next line to do that at the front we can
24991
21:20:38,320 --> 21:20:41,552
simply type
24992
21:20:43,440 --> 21:20:49,480
await finally after we load the products
24993
21:20:47,440 --> 21:20:53,440
and we load the cart we're going to
24994
21:20:49,480 --> 21:20:56,232
render the page so we'll scroll down and
24995
21:20:53,440 --> 21:20:56,232
we'll select this
24996
21:20:56,680 --> 21:21:05,160
code and we're going to right click
24997
21:21:00,640 --> 21:21:05,160
copy and at the top
24998
21:21:05,640 --> 21:21:10,080
we're going to rightclick and
24999
21:21:10,512 --> 21:21:16,832
paste and that's it you can see that our
25000
21:21:13,552 --> 21:21:19,040
asynchronous code is a lot cleaner now
25001
21:21:16,832 --> 21:21:21,400
we load the products and then we just
25002
21:21:19,040 --> 21:21:24,760
wait for it to finish then we load the
25003
21:21:21,400 --> 21:21:28,120
cart and we also wait for it to finish
25004
21:21:24,760 --> 21:21:30,872
and then we run the rest of our code so
25005
21:21:28,120 --> 21:21:34,480
we can write asynchronous code like
25006
21:21:30,872 --> 21:21:34,480
normal code
25007
21:21:35,512 --> 21:21:38,920
so now let's remove the console.log at
25008
21:21:38,000 --> 21:21:42,192
the
25009
21:21:38,920 --> 21:21:43,872
top and also remove this return value
25010
21:21:42,192 --> 21:21:49,000
because we don't need
25011
21:21:43,872 --> 21:21:49,000
it and we'll remove do then at the
25012
21:21:50,192 --> 21:21:56,160
end and let's
25013
21:21:53,192 --> 21:21:59,872
save so now if we open our
25014
21:21:56,160 --> 21:21:59,872
website and open the
25015
21:22:01,280 --> 21:22:06,120
project you can see that everything
25016
21:22:03,320 --> 21:22:07,720
loaded properly
25017
21:22:06,120 --> 21:22:10,040
inside the
25018
21:22:07,720 --> 21:22:13,480
console you can see that we loaded the
25019
21:22:10,040 --> 21:22:17,000
products first wait for it to finish
25020
21:22:13,480 --> 21:22:20,320
then load the cart wait for it to finish
25021
21:22:17,000 --> 21:22:23,832
and then we displayed the page so that's
25022
21:22:20,320 --> 21:22:28,040
how we use a syn8 to make our code a lot
25023
21:22:23,832 --> 21:22:28,040
cleaner than what we had
25024
21:22:29,920 --> 21:22:35,000
before so now we'll learn some more
25025
21:22:32,080 --> 21:22:37,480
details about Ayn a weit
25026
21:22:35,000 --> 21:22:41,160
as I mentioned we can only use a weight
25027
21:22:37,480 --> 21:22:44,512
inside an async
25028
21:22:41,160 --> 21:22:46,280
function also the closest function has
25029
21:22:44,512 --> 21:22:49,400
to be
25030
21:22:46,280 --> 21:22:52,440
async for example here we have an async
25031
21:22:49,400 --> 21:22:55,320
function at the top and inside we have a
25032
21:22:52,440 --> 21:22:57,920
normal function so we can't use a weight
25033
21:22:55,320 --> 21:23:01,080
inside the normal function we have to
25034
21:22:57,920 --> 21:23:01,080
make this one
25035
21:23:03,080 --> 21:23:09,192
async another another detail is if a
25036
21:23:06,320 --> 21:23:12,872
promise resolves with a value for
25037
21:23:09,192 --> 21:23:16,440
example here we give resolve a value
25038
21:23:12,872 --> 21:23:19,552
like the string value
25039
21:23:16,440 --> 21:23:24,000
three normally this value will be saved
25040
21:23:19,552 --> 21:23:26,640
in The Next Step so if we did do then
25041
21:23:24,000 --> 21:23:26,640
and gave it a
25042
21:23:27,400 --> 21:23:32,440
function this value would be saved in
25043
21:23:30,232 --> 21:23:36,000
this
25044
21:23:32,440 --> 21:23:38,640
parameter however if we use await this
25045
21:23:36,000 --> 21:23:42,040
value just gets returned and we can save
25046
21:23:38,640 --> 21:23:45,080
it in a variable so instead of using
25047
21:23:42,040 --> 21:23:49,720
then we can Simply Save whatever is
25048
21:23:45,080 --> 21:23:52,680
resolved inside a variable using const
25049
21:23:49,720 --> 21:23:52,680
value
25050
21:23:52,800 --> 21:23:58,080
equals and this makes our code a lot
25051
21:23:55,160 --> 21:24:01,280
easier to read instead of having to use
25052
21:23:58,080 --> 21:24:05,960
then we can simply save this inside a
25053
21:24:01,280 --> 21:24:05,960
variable like normal code
25054
21:24:06,160 --> 21:24:12,040
and finally we can use await with
25055
21:24:09,360 --> 21:24:14,120
promise.all as well but I'll leave that
25056
21:24:12,040 --> 21:24:17,920
as an
25057
21:24:14,120 --> 21:24:20,920
exercise so that's async await it's a
25058
21:24:17,920 --> 21:24:25,800
shortcut for promises and it lets us
25059
21:24:20,920 --> 21:24:25,800
write asynchronous code like normal
25060
21:24:26,000 --> 21:24:32,000
code so when working with asynchronous
25061
21:24:28,920 --> 21:24:35,400
code a best practice is to use asyn
25062
21:24:32,000 --> 21:24:38,360
await over promises and callbacks
25063
21:24:35,400 --> 21:24:38,360
because they are much
25064
21:24:38,440 --> 21:24:44,680
cleaner so now let's save our changes
25065
21:24:40,872 --> 21:24:48,160
into git we'll open the git section in
25066
21:24:44,680 --> 21:24:51,872
checkout. JS we created the load page
25067
21:24:48,160 --> 21:24:54,600
function where we learned async and
25068
21:24:51,872 --> 21:24:56,760
await let's create a message describing
25069
21:24:54,600 --> 21:24:56,760
these
25070
21:24:56,960 --> 21:25:07,040
changes convert from promises to async
25071
21:25:03,192 --> 21:25:07,040
await and
25072
21:25:11,480 --> 21:25:17,320
commit now we're going to learn about
25073
21:25:13,920 --> 21:25:19,960
error handling when we're sending HTTP
25074
21:25:17,320 --> 21:25:23,440
requests across the internet we could
25075
21:25:19,960 --> 21:25:26,232
get unexpected errors for example the
25076
21:25:23,440 --> 21:25:27,960
internet connection might stop working
25077
21:25:26,232 --> 21:25:31,000
so we're going to learn how to handle
25078
21:25:27,960 --> 21:25:34,400
these kinds of unexpected
25079
21:25:31,000 --> 21:25:39,280
errors let's go back to our code and
25080
21:25:34,400 --> 21:25:41,600
we're going to open data/ products.
25081
21:25:39,280 --> 21:25:46,360
JS and we're going to
25082
21:25:41,600 --> 21:25:46,360
scroll to the load products
25083
21:25:46,640 --> 21:25:53,280
function so this uses a call back to
25084
21:25:49,800 --> 21:25:55,760
send a request and get a
25085
21:25:53,280 --> 21:25:58,920
response now what if there's an error
25086
21:25:55,760 --> 21:26:03,160
along the way for callbacks we usually
25087
21:25:58,920 --> 21:26:06,920
set up a separate callback just for
25088
21:26:03,160 --> 21:26:09,360
errors for example below this we're
25089
21:26:06,920 --> 21:26:16,760
going to add another event listener
25090
21:26:09,360 --> 21:26:20,280
using xhr do add event listener
25091
21:26:16,760 --> 21:26:22,552
brackets and the first parameter is the
25092
21:26:20,280 --> 21:26:25,120
event this time we're going to listen
25093
21:26:22,552 --> 21:26:29,440
for the error
25094
21:26:25,120 --> 21:26:29,440
event and then we're going to give it a
25095
21:26:31,640 --> 21:26:38,360
function so now if we get an unexpected
25096
21:26:35,040 --> 21:26:40,920
error it's going to run this function so
25097
21:26:38,360 --> 21:26:44,280
if we get an error let's just console
25098
21:26:40,920 --> 21:26:47,832
log a message
25099
21:26:44,280 --> 21:26:50,360
console.log a string
25100
21:26:47,832 --> 21:26:53,192
unexpected
25101
21:26:50,360 --> 21:26:56,000
error and usually when we get an error
25102
21:26:53,192 --> 21:27:01,920
we give some instructions on what to
25103
21:26:56,000 --> 21:27:04,232
do here let's just type please try again
25104
21:27:01,920 --> 21:27:06,400
later
25105
21:27:04,232 --> 21:27:10,000
and
25106
21:27:06,400 --> 21:27:12,552
save so this is called error handling if
25107
21:27:10,000 --> 21:27:15,192
we get an error during the request we
25108
21:27:12,552 --> 21:27:17,160
can handle it with this function so we
25109
21:27:15,192 --> 21:27:20,320
just display a
25110
21:27:17,160 --> 21:27:22,680
message so now let's try out this code
25111
21:27:20,320 --> 21:27:25,232
to simulate an error we're going to
25112
21:27:22,680 --> 21:27:28,040
change the url of the
25113
21:27:25,232 --> 21:27:32,280
request to
25114
21:27:28,040 --> 21:27:35,000
error. superimple backend. deev so this
25115
21:27:32,280 --> 21:27:37,000
will create an error because this URL
25116
21:27:35,000 --> 21:27:40,800
doesn't
25117
21:27:37,000 --> 21:27:43,160
exist so now down here let's call this
25118
21:27:40,800 --> 21:27:47,760
function so that we run this code and
25119
21:27:43,160 --> 21:27:50,000
get the error so we'll type load
25120
21:27:47,760 --> 21:27:53,120
products and
25121
21:27:50,000 --> 21:27:56,800
brackets and
25122
21:27:53,120 --> 21:27:56,800
save let's check the
25123
21:27:57,280 --> 21:28:02,720
console and you'll see that we displayed
25124
21:28:00,040 --> 21:28:06,640
this error
25125
21:28:02,720 --> 21:28:09,320
message so we got an error and it ran
25126
21:28:06,640 --> 21:28:12,640
this error function and it did not run
25127
21:28:09,320 --> 21:28:12,640
the load function
25128
21:28:13,280 --> 21:28:21,872
above also usually this callback gets a
25129
21:28:17,720 --> 21:28:24,800
parameter called error and this contains
25130
21:28:21,872 --> 21:28:27,400
some information about the
25131
21:28:24,800 --> 21:28:30,440
error so that's how we handle errors
25132
21:28:27,400 --> 21:28:35,232
when using callbacks we usually set up a
25133
21:28:30,440 --> 21:28:37,680
separate callback just for errors
25134
21:28:35,232 --> 21:28:38,872
so now let's remove this line since it
25135
21:28:37,680 --> 21:28:42,680
was just for
25136
21:28:38,872 --> 21:28:45,512
practice and we'll remove error from the
25137
21:28:42,680 --> 21:28:49,720
URL and change it back to super simple
25138
21:28:45,512 --> 21:28:49,720
backend dodev and
25139
21:28:51,000 --> 21:28:55,040
save next we'll learn how to handle
25140
21:28:53,552 --> 21:28:59,040
errors in
25141
21:28:55,040 --> 21:29:00,760
promises so we'll scroll up to the load
25142
21:28:59,040 --> 21:29:03,480
products fetch
25143
21:29:00,760 --> 21:29:04,512
function and this makes the same request
25144
21:29:03,480 --> 21:29:06,680
as below
25145
21:29:04,512 --> 21:29:10,120
but it uses
25146
21:29:06,680 --> 21:29:14,160
promises to handle an error in promises
25147
21:29:10,120 --> 21:29:19,480
promises give us two methods do then and
25148
21:29:14,160 --> 21:29:22,720
another method called dot catch brackets
25149
21:29:19,480 --> 21:29:27,000
and we're going to give catch a function
25150
21:29:22,720 --> 21:29:27,000
brackets arrow and curly
25151
21:29:27,040 --> 21:29:32,832
brackets so now if this request has an
25152
21:29:30,040 --> 21:29:35,800
error it's going to go to this catch
25153
21:29:32,832 --> 21:29:38,760
method and it's going to run this error
25154
21:29:35,800 --> 21:29:41,600
function so inside here let's also
25155
21:29:38,760 --> 21:29:43,160
display a message so let's just copy the
25156
21:29:41,600 --> 21:29:46,760
message that we had
25157
21:29:43,160 --> 21:29:47,920
below we're going to select this message
25158
21:29:46,760 --> 21:29:49,872
and then
25159
21:29:47,920 --> 21:29:53,360
rightclick
25160
21:29:49,872 --> 21:29:57,320
copy and then inside catch we're going
25161
21:29:53,360 --> 21:29:57,320
to right click and
25162
21:29:57,480 --> 21:30:03,440
paste and again to simulate an error
25163
21:30:01,000 --> 21:30:04,680
we're going to scroll up and change the
25164
21:30:03,440 --> 21:30:08,480
url
25165
21:30:04,680 --> 21:30:11,280
so we're going to add error at the front
25166
21:30:08,480 --> 21:30:14,360
do superimple backend
25167
21:30:11,280 --> 21:30:19,080
dodev so now let's call this function
25168
21:30:14,360 --> 21:30:25,160
and test out this error code at the
25169
21:30:19,080 --> 21:30:26,120
bottom we'll type load products Fetch
25170
21:30:25,160 --> 21:30:29,120
and
25171
21:30:26,120 --> 21:30:32,192
brackets and
25172
21:30:29,120 --> 21:30:34,800
save so now let's open the
25173
21:30:32,192 --> 21:30:37,960
console and you'll see in here that we
25174
21:30:34,800 --> 21:30:40,552
displayed the error message so we're
25175
21:30:37,960 --> 21:30:45,440
successfully creating an error it's
25176
21:30:40,552 --> 21:30:45,440
going inside catch and it displays this
25177
21:30:45,872 --> 21:30:52,920
message so just like callbacks catch
25178
21:30:49,232 --> 21:30:55,320
gets a parameter called error and this
25179
21:30:52,920 --> 21:30:57,680
contains information about the error if
25180
21:30:55,320 --> 21:31:00,832
we need
25181
21:30:57,680 --> 21:31:03,480
it so that's how we handle errors with
25182
21:31:00,832 --> 21:31:06,920
promises we have another method called
25183
21:31:03,480 --> 21:31:07,872
Dot catch that will run this function if
25184
21:31:06,920 --> 21:31:12,320
there's an
25185
21:31:07,872 --> 21:31:15,120
error so now let's remove this practice
25186
21:31:12,320 --> 21:31:21,600
code and switch back the
25187
21:31:15,120 --> 21:31:21,600
URL so remove error and Dot and
25188
21:31:23,080 --> 21:31:27,640
save lastly we'll learn how to handle
25189
21:31:25,640 --> 21:31:30,480
errors in async
25190
21:31:27,640 --> 21:31:32,800
await so let's go to the left and we're
25191
21:31:30,480 --> 21:31:36,552
going to open the checkout file so we'll
25192
21:31:32,800 --> 21:31:40,232
scroll down and open checkout.
25193
21:31:36,552 --> 21:31:42,960
JS and inside here we're using async
25194
21:31:40,232 --> 21:31:45,400
await so the catch errors when using
25195
21:31:42,960 --> 21:31:48,192
async await we're going to use some new
25196
21:31:45,400 --> 21:31:51,232
syntax called try
25197
21:31:48,192 --> 21:31:55,960
catch above this we're going to type the
25198
21:31:51,232 --> 21:31:55,960
word try and curly
25199
21:31:56,120 --> 21:32:02,512
brackets and now we're going to put the
25200
21:31:58,232 --> 21:32:04,680
code that could cause an error into try
25201
21:32:02,512 --> 21:32:07,040
so here we're making a request to the
25202
21:32:04,680 --> 21:32:09,960
back end and here we're also making a
25203
21:32:07,040 --> 21:32:12,080
request to the back end so this code
25204
21:32:09,960 --> 21:32:15,960
could cause an error so we're going to
25205
21:32:12,080 --> 21:32:17,872
move it inside try so we'll select it
25206
21:32:15,960 --> 21:32:20,872
right click
25207
21:32:17,872 --> 21:32:23,920
cut and then inside here we'll right
25208
21:32:20,872 --> 21:32:27,760
click and
25209
21:32:23,920 --> 21:32:32,040
paste and now if any of this code inside
25210
21:32:27,760 --> 21:32:34,960
a try gets an error we can catch it
25211
21:32:32,040 --> 21:32:36,280
using this code at at the bottom we'll
25212
21:32:34,960 --> 21:32:40,360
type
25213
21:32:36,280 --> 21:32:43,320
catch brackets and curly
25214
21:32:40,360 --> 21:32:47,680
brackets Now Catch is going to get one
25215
21:32:43,320 --> 21:32:49,512
parameter in these brackets called error
25216
21:32:47,680 --> 21:32:51,800
and this contains information about the
25217
21:32:49,512 --> 21:32:57,360
error if we need
25218
21:32:51,800 --> 21:33:01,192
it so catch Works similarly to catch for
25219
21:32:57,360 --> 21:33:03,232
promises if there's an error inside here
25220
21:33:01,192 --> 21:33:05,320
it's going to catch the error or it's
25221
21:33:03,232 --> 21:33:08,872
going to hand handle the error and run
25222
21:33:05,320 --> 21:33:11,960
the code inside catch so in here we can
25223
21:33:08,872 --> 21:33:14,232
put our error message so let's go back
25224
21:33:11,960 --> 21:33:17,600
to products.
25225
21:33:14,232 --> 21:33:22,232
JS and let's copy the error message so
25226
21:33:17,600 --> 21:33:24,832
we'll select this and right click
25227
21:33:22,232 --> 21:33:29,320
copy and back to
25228
21:33:24,832 --> 21:33:32,720
checkout inside catch we'll right click
25229
21:33:29,320 --> 21:33:32,720
and paste
25230
21:33:34,400 --> 21:33:39,680
so now I'll remove this new line and add
25231
21:33:37,760 --> 21:33:41,600
a new line here to make it a little
25232
21:33:39,680 --> 21:33:44,960
easier to
25233
21:33:41,600 --> 21:33:48,192
read and let's test out this
25234
21:33:44,960 --> 21:33:50,760
code to do that we'll go inside
25235
21:33:48,192 --> 21:33:54,000
products. JS again and we're going to
25236
21:33:50,760 --> 21:33:58,000
modify the URL again so at the front
25237
21:33:54,000 --> 21:34:00,920
here we're going to add error do super
25238
21:33:58,000 --> 21:34:04,280
simple backend and also we're going to
25239
21:34:00,920 --> 21:34:06,680
comment out the dot catch because right
25240
21:34:04,280 --> 21:34:08,960
now the error is going to be handled
25241
21:34:06,680 --> 21:34:12,232
here and it's not going to be handled
25242
21:34:08,960 --> 21:34:15,400
outside in the try catch so we're going
25243
21:34:12,232 --> 21:34:17,440
to comment this out using
25244
21:34:15,400 --> 21:34:22,040
slashstar and at the
25245
21:34:17,440 --> 21:34:26,440
end star slash and
25246
21:34:22,040 --> 21:34:30,800
save so we'll go back to checkout.
25247
21:34:26,440 --> 21:34:35,400
JS and here we'll also
25248
21:34:30,800 --> 21:34:38,080
save and now let's open the console
25249
21:34:35,400 --> 21:34:41,720
and you'll see that we had an error here
25250
21:34:38,080 --> 21:34:44,832
we caught the error and it ran this code
25251
21:34:41,720 --> 21:34:47,480
and displayed the error
25252
21:34:44,832 --> 21:34:50,920
message so that's how we handle errors
25253
21:34:47,480 --> 21:34:55,080
with async await we put our code that
25254
21:34:50,920 --> 21:34:57,232
can cause an error inside try and if
25255
21:34:55,080 --> 21:35:00,552
there is an error it's going to run the
25256
21:34:57,232 --> 21:35:00,552
code inside
25257
21:35:00,720 --> 21:35:08,920
catch so now let's go back to products
25258
21:35:04,680 --> 21:35:13,480
and remove error from the URL and the
25259
21:35:08,920 --> 21:35:16,872
dot and we'll also uncomment
25260
21:35:13,480 --> 21:35:16,872
catch and
25261
21:35:18,000 --> 21:35:23,872
save next we're going to learn some more
25262
21:35:20,552 --> 21:35:25,552
details about try catch so we'll open
25263
21:35:23,872 --> 21:35:29,120
checkout.
25264
21:35:25,552 --> 21:35:31,232
JS and one thing to know about TR catch
25265
21:35:29,120 --> 21:35:35,040
is that we don't have to use it with
25266
21:35:31,232 --> 21:35:39,192
async await we can actually use TR catch
25267
21:35:35,040 --> 21:35:42,640
with synchronous code or normal code for
25268
21:35:39,192 --> 21:35:45,360
example here we try to run a function
25269
21:35:42,640 --> 21:35:49,760
that does not exist and this will cause
25270
21:35:45,360 --> 21:35:53,160
an error try catch will catch this error
25271
21:35:49,760 --> 21:35:56,360
and display a message so notice that
25272
21:35:53,160 --> 21:36:00,160
we're not using async O8 here this is
25273
21:35:56,360 --> 21:36:04,640
just normal code so we can use try catch
25274
21:36:00,160 --> 21:36:07,120
to catch errors in normal code as well
25275
21:36:04,640 --> 21:36:10,680
another detail is whenever we get an
25276
21:36:07,120 --> 21:36:13,832
error it will skip the rest of the code
25277
21:36:10,680 --> 21:36:17,192
so here it will not console.log next
25278
21:36:13,832 --> 21:36:20,720
line it will skip the rest of this code
25279
21:36:17,192 --> 21:36:20,720
and go directly into
25280
21:36:21,920 --> 21:36:26,512
catch now one thing you might be
25281
21:36:23,920 --> 21:36:29,480
wondering is why don't we just use TR
25282
21:36:26,512 --> 21:36:32,720
catch everywhere and prevent all of our
25283
21:36:29,480 --> 21:36:36,040
errors so try catch and any error
25284
21:36:32,720 --> 21:36:39,192
handling is meant to handle unexpected
25285
21:36:36,040 --> 21:36:41,640
errors that means our code is correct
25286
21:36:39,192 --> 21:36:43,600
but something outside our control caused
25287
21:36:41,640 --> 21:36:45,800
the error so we can give some
25288
21:36:43,600 --> 21:36:48,960
instructions on what to
25289
21:36:45,800 --> 21:36:52,000
do so that's why we don't use try catch
25290
21:36:48,960 --> 21:36:56,600
everywhere we only use it for unexpected
25291
21:36:52,000 --> 21:36:56,600
errors or errors outside of our
25292
21:36:58,720 --> 21:37:03,512
control so the last thing to know about
25293
21:37:01,232 --> 21:37:05,192
error handling is that we can man
25294
21:37:03,512 --> 21:37:08,600
manually create
25295
21:37:05,192 --> 21:37:11,960
errors to manually create an error in TR
25296
21:37:08,600 --> 21:37:13,872
catch at the top we're going to use the
25297
21:37:11,960 --> 21:37:18,160
word
25298
21:37:13,872 --> 21:37:20,040
throw so throw creates a new error or it
25299
21:37:18,160 --> 21:37:21,080
throws an error that we're going to
25300
21:37:20,040 --> 21:37:23,800
catch a
25301
21:37:21,080 --> 21:37:24,760
later and now we need to give this error
25302
21:37:23,800 --> 21:37:27,720
a
25303
21:37:24,760 --> 21:37:31,320
value so we can use any type of value
25304
21:37:27,720 --> 21:37:33,872
for an error like a string number or an
25305
21:37:31,320 --> 21:37:37,552
object for an example we're just going
25306
21:37:33,872 --> 21:37:40,720
to use a string error
25307
21:37:37,552 --> 21:37:43,760
one so this will manually create an
25308
21:37:40,720 --> 21:37:46,400
error when we get an error it's going to
25309
21:37:43,760 --> 21:37:48,960
skip the rest of the code inside these
25310
21:37:46,400 --> 21:37:52,760
curly brackets and it's going to go
25311
21:37:48,960 --> 21:37:55,160
straight into catch so this error value
25312
21:37:52,760 --> 21:37:57,512
is going to be saved inside this
25313
21:37:55,160 --> 21:37:59,360
parameter and it's going to run the code
25314
21:37:57,512 --> 21:38:01,760
inside
25315
21:37:59,360 --> 21:38:04,600
catch so if we
25316
21:38:01,760 --> 21:38:07,832
save and then check the
25317
21:38:04,600 --> 21:38:12,192
console throw creates an error and it's
25318
21:38:07,832 --> 21:38:12,192
going to display this error message up
25319
21:38:14,512 --> 21:38:21,552
here so now let's comment out this
25320
21:38:18,080 --> 21:38:21,552
example and
25321
21:38:21,600 --> 21:38:29,552
save next if we're using promises there
25322
21:38:25,040 --> 21:38:29,552
are two ways to manually create an
25323
21:38:29,600 --> 21:38:35,800
error so inside this promise if we want
25324
21:38:33,440 --> 21:38:40,280
want to manually create an error we can
25325
21:38:35,800 --> 21:38:41,552
also just throw an error like the string
25326
21:38:40,280 --> 21:38:44,640
error
25327
21:38:41,552 --> 21:38:49,080
2 and this will throw an error and go
25328
21:38:44,640 --> 21:38:52,320
inside dot catch by the way if we await
25329
21:38:49,080 --> 21:38:55,120
a promise instead of going into catch
25330
21:38:52,320 --> 21:38:58,600
it's going to go inside catch
25331
21:38:55,120 --> 21:39:02,160
here so await makes it behave sort of
25332
21:38:58,600 --> 21:39:04,640
like synchronous code or normal code if
25333
21:39:02,160 --> 21:39:07,232
we save
25334
21:39:04,640 --> 21:39:07,232
and check the
25335
21:39:07,400 --> 21:39:13,512
console it will get an error it will not
25336
21:39:10,552 --> 21:39:15,920
load the cart and it will display this
25337
21:39:13,512 --> 21:39:19,600
error
25338
21:39:15,920 --> 21:39:21,960
message so now let's comment out this
25339
21:39:19,600 --> 21:39:24,440
example and we'll learn the second way
25340
21:39:21,960 --> 21:39:27,400
to create an error in a
25341
21:39:24,440 --> 21:39:30,280
promise inside a promise if we need to
25342
21:39:27,400 --> 21:39:34,280
create an error in the future then we
25343
21:39:30,280 --> 21:39:37,232
need to use different code for example
25344
21:39:34,280 --> 21:39:40,600
here we load the cart and then once it's
25345
21:39:37,232 --> 21:39:44,720
finished loading we're going to run this
25346
21:39:40,600 --> 21:39:47,920
function so this function runs in the
25347
21:39:44,720 --> 21:39:51,040
future inside this function throw does
25348
21:39:47,920 --> 21:39:52,320
not work because throw does not work in
25349
21:39:51,040 --> 21:39:55,920
the
25350
21:39:52,320 --> 21:39:59,640
future instead promises give us another
25351
21:39:55,920 --> 21:40:02,800
way to create an error when we create a
25352
21:39:59,640 --> 21:40:04,720
new promise it gives us a second
25353
21:40:02,800 --> 21:40:06,680
parameter
25354
21:40:04,720 --> 21:40:10,360
called
25355
21:40:06,680 --> 21:40:14,232
reject reject is a function and it lets
25356
21:40:10,360 --> 21:40:14,232
us create an error in the
25357
21:40:14,280 --> 21:40:22,552
future so here after we load the cart in
25358
21:40:18,192 --> 21:40:29,440
the future let's create an error using
25359
21:40:22,552 --> 21:40:32,760
reject brackets and a string error
25360
21:40:29,440 --> 21:40:34,552
three so let's comment out resolve as an
25361
21:40:32,760 --> 21:40:36,440
example
25362
21:40:34,552 --> 21:40:40,040
so now let's
25363
21:40:36,440 --> 21:40:40,040
save and check the
25364
21:40:40,080 --> 21:40:45,080
console and you'll see that reject
25365
21:40:42,480 --> 21:40:47,920
created an error in the
25366
21:40:45,080 --> 21:40:51,120
future and then it goes down here and
25367
21:40:47,920 --> 21:40:53,720
runs the code inside catch and creates
25368
21:40:51,120 --> 21:40:53,720
the error
25369
21:40:55,720 --> 21:41:01,832
message so the manually create an error
25370
21:40:58,480 --> 21:41:04,000
in a promise we have two ways we can use
25371
21:41:01,832 --> 21:41:07,320
throw if we're creating the error
25372
21:41:04,000 --> 21:41:10,480
synchronously or right away or we can
25373
21:41:07,320 --> 21:41:13,800
use reject if we're creating the error
25374
21:41:10,480 --> 21:41:17,360
asynchronously or in the
25375
21:41:13,800 --> 21:41:23,512
future so now let's comment out
25376
21:41:17,360 --> 21:41:23,512
reject and uncomment resolve and
25377
21:41:23,720 --> 21:41:29,800
save so that's error handling it lets us
25378
21:41:27,160 --> 21:41:32,120
handle unexpected errors and it also
25379
21:41:29,800 --> 21:41:34,872
lets us create our own
25380
21:41:32,120 --> 21:41:39,720
errors so now let's save these changes
25381
21:41:34,872 --> 21:41:43,120
into git we'll open git inside products.
25382
21:41:39,720 --> 21:41:46,400
JS we added. catch for
25383
21:41:43,120 --> 21:41:49,760
promises and an error function for
25384
21:41:46,400 --> 21:41:53,872
callbacks and then in checkout. JS we
25385
21:41:49,760 --> 21:41:56,160
added try catch for async await and we
25386
21:41:53,872 --> 21:41:57,080
also learned how to manually create our
25387
21:41:56,160 --> 21:41:59,320
own
25388
21:41:57,080 --> 21:42:00,760
errors so we'll type a message
25389
21:41:59,320 --> 21:42:04,920
describing our
25390
21:42:00,760 --> 21:42:08,440
changes learn and error
25391
21:42:04,920 --> 21:42:08,440
handling and
25392
21:42:12,552 --> 21:42:18,440
commit now that we learned backend
25393
21:42:15,232 --> 21:42:20,640
promises and async await let's use them
25394
21:42:18,440 --> 21:42:23,552
in our
25395
21:42:20,640 --> 21:42:27,192
project we'll open our
25396
21:42:23,552 --> 21:42:29,192
project and open the tab for the project
25397
21:42:27,192 --> 21:42:31,320
and we're going to go to the checkout
25398
21:42:29,192 --> 21:42:34,360
page so the feature we're going to work
25399
21:42:31,320 --> 21:42:37,320
on is in the checkout page we're going
25400
21:42:34,360 --> 21:42:40,040
to make this place order button
25401
21:42:37,320 --> 21:42:42,600
interactive when we click this button
25402
21:42:40,040 --> 21:42:44,040
it's going to take our cart and turn it
25403
21:42:42,600 --> 21:42:46,960
into an
25404
21:42:44,040 --> 21:42:49,320
order this time instead of writing this
25405
21:42:46,960 --> 21:42:53,000
code ourselves we're going to use the
25406
21:42:49,320 --> 21:42:53,000
back end to create an
25407
21:42:53,400 --> 21:42:59,000
order so first let's set up an event
25408
21:42:56,192 --> 21:43:00,512
listener for this button we'll go back
25409
21:42:59,000 --> 21:43:03,960
to our
25410
21:43:00,512 --> 21:43:05,920
code and open our files
25411
21:43:03,960 --> 21:43:07,640
and that button is in a section called
25412
21:43:05,920 --> 21:43:10,480
the payment
25413
21:43:07,640 --> 21:43:15,512
summary so we're going to open scripts
25414
21:43:10,480 --> 21:43:15,512
SL checkout payment summary.jpg
25415
21:43:34,120 --> 21:43:39,960
your order and now we have the code for
25416
21:43:37,552 --> 21:43:42,320
the button right here so we're going to
25417
21:43:39,960 --> 21:43:43,800
set up an event listener so we can do
25418
21:43:42,320 --> 21:43:46,872
something when we click
25419
21:43:43,800 --> 21:43:49,160
it first we'll add a class to the button
25420
21:43:46,872 --> 21:43:51,872
so we can get it in our
25421
21:43:49,160 --> 21:43:55,600
JavaScript at the end of the class let's
25422
21:43:51,872 --> 21:43:59,360
create a new line and add a class
25423
21:43:55,600 --> 21:44:03,040
js- Place Das
25424
21:43:59,360 --> 21:44:06,760
order and now after we put this HTML on
25425
21:44:03,040 --> 21:44:09,320
the page we're going to set up an event
25426
21:44:06,760 --> 21:44:13,760
listener to do that we're going to get
25427
21:44:09,320 --> 21:44:16,832
this button into our JavaScript using
25428
21:44:13,760 --> 21:44:18,480
document. query
25429
21:44:16,832 --> 21:44:21,960
selector
25430
21:44:18,480 --> 21:44:24,960
brackets and a string and to select this
25431
21:44:21,960 --> 21:44:28,440
class we're going to start with a
25432
21:44:24,960 --> 21:44:31,160
js- place-
25433
21:44:28,440 --> 21:44:33,000
order and now that we have this button
25434
21:44:31,160 --> 21:44:36,872
we're going to add an event listener to
25435
21:44:33,000 --> 21:44:41,760
to it so we'll create a new line and use
25436
21:44:36,872 --> 21:44:43,440
the method do add event
25437
21:44:41,760 --> 21:44:45,720
listener
25438
21:44:43,440 --> 21:44:48,232
brackets and we'll give this two
25439
21:44:45,720 --> 21:44:52,000
parameters the first parameter is the
25440
21:44:48,232 --> 21:44:54,640
event we want to listen for which is
25441
21:44:52,000 --> 21:44:56,600
click and the second parameter is a
25442
21:44:54,640 --> 21:45:00,192
function we want to run when we click
25443
21:44:56,600 --> 21:45:03,192
this button so we'll type brackets arrow
25444
21:45:00,192 --> 21:45:05,400
and curler brackets
25445
21:45:03,192 --> 21:45:07,720
and now when we click this button we're
25446
21:45:05,400 --> 21:45:10,512
going to make a request to the back end
25447
21:45:07,720 --> 21:45:10,512
to create the
25448
21:45:10,960 --> 21:45:18,080
order so for this example I set up a URL
25449
21:45:14,872 --> 21:45:20,000
path in my backend for creating orders
25450
21:45:18,080 --> 21:45:22,832
called slash
25451
21:45:20,000 --> 21:45:26,040
orders so inside here we're going to
25452
21:45:22,832 --> 21:45:27,600
make a request to the backend using
25453
21:45:26,040 --> 21:45:29,512
fetch
25454
21:45:27,600 --> 21:45:34,232
brackets and then we're going to give it
25455
21:45:29,512 --> 21:45:36,120
the URL of the request which is H ttps
25456
21:45:34,232 --> 21:45:40,192
colon double
25457
21:45:36,120 --> 21:45:47,040
slash super simple
25458
21:45:40,192 --> 21:45:47,040
backend. Dev and the URL path slash
25459
21:45:47,512 --> 21:45:53,320
orders however this time we need to send
25460
21:45:50,680 --> 21:45:56,512
some data to the back end so we need to
25461
21:45:53,320 --> 21:45:59,280
send our cart to the backend in order to
25462
21:45:56,512 --> 21:45:59,280
create an
25463
21:45:59,960 --> 21:46:07,080
order to send data in a request we need
25464
21:46:03,480 --> 21:46:10,192
to use a different type of requests so
25465
21:46:07,080 --> 21:46:14,760
there are four common types of requests
25466
21:46:10,192 --> 21:46:17,640
get post put and delete get means we
25467
21:46:14,760 --> 21:46:19,872
want to get something from the back end
25468
21:46:17,640 --> 21:46:23,192
post means we want the back end to
25469
21:46:19,872 --> 21:46:25,680
create something put means we want it to
25470
21:46:23,192 --> 21:46:29,080
update something and delete means we
25471
21:46:25,680 --> 21:46:32,640
want to delete something so far we only
25472
21:46:29,080 --> 21:46:34,000
use get request which let us get data
25473
21:46:32,640 --> 21:46:37,320
from from the back
25474
21:46:34,000 --> 21:46:41,480
end however get requests don't really
25475
21:46:37,320 --> 21:46:41,480
let us send data to the back
25476
21:46:42,232 --> 21:46:48,080
end so in this situation we want to
25477
21:46:45,552 --> 21:46:52,080
create an order so we're going to use
25478
21:46:48,080 --> 21:46:55,552
post to create something post lets us
25479
21:46:52,080 --> 21:46:55,552
send data to the
25480
21:46:56,600 --> 21:47:02,232
backend so to create a post request
25481
21:47:00,000 --> 21:47:04,400
instead of a get request we're going to
25482
21:47:02,232 --> 21:47:07,440
give fetch a second
25483
21:47:04,400 --> 21:47:10,320
parameter which is an
25484
21:47:07,440 --> 21:47:13,280
object and inside this object we're
25485
21:47:10,320 --> 21:47:14,920
going to give it a property called
25486
21:47:13,280 --> 21:47:17,400
method
25487
21:47:14,920 --> 21:47:19,800
colon and this is the type of the
25488
21:47:17,400 --> 21:47:22,000
request in this case we'll use the
25489
21:47:19,800 --> 21:47:25,320
string
25490
21:47:22,000 --> 21:47:27,760
post and after this we're going to give
25491
21:47:25,320 --> 21:47:31,120
another property called
25492
21:47:27,760 --> 21:47:33,400
headers colon and this is going to be an
25493
21:47:31,120 --> 21:47:35,680
object
25494
21:47:33,400 --> 21:47:38,920
headers gives the backend more
25495
21:47:35,680 --> 21:47:41,080
information about our request and this
25496
21:47:38,920 --> 21:47:42,360
is needed when we're sending data to the
25497
21:47:41,080 --> 21:47:45,232
back
25498
21:47:42,360 --> 21:47:50,720
end inside this object we'll add the
25499
21:47:45,232 --> 21:47:52,480
property string Capital C content Das
25500
21:47:50,720 --> 21:47:54,120
capital T
25501
21:47:52,480 --> 21:47:58,720
type
25502
21:47:54,120 --> 21:48:03,760
colon and the value will be the string
25503
21:47:58,720 --> 21:48:06,120
application slash Json
25504
21:48:03,760 --> 21:48:09,400
this tells the back endend what type of
25505
21:48:06,120 --> 21:48:11,640
data we're sending in our request here
25506
21:48:09,400 --> 21:48:14,192
we're going to send some Jon which is
25507
21:48:11,640 --> 21:48:16,872
basically a JavaScript
25508
21:48:14,192 --> 21:48:20,120
object next we're going to add another
25509
21:48:16,872 --> 21:48:23,080
property called body
25510
21:48:20,120 --> 21:48:25,192
colon and this is the actual data we're
25511
21:48:23,080 --> 21:48:28,120
going to send to the back
25512
21:48:25,192 --> 21:48:30,320
end according to the documentation we
25513
21:48:28,120 --> 21:48:35,280
need to send an object with a property
25514
21:48:30,320 --> 21:48:35,280
called cart and this contains our cart
25515
21:48:36,192 --> 21:48:44,400
array so in the body let's send an
25516
21:48:39,720 --> 21:48:46,080
object with a property called cart colon
25517
21:48:44,400 --> 21:48:48,720
and give it the cart
25518
21:48:46,080 --> 21:48:53,120
array so we should have the cart array
25519
21:48:48,720 --> 21:48:57,000
in this file and it should be called
25520
21:48:53,120 --> 21:48:59,280
cart and finally we can't send an object
25521
21:48:57,000 --> 21:49:04,160
directly in our request we need to
25522
21:48:59,280 --> 21:49:04,160
convert it into a Json string
25523
21:49:05,400 --> 21:49:11,400
to do that at the front we'll use
25524
21:49:09,640 --> 21:49:16,080
json.
25525
21:49:11,400 --> 21:49:18,680
stringify Open Bracket and close bracket
25526
21:49:16,080 --> 21:49:21,512
so this will convert this data into a
25527
21:49:18,680 --> 21:49:23,872
Json string and now we can send it to
25528
21:49:21,512 --> 21:49:23,872
the back
25529
21:49:24,080 --> 21:49:30,360
end okay so after we send this request
25530
21:49:27,720 --> 21:49:34,320
we need to wait for the response to come
25531
21:49:30,360 --> 21:49:37,192
back to do that fetch returns a
25532
21:49:34,320 --> 21:49:40,680
promise however instead of using dot
25533
21:49:37,192 --> 21:49:43,872
then to add a Next Step let's use async
25534
21:49:40,680 --> 21:49:46,232
a weit because it's cleaner so first we
25535
21:49:43,872 --> 21:49:49,680
need to make this function
25536
21:49:46,232 --> 21:49:52,000
async remember we can only use await
25537
21:49:49,680 --> 21:49:54,120
inside an async
25538
21:49:52,000 --> 21:49:58,120
function so at the front of this
25539
21:49:54,120 --> 21:49:58,120
function we'll type the word
25540
21:49:58,760 --> 21:50:04,552
async and now in front of fetch we can
25541
21:50:01,800 --> 21:50:04,552
use
25542
21:50:04,800 --> 21:50:10,400
await this is going to wait for fetch to
25543
21:50:07,920 --> 21:50:12,760
finish or for fetch to get a response
25544
21:50:10,400 --> 21:50:14,280
from the back end and then go to the
25545
21:50:12,760 --> 21:50:17,552
next
25546
21:50:14,280 --> 21:50:21,192
line now because we used await we can
25547
21:50:17,552 --> 21:50:24,680
save the response in a variable so at
25548
21:50:21,192 --> 21:50:28,680
the front we'll create a variable const
25549
21:50:24,680 --> 21:50:32,600
and call it response and make it equal
25550
21:50:28,680 --> 21:50:32,600
to this result
25551
21:50:33,360 --> 21:50:38,280
next remember that to get the data
25552
21:50:36,000 --> 21:50:40,640
that's attached to the response we need
25553
21:50:38,280 --> 21:50:45,080
to use response.
25554
21:50:40,640 --> 21:50:48,720
Json so down here we're going to use
25555
21:50:45,080 --> 21:50:51,400
response. Json and
25556
21:50:48,720 --> 21:50:55,192
brackets now remember that response.
25557
21:50:51,400 --> 21:50:58,440
Json is also a promise so at the front
25558
21:50:55,192 --> 21:51:00,760
we can use await to wait for this
25559
21:50:58,440 --> 21:51:03,280
promise to finish before going to the
25560
21:51:00,760 --> 21:51:05,440
next line
25561
21:51:03,280 --> 21:51:08,320
so this will give us the data that's
25562
21:51:05,440 --> 21:51:11,600
attached to the response which should be
25563
21:51:08,320 --> 21:51:14,920
the order that was created by the
25564
21:51:11,600 --> 21:51:20,000
backet so let's save this in a variable
25565
21:51:14,920 --> 21:51:20,000
using const order
25566
21:51:21,400 --> 21:51:28,720
equals and finally let's
25567
21:51:25,480 --> 21:51:32,960
console.log the order to see what it
25568
21:51:28,720 --> 21:51:35,192
looks like so now let's save
25569
21:51:32,960 --> 21:51:37,680
and then we'll open the
25570
21:51:35,192 --> 21:51:39,160
project and make sure you have some
25571
21:51:37,680 --> 21:51:43,160
products in your
25572
21:51:39,160 --> 21:51:45,760
cart and then we'll click place
25573
21:51:43,160 --> 21:51:49,080
order and now we can check our console
25574
21:51:45,760 --> 21:51:49,080
to see what the order looks
25575
21:51:52,160 --> 21:51:58,400
like and you'll see that we got an order
25576
21:51:55,080 --> 21:52:03,800
object from the back end it has an order
25577
21:51:58,400 --> 21:52:07,400
ID an order time and the products in our
25578
21:52:03,800 --> 21:52:09,680
order including a delivery time and the
25579
21:52:07,400 --> 21:52:12,960
quantity that we
25580
21:52:09,680 --> 21:52:14,872
want so we successfully use the back end
25581
21:52:12,960 --> 21:52:17,920
to create a new
25582
21:52:14,872 --> 21:52:20,800
order let's also check the network tab
25583
21:52:17,920 --> 21:52:23,360
up here and open
25584
21:52:20,800 --> 21:52:26,320
network so I'll resize this to make it a
25585
21:52:23,360 --> 21:52:28,960
little easier to read and we'll search
25586
21:52:26,320 --> 21:52:31,720
for the super simple
25587
21:52:28,960 --> 21:52:36,232
URL and then we'll find this request
25588
21:52:31,720 --> 21:52:39,920
orders with a status 200 and we'll click
25589
21:52:36,232 --> 21:52:44,080
it so inside the details you'll see that
25590
21:52:39,920 --> 21:52:47,960
it was a post request sent to/ orders
25591
21:52:44,080 --> 21:52:51,800
and the status code was 200 so it was
25592
21:52:47,960 --> 21:52:54,120
successful inside the payload tab this
25593
21:52:51,800 --> 21:52:55,480
is what we sent to the back end which is
25594
21:52:54,120 --> 21:52:58,552
our
25595
21:52:55,480 --> 21:53:02,640
cart in the preview tab this is what the
25596
21:52:58,552 --> 21:53:04,920
backend sent back an order object
25597
21:53:02,640 --> 21:53:08,720
and the response tab is the same thing
25598
21:53:04,920 --> 21:53:08,720
we got the order object
25599
21:53:09,440 --> 21:53:15,440
back so that's how a real world website
25600
21:53:12,720 --> 21:53:19,400
works instead of creating the order on
25601
21:53:15,440 --> 21:53:23,000
the web page or on our computer we send
25602
21:53:19,400 --> 21:53:25,120
an HTTP request to the backend to create
25603
21:53:23,000 --> 21:53:25,120
the
25604
21:53:30,120 --> 21:53:36,800
order okay now that we created an order
25605
21:53:33,872 --> 21:53:39,600
let's save it
25606
21:53:36,800 --> 21:53:43,400
somewhere we'll go back to our
25607
21:53:39,600 --> 21:53:45,872
code and on the left inside the data
25608
21:53:43,400 --> 21:53:49,232
folder let's create a file for our
25609
21:53:45,872 --> 21:53:52,360
orders so we'll click inside this folder
25610
21:53:49,232 --> 21:53:54,720
and then click here to create a file and
25611
21:53:52,360 --> 21:53:58,832
let's name it
25612
21:53:54,720 --> 21:54:01,832
orders. JS and press
25613
21:53:58,832 --> 21:54:05,232
enter at the top let's create an array
25614
21:54:01,832 --> 21:54:10,080
to contain rain all of our orders we use
25615
21:54:05,232 --> 21:54:12,400
const orders equals and empty array and
25616
21:54:10,080 --> 21:54:15,320
let's export this so we can use it in
25617
21:54:12,400 --> 21:54:18,512
other files
25618
21:54:15,320 --> 21:54:21,552
export next let's create a function for
25619
21:54:18,512 --> 21:54:23,080
adding an order to this array so we'll
25620
21:54:21,552 --> 21:54:25,512
create a
25621
21:54:23,080 --> 21:54:29,232
function add
25622
21:54:25,512 --> 21:54:33,080
order brackets and curly brackets and
25623
21:54:29,232 --> 21:54:35,720
we'll give this function an order object
25624
21:54:33,080 --> 21:54:38,920
and we're just going to add it to the
25625
21:54:35,720 --> 21:54:41,680
array now for orders we usually want the
25626
21:54:38,920 --> 21:54:43,960
most recent order at the top so we're
25627
21:54:41,680 --> 21:54:47,040
going to add this order to the front of
25628
21:54:43,960 --> 21:54:52,680
the array to do that we'll type the
25629
21:54:47,040 --> 21:54:54,192
array name orders and use the method do
25630
21:54:52,680 --> 21:54:57,552
unshift
25631
21:54:54,192 --> 21:55:00,232
brackets and we'll give it the
25632
21:54:57,552 --> 21:55:03,192
order so this will add the order to the
25633
21:55:00,232 --> 21:55:06,832
front of the array instead of the
25634
21:55:03,192 --> 21:55:09,800
back finally let's save our orders into
25635
21:55:06,832 --> 21:55:12,720
local storage so we'll create a function
25636
21:55:09,800 --> 21:55:16,120
to save to local storage
25637
21:55:12,720 --> 21:55:19,920
function save to
25638
21:55:16,120 --> 21:55:22,920
storage brackets and curly brackets and
25639
21:55:19,920 --> 21:55:28,600
we'll run local
25640
21:55:22,920 --> 21:55:33,872
storage. set item brackets and a string
25641
21:55:28,600 --> 21:55:36,600
we'll use a local storage key orders
25642
21:55:33,872 --> 21:55:39,640
comma and remember local storage only
25643
21:55:36,600 --> 21:55:41,192
supports strings so we'll use
25644
21:55:39,640 --> 21:55:43,480
json.
25645
21:55:41,192 --> 21:55:45,720
stringify
25646
21:55:43,480 --> 21:55:49,320
brackets
25647
21:55:45,720 --> 21:55:56,160
orders and now when we modify this array
25648
21:55:49,320 --> 21:55:56,160
we're going to save to storage and
25649
21:55:57,040 --> 21:56:02,720
brackets finally at the top let's load
25650
21:56:00,512 --> 21:56:04,192
the orders from Storage
25651
21:56:02,720 --> 21:56:08,160
so
25652
21:56:04,192 --> 21:56:14,832
here we use local
25653
21:56:08,160 --> 21:56:17,552
storage. getet item brackets the string
25654
21:56:14,832 --> 21:56:20,000
orders and remember that this will be a
25655
21:56:17,552 --> 21:56:25,640
string so we need to convert it back
25656
21:56:20,000 --> 21:56:28,160
into an array using the code json. pars
25657
21:56:25,640 --> 21:56:28,160
and
25658
21:56:28,232 --> 21:56:34,552
brackets now in the beginning we're not
25659
21:56:30,832 --> 21:56:37,440
going to have any orders saved in local
25660
21:56:34,552 --> 21:56:43,040
storage so we can give this a default
25661
21:56:37,440 --> 21:56:45,120
value using or and an empty array so if
25662
21:56:43,040 --> 21:56:47,512
there's nothing in local storage it's
25663
21:56:45,120 --> 21:56:51,080
going to use this empty array as a
25664
21:56:47,512 --> 21:56:51,080
default and
25665
21:56:53,120 --> 21:56:59,640
save so now let's use add order in the
25666
21:56:56,440 --> 21:57:00,832
payment summary so first we'll export
25667
21:56:59,640 --> 21:57:03,480
this
25668
21:57:00,832 --> 21:57:07,232
function and and
25669
21:57:03,480 --> 21:57:10,160
save and then open the payment summary
25670
21:57:07,232 --> 21:57:13,552
again and at the top we're going to
25671
21:57:10,160 --> 21:57:18,040
import that function so here we'll
25672
21:57:13,552 --> 21:57:21,040
import curly brackets add
25673
21:57:18,040 --> 21:57:24,320
order from a
25674
21:57:21,040 --> 21:57:26,872
string and we'll go into the data folder
25675
21:57:24,320 --> 21:57:30,872
which is do do slash
25676
21:57:26,872 --> 21:57:34,192
dotdata SL orders
25677
21:57:30,872 --> 21:57:37,160
doj and and we'll scroll back
25678
21:57:34,192 --> 21:57:39,400
down and now after we create an order
25679
21:57:37,160 --> 21:57:42,040
from the back end we're going to add it
25680
21:57:39,400 --> 21:57:47,760
to the array and save it in local
25681
21:57:42,040 --> 21:57:51,232
storage using the function add order
25682
21:57:47,760 --> 21:57:54,232
brackets the order
25683
21:57:51,232 --> 21:57:58,320
object and
25684
21:57:54,232 --> 21:58:00,160
save now if we go to our web page and
25685
21:57:58,320 --> 21:58:02,320
click place
25686
21:58:00,160 --> 21:58:05,040
order this should create an order order
25687
21:58:02,320 --> 21:58:08,480
from the back end and save it in local
25688
21:58:05,040 --> 21:58:12,192
storage so now we can open our
25689
21:58:08,480 --> 21:58:15,280
console and go to the console Tab and
25690
21:58:12,192 --> 21:58:18,480
let's check if it's inside local storage
25691
21:58:15,280 --> 21:58:22,872
using local
25692
21:58:18,480 --> 21:58:24,720
storage. getet item brackets and the
25693
21:58:22,872 --> 21:58:28,280
string
25694
21:58:24,720 --> 21:58:28,280
orders and press
25695
21:58:28,400 --> 21:58:34,040
enter and you'll see that we saved an
25696
21:58:30,760 --> 21:58:34,040
order in local store
25697
21:58:34,960 --> 21:58:40,000
storage if you ever want to remove the
25698
21:58:37,360 --> 21:58:41,512
orders from local storage you can use
25699
21:58:40,000 --> 21:58:44,360
this
25700
21:58:41,512 --> 21:58:49,232
code local
25701
21:58:44,360 --> 21:58:51,512
storage. remove item brackets and the
25702
21:58:49,232 --> 21:58:56,760
string
25703
21:58:51,512 --> 21:58:56,760
orders press enter and then refresh the
25704
21:58:59,160 --> 21:59:05,192
page let's go back to our code
25705
21:59:02,920 --> 21:59:08,640
and let's get some practice and add some
25706
21:59:05,192 --> 21:59:11,680
error handling to this code so at the
25707
21:59:08,640 --> 21:59:16,360
top for asyn of weight we're going to
25708
21:59:11,680 --> 21:59:21,000
use try catch so we'll type try curly
25709
21:59:16,360 --> 21:59:23,832
bracket and catch brackets and curly
25710
21:59:21,000 --> 21:59:25,800
brackets and catch gets a parameter
25711
21:59:23,832 --> 21:59:27,832
called
25712
21:59:25,800 --> 21:59:32,080
error so now we're going to move our
25713
21:59:27,832 --> 21:59:34,680
code inside a try we'll select this code
25714
21:59:32,080 --> 21:59:40,640
and then right click
25715
21:59:34,680 --> 21:59:44,192
cut inside try right click and
25716
21:59:40,640 --> 21:59:46,512
paste and I'll create a new line and now
25717
21:59:44,192 --> 21:59:49,832
if we make a request and there's some
25718
21:59:46,512 --> 21:59:53,280
sort of network error that error will go
25719
21:59:49,832 --> 21:59:56,760
down here and we'll run the code inside
25720
21:59:53,280 --> 21:59:58,512
catch so in here let's display a
25721
21:59:56,760 --> 22:00:02,440
message
25722
21:59:58,512 --> 22:00:05,440
console. log the string
25723
22:00:02,440 --> 22:00:05,440
unexpected
25724
22:00:06,280 --> 22:00:11,480
error try again
25725
22:00:12,512 --> 22:00:19,680
later the last step is after we create
25726
22:00:15,920 --> 22:00:24,000
an order we should go to the orders
25727
22:00:19,680 --> 22:00:28,400
page to do that at the bottom
25728
22:00:24,000 --> 22:00:31,192
here we're going to use an object called
25729
22:00:28,400 --> 22:00:33,640
window.location window.location is a
25730
22:00:31,192 --> 22:00:36,232
special object object provided by
25731
22:00:33,640 --> 22:00:39,760
JavaScript and it lets us control the
25732
22:00:36,232 --> 22:00:43,320
URL at the top of the
25733
22:00:39,760 --> 22:00:46,832
browser if we change the location object
25734
22:00:43,320 --> 22:00:50,360
it will change the url at the top so
25735
22:00:46,832 --> 22:00:54,920
let's give this a try we'll go into our
25736
22:00:50,360 --> 22:00:54,920
code and we'll type
25737
22:00:56,000 --> 22:00:59,320
window.location Now location has a
25738
22:00:58,232 --> 22:01:02,080
property
25739
22:00:59,320 --> 22:01:06,160
called href
25740
22:01:02,080 --> 22:01:08,960
this gives us the URL at the top of the
25741
22:01:06,160 --> 22:01:12,040
browser and if we change the href
25742
22:01:08,960 --> 22:01:15,320
property it will change the url at the
25743
22:01:12,040 --> 22:01:19,512
top of the browser so we'll try that in
25744
22:01:15,320 --> 22:01:25,960
our code we're going to change. href and
25745
22:01:19,512 --> 22:01:25,960
make it equal to the string orders.
25746
22:01:27,160 --> 22:01:35,000
HTML so this will replace everything
25747
22:01:30,512 --> 22:01:38,872
after the slash here with orders.
25748
22:01:35,000 --> 22:01:42,000
HTML and this will open the orders. HTML
25749
22:01:38,872 --> 22:01:45,480
file which is at the bottom
25750
22:01:42,000 --> 22:01:51,080
here and this will open the orders
25751
22:01:45,480 --> 22:01:55,040
Page by the way orders. HTML is a file
25752
22:01:51,080 --> 22:01:56,760
path the current file is checkout. HTML
25753
22:01:55,040 --> 22:01:59,480
because this code is running on the
25754
22:01:56,760 --> 22:02:03,000
checkout page so it starts from
25755
22:01:59,480 --> 22:02:07,000
checkout. HTML and then looks for a file
25756
22:02:03,000 --> 22:02:10,280
called orders. HTML beside it which is
25757
22:02:07,000 --> 22:02:12,440
this file here and it loads this file in
25758
22:02:10,280 --> 22:02:12,440
the
25759
22:02:12,512 --> 22:02:19,680
browser so now let's
25760
22:02:16,192 --> 22:02:22,680
save we'll open the project and then
25761
22:02:19,680 --> 22:02:22,680
click place
25762
22:02:23,280 --> 22:02:28,832
order so it should create a new order
25763
22:02:26,040 --> 22:02:30,720
using the backend and it will take us to
25764
22:02:28,832 --> 22:02:33,400
the orders
25765
22:02:30,720 --> 22:02:36,360
page so right now we have a list of
25766
22:02:33,400 --> 22:02:39,120
order objects and that's all the data
25767
22:02:36,360 --> 22:02:42,000
that we need to create this page I'll
25768
22:02:39,120 --> 22:02:45,872
leave generating the HTML and making
25769
22:02:42,000 --> 22:02:45,872
this page interactive as
25770
22:02:46,640 --> 22:02:50,720
exercises so now let's check our tests
25771
22:02:49,120 --> 22:02:54,120
to make sure that everything is still
25772
22:02:50,720 --> 22:02:56,552
working we'll open the tab for our tests
25773
22:02:54,120 --> 22:02:58,832
and I'll refresh just in case and it
25774
22:02:56,552 --> 22:03:03,720
looks good and we'll save our changes
25775
22:02:58,832 --> 22:03:03,720
into git we'll go to the git section
25776
22:03:04,760 --> 22:03:11,192
inside orders. JS we created some
25777
22:03:07,960 --> 22:03:13,872
functions for saving our orders and in
25778
22:03:11,192 --> 22:03:18,232
payment summary.
25779
22:03:13,872 --> 22:03:20,760
JS we made the place order button
25780
22:03:18,232 --> 22:03:24,120
interactive and we use the backend to
25781
22:03:20,760 --> 22:03:26,160
create an order let's create a message
25782
22:03:24,120 --> 22:03:33,160
describing these
25783
22:03:26,160 --> 22:03:35,640
changes create order using the back end
25784
22:03:33,160 --> 22:03:35,640
and
25785
22:03:39,960 --> 22:03:44,872
commit so we're going to learn one more
25786
22:03:42,360 --> 22:03:47,680
thing in this lesson and this is needed
25787
22:03:44,872 --> 22:03:51,680
to create the tracking page we're going
25788
22:03:47,680 --> 22:03:51,680
to learn how to use URL
25789
22:03:52,360 --> 22:03:59,552
parameters so first let's open our
25790
22:03:55,040 --> 22:04:03,000
project and we'll go back to the orders
25791
22:03:59,552 --> 22:04:06,872
page and on this page we have these
25792
22:04:03,000 --> 22:04:10,440
track package links beside the products
25793
22:04:06,872 --> 22:04:14,192
if we click this link it will take us to
25794
22:04:10,440 --> 22:04:17,720
the tracking page at tracking.
25795
22:04:14,192 --> 22:04:20,480
HTML however right now this page is just
25796
22:04:17,720 --> 22:04:24,512
plain HTML there's no
25797
22:04:20,480 --> 22:04:24,512
JavaScript so if we go back to our
25798
22:04:24,680 --> 22:04:31,160
orders and then track a different
25799
22:04:28,960 --> 22:04:33,160
product you'll notice that all of the
25800
22:04:31,160 --> 22:04:35,832
tracking pag pages are the
25801
22:04:33,160 --> 22:04:38,400
same so we need to make each tracking
25802
22:04:35,832 --> 22:04:41,480
page different depending on the order
25803
22:04:38,400 --> 22:04:44,040
and the product so how do we know which
25804
22:04:41,480 --> 22:04:47,192
product to track on this
25805
22:04:44,040 --> 22:04:48,920
page to create this we can use a feature
25806
22:04:47,192 --> 22:04:52,080
called URL
25807
22:04:48,920 --> 22:04:55,872
parameters URL parameters let us save
25808
22:04:52,080 --> 22:04:55,872
data directly in the
25809
22:04:55,920 --> 22:05:03,800
URL to create a URL parameter at the top
25810
22:05:00,920 --> 22:05:10,400
after this URL we're going to type
25811
22:05:03,800 --> 22:05:16,600
question mark and then order capital i d
25812
22:05:10,400 --> 22:05:16,600
equals 1 2 3 for example and press
25813
22:05:16,680 --> 22:05:22,400
enter so the question mark means we're
25814
22:05:19,440 --> 22:05:26,040
adding a URL parameter to this
25815
22:05:22,400 --> 22:05:29,360
URL so a parameter is a property value
25816
22:05:26,040 --> 22:05:31,920
pair the left side is a property and the
25817
22:05:29,360 --> 22:05:36,400
right side is a value
25818
22:05:31,920 --> 22:05:36,400
this is sort of like an object like
25819
22:05:37,080 --> 22:05:45,440
this so using URL parameters we can save
25820
22:05:41,040 --> 22:05:45,440
some data in the URL like
25821
22:05:45,480 --> 22:05:53,320
this and then we can use JavaScript to
25822
22:05:48,832 --> 22:05:55,040
get this data out of the URL to do that
25823
22:05:53,320 --> 22:05:58,640
we'll go back to our
25824
22:05:55,040 --> 22:06:01,000
code and we'll open our files here and
25825
22:05:58,640 --> 22:06:02,872
we'll scroll down to the bottom to the
25826
22:06:01,000 --> 22:06:05,480
tracking
25827
22:06:02,872 --> 22:06:07,040
page and let's scroll all the way down
25828
22:06:05,480 --> 22:06:10,400
to the
25829
22:06:07,040 --> 22:06:12,832
bottom and at the bottom of the body
25830
22:06:10,400 --> 22:06:15,960
let's add a script tag to run some
25831
22:06:12,832 --> 22:06:18,280
JavaScript so we'll type less than
25832
22:06:15,960 --> 22:06:21,232
script greater
25833
22:06:18,280 --> 22:06:24,440
than and to get the parameters out of
25834
22:06:21,232 --> 22:06:26,080
the URL we can use a built-in class
25835
22:06:24,440 --> 22:06:29,640
called
25836
22:06:26,080 --> 22:06:32,000
URL first let's generate an object using
25837
22:06:29,640 --> 22:06:36,440
this class we'll type
25838
22:06:32,000 --> 22:06:39,080
New Capital URL and
25839
22:06:36,440 --> 22:06:41,280
brackets and we'll give it the URL that
25840
22:06:39,080 --> 22:06:46,280
we want to get the parameters
25841
22:06:41,280 --> 22:06:46,280
from so in here we'll type
25842
22:06:47,320 --> 22:06:52,040
window.location.href
25843
22:06:49,960 --> 22:06:55,320
remember that
25844
22:06:52,040 --> 22:06:58,080
window.location.href gets the URL at the
25845
22:06:55,320 --> 22:06:58,080
top of the
25846
22:06:58,120 --> 22:07:02,512
browser and now let's save this object
25847
22:07:00,800 --> 22:07:06,800
in a variable
25848
22:07:02,512 --> 22:07:09,872
at the front we'll create const URL
25849
22:07:06,800 --> 22:07:13,920
equals this
25850
22:07:09,872 --> 22:07:16,552
object so this URL class analyzes the
25851
22:07:13,920 --> 22:07:19,360
URL that we give it and breaks it down
25852
22:07:16,552 --> 22:07:21,320
into different parts one of the parts
25853
22:07:19,360 --> 22:07:23,960
are the URL
25854
22:07:21,320 --> 22:07:26,800
parameters to get the parameters we're
25855
22:07:23,960 --> 22:07:32,640
going to use a property
25856
22:07:26,800 --> 22:07:35,720
url. search capital p perams
25857
22:07:32,640 --> 22:07:37,440
by the way URL parameters are also
25858
22:07:35,720 --> 22:07:39,480
called search
25859
22:07:37,440 --> 22:07:43,040
parameters because they're used for
25860
22:07:39,480 --> 22:07:43,040
features like YouTube
25861
22:07:44,800 --> 22:07:51,280
search so search params will let us get
25862
22:07:48,512 --> 22:07:53,640
the URL parameters up
25863
22:07:51,280 --> 22:07:55,232
here so let's say that we wanted the
25864
22:07:53,640 --> 22:07:57,400
order ID
25865
22:07:55,232 --> 22:08:01,000
parameter inside our
25866
22:07:57,400 --> 22:08:01,872
code search params has a method called
25867
22:08:01,000 --> 22:08:05,512
Dot
25868
22:08:01,872 --> 22:08:08,680
get brackets and this lets us get
25869
22:08:05,512 --> 22:08:11,720
individual parameters so inside here
25870
22:08:08,680 --> 22:08:17,280
we'll give it a string and we'll get the
25871
22:08:11,720 --> 22:08:22,280
order capital i d parameter out of the
25872
22:08:17,280 --> 22:08:25,872
URL so let's console.log this
25873
22:08:22,280 --> 22:08:28,480
console.log and
25874
22:08:25,872 --> 22:08:32,192
brackets if we
25875
22:08:28,480 --> 22:08:34,720
save and then open our project and go to
25876
22:08:32,192 --> 22:08:38,192
the tracking page and then open the
25877
22:08:34,720 --> 22:08:40,600
console right click
25878
22:08:38,192 --> 22:08:43,280
inspect the
25879
22:08:40,600 --> 22:08:47,512
console you'll see that it gave us the
25880
22:08:43,280 --> 22:08:51,360
order ID that we saved up
25881
22:08:47,512 --> 22:08:55,120
here so using that code we can get URL
25882
22:08:51,360 --> 22:08:58,920
parameters out of the URL at the top and
25883
22:08:55,120 --> 22:08:58,920
then use them to create this
25884
22:08:59,680 --> 22:09:05,920
page we can also say save multiple
25885
22:09:02,360 --> 22:09:09,400
parameters in the URL to save another
25886
22:09:05,920 --> 22:09:12,080
parameter at the end we can just type
25887
22:09:09,400 --> 22:09:17,000
and and now we can give it another
25888
22:09:12,080 --> 22:09:19,512
property value pair like product Capital
25889
22:09:17,000 --> 22:09:23,120
ID equal
25890
22:09:19,512 --> 22:09:23,120
456 and press
25891
22:09:23,160 --> 22:09:30,120
enter and now inside our code we can get
25892
22:09:26,232 --> 22:09:30,120
this second parameter
25893
22:09:31,360 --> 22:09:38,480
so inside here we're going to make a
25894
22:09:33,800 --> 22:09:43,640
copy of this line select it right click
25895
22:09:38,480 --> 22:09:46,192
copy and then down here right click
25896
22:09:43,640 --> 22:09:47,120
paste and this time we're going to get
25897
22:09:46,192 --> 22:09:53,680
the
25898
22:09:47,120 --> 22:09:53,680
parameter product Capital ID and
25899
22:09:54,040 --> 22:10:00,832
save if we open the page and open the
25900
22:09:57,832 --> 22:10:00,832
console
25901
22:10:01,552 --> 22:10:09,320
we got the order ID as well as the
25902
22:10:05,280 --> 22:10:09,320
product ID out of the
25903
22:10:09,872 --> 22:10:16,720
URL so URL parameters lets us save
25904
22:10:13,320 --> 22:10:19,000
different data in each
25905
22:10:16,720 --> 22:10:21,680
URL and we can actually go back and
25906
22:10:19,000 --> 22:10:26,040
forth between them so if we click the
25907
22:10:21,680 --> 22:10:28,320
back button it will go to this URL and
25908
22:10:26,040 --> 22:10:32,280
this URL has different data or
25909
22:10:28,320 --> 22:10:34,760
parameters saved inside if we click
25910
22:10:32,280 --> 22:10:37,512
forward this URL has different
25911
22:10:34,760 --> 22:10:39,920
parameters or data saved
25912
22:10:37,512 --> 22:10:42,600
inside and this is how YouTube search
25913
22:10:39,920 --> 22:10:46,160
works if we search for something our
25914
22:10:42,600 --> 22:10:48,600
search is saved as a URL parameter if we
25915
22:10:46,160 --> 22:10:51,920
search for something else our search is
25916
22:10:48,600 --> 22:10:55,640
also saved as a URL parameter and we can
25917
22:10:51,920 --> 22:10:55,640
go back and forth between the
25918
22:10:59,680 --> 22:11:05,040
two so this is actually all the data
25919
22:11:02,400 --> 22:11:07,720
that we need to create the tracking page
25920
22:11:05,040 --> 22:11:09,600
we need to know which order it is and
25921
22:11:07,720 --> 22:11:12,360
which product it
25922
22:11:09,600 --> 22:11:15,512
is now there's one more thing to know to
25923
22:11:12,360 --> 22:11:18,040
create this page we'll go back to our
25924
22:11:15,512 --> 22:11:20,440
code and we're going to open the orders
25925
22:11:18,040 --> 22:11:23,232
page at orders.
25926
22:11:20,440 --> 22:11:26,040
HTML and we're going to find the track
25927
22:11:23,232 --> 22:11:29,120
package button using control F or
25928
22:11:26,040 --> 22:11:33,120
command F and we'll type the text in
25929
22:11:29,120 --> 22:11:33,120
that button track
25930
22:11:33,600 --> 22:11:39,400
package so notice that these buttons are
25931
22:11:36,600 --> 22:11:40,920
just a link to the tracking page or
25932
22:11:39,400 --> 22:11:43,920
tracking.
25933
22:11:40,920 --> 22:11:46,832
HTML so when you're generating this
25934
22:11:43,920 --> 22:11:49,872
HTML make sure that you add URL
25935
22:11:46,832 --> 22:11:54,192
parameters after this tracking page
25936
22:11:49,872 --> 22:11:57,640
URL using question mark the order
25937
22:11:54,192 --> 22:12:01,680
Capital ID equals and then you
25938
22:11:57,640 --> 22:12:06,280
substitute the order ID like 1 2 3
25939
22:12:01,680 --> 22:12:11,040
and then and also attach the product ID
25940
22:12:06,280 --> 22:12:14,680
product Capital ID equals
25941
22:12:11,040 --> 22:12:18,120
456 so when generating this HTML make
25942
22:12:14,680 --> 22:12:22,160
sure you substitute the order ID and
25943
22:12:18,120 --> 22:12:24,640
product ID into this URL so that when it
25944
22:12:22,160 --> 22:12:29,760
opens the tracking page you know which
25945
22:12:24,640 --> 22:12:29,760
order and which product to track
25946
22:12:31,320 --> 22:12:37,280
I'll leave generating the HTML and
25947
22:12:33,800 --> 22:12:40,720
making the tracking page interactive as
25948
22:12:37,280 --> 22:12:44,160
exercises so now let's save this
25949
22:12:40,720 --> 22:12:47,800
file and let's check our tests so we'll
25950
22:12:44,160 --> 22:12:49,872
open the browser and open the test Tab
25951
22:12:47,800 --> 22:12:53,120
and everything is still working and
25952
22:12:49,872 --> 22:12:54,440
we'll save these changes into git open
25953
22:12:53,120 --> 22:12:58,320
the git
25954
22:12:54,440 --> 22:12:58,320
section in orders.
25955
22:12:59,760 --> 22:13:07,320
HTML we added an example of adding URL
25956
22:13:03,440 --> 22:13:11,232
parameters to the tracking page
25957
22:13:07,320 --> 22:13:14,160
Link in tracking. HTML we added an
25958
22:13:11,232 --> 22:13:16,640
example of getting the parameters out of
25959
22:13:14,160 --> 22:13:19,512
the URL at the
25960
22:13:16,640 --> 22:13:20,400
top let's create a message describing
25961
22:13:19,512 --> 22:13:25,040
these
25962
22:13:20,400 --> 22:13:26,680
changes add URL
25963
22:13:25,040 --> 22:13:31,120
parameters
25964
22:13:26,680 --> 22:13:31,120
example and commit
25965
22:13:33,920 --> 22:13:39,280
and that's the end of this lesson in
25966
22:13:36,400 --> 22:13:42,000
this lesson we learned what a vend is
25967
22:13:39,280 --> 22:13:46,120
and how to make HTTP requests to the
25968
22:13:42,000 --> 22:13:47,800
back end we learned how to use XML HTTP
25969
22:13:46,120 --> 22:13:49,920
request and
25970
22:13:47,800 --> 22:13:52,800
fetch we learned how to handle
25971
22:13:49,920 --> 22:13:56,120
asynchronous code using callbacks
25972
22:13:52,800 --> 22:13:59,280
promises and async await we learned how
25973
22:13:56,120 --> 22:14:02,360
to test asynchronous code we learned
25974
22:13:59,280 --> 22:14:06,080
about error handling for unexpected
25975
22:14:02,360 --> 22:14:09,440
errors we use the backend in our project
25976
22:14:06,080 --> 22:14:11,400
and we learn URL
25977
22:14:09,440 --> 22:14:14,160
parameters before we look at the
25978
22:14:11,400 --> 22:14:17,600
exercises you might be wondering what's
25979
22:14:14,160 --> 22:14:20,680
the next step after this course instead
25980
22:14:17,600 --> 22:14:24,232
of just using a backend the next step is
25981
22:14:20,680 --> 22:14:26,320
to learn how to create our own backend
25982
22:14:24,232 --> 22:14:28,680
to do that you need to learn the command
25983
22:14:26,320 --> 22:14:31,920
line and after that you'll learn a
25984
22:14:28,680 --> 22:14:34,232
technology called nodejs which lets us
25985
22:14:31,920 --> 22:14:37,640
create our own
25986
22:14:34,232 --> 22:14:39,872
backend also after this course you can
25987
22:14:37,640 --> 22:14:44,400
learn how to put a website on the
25988
22:14:39,872 --> 22:14:44,400
internet using this video right
25989
22:14:45,160 --> 22:14:49,680
here here are some exercises that'll
25990
22:14:47,800 --> 22:14:52,000
help you practice what we learned in
25991
22:14:49,680 --> 22:14:52,000
this
25992
22:14:59,920 --> 22:15:03,920
lesson e
25993
22:15:38,960 --> 22:15:43,080
thanks for watching here are some other
25994
22:15:41,040 --> 22:15:45,232
videos and courses that you might be
25995
22:15:43,080 --> 22:15:47,512
interested in if you want to support
25996
22:15:45,232 --> 22:15:50,160
this channel you can click like
25997
22:15:47,512 --> 22:15:52,720
subscribe and share this video with
25998
22:15:50,160 --> 22:15:56,120
others thanks again and I'll see you in
25999
22:15:52,720 --> 22:15:56,120
the next one1908411
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.