JavaScript: Difference between revisions
Line 87: | Line 87: | ||
== Fetch API & making HTTP requests == | == Fetch API & making HTTP requests == | ||
Loading external data was added to javascript via the XMLHTTPRequest object, spawning a set of practices called "AJAX". Modern browsers now support the so-called "Fetch API" that makes loading files relatively straightforward. As fetching is essentially asynchronous (it takes time, your code continues at some point in the future when it's done rather than directly), the API uses Promises. Note that there are two stages to a fetch: (1) The request itself, and (2) retrieving the "body" of the results as typically either json or text. | |||
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API | ||
<source lang="javascript"> | <source lang="javascript"> | ||
fetch('http://example.com/movies.json') | fetch('http://example.com/movies.json') | ||
.then(response => response.json()) | .then(response => response.json()) | ||
.then(data => console.log(data)); | .then(data => console.log(data)); | ||
</source> | </source> | ||
Revision as of 09:30, 17 February 2021
Scripting language built into web browsers.
History
Originally designed for the Netscape browser, the name "JavaScript" was chosen to associate with the "Java" programming language developed by Sun which, in 1995, was the first real option for making "live" code run over the web. Other than the name, there is no relation between JavaScript and Java. The formal name for JavaScript now is ECMAScript, but as this sounds more like a skin condition than a programming language, the name JavaScript has persisted.
The introduction of highly interactive "web apps" like Google Maps has helped to reduce some of the differences between browsers in their implementation of JavaScript (which made early JavaScript development quite a nightmare). Traditionally popular JavaScript frameworks like prototype and JQuery have helped to smooth over differences between browsers and led to many techniques (such as using CSS selectors in Javascript code, and "functional" style programming) more popular and better incoporated into "vanilla" javascript.
Node (2009) is an implementation of javascript designed to run outside of the browser aka server-side. Together with its related package manager npm, Node has made a huge impact on the ecosystem of javascript development and npm serves as a foundation for all kinds of javascript development workflows (whether or not the final "target" of a project is a (node) server and/or in the browser).
In 2021, javascript is a vibrant but complex development ecosystem. Important related projects & development communities are webpack and typescript, and frameworks like angular and react.
Data types
Variables
Functions
function hello (x) {
console.log("Hello", x);
}
hello("Bob");
In practice, javascript functions are often defined "anonymously", as "callbacks" to events like mouse clicks.
let div = document.getElementById("button");
div.addEventListener("click", function (event) {
console.log("HEY somebody clicked", event);
});
A newer compact "splat" notation using the symbols "=>" is increasingly popular.
div.addEventListener("click", (event) => {
console.log("HEY somebody clicked", event);
});
Loops
words = "Once upon a time, in a galaxy far far away".split()
for w in words:
print w
var words = "Once upon a time, in a galaxy far far away".split(" ")
for (var i=0; i<words.length; i++) {
console.log(words[i]);
}
Promises & Asynchronous programming
Promises and new structures like async + await offer an alternative to working with callbacks.
Array methods: forEach() & map()
const array1 = ['a', 'b', 'c'];
array1.forEach(element => console.log(element));
// expected output: "a"
// expected output: "b"
// expected output: "c"
See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
Fetch API & making HTTP requests
Loading external data was added to javascript via the XMLHTTPRequest object, spawning a set of practices called "AJAX". Modern browsers now support the so-called "Fetch API" that makes loading files relatively straightforward. As fetching is essentially asynchronous (it takes time, your code continues at some point in the future when it's done rather than directly), the API uses Promises. Note that there are two stages to a fetch: (1) The request itself, and (2) retrieving the "body" of the results as typically either json or text.
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
From Python
- Curly braces ({}) instead of colons and indentation (:)
- Indentation: still important for readability!
- Semi-colons at ends of lines (though optional, good to get into the practice of using)
- "var", "let" and "const" to announce a variable (technically optional but important to be explicit about scope)
- "function" defines functions, also the new "splat" style ( => )
- Implicit type conversion ("hello" + 7 = "hello7")
Resources
"Core" Documentation from mozilla.org
- https://developer.mozilla.org/en-US/docs/Web/JavaScript
- Nice blog post from 2020 on what simple modern javascript in a browser can do: https://jvns.ca/blog/2020/06/19/a-little-bit-of-plain-javascript-can-do-a-lot/
Online Tutorials