From 6147130059ac9a23ea6d93cb55d8c9a0d6284efc Mon Sep 17 00:00:00 2001 From: Sudhanshu Tiwary <146623832+sudhanshutiwary69868@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:31:35 +0530 Subject: [PATCH] Update README.md I have tried to make somechanges in README.md as asked in issue#503 --- README.md | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dafcacf0..696e7bbe 100644 --- a/README.md +++ b/README.md @@ -102,6 +102,10 @@ All the translations for this repo will be listed below: ## 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 - [Call Stack — MDN](https://developer.mozilla.org/en-US/docs/Glossary/Call_stack) @@ -136,6 +140,9 @@ All the translations for this repo will be listed below: --- ## 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 @@ -173,6 +180,7 @@ All the translations for this repo will be listed below: --- ## 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 @@ -201,6 +209,17 @@ All the translations for this repo will be listed below: --- ## 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 @@ -227,6 +246,13 @@ All the translations for this repo will be listed below: --- ## 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 @@ -255,6 +281,13 @@ All the translations for this repo will be listed below: --- ## 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 @@ -293,6 +326,7 @@ All the translations for this repo will be listed below: --- ## 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 @@ -323,7 +357,7 @@ All the translations for this repo will be listed below: --- ## 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 - [IIFE — MDN](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) @@ -362,7 +396,7 @@ All the translations for this repo will be listed below: --- ## 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 - [JavaScript Event Loop Explained — Anoop Raveendran](https://medium.com/front-end-hacking/javascript-event-loop-explained-4cd26af121d4) @@ -414,6 +448,7 @@ All the translations for this repo will be listed below: ## 11. JavaScript Engines + ### Articles - [Is javascript compiled or interpreted language?](https://robiul.dev/is-javascript-compiled-or-interpreted-language)