A lot of information has been written about JavaScript and EcmaScript since both the language creation time and the standard definition time. The intention of this road map is to share with you one of many paths you can take to grok the language and specially to draw you to the highest quality information (which I won't be ever able to write in a better way) in the attempt to prevent you from coming across misleading (when not completely wrong) documents outside in the wild.
Hopefully your walk will be much easier than mine!
- Introduction to JavaScript
- What is JS anyway?
- What's ECMAScript?
- Language features quick overview
- Myths busted
- ES5 vs ES6
- Relevant differences
- Relevant improvements
- Why are we using ES6 in this course?
- After ES6?
- Initial workspace Setup
- Basic Runtime ( Node )
- IDE ( Visual Studio Code )
- Run Code extension
- Introduction to NPM
- Syntax, Grammar & Semantics
- ECMAScript Types
- Value type groups
- Primitives
- Boolean
- Null
- Undefined
- Number
- BigInt ( it's still a Stage 3 proposal but Chrome already support it and Firefox and Safari are underway.
- String
- Symbol( new in ES6! )
- Composite/Compound
- Object
- Primitives
- Type conversion
- Explicit ( "type casting" )
- Implicit ( Coercion )
- Value type groups
- Operators
- Assignment operators
- Comparison operators
- Arithmetic operators
- Bitwise operators
- Logical operators
- String operators
- Conditional (ternary) operator
- Comma operator
- Unary operators
- Relational operators
- Destructuring
- Operators Precedence
- Spread/Rest
- Objects explained
- Objects, the big picture
- Syntax
- Object properties attributes (accessors, descriptors)
- Prototype
- Behavior Delegation
- Exotic Objects
- Object built-in methods
- Standard built-in objects
- Indexed and Keyed Collections
- Collections family
- The Array Object
- Syntax
- Array Built-in methods
- Preliminary practice
- Exercises
- Control Structures
- General definition
- Branching
- Grouping
- Exception handling
- Iteration
- Arbitrary Jumps
- The Iterable and the Iterator Protocol
- Preliminary Practice
- Exercises
- Functions
- General Definition
- Function declaration (function statement)
- Function expression
- Function constructor
- Constructor vs declaration vs expression
- Properties of the Function object in the prototype chain
- Arity & formal parameters
- Formal parameters and the
arguments
thing - Functions as properties of an object
- IIFE
- Pure functions
- Side Effects
- Execution context
- Types of Execution Context (executable code)
- Execution Stack
- How Execution Context is defined?
- Articles and books used for this section
- Scope
- Part of a program
- ECMAScript definition
- General definitions
- Examples
- Hoisting
- Closure
- General definition
- Examples
- Can we Cheat Scope?
- ev[a|i]l
- with
- Relative Concepts Readings
- Preliminary practice
- Exercises
this
Keyword- Introduction
- Resolving
this
- Explicitly binding
this
through prototype methodsFunction.prototype.bind()
Function.prototype.apply()
Function.prototype.call()
- Strict mode
- What happens on strict mode?
- Semantic Differences
- Arrow Functions
- Generators
- Exercises
- Classes
- General definition
- Syntax
class
declaration statementclass
expression- Class body and method definitions
- ES6 Classes in depth
- OOP vs Functional
- General definitions
- Some essential differences
- Examples
- Exercises
- Asynchronous programming
- Event Loop
- Callback
- Promises
- Async/Await
- Exercises
- JavaScript, where does it live?
- The ECMAScript Engine
- What does the engine actually do?
- Visual guide based on V8
- How many of them are there?
- Engines Differences
- The ECMAScript runtime
- Runtimes Differences
- Similarities
- Javascript and the web
- HTML
- CSS
- TL;DR
- Complementary readings
- Quality and reliability
- An introduction to the "reliability" and "quality" concepts
- Unit / Integration / Functional testing
- Definitions
- Comparison
- TDD
- Testing frameworks for JavaScript
- Debugging
- Debugging tools available for JavaScript
- Global console object
- Node.js console
- debugger statement
- node.js debugger
- Browser's developer tools
- IDE interaction with a browser to debug
- Debugging tools available for JavaScript
- Transpilers
- Babel
- Task runners, bundlers, build systems
- Webpack
- Grunt
- Gulp
- Brunch
- Yeoman
- RollUp
- Destructuring
- Syntax
- Examples
- Readings
- Advanced Function/code factorization
- Currying
- Partial application
- First-class composition
- Readings