README.md


    33 Concepts Every JS Developer Should Know

    33 Concepts Every JavaScript Developer Should Know

    Introduction

    This repository was created with the intention of helping developers master their concepts in JavaScript. It is not a requirement, but a guide for future studies. It is based on an article written by Stephen Curtis and you can read it here.

    🚀 Considered by GitHub as one of the top open source projects of 2018!

    Community

    Feel free to submit a PR by adding a link to your own recaps or reviews. If you want to translate the repo into your native language, please feel free to do so.

    All the translations for this repo will be listed below:


    Table of Contents

    1. Call Stack
    2. Primitive Types
    3. Value Types and Reference Types
    4. Implicit, Explicit, Nominal, Structuring and Duck Typing
    5. == vs === vs typeof
    6. Function Scope, Block Scope and Lexical Scope
    7. Expression vs Statement
    8. IIFE, Modules and Namespaces
    9. Message Queue and Event Loop
    10. setTimeout, setInterval and requestAnimationFrame
    11. JavaScript Engines
    12. Bitwise Operators, Type Arrays and Array Buffers
    13. DOM and Layout Trees
    14. Factories and Classes
    15. this, call, apply and bind
    16. new, Constructor, instanceof and Instances
    17. Prototype Inheritance and Prototype Chain
    18. Object.create and Object.assign
    19. map, reduce, filter
    20. Pure Functions, Side Effects, State Mutation and Event Propagation
    21. Closures
    22. High Order Functions
    23. Recursion
    24. Collections and Generators
    25. Promises
    26. async/await
    27. Data Structures
    28. Expensive Operation and Big O Notation
    29. Algorithms
    30. Inheritance, Polymorphism and Code Reuse
    31. Design Patterns
    32. Partial Applications, Currying, Compose and Pipe
    33. Clean Code

    1. Call Stack

    The call stack is a mechanism that the JavaScript interpreter uses to keep track of function execution within a program. In JavaScript, functions are executed in the order they are called. The call stack follows the Last In, First Out (LIFO) principle, meaning that the last function pushed onto the stack is the first one to be executed.

    According to the ECMAScript specification, the call stack is defined as part of the execution context. Whenever a function is called, a new execution context is created and placed at the top of the stack. Once the function completes, its execution context is removed from the stack, and control returns to the previous context. This helps manage synchronous code execution, as each function call must complete before the next one can begin.

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    2. Primitive Types

    According to the ECMAScript specification, JavaScript has six primitive data types: string, number, bigint, boolean, undefined, and symbol. These types are immutable, meaning their values cannot be altered. There is also a special primitive type called null, which represents the intentional absence of any object value.

    Primitive values are directly assigned to a variable, and when you manipulate a primitive type, you’re working directly on the value. Unlike objects, primitives do not have properties or methods, but JavaScript automatically wraps primitive values with object counterparts when necessary (e.g., when calling methods on strings).

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    3. Value Types and Reference Types

    According to the ECMAScript specification, value types are stored directly in the location that the variable accesses. These include types like number, string, boolean, undefined, bigint, symbol, and null. When you assign a value type to a variable, the value itself is stored.

    Articles

    video Videos

    ⬆ Back to Top


    4. Implicit, Explicit, Nominal, Structuring and Duck Typing

    The ECMAScript specification defines JavaScript as a dynamically typed language, meaning that types are associated with values rather than variables, and type checking occurs at runtime. There are various ways JavaScript manages types:

    Implicit Typing (or Type Coercion): This occurs when JavaScript automatically converts one data type to another when required. For instance, JavaScript might convert a string to a number during an arithmetic operation. While this can simplify some code, it can also lead to unexpected results if not handled carefully.

    Explicit Typing: Unlike implicit typing, explicit typing involves manually converting a value from one type to another using functions like Number(), String(), or Boolean().

    Nominal Typing: JavaScript doesn’t natively support nominal typing, where types are explicitly declared and checked. However, TypeScript, a superset of JavaScript, brings this feature to help catch type errors during development.

    Structuring Typing: In this type system, types are based on the structure or properties of the data. JavaScript is a structurally typed language where objects are compatible if they share the same structure (i.e., the same set of properties and methods).

    Duck Typing: This is a concept where an object’s suitability is determined by the presence of certain properties and methods, rather than by the actual type of the object. JavaScript relies heavily on duck typing, where behavior is inferred from an object’s properties rather than its declared type.

    Articles

    video Videos

    Books

    ⬆ Back to Top


    5. == vs === vs typeof

    According to the ECMAScript specification, JavaScript includes both strict (===) and loose (==) equality operators, which behave differently when comparing values. Here’s a breakdown:

    == (Loose Equality): This operator performs type coercion before comparing two values. If the values are of different types, JavaScript will attempt to convert one or both values to a common type before comparison, which can lead to unexpected results.

    === (Strict Equality): This operator compares both the value and the type without any type coercion. If the two values are not of the same type, the comparison will return false.

    typeof Operator: The typeof operator is used to check the data type of a variable. While it’s generally reliable, there are certain quirks, like how typeof null returns “object” instead of “null”, due to a long-standing behavior in JavaScript’s implementation.

    Articles

    video Videos

    ⬆ Back to Top


    6. Function Scope, Block Scope and Lexical Scope

    The ECMAScript specification outlines three key types of scope:

    Function Scope: Variables declared within a function using var are only accessible within that function. This scope isolates variables from being accessed outside of the function where they are declared.

    Block Scope: Introduced with ES6, variables declared with let and const are block-scoped. This means they are only accessible within the specific block {} in which they are defined, such as inside loops or conditionals.

    Lexical Scope: Refers to how variable access is determined based on the physical location of the variables in the code. Functions are lexically scoped, meaning that they can access variables from their parent scope.

    Books

    Articles

    video Videos

    ⬆ Back to Top


    7. Expression vs Statement

    According to the ECMAScript specification, expressions produce a value, and statements are instructions to perform an action, such as variable assignment or control flow. Function declarations are hoisted and can be called before they are defined in the code, while function expressions are not hoisted and must be defined before being invoked.

    Articles

    video Videos

    ⬆ Back to Top


    8. IIFE, Modules and Namespaces

    With the introduction of ES6 modules, the role of IIFEs in scope isolation has diminished but they still remain relevant.

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    9. Message Queue and Event Loop

    The Event Loop is a critical part of JavaScript’s concurrency model, ensuring non-blocking behavior by processing tasks in an asynchronous manner. Understanding how it interacts with the Message Queue and Microtasks is key to mastering JavaScript behavior.

    Articles

    ⬆ Back to Top


    10. setTimeout, setInterval and requestAnimationFrame

    Articles

    video Videos

    ⬆ Back to Top


    11. JavaScript Engines

    Articles

    video Videos

    ⬆ Back to Top


    12. Bitwise Operators, Type Arrays and Array Buffers

    Articles

    video Videos

    ⬆ Back to Top


    13. DOM and Layout Trees

    Reference

    Books

    Articles

    video Videos

    ⬆ Back to Top


    14. Factories and Classes

    Articles

    video Videos

    ⬆ Back to Top


    15. this, call, apply and bind

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    16. new, Constructor, instanceof and Instances

    Articles

    ⬆ Back to Top


    17. Prototype Inheritance and Prototype Chain

    Reference

    Articles

    video Videos

    Books

    ⬆ Back to Top


    18. Object.create and Object.assign

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    19. map, reduce, filter

    Articles

    video Videos

    ⬆ Back to Top


    20. Pure Functions, Side Effects, State Mutation and Event Propagation

    Articles

    video Videos

    ⬆ Back to Top


    21. Closures

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    22. High Order Functions

    Books

    Articles

    video Videos

    ⬆ Back to Top


    23. Recursion

    Articles

    video Videos

    ⬆ Back to Top


    24. Collections and Generators

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    25. Promises

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    26. async/await

    Reference

    Books

    Articles

    video Videos

    ⬆ Back to Top


    27. Data Structures

    Articles

    video Videos

    ⬆ Back to Top


    28. Expensive Operation and Big O Notation

    Articles

    video Videos

    ⬆ Back to Top


    29. Algorithms

    Articles

    video Videos

    ⬆ Back to Top


    30. Inheritance, Polymorphism and Code Reuse

    Reference

    Articles

    video Videos

    ⬆ Back to Top


    31. Design Patterns

    Books

    Articles

    video Videos

    ⬆ Back to Top


    32. Partial Applications, Currying, Compose and Pipe

    Books

    Articles

    video Videos

    ⬆ Back to Top


    33. Clean Code

    Articles

    video Videos

    ⬆ Back to Top

    License

    This software is licensed under MIT License, See License for more information ©Leonardo Maldonado.

    Описание

    33 JavaScript concepts every developer should know.

    Конвейеры
    0 успешных
    0 с ошибкой