INTRO - Exercise Files and Software Setup 
 
LECTURE - Software Setup Overview 
 
PRACTICE - WINDOWS ONLY - Install "cmder" 
 
PRACTICE - Visual Studio Code Setup 
 
PRACTICE - Launch Node.js and execute test JavaScript file 
 
PRACTICE - Git Overview - PART 1 
 
PRACTICE - Git Overview - PART 2 
 
PRACTICE - Clone remote GIt repository and switch Branches 
 
PRACTICE - Use SourceTree for Git repositories management 
 
INTRO - JAVASCRIPT BASICS - Intro 
 
GIT REPOSITORY FOR THIS SECTION 
 
PRACTICE - Exploring Web Sites in the Browser 
 
PRACTICE - Create first HTML file and start Live Server 
 
PRACTICE - Add favicon to the HTML file 
 
PRACTICE - JavaScript embedded into the HTML 
 
DEMO - Git branches management 
 
PRACTICE - JavaScript in the separate file 
 
CHALLENGE - External Scripts 
 
✓ CHALLENGE - External Scripts - SOLUTION 
 
PRACTICE - JavaScript in the Console of the Browser 
 
INTRO - JAVASCRIPT BASICS - Types and Variables 
 
LECTURE - Object in JavaScript 
 
LECTURE - Primitive vs Reference Value Types 
 
PRACTICE - Exploring Primitive Value Types 
 
PRACTICE - Exploring Reference Type - Object 
 
LECTURE - Variable declaration using "var" "let" and "const" 
 
PRACTICE - Variable declaration and assignment 
 
CHALLENGE - Variable Declaration and Assignment 
 
CHALLENGE - Variables Reusage 
 
LECTURE - Statically vs Dynamically typed Languages 
 
PRACTICE - Dynamic typing in JavaScript 
 
INTRO - JAVASCRIPT BASICS - Objects 
 
LECTURE - Variety of Objects in JavaScript 
 
LECTURE - Objects Modification 
 
PRACTICE and CHALLENGES - Objects - PART 1 
 
PRACTICE and CHALLENGES - Objects - PART 2 
 
PRACTICE and CHALLENGES - Objects - PART 3 
 
LECTURE - Global Objects - "window" and "global" 
 
LECTURE - Methods of the Object 
 
INTRO - JAVASCRIPT BASICS - Functions 
 
LECTURE - Introduction to the Functions 
 
LECTURE - Syntax of the Function 
 
PRACTICE - Functions - PART 1 
 
PRACTICE - Functions - PART 2 
 
CHALLENGES - Functions - PART 1 
 
CHALLENGES - Functions - PART 2 
 
LECTURE - Function Expressions vs Function Declarations 
 
PRACTICE - Function Expressions setTimout() setInterval() 
 
CHALLENGE - Function Expressions 
 
✓ CHALLENGE - Function Expressions - SOLUTION 
 
INTRO - JAVASCRIPT BASICS - Operators 
 
LECTURE - Operands Unary vs Binary Operators and Notations 
 
PRACTICE - Arithmetic Operators - PART 1 
 
PRACTICE - Arithmetic Operators - PART 2 
 
PRACTICE - Comparison Operators - PART 1 
 
PRACTICE - Comparison Operators - PART 2 
 
PRACTICE - Logical Operators - PART 1 
 
PRACTICE - Logical Operators - PART 2 
 
PRACTICE - Operators Precedence and Associativity 
 
CHALLENGES - Operators - PART 1 
 
CHALLENGES - Operators - PART 2 
 
INTRO - JAVASCRIPT BASICS - Expressions vs Statements 
 
LECTURE - Expressions vs Statements - PART 1 
 
LECTURE - Expressions vs Statements - PART 2 
 
PRACTICE - Expressions vs Statements - PART 1 
 
PRACTICE - Expressions vs Statements - PART 2 
 
CHALLENGES - Expressions vs Statements 
 
INTRO - JAVASCRIPT BASICS - Scopes 
 
LECTURE - Scopes - PART 1 
 
LECTURE - Scopes - PART 2 
 
LECTURE - Undeclared Variables and "use strict" 
 
PRACTICE - Scopes - PART 1 
 
PRACTICE - Scopes - PART 2 
 
LECTURE - Introduction to the Loops 
 
LECTURE - "do while" Loop 
 
LECTURE - "for in" and "for of" Loops 
 
PRACTICE Loops - Looking for loops in a pubic JavaScript library 
 
LECTURE - Conditional Statements - if if else and switch 
 
LECTURE - Ternary Operator 
 
PRACTICE - Conditional statements and ternary operator - PART 1 
 
PRACTICE - Conditional statements and ternary operator - PART 2 
 
CHALLENGES - Loops and Conditions - PART 1 
 
CHALLENGES - Loops and Conditions - PART 2 
 
CHALLENGES - Loops and Conditions - PART 3 
 
CHALLENGES - "for in" and Ternary Operator 
 
PRACTICE - Mutable vs Immutable Values 
 
PRACTICE - "typeof" and "instanceof" Operators 
 
PRACTICE - "new Array" "new String" 
 
PRACTICE - "new Object" "new Function" 
 
PRACTICE - Execution contexts and Execution contexts stack 
 
PRACTICE - "call" "apply" methods of the Function 
 
PRACTICE - "bind" method of the Function 
 
PRACTICE - "pass by value" vs "pass by reference" 
 
PRACTICE - IIFE - Immediately Invoked Function Expression 
 
PRACTICE - Synchronous Code Execution 
 
PRACTICE - Events and Events queue 
 
PRACTICE - Callbacks - PART 1 
 
PRACTICE - Callbacks - PART 2 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Recap of the "var" 
 
LECTURE - Scopes - Global Function and Block 
 
LECTURE - Variables Usage Guidelines 
 
LECTURE - Var Let or Const? 
 
CHALLENGE 1-1 - let var and const 
 
✓ CHALLENGE 1-1 - let var and const - SOLUTION 
 
CHALLENGE 1-2 - let var and closures 
 
✓ CHALLENGE 1-2 - let var and closures - SOLUTION 
 
LECTURE - JavaScript Engine Phases 
 
LECTURE - Variable Lifecycle Phases 
 
LECTURE - Undeclared variable lifecycle 
 
LECTURE - Const lifecycle 
 
LECTURE - Function lifecycle - Part 1 
 
LECTURE - Function lifecycle - Part 2 
 
LECTURE - What is finally hoisting? 
 
DEMO - Putting different variables lifecycles together 
 
✓ DEMO - Putting different variables lifecycles together - SOLUTION Part 1 
 
✓ DEMO - Putting different variables lifecycles together - SOLUTION Part 2 
 
CHALLENGE 1-3 - Variable Lifecycles 
 
✓ CHALLENGE 1-3 - Variable Lifecycles - SOLUTION 
 
LECTURE - Variables Phases Section Summary 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Introduction to the Arrow Functions Section 
 
LECTURE - Traditional JavaScript Functions Overview. 
 
LECTURE - Introduction to the Arrow Functions 
 
LECTURE - Arrow Functions syntax 
 
PRACTICE - Arrow Functions 
 
LECTURE - Arrow Functions and "this". 
 
LECTURE - Regular functions instead of Arrow Functions 
 
CHALLENGE 2-1 - Regular vs Arrow Functions 
 
✓ CHALLENGE 2-1 - Regular vs Arrow Functions - SOLUTION 
 
LECTURE - Arguments in the Functions 
 
LECTURE - Arrow Functions Summary 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - forEach() Overview 
 
CHALLENGE 3-1 - forEach() with Index 
 
✓ CHALLENGE  3-1 - forEach() with Index - SOLUTION 
 
CHALLENGE 3-2 - map() JSON to Object 
 
✓ CHALLENGE 3-2 - map() JSON to Object - SOLUTION 
 
LECTURE - filter() Overview 
 
LECTURE - find() Overview 
 
CHALLENGE 3-3 - find() Single Post 
 
✓ CHALLENGE 3-3 - find() Single Post - SOLUTION 
 
LECTURE - every() and some() Overview 
 
PRACTICE - every() and some() 
 
CHALLENGE 3-4 Is Array of Numbers Sorted? 
 
✓ CHALLENGE 3-4 Is Array of Numbers Sorted? - SOLUTION 
 
CHALLENGE 3-5 Are Arrays Equal or not? 
 
✓ CHALLENGE 3-5 Are Arrays Equal or not? - SOLUTION 
 
CHALLENGE 3-6 Check if Element is in Array 
 
✓ CHALLENGE 3-6 Check if Element is in Array - SOLUTION 
 
LECTURE - includes() Overview 
 
CHALLENGE 3-7 Includes() with Array or Object 
 
✓ CHALLENGE 3-7 Includes() with Array or Object - SOLUTION 
 
CHALLENGE 3-8 Push Element to Array if Not Exists 
 
✓ CHALLENGE 3-8 Push Element to Array if Not Exists - SOLUTION 
 
LECTURE - reduce() Overview 
 
CHALLENGE 3-9 Reduce Array of Objects 
 
✓ CHALLENGE 3-9 Reduce Array of Objects - SOLUTION 
 
CHALLENGE 3-10 Reduce Array of Objects to Object 
 
✓ CHALLENGE 3-10 Reduce Array of Objects to Object - SOLUTION 
 
LECTURE - Do you know how sort() works? 
 
LECTURE - Sorting Algorithms Overview 
 
LECTURE - Stable vs Unstable Sort 
 
LECTURE - sort() Overview 
 
LECTURE - sort() without Arguments 
 
LECTURE - sort() Analyze sorting algorithms 
 
LECTURE - sort() Algorithms in different browsers 
 
CHALLENGE 3-11 sort() Array of objects 
 
✓ CHALLENGE 3-11 sort() Array of objects - SOLUTION 
 
CHALLENGE 3-12 sort() Long Array of objects 
 
✓ CHALLENGE 3-12 sort() Long Array of objects - SOLUTION 
 
LECTURE - Array helper methods Summary 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Template Literals Overview 
 
LECTURE - Tagged Templates Overview 
 
CHALLENGE 4-1 Template Literals 
 
✓ CHALLENGE 4-1 Template Literals - SOLUTION 
 
CHALLENGE 4-2 Default tagged template 
 
✓ CHALLENGE 4-2 Default tagged template - SOLUTION 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Rest Parameters Overview 
 
PRACTICE - Rest Parameters 
 
LECTURE - Spread Operator Overview 
 
PRACTICE - Spread Operator 
 
CHALLENGE 5-1 Rest and Spread Operators 
 
✓ CHALLENGE 5-1 Rest and Spread Operators - SOLUTION 
 
LECTURE - Default Function Parameters Overview 
 
PRACTICE - Default Function Parameters 
 
CHALLENGE 5-2 Default value without default parameters 
 
✓ CHALLENGE 5-2 Default value without default parameters - SOLUTION 
 
CHALLENGE 5-3 Generate Missing Unique IDs 
 
✓ CHALLENGE 5-3 Generate Missing Unique IDs - SOLUTION PART 1 
 
✓ CHALLENGE 5-3 Generate Missing Unique IDs - SOLUTION PART 2 
 
✓ CHALLENGE 5-3 Generate Missing Unique IDs - SOLUTION PART 3 
 
✓ CHALLENGE 5-3 Generate Missing Unique IDs - SOLUTION PART 4 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Enhanced Object Literals Overview 
 
PRACTICE - Enhanced Object Literals 
 
CHALLENGE 6-1 Enhanced Object Literals 
 
✓ CHALLENGE 6-1 Enhanced Object Literals - SOLUTION 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Destructuring Overview 
 
PRACTICE - Array Destructuring 
 
CHALLENGE 6-2 Array Destructuring 
 
✓ CHALLENGE 6-2 Array Destructuring - SOLUTION 
 
CHALLENGE 6-3 Destructure Result of the Function 
 
✓ CHALLENGE 6-3 Destructure Result of the Function - SOLUTION 
 
PRACTICE - Object Destructuring - PART 1 
 
LECTURE - New Variable Names and Default Values in Object Destructuring 
 
PRACTICE - Object Destructuring - PART 2 
 
CHALLENGE 6-4 Object Destructuring 
 
✓ CHALLENGE 6-4 Object Destructuring - SOLUTION 
 
CHALLENGE 6-5 Object Destructuring and Array Helper Methods 
 
✓ CHALLENGE 6-5 Object Destructuring and Array Helper Methods - SOLUTION 
 
CHALLENGE 6-6 Delete Object Properties 
 
✓ CHALLENGE 6-6 Delete Object Properties - SOLUTION 
 
GIT REPOSITORY FOR THIS SECTION 
 
LECTURE - Class-based vs Prototype-based 
 
LECTURE - What is inheritance? 
 
LECTURE - Prototype Chain 
 
LECTURE - __proto__ and [[Prototype]] 
 
LECTURE - What is Prototype? 
 
LECTURE - Don't reassign __proto__ 
 
LECTURE - Native Prototypes - PART 1 
 
LECTURE - Native Prototypes - PART 2 
 
LECTURE - Prototypal Inheritance in JavaScript 
 
PRACTICE - Function Constructors - PART 1 
 
LECTURE - Function Constructors Overview 
 
PRACTICE - Function Constructors - PART 2 
 
PRACTICE - Function Constructors - PART 3 
 
LECTURE - Object.create() Overview 
 
PRACTICE - Object.create() 
 
PRACTICE - Function Constructors - PART 4 
 
LECTURE - Function Constructors - New Prototype in the Chain 
 
CHALLENGE 7-1 Insert Prototype Into the Existing Prototype Chain 
 
✓ CHALLENGE 7-1 Insert Prototype Into the Existing Prototype Chain - SOLUTION 
 
LECTURE - "instanceof" and "typeof" in the Prototype Chain 
 
CHALLENGE 7-2 Fix Mistakes in the Function Constructors 
 
✓ CHALLENGE 7-2 Fix Mistakes in the Function Constructors - SOLUTION 
 
LECTURE - Classes - Overview 
 
LECTURE - Classes vs Function Constructors 
 
PRACTICE - Classes - PART 1 
 
PRACTICE - Classes - PART 2 
 
PRACTICE - Classes - PART 3 
 
CHALLENGE 7-3 Convert Function Constructors to Classes 
 
✓ CHALLENGE 7-3 Convert Function Constructors to Classes - SOLUTION 
 
CHALLENGE 7-4 Extend Array 
 
✓ CHALLENGE 7-4 Extend Array - SOLUTION 
 
CHALLENGE 7-5 Custom Push Method for Arrays 
 
✓ CHALLENGE 7-5 Custom Push Method for Arrays - SOLUTION 
 
LECTURE - React and ES6 Classes 
 
CHALLENGE 7-6 Classes in React - Additional Button 
 
✓ CHALLENGE 7-6 Classes in React - Additional Button - SOLUTION 
 
Babel Module Introduction 
 
LECTURE - What is Compiler? 
 
LECTURE - Compiled vs Interpreted languages 
 
LECTURE - Transpling vs Compiling 
 
LECTURE - ES5 ES6 and JavaScript 
 
LECTURE - What Babel does? 
 
LECTURE - Why do we need Babel? 
 
LECTURE - ES6 support by Browsers 
 
LECTURE - How many browsers need compiled ES5 code? 
 
PRACTICE - Babel in action - ES6 Rest operator 
 
PRACTICE - Compare performance - ES6 Rest Operator(Node.js) 
 
PRACTICE - Compare Performance - ES6 Rest Operator (Google Chrome) 
 
CHALLENGE - Compare Performance - ES6 Destructuring 
 
✓ CHALLENGE - Compare Performance - ES6 Destructurng - SOLUTION 
 
LECTURE - What is User Agent? 
 
LECTURE - Serve different JS files to different browers 
 
LECTURE - Different JS files on the server 
 
PRACTICE - Browser detection on the client 
 
CHALLENGE - Detect feature support in the Browser 
 
✓ CHALLENGE - Detect feature support in the Browser - SOLUTION 
 
CHALLENGE - Insert different script tags into the DOM 
 
✓ CHALLENGE - Insert different script tags into the DOM - SOLUTION 
 
LECTURE - How Babel Works? 
 
PRACTICE - Online Babel Compiler 
 
LECTURE - Install Babel Globally 
 
PRACTICE - Compile JS file using Babel 
 
LECTURE - Plugins and Presets 
 
LECTURE - Introduction to the NPM 
 
PRACTICE - Exploring NPM packages 
 
LECTURE - Package.json and init 
 
LECTURE - Semantic Versioning 
 
LECTURE - Packages Installation 
 
PRACTICE - Install package in the project 
 
CHALLENGE - Install Semver package 
 
✓ CHALLENGE - Install Semver Package - SOLUTION 
 
PRACTICE - Install Browserslist - package with own dependencies 
 
LECTURE - Dependencies and Development Dependencies 
 
PRACTICE - Examine Development Dependencies 
 
PRACTICE - Browser App vs Server Package 
 
CHALLENGE - Clock Browser Application 
 
✓ CHALLENGE - Clock Browser Application - SOLUTION 
 
LECTURE - Clock Challenge Summary 
 
LECTURE - Browser App vs Public Package 
 
PRACTICE - Exploring Package Information and Versions 
 
PRACTICE - Installing Specific Package Version 
 
LECTURE - Why package-lock.json file is needed? 
 
CHALLENGE - Reinstall old package version without lock file 
 
✓ CHALLENGE - Reinstall old package version without lock file - SOLUTION 
 
LECTURE - How lock file is handled 
 
LECTURE - Lock file summary 
 
LECTURE - Update NPM packages overview 
 
CHALLENGE - Update project dependencies 
 
✓ CHALLENGE - Update project dependencies - SOLUTION 
 
LECTURE - Introduction to the NPM scripts 
 
PRACTICE - Start npm script 
 
CHALLENGE - Create prestart script 
 
✓ CHALLENGE - Create prestart script - SOLUTION 
 
PRACTICE - Custom NPM scripts 
 
CHALLENGE - Run NPM scripts simultaneously 
 
✓ CHALLENGE - Run NPM scripts simultaneously - SOLUTION 
 
LECTURE - NPM .bin Folder with Executable Scripts 
 
PRACTICE - Explore .bin Folder on the Mac 
 
PRACTICE - Explore .bin Folder on Windows 
 
LECTURE - NPM Scripts Wrap-Up 
 
LECTURE - Where MongoDB is used? 
 
LECTURE - Relational vs Document Databases 
 
LECTURE - MongoDB Structure 
 
LECTURE - MongoDB Shell and MongoDB Server 
 
PRACTICE - Installation of the MongoDB on the local computer 
 
PRACTICE - Launch MongoDB Server and connect to it from the MongoDB Shell 
 
PRACTICE - MongoDB database in the Cloud 
 
PRACTICE - Exploring MongoDB Shell 
 
PRACTICE - Installing and Exploring Robo 3T (previously Robomongo) 
 
LECTURE - Difference between JSON and JavaScript Object 
 
LECTURE - How Documents are stored in the Database? - BSON Format 
 
LECTURE - What is Extended JSON? 
 
LECTURE - Data Types representation in Extended JSON 
 
LECTURE - How types are stored in BSON? 
 
PRACTICE - Creation of the new Collection 
 
LECTURE - Insert Methods insertOne() and insertMany() 
 
LECTURE - Sample Data Overview 
 
PRACTICE - Insert Sample Documents into the Collection 
 
LECTURE - Find Methods find() and findOne() 
 
PRACTICE - Finding Documents 
 
LECTURE - Query Operators Overview 
 
PRACTICE - Finding Documents with Query Operators 
 
LECTURE - Sort Limit and Skip helper methods 
 
PRACTICE - Sort Limit and Skip 
 
LECTURE - Update Methods updateOne() and updateMany() 
 
LECTURE - Update Operators 
 
PRACTICE - Updating Documents using Update Operators 
 
LECTURE - Delete Methods deleteOne() and deleteMany() 
 
PRACTICE - Deleting Documents 
 
LECTURE - MongoDB Aggregation Framework 
 
PRACTICE - Aggregating Documents 
 
LECTURE - MongoDB Indexes 
 
LECTURE - MongoDB Utilities 
 
LECTURE - What is MongoDB Replica Set? 
 
LECTURE - MongoDB Drivers 
 
Intro to Additional JavaScript Challenges 
 
CHALLENGE 1 - Sum numbers 
 
✓ CHALLENGE 1 - Sum numbers - SOLUTION 
 
✓ CHALLENGE 2 - Const - SOLUTION 
 
✓ CHALLENGE 3 - Let - SOLUTION 
 
✓ CHALLENGE 4 - Hoisting - SOLUTION 
 
CHALLENGE 5 - Ternary Operator 
 
✓ CHALLENGE 5 - Ternary Operator - SOLUTION 
 
CHALLENGE 6 - Arrow Functions 
 
✓ CHALLENGE 6 - Arrow Functions - SOLUTION 
 
CHALLENGE 7 - Default parameters 
 
✓ CHALLENGE 7 - Default parameters - SOLUTION 
 
CHALLENGE 8 - Check presence of the function parameters 
 
✓ CHALLENGE 8 - Check presence of the function parameters - SOLUTION 
 
CHALLENGE 9 - Object Destructuring 
 
✓ CHALLENGE 9 - Object Destructuring - SOLUTION 
 
CHALLENGE 10 - Destructuring and Rest Operator 
 
✓ CHALLENGE 10 - Destructuring and Rest Operator - SOLUTION 
 
CHALLENGE 11 - Spread Operator 
 
✓ CHALLENGE 11 - Spread Operator - SOLUTION 
 
CHALLENGE 12 - Copy Array 
 
✓ CHALLENGE 12 - Copy Array - SOLUTION 
 
CHALLENGE 13 - Template Literals 
 
✓ CHALLENGE 13 - Template Literals - SOLUTION 
 
CHALLENGE 14 - Object Destructuring 
 
✓ CHALLENGE 14 - Object Destructuring - SOLUTION 
 
CHALLENGE 15 - Iterate over String 
 
✓ CHALLENGE 15 - Iterate over String - SOLUTION 
 
CHALLENGE 16 - Swap values of the two variables 
 
✓ CHALLENGE 16 - Swap values of the two variables - SOLUTION 
 
CHALLENGE 17 - IIFE (Immediately Invoked Function Expression) 
 
✓ CHALLENGE 17 - IIFE (Immediately Invoked Function Expression) - SOLUTION 
 
✓ CHALLENGE 18 - Classes - SOLUTION 
 
CHALLENGE 19 - Iterate over Object 
 
✓ CHALLENGE 19 - Iterate over Object - SOLUTION 
 
CHALLENGE 20 - Sum positive and negative numbers 
 
✓ CHALLENGE 20 - Sum positive and negative numbers - SOLUTION