All language subtitles for javascript-720p-en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranรฎ)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu

Original subtitles

[INSTRUMENTAL MUSIC PLAYING]

DOUG LLOYD: So near CS50's end, we introduce you

to several different programming languages,

and we aren't able to cover them in nearly as much depth

as we're able to cover C earlier in the course.

The goal here is not to give you a complete rundown of what

these languages do, but to give you enough of the basics

and show you enough of the parallels to things

that you already know so that you can go forth and really flesh out

your knowledge of these different languages.

And another one of these we're going to cover right now is JavaScript.

Now, similar to other languages we've discussed,

it is a modern programming language that is derived from C's syntax.

So if you're familiar with C, you're going

to be able to pick up JavaScript pretty quickly.

It's been around just about as long as Python.

It was invented a few years afterwards in the mid 1990s.

Now what's really important about JavaScript, as well as HTML and CSS,

which we've discussed in other videos, is

that those three languages pretty much make up the core user experience

of what it means to be online.

So understanding how to use and work with JavaScript, HTML, and CSS

will allow you to really create websites that users

will enjoy visiting, because you'll be able to create a great user

experience for them with these three languages.

To write JavaScript, it's really easy.

Open up a file with a dot js file extension,

and start writing in JavaScript right away.

If you're familiar with a language like PHP,

you know that you have to sort of bind your code up

in these delimiters-- bracket, question mark, PHP, and all that stuff.

We don't have to do that in JavaScript.

We literally just start writing our code in a JavaScript

file, which is pretty nice.

Our website will also know that what our file is is JavaScript,

because we're going to tell it in an HTML tag.

We're going to say, I have a script that is of type JavaScript,

and it is a file with a dot js file extension.

Pretty straightforward.

Now, unlike Python, which runs on the server side-- that is, on the side

that is hosting the website, JavaScript applications

run client side on your own machine when you are visiting a website.

To include JavaScript in your HTML, it's pretty easy.

Just like when we include CSS with style tags,

we can include JavaScript in between script tags.

So we can have an open script tag and literally

start writing JavaScript right in our HTML, which is kind of cool.

But also like CSS, where we have link tags,

we can write our JavaScript in a different file

and connect it using the source attribute of a script tag.

In CS50, and really probably more generally,

this is definitely the preferred way to go, particularly

if you have a JavaScript file that might be used--

or the contents of which might be used-- on different pages of your website.

You don't have to write the JavaScript between the script tags

on every single page.

You want to be able to just refer to an outside file

and link that in every single time.

So let's quickly run down some of the fundamentals

that you might use in JavaScript.

So, variables-- they're really similar to Python variables and really similar

to C variables.

No type specifier is required.

And if you want a local variable, you preface it with the var keyword.

So in Python, we would say something like this-- x equals 44.

We don't want to do that in JavaScript, because that would actually

create a global variable, if you were to put a semicolon at the end.

We would want this-- var x equals 44.

That creates a local variable called x in JavaScript,

and stores the value 44 in it.

Conditionals-- all of the old favorites from C are available for you to use.

If, else if, else, switch, question mark colon-- all of those are fair game.

We're not going into detail on those at all,

because we've covered them in our videos on C.

But they're all here to use in JavaScript,

and behave pretty much exactly the same.

Loops, meanwhile-- all of ones we're familiar with from C

are also still available-- while loops, do-while loops,

and for loops, although we do have a couple of other variations

that we'll talk about in just a little bit.

Now, functions in JavaScript are all introduced with the function keyword.

So it's a function.

Write a function name and parameters, and then

we define our function between curly braces just like we would in C,

except in C, of course, we're not using the function keyword.

But there's also a catch with JavaScript, which

is that functions can be anonymous.

Meaning you don't have to give them a name.

Now, you might be asking yourself, wait, how can I call a function

If it doesn't have a name?

Well, we'll talk about that in just a little bit,

and we'll talk about what I mean in particular here when I'm describing

binding things to HTML elements.

We'll talk about that in the video on the document object model,

but we'll talk about anonymous functions in just another minute.

I'll give you an example and you can see how they

might be useful in certain contexts.

And those contexts actually do kind of materialize

a lot in JavaScript programming.

JavaScript, like C, and like Python, are analogous to Python's lists.

Has arrays, and you can declare an array.

It's pretty straightforward.

For example, var nums creates a local array.

And then I have square brackets, and I just

have a comma-separated list of all the values that I want to put in the array.

I can also mix types.

I don't have to have all integers, or all floats, or all strings,

like I do in C. I can have different types mixed together there.

JavaScript has the ability to behave a few different ways.

That's why it can be a little bit tricky as the very first language to learn,

because a sets up a bunch of rules for itself and then breaks them.

It is very, very flexible, but perhaps almost

a little too flexible as a first language.

But it can behave as an object-oriented programming language.

Object-oriented might be a term that you've heard before,

but if not, we'll try to give a quick little crash course here.

An object is really similar in spirit to a structure

that we are familiar with, hopefully, from C. Now, in C,

structures can have a number of different fields or members.

Another term for those that we see commonly in object-oriented programming

are properties.

But those properties, or fields, or members, just like in

C, can never stand on their own.

So for example, if we define the structure for a car like this--

struct car, and inside of that, there are two different fields or members--

int year and char model tens, or a 10-character string

that we can use to store the cars' model.

We can do things like this.

We can say struct car Herbie, which declares

a variable of type struct car named Herbie,

and then we can say Herbie dot year equals 1963.

Hurbie dot model equals Beetle.

That's totally fine.

That's valid C. But we can never say this in C--

we can never say, year equals 1963, model equals Beetle.

Now, we can't say that because year and model are so fundamental to what

it means to be a struct car.

They are part of a struct car.

And so if we're ever using year and model--

we can't use them in the abstract.

We always have to associate those things with a particular struct car.

So that is not OK.

Objects, in addition to having fields, or members, or properties,

also have something called methods, which

is sort of like if a C structure had a function that could only ever apply

to that structure.

So it's as if we have a function where structures are the only things that

need to be passed in.

Now, that, we have in C.

But we can't define a function inside of the curly braces of a struct.

That is more-- that is object-oriented programming.

That is different from here.

But just like properties, methods don't stand on their own either.

It's not like a function that just exists in the abstract.

It is a function that only exists in the context of, in this case, an object.

So where we might do this in C-- function parentheses object,

where object is a parameter to the function being called--

that is not object-oriented styling.

Object oriented means the object is at the core of everything,

and instead, we're going to call this function that is a part of the object.

OK?

So this is what object-oriented programming looks like in a very,

very basic form, is, there are functions that are affiliated or associated with

objects, and we call those functions as follows--

by specifying the object and saying we want some function

to execute on that object, like this.

The fields and methods of an object are really similar in spirit

to the idea of a dictionary, which you may be familiar with

or recall from Python.

So we could, for example, have something like this-- var Herbie equals--

curly braces, now, not square brackets, it's curly braces--

and then, a comma-separated list of key value pairs, where

year 1963 is sort of like saying Herbie dot year equals 1963 in C,

and Herbie dot model equals Beetle.

This is akin to how we would do the same thing in JavaScript,

by creating an object and giving it a couple of properties right away.

All right.

Now, let's go back to loops, because I mentioned earlier,

there are a couple of different new loops that we can use in JavaScript.

So now that we have this object, how would we maybe iterate across

all of the key value pairs of that object?

Or in fact, how we iterate across all of the elements of an array,

if we wanted to do that, besides using a for loop, a while

loop, or a do-while loop?

So in Python, we saw something like this--

for key in list, and then we would have some code where we would use

key every point from there on down--

a stand in for the i-th element of the list.

You can't do that in JavaScript, but we can do something pretty similar

for var key in object.

And then open curly brace.

And between those curly braces, we can use object square bracket key

to refer to the key-th element of the object,

or the key-th key in a key value pair set of the object.

We also have a slightly different variation

for var key of object, which, instead of having to use

object square bracket key, we can now refer

to iterating across all of the values--

as opposed to this, which iterates across all the keys,

this would iterate across the values.

So we can cover both sides of a key value pair using for var key

in, or for var key of.

Here's an example of an array where we're

going to use these two different types of loop.

So we have here a week array that has 7 elements in it--

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday.

And I want to use a four var day in week array.

So I want to use a for in loop, and I want to console dog log.

Console dot log is the JavaScript equivalent of print f.

You can access it using developer tools in most modern browsers.

What's going to happen when they print this out?

It's going to print out a list of all of the keys.

Well, in this array, there's really no keys-- there's a bunch of indices.

So this will print out 0, 1, 2, 3, 4, 5, 6,

because there are seven elements of my array,

and I am logging which element I'm talking about.

If I wanted to print out the days instead, I would use a for of loop,

and I would get the following printed out to the console--

Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday.

What if I want to concatenate information?

So remember, we can tie different strings together.

We could do that in Python.

We can do it as well here in JavaScript.

And we do that by using plus.

So if I want to console dot log a bunch of different strings concatenated

together, I just use plus to do it.

But here's a little bit of a catch, right?

If I'm using plus, now it means two different things.

I want to concatenate strings together, but maybe here, I want to add.

I really encourage you to take a look at what

happens if you write the week array into some JavaScript,

and then have a loop that iterates across and console dot logs this.

You might find that you get something that you don't expect.

And so, JavaScript is making its best guess,

and it's assuming that day and 1 are both strings, when really,

what I want to do is add them together, literally, because they're numbers.

But fortunately JavaScript gives us a way around that

by using a function called parse int.

Now, this is going to give us what we expect to see.

This, on the other hand, is going to give us

something we don't expect to see.

But it's just, again, a case of, we're using the same operator

to mean two different things, and the language sometimes

has to make a best guess.

So it's not always a great thing that languages nowadays don't often

require us to specify a data type--

if we were able to specify a data type here,

we would be able to disambiguate this.

But here with JavaScript, it thinks it's being very helpful for us

by not specifying a type.

And it's going to make our best guess as to what we want to do,

but sometimes it guesses wrong.

But it gives us ways to work around it if it does indeed guess wrong.

So arrays are actually a special case of an object.

And, actually, in JavaScript, everything is a special case of an object.

X, any variable, var x equals 44--

that's an object that just happens to have one property.

Arrays are an object that happens to have a number of properties,

and also some certain methods that can be applied to them.

So we can call the size method, or pop, or push, or shift.

And I'll leave you to figure out, or to do some research into,

what those different things are.

But suffice it to say that they are functions that are basically

so baked into what it means to be an array

that we can just call them without having

to write them in the first place.

That's pretty cool.

Here's another cool thing that you can do

with arrays-- there's another method for them called

map, which basically allows us to apply a function to every single element

of an array.

And in particular, this is a great example

for using an anonymous function.

So let's take a look at how we might use an anonymous function

and why it might be useful to do so.

Here's an array called nums.

It has five elements in it--

1, 2, 3, 4, and 5.

Now, what I want to do is, I want to map some function on to them.

So what I'm saying here is, nums equals--

so I'm going to do something to nums.

I'm going to reassign that back to nums.

Nums equals nums dot map--

and remember, map takes in a function.

It's a function that I want to apply to all of the elements of that array.

One thing I could do is just write this function somewhere else,

and give it a name, say I called it--

what's going to happen here is, every value's going to be doubled.

Let's say that I wrote a function called double numbers.

I could say, nums equals nums dot map parentheses double numbers,

and it would just double every number.

That would be fine.

But here, notice I'm using that function key word,

and I'm giving a list of parameters-- in this case, num--

but I'm not giving that function a name.

Why am I not giving that function a name?

Well, I'm just doing this mapping here.

I'm never going to need to double these numbers again.

Why am I going to clutter up the name space,

and give it some name when I'm never going to use it

again outside of this context?

It's kind of convenient that we can actually use the function in this case,

then, without having to give it a name, and still

have it do what we want to do.

So all I'm doing here inside of those parentheses of maps is,

the open parentheses on the first line there--

and that close parentheses is actually on the third line.

And in between the parentheses, where I'm specifying the parameter to map,

I'm literally defining an entire function in there.

And then if I execute this line of code, what's going to happen to nums?

Well, you can probably guess, it's going to just double every element of nums.

All right, one more thing I want to touch on really quick about JavaScript,

and that is the notion of events.

So an event is something that goes hand in hand with HTML on JavaScript,

and it is a response to a user doing something on a web page.

So for example, perhaps they click a button.

Perhaps the page has finished loading after the user hits refresh,

for example.

Maybe they hover over a portion of the page, or something like that.

All of those things are events.

And JavaScript has support for what is called an event handler, which

is some JavaScript code that will execute

once that event has taken place.

So it allows our site page to be very interactive.

We type in a box, for example--

we could have an event handler, that pops up a message that

says, please enter your password.

So it's just a complete-- it's an empty field that says nothing at all.

You start to type in it, and then this box

pops up because you started typing, which is an event on the page.

And it tells you to do something that is a JavaScript event

handler taking effect.

Many elements of HTML have support for events as an attribute.

So here's an example of some really basic HTML.

I have my head and my body, and inside of the body, there are two buttons.

And they have this attribute called on click.

On click is a definition, basically, for an event handler.

So I want something to happen when I click the buttons.

Right now it's nothing, but I can put something in there

so that when I click on either of those buttons,

that function that's in between the quotation marks there would get called.

We can write a really generic event handler in JavaScript,

for example, that creates an event object,

and will tell us which of those two buttons were clicked.

And it might look something like this.

Button on click equals alert name event.

If we do this, we have basically set up our HTML,

so that when either button one is clicked or button two is clicked,

the alert name function will be called, and an event will be passed in.

The event is automatically generated by the page,

and it basically contains all of the information about what just happened.

And from that information, we can extract more information.

So for example, here what the alert name function might look

like, and notice that here, I'm also accepting an event parameter.

What am I doing then?

I'm getting a new JavaScript local variable called trigger,

and I'm asking for that event's source element.

And what that is basically telling me is,

what is the element on the page that was interacted

with that triggered this event?

Or rather, put another way, what element effectively

was passed in to this function.

Because, again, this is automatically generated.

The page knows which button we touched, and so, basically,

what's happening here is, that button-- whichever one of the two it was--

is getting passed into this function.

Then-- and you'll see a little bit more of this when we talk about the document

object model--

I can access that trigger's inner HTML to figure out which button was clicked.

Now, what is inner HTML?

Let me jump back a couple of slides for a second here.

The inner HTML is what is between the button tags.

In this case, button one is inner HTML and button two is also inner HTML.

So what happens when I click on those buttons is, it will alert to me,

you clicked on button one if I happened to click on button one,

or, you clicked on button two, if you happened to click on button two.

Now, again, we are just scratching the surface of JavaScript,

but I wanted to give you a sense of some of the different things

that you can do, so that you can then go forward, look at the documentation,

and see the very wide range of things that you can do as well,

by just applying some of the basic tenets

that we've learned about in CS50, and really expanding

your knowledge exponentially.

I'm Doug Lloyd.

This is CS50.

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.