Modern JavaScript
A guide to help you learn Modern JavaScript
- The beginning
- The concepts
- JavaScript key concepts & syntax
- Running JavaScript
- The
var
&function
keywords, scope, hoisting andundefined
- First class functions: Function declarations, function expressions, hoisting &
undefined
- Working with text:
'
and"
; plus template literals with backticks`
and${}
- Equality symbols
==
,!=
,===
and!==
- Debugging, documenting & logging JavaScript
- Validating and error handling in JavaScript
- Namespaces and block scoping, the problem
- Immediately-invoked function expressions (IIFE): Namespaces and block scoping solved, the early years
- Object assignments and object notation: Namespaces solved another way, the early years
- Lexical scope and the
this
execution context - Closures: Functions that remember their lexical scope
- The
let
andconst
keywords: Block scoping solved, the modern years; plus saner access, defaults & temporal dead zones (TDZ) for variables - The
export
&import
keywords and modules: Namespaces solved, the modern years - Pre-ES6 (ES2015) modules detour: CommonJS, AMD and UMD
- Arrow functions with
=>
- The
void
keyword - Function parameter default values
- Generators: Functions with
*
and theyield
keyword - The spread/rest
...
operator - The exponentiation operator
**
- Asynchronous functions with
async
andawait
- Numeric separators with the underscore
_
character
- JavaScript key concepts & syntax
- JavaScript data types
- Dynamically typed behavior and data types
- Primitive data types
- The
string
primitive data type andString
object data type - The
number
primitive data type,Number
object data type and their limits - The
boolean
primitive data type andBoolean
object data type - The
symbol
primitive data type andSymbol
object data type - The
bigint
primitive data type andBigInt
object data type - The
null
andundefined
primitive data types - Object data types
- The immutability of primitives and mutablity of objects
- The
Object
data type - The global object detour: A top level
Object
object available in all JavaScript environments - The
Map
andWeakMap
data types - The
Set
andWeakSet
data types - The
Proxy
andReflect
data types
- JavaScript object-orientated and prototype-based programming
- Prototype-based programming and the
prototype
property - Prototype-based programming and the prototype chain
- Prototype-based programming constructors & static properties, the early years
- Prototype-based programming constructors and inheritance, the early years
- To
new
or not tonew
- Prototype-based getters and setters with
get
andset
keywords & property descriptors - JavaScript OOP keywords:
class
,constructor
,extends
,super
,get
,set
andstatic
, the modern years
- Prototype-based programming and the
- Loops in JS
for
statement in JS: Explicit counters, iterations, step sizes and performance considerationsbreak
andcontinue
statements: Exiting for loops and iterations prematurely- Label statements in JS loops: GoTo a specific point in the workflow of a JS loop
while
anddo while
statements: Loops that run with one expressionfor in
statement: A loop for key-value data structures- The
for of
statement in JS: Iterable and iterator protocols, plus what are and how to make iterable objects - Generators and yield expressions in JS: Functions that operate with iterable objects
Tip Certain JS data types have built-in methods that produce the same outcome as loops with
for
,while
,do while
and inclusivelyfor in
statements, but with simpler syntax: - JavaScript asynchronous and parallel execution
- Single threaded, the problem; non-blocking, asynchronous and parallel execution, the solutions
- Timeouts, asynchronously delaying the inevitable
- Callbacks and higher-order functions: They aren't necessarily asynchronous & non-blocking
- Functions for UI (User Interface) and I/O(Input/Output) related work: Asynchronous & non-blocking
- Callback hell
- Promises
- Async functions
- Async functions with
await
- Web workers
- Node JS
- How Node JS compares to JavaScript browser engines and other programming language run-time environments
- Node JS - Installation and versioning
- The Node version manager
nvm
(Optional) - The Node JS
node
command - Node JS - A JavaScript CommonJS based system
- Node JS - Built-in JavaScript modules
- The Node JS
dns
module: DNS (Domain Name System) operations with JavaScript - The Node JS
fs
module: Read and write files with JavaScript - Node JS & the JavaScript asynchronous/callback approach & event loop design
- Npm
- Deno
- TypeScript: The JavaScript that should have been
- WebAssembly: The web's JavaScript liberator
- JavaScript's performance crux: An interpreted language
- Getting to machine language from other languages: Interpreted, compiled, assembly, higher level, mid level, system level and low level
- WebAssembly precursors : Browser add-ons/plug-ins, JavaScript asm.js and transpilers for low level languages
- WebAssembly: Lessons learned from JavaScript, browsers, add-ons/plug-ins, low level languages and transpilers
- WebAssembly: The future of the web
- Rust