Implementation & Explanation of Beginner to Advanced JavaScript Concepts [ES5 & ES6].
Resources:
- JS Course & GitHub Repo for JS by Jonas Schmedtmann
- You Don't Know JS by Kyle Simpson (getify)
- JS Docs by MDN
More resources will be added depending on the usefulness of the resource.
These are the projects that are implemented using JavaScript as a proof of concept.
- Pig - dice game: Live here | GitHub Repo
- Budgety - budget app: Live here | GitHub Repo
- Forkify - online recipe search: Live here | GitHub Repo
Syntax - <topic name>: <html file> | <JavaScript file>
-
- Hello World!:
- Inline Script: hello_i.html
- External Script: hello_e.html | hello.js
- Variables & Data Types: var_dt.html | var_dt.js
- Variable Mutation & Type Coercion: vm_tc.html | vm_tc.js
- Basic Operators: operators.html | operators.js
- Coding Challenge I: challenge_1.html | challenge_1.js
- Control Structures & Boolean Logic: cs_bl.html | cs_bl.js
- Coding Challenge II: challenge_2.html | challenge_2.js
function
s - Declarations & Expressions: functions.html | functions.jsArray
s: arrays.html | arrays.js- Coding Challenge III: challenge_3.html | challenge_3.js
Object
s - Properties & Methods: objects.html | objects.js- Coding Challenge IV: challenge_4.html | challenge_4.js
- Looping & Iteration: loops.html | loops.js
- Coding Challenge V: challenge_5.html | challenge_5.js
- Hello World!:
-
- Execution Context & Execution Stack: exec.html | exec.js
- Exectution Context in Detail
- Hoisting: hoisting.html | hoisting.js
- Scoping & Scope Chain: scope.html | scope.js | scope.pdf - view or download
- The
this
Keyword: this.html | this.js
-
- Common Markup for ii-vii: index.html & style.css
- DOM Access & Manipulation: app.js
- Events & Event Handling: app.js
- Adding, Removing & Toggling HTML Classes: app.js
- DRY Principle & More DOM Manipulation: app.js
- Creating Initialization Function for the Game: app.js
- Adding Game State: app.js final version (Easy) | Play the game @CodeSandBox
-
Pig Game: app.js final version (Hard) | Play the game @Repl.it | Updated Markup - index.html & style.css
-
Object
Creation, Inheritence &prototype
Chain: obj.html | obj.js | prototypeChain.pdf - view or download- Primitives vs. Objects: prim_vs_obj.html | prim_vs_obj.js
- First Class Functions: first_class_functions.html | first_class_functions.js
- Immediately Invoked Function Expressions (IIFE): iife.html | iife.js
- Closures: closure.html | closure.js | closure.pdf - view or download
bind()
,call()
&apply()
: bind_call_apply.html | bind_call_apply.js- Coding Challenge VII: challenge_7.html | challenge_7.js
- Event Bubbling, Target Element & Event Delegation: eventDelegation.html | eventDelegation.pdf - view or download. Reading of eventDelegation.pdf required before understanding the code from Budgety App (k) and thereafter.
-
- Common Markup: index.html & style.css
- Module Pattern, Encapsulation & Separation of Concerns: app.js
keypress
Events &event
Object: app.js- Reading
HTML
Input Data w. Separation of Concerns: app.js - Adding the Initialization Function: app.js
- Function Constructors and Data Structures for Incomes & Expenses: app.js
- Avoiding Data Structure Conflicts & Passing Data from One Module to Another: app.js
- Usage of
innerAdjacentHTML()
method &replace()
method: app.js - Usage of
querySelectorAll()
method, Conversion ofNodeList
toArray
& the usage offorEach()
method: app.js - Converting HTML Field Inputs to Numbers & Preventing False Item Inputs: app.js
- Creating functions for a singular purpose: app.js
- Event Delegation in Practice - The
parentNode
property: app.js - Usage of
map()
andsplice()
methods on an array: app.js - How to remove an element from the DOM using
removeChild()
: app.js - Usage of
prototype
to define a method in a predefined function constructor: app.js - How to implement a
forEach()
for NodeList instead of array: app.js - How to use different String methods to manipulate strings: app.js
- How to get the current date using the
Date
object constructor: app.js - How and when to use
change
events: app.js -
Budgety App: app.js (final version) | Use the app @netlify
-
- List of New Concepts in ES6: es6.html
- Variables declared using
let
&const
: let_const.html | let_const.js - Blocks & IIFEs: block_iife.html | block_iife.js
- Strings & String Functions: strings.html | strings.js
- Arrow Functions Intro: arrow_func.html | arrow_func.js
- Arrow Functions - Lexical
this
Keyword: arrow_func_this.html | arrow_func_this.css | arrow_func_this.js - Destructuring: destructuring.html | destructuring.js
- Arrays in ES6 (ES2015): arrays.html | arrays.css | arrays.js
- The Spread
...
Operator: spread.html | spread.css | spread.js - Function Parameters
- Rest Parameters: rest.html | rest.js
- Default Parameters: default.html | default.js
- The
Map
Data Structure: map.html | map.js class
es (Syntactic Sugar): class.html | class.js- Inheritance - Classes & Subclasses (ES5 -
Object.create()
/ ES6 -extends
): inheritance.html | inheritance.js - Challenge VIII: challenge8.html | challenge8.js
-
- An Example of Asynchronous JavaScript: intro.html
- Understanding Asynchronous JS, The Event Loop: event_loop.html | event_loop.pdf - view or download
- Callback Hell - The Old Way: callback_hell.html
- From Callback Hell to
Promise
s: promise.html | promise.pdf - view or download - From
Promise
s toasync
/await
in ES8/ES2017: async_await.html - AJAX & API - What do they mean? : ajax_api.html | ajax_api.pdf - view or download
- Making AJAX Calls Using
fetch()
andPromise
s: fetch_promise.html | fetch_promise.jsasync
/await
: fetch_async_await.html | fetch_async_await.js
-
- Introduction: intro.html
- An Overview of Modern JavaScript: overview.html | overview.pdf - view or download
- A Modern Setup Installing Node.js and NPM: nodejs.html | package.json | nodejs.pdf - view or download
- A Modern Setup Configuring Webpack: webpack.html | index.js | test.js | webpack.config.js | package.json | bundle.js | webpack.pdf - view or download
- A Modern Setup Configuring Webpack Dev Server: webpack_dev_server.html | index.js | test.js | webpack.config.js | package.json | index.html | bundle.js | webpack_dev_server.pdf - view or download
- A Modern Setup Configuring Babel: babel.html | index.js | test.js | package.json | bundle.js | babel.pdf - view or download | tooling_changes_babel.html
-
- Common Markup & Styling: ./dist/index.html | ./dist/css/style.css | Forked from: Jonas Schmedtmann's Starter Code @GitHub
- MVC Architecture: forkify_mvc.html | forkify_mvc.pdf - view or download
- How ES6 Modules Work: ./src/js/index.js | ./src/js/models/Search.js | ./src/js/views/searchView.js
- Making Our First API Call: ./src/js/index.js
- Building the Search Model Using ES6
class
es: ./src/js/index.js | ./src/js/models/Search.js - Building the Search Controller (keeping in mind, the application state): ./src/js/index.js | ./src/js/models/Search.js
- Building the Search View (base.js contains the DOM elements)
- Rendering the Results onto the front-end: ./src/js/index.js | ./src/js/models/Search.js | ./src/js/views/searchView.js | ./src/js/views/base.js
- Using the
reduce()
&join()
methods to limit the Recipe Title: ./src/js/index.js | ./src/js/models/Search.js | ./src/js/views/searchView.js | ./src/js/views/base.js - Rendering the Loading Spinner: ./src/js/index.js | ./src/js/models/Search.js | ./src/js/views/searchView.js | ./src/js/views/base.js
- Setting Up Pagination Using
Element.closest()
, Event Delegation anddata-*
attribute in HTML5: ./src/js/index.js | ./src/js/models/Search.js | ./src/js/views/searchView.js | ./src/js/views/base.js - Building the Recipe (Data) Model [Part 1]: ./src/js/index.js | ./src/js/models/Recipe.js
- Building the Recipe Controller Using the
hashchange
Event: ./src/js/index.js | ./src/js/models/Recipe.js - Building the Recipe (Data) Model [Part 2] Using the
eval()
andmap()
methods &Map
object: ./src/js/index.js | ./src/js/models/Recipe.js - Building the Recipe View
- Looping inside a Template String to generate HTML: ./src/js/index.js | ./src/js/models/Recipe.js | ./src/js/views/recipeView.js | ./src/js/views/base.js
- Using 3rd Party API (
fractional
) to convert the Quantities into a Fraction & Highlighting the Selected Recipes usingclassList
property: ./src/js/index.js | ./src/js/models/Recipe.js | ./src/js/views/recipeView.js | ./src/js/views/searchView.js | ./src/js/views/base.js | package.json - Updating Recipe Servings Using Event Delegation (
matches()
method): ./src/js/index.js | ./src/js/models/Recipe.js | ./src/js/views/recipeView.js | ./src/js/views/base.js
- Building the Shopping List (Data) Model Using
uniqid
: ./src/js/index.js | ./src/js/models/List.js | package.json - Building the Shopping List View (Front-End): ./src/js/index.js | ./src/js/views/listView.js | ./src/js/models/List.js | ./src/js/views/base.js
- Building the Shopping List Controller: ./src/js/index.js | ./src/js/views/listView.js | ./src/js/models/List.js | ./src/js/views/recipeView.js | ./src/js/views/base.js
- Building the Likes (Data) Model: ./src/js/index.js | ./src/js/models/Likes.js
- Building the Likes Controller: ./src/js/index.js | ./src/js/models/Likes.js | ./src/js/views/base.js
- Building the Likes View (Front-End): ./src/js/index.js | ./src/js/views/likesView.js | ./src/js/views/recipeView.js | ./src/js/views/searchView.js | ./src/js/models/Likes.js | ./src/js/views/base.js
- Implementing Persistent Data With
localStorage()
API and Implementing Delete All Shopping Items Functionality List's Model, View & Controller: ./src/js/index.js | ./src/js/views/likesView.js | ./src/js/views/searchView.js | ./src/js/views/listView.js | ./src/js/models/Likes.js | ./src/js/models/List.js | ./src/js/views/base.js - Forkify App Summary
- Controller: ./src/js/index.js
- Models: ./src/js/models/Search.js | ./src/js/models/Recipe.js | ./src/js/models/List.js | ./src/js/models/Likes.js
- Views: ./src/js/views/searchView.js | ./src/js/views/recipeView.js | ./src/js/views/listView.js | ./src/js/views/likesView.js
- Common Code Base: ./src/js/views/base.js
- Config: package.json | webpack.config.js | .babelrc
- Final Bundled JS: ./dist/js/bundle.js
-
Forkify App: Use here, @Repl | Use here, @Netlify