Subtitles section Play video Print subtitles SPEAKER 1: All right, this is CS50, week 10. And you'll recall that last time we introduced one of our additional languages in CS40, that of SQL, Structured Query Language. And this, recall, was a language that we used to query databases, insert data into databases, delete, update, and more, so that we actually have a way of persisting data once we built a web-based application, or really any other application that we want to be able to store data long-term. And we had such statements as create for creating a database or a table, insert, select, update, delete, and a few others as well. And with these relatively few building blocks, we're able to start building a back-end for a web service. And indeed weeks ago when we first implemented a front-end for Google, simply by implementing that web form, we didn't really have anything to do with the data or anywhere to query for data. But now we actually do via our own database in the form of SQLite and via this new language, SQL itself. But today we introduce really the last of our formal languages in CS50. Recall that we began the semester with Scratch, transitioning quickly thereafter to C where we spent a lot of the semester. We have since pivoted to Python of course, whose syntax is quite different, but whose ideas are really fundamentally the same. Today we transition to JavaScript. And JavaScript you'll find is more syntactically similar probably to C than it is to Python itself. So you'll see that a few more parentheses are back, perhaps some semi-colons as well. But what's most important today is that really the fundamentals of programming aren't changing. But rather the method via which we actually execute or run this code. In particular, thus far, when we've written C code, when we've written Python code, all of that code has run on the server, so to speak, within CS50 IDE or maybe on your own Mac or your own PC if you have some prior programming experience. But today we introduce a language that is generally, though not always, used within the client, the browser. Which is to say the code that we start writing today-- and when you generally use JavaScript in order create front-end user interfaces, you will find that the code you write, like HTML or CSS, is actually sent to the user's browser where it's executed, again client-side, on the Mac on the PC. It is not executed server-side. Now to be fair, JavaScript can be and is increasingly used on the server-side as well via frameworks called Node.js, if not others. But we'll focus predominantly on client-side usage thereof. And you'll see that you can start to do some pretty powerful things, because not only now do we have the ability to have a dynamic back-end that serves up data and searches things for us, but a front-end that gives us all the better user interface and features still. So I was thinking back yesterday on when I first started using JavaScript. And it was in a very, very small isolated instance. But way back in the day-- and this is thanks to the wayback machine, you may recall Frosh IMs was something I did in college. Not so much in sports but more the website. And this was essentially the layout-- apologies-- of the Frosh IMs website some years ago. Now this actually post-dates me by a few years, since it seems the codebase actually survived me by quite a few years, surprisingly. But early on, when you would hover over these menu options at top right, those would have what are called event listeners attached to them so that when you hover over some of those menu options, the color would actually change. And I think they shifted positions slightly. So [INAUDIBLE] ultimately took over the site and took it further than that. But this was my first taste of JavaScript. And it was just to give the website a sense of dynamism and to give it a sense of interactivity that wasn't possible, certainly not at the time, with HTML alone. So let's do a quick compare and contrast of JavaScript with things we've seen in the past, just to kind of bring ourselves up to speed on some of the syntax. But you'll find we need to spend relatively little time on the syntax and the language itself, because you'll find syntactically it's so similar. And so instead we'll focus more on ideas and new features of the language itself. So as in C and in Python, we have the ability to express functions in JavaScript. They look a little bit different, at least at first glance. But fundamentally they're really the same. In JavaScript, if we want to function, we're going to use the keyword function to say, hey browser, here comes a function followed by the function's names, zero or more parameters, and then between the curly braces a bit of code that implements that function. So gone is the ability to just indent your code and have the interpreter know what you mean. Those curly braces are back as are more parentheses for us here in JavaScript. But in terms of loops you should find this fairly familiar. In JavaScript if you want to iterate over something again and again and again, the do while construct is actually back. So we have something very similar here as we do in C. And what you use that loop for can be any number of things. But we do have that capability again. Similarly, do we have while or while true loop here, which would induce an infinite loop. And again, these are the kinds of things that might trip you up unnecessarily at first, but quite reasonably. Like if you start capitalizing true again, it's not going to work in JavaScript. So again, reasonable people will disagree when it comes to designing these languages. And so the authors of JavaScript decided to lower case true and false, where again in Python we've been capitalizing recently, true and false. Meanwhile, if you want to declare a loop using a for loop, that is back. But you'll notice perhaps implicit in this example is the fact that JavaScript is, like Python, not strongly typed. It does have the notion of data types. And you can access or look at those data types. But you don't have to specify them as the programmer when you're declaring variables. Rather, in the case like this, when you're declaring a counter like I, which should be an integer from 0 up to 50, you literally say, var, for variable, than the name you want to declare and then just the rest of the syntax is as we've seen before. Meanwhile, there's another handy feature-- and you'll see this in use in various examples perhaps online-- is the very easy ability, like in Python, to iterate over the keys in an object. So recall that an object, at least in Python, is really just a collection of key value pairs. But it's an object can also have methods inside of it. But if we focus entirely on data, keys, and values, this syntax here would allow you to iterate over all of the keys and some value coming back. So maybe if you have a stock object, you could iterate over its name and its price and its symbol, simply by using syntax like this, and an index into the object to get at that object's value. Meanwhile, variables are fairly straightforward. To declare a variable like I, we would say var I equals 0, and a semi-colon. Boolean expressions, meanwhile, are with us still. And these are no different. I is less than 50 might be expressed with this. X is less than y might be expressed with this. So nothing new there. Meanwhile with conditions, we have syntax identical to C. So again, the curly braces are necessary, at least if you have multiple lines that you intend to be associated with the if or the else if or the else. Again we're back to, else space if, instead of L if in Python. But again, there's nothing really new here in terms of content, really just syntax. So after practice and after some trial and error, you'll generally find that it becomes second nature. Meanwhile, we have arrays in JavaScript. So for instance, if we want to declare an array called numbers, again we don't specify the type of this array or the members therein. We simply say var, to give us a variable, number shall be the name of that variable. And then a list here of arbitrary numbers themselves nested in between square brackets. So in JavaScript, as we've seen in Python, we have the ability to express lists or arrays specifically in JavaScript that simply use square bracket notation to define them in a context like this. Meanwhile, speaking of objects a moment ago, we have that same ability in JavaScript to declare them. So for instance, if we wanted to declare an object, and we'll call it quote, we use, as in Python, curly braces. And I say as in Python because in Python really when I say object, focusing entirely on data, I really mean a Python dictionary or dict object, which again is this collection of key value pairs. We don't necessarily do things quite the same way. But in this case here, var quote is a way of porting,