Over the Easter break, I started learning JavaScript coercion, and it has already made the language feel far less random. My biggest takeaway so far is that coercion is simply JavaScript converting a value from one type to another so an operation can continue. The key is that JavaScript does not convert values randomly, it follows rules defined in the ECMAScript specification. What helped me most was asking 3 questions whenever I see surprising behaviour: 1. What operation is being performed? 2. What type of value does that operation need? 3. Will JavaScript convert something to make that operation possible? I also started learning about: - primitive vs non-primitive values - abstract operations like ToBoolean - truthy and falsy values - why `if ("hello")` runs but `if ("")` does not - why `[]` and `{}` are truthy - why `"" == 0` is not boolean coercion, but part of loose equality rules So far, this topic has taught me that JavaScript becomes much easier to understand when you stop memorising weird examples and start understanding what the language actually expects in each context. Next, I’ll be diving deeper into ToNumber, ToString, ToPrimitive, and loose equality. #JavaScript #TypeScript #WebDevelopment #SoftwareEngineering #ECMAScript
JavaScript Coercion Simplifies the Language
More Relevant Posts
-
Day 6 of My JavaScript Journey 🚀 Today, I learned some important JavaScript concepts: • Truthy and Falsy values • Equality operators • Boolean logic (logical operators) Truthy values are values that evaluate to true, while falsy values (like 0, "", null, undefined, NaN) evaluate to false in conditions. I also learned about equality operators: • Loose equality (==): compares values but converts types • Strict equality (===): compares both value and type For example: 5 == "5" → true 5 === "5" → false I also explored logical operators: • && (AND) • || (OR) • ! (NOT) One key thing I learned: Using strict equality (===) helps avoid unexpected bugs caused by type conversion. Bonus: I was given a challenge on these concepts and I successfully completed it. Key takeaway: Understanding how JavaScript evaluates conditions is crucial for writing reliable code. #JavaScript #WebDevelopment #LearningInPublic #100DaysOfCode
To view or add a comment, sign in
-
-
𝗧𝗵𝗲 𝗗𝗮𝘆 𝗜 𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗼𝗼𝗱 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 You build something in JavaScript, and it looks fine. But then it breaks. I was building a task manager. I had a class with methods and API calls. It looked clean. But then I had a problem. I had an object with methods: - this.getAllTasks - this.getTaskByPriority - this.createTask I called one of these methods, and "this" was undefined. I was confused. I thought "this" referred to the object. But in JavaScript, "this" depends on how a function is called, not where it is written. The issue was not with classes or syntax. It was with how I was calling the function. When you extract a method from an object, it becomes a raw function reference. It loses its context. To fix this, you can use "bind(this)". It creates a new function and locks its context to the current instance. You can also use an arrow function, which inherits the context from where it is defined. I learned that functions in JavaScript are flexible, but they don't carry context automatically. You need to decide when to lock the context. This changed how I look at JavaScript. I'm still learning, but now I understand "this" and "bind" better. Source: https://lnkd.in/gqxDAYsJ
To view or add a comment, sign in
-
I’ve started learning scope in JavaScript, but before diving into it, I took an interesting detour into a very important question: Is JavaScript compiled or interpreted? Before getting into scope properly, I learned that JavaScript does not behave like a simple line-by-line interpreter. A good example is this: ```js console.log("Hello"); function foo() { console....log("world"); } console.log("hello world"); ``` If JavaScript was executed in a purely naive line-by-line way, we might expect "Hello" to be logged before the error appears. But that does not happen. The script fails before execution starts because the JavaScript engine first goes through an initial preparation phase. That phase includes things like: 1. parsing the code 2. checking whether the syntax is valid 3. building an internal representation 4. preparing the code for execution So a better mental model is: Source code -> Parse / syntax check -> Internal representation / compilation steps -> Execution This helped me understand that calling JS simply “interpreted” is not the full picture. Modern JavaScript engines like V8 are much more advanced. They can parse code, create internal representations, interpret some code, compile parts into bytecode or internal instructions, and even JIT-compile frequently used parts for better performance. So JavaScript is commonly called an interpreted language, but in modern engines, the reality is more nuanced. This also connects nicely with scope. Scope is about the visibility of variables and functions in code, but before JavaScript can execute code, the engine first needs to understand the structure of that code. That means scope is not just a runtime topic. It is closely connected to how the engine reads, parses, and prepares the program. My main takeaway: JavaScript is not random, and it is not just “reading one line at a time”. There is a preparation phase before execution, and understanding that makes topics like scope, hoisting, and errors much easier to reason about. #JavaScript #TypeScript #WebDevelopment #SoftwareEngineering #V8 #LearningInPublic
To view or add a comment, sign in
-
-
Day 6: Undefined vs Not Defined in JS Today I completed the next topic in my learning journey, focusing on a concept that confuses many beginners: the difference between undefined and not defined in JavaScript. While they sound identical, they mean very different things to the JavaScript engine. When you declare a variable but do not assign it a value, JavaScript allocates memory for it during the creation phase of the execution context and automatically assigns it a special placeholder called undefined. This means the variable definitely exists, but it just does not have a value yet. On the other hand, not defined means the variable has not even been declared in your code. If you try to access a variable that the JavaScript engine cannot find anywhere in the memory allocation phase, it will throw a ReferenceError telling you that the variable is not defined. This topic also highlights why JavaScript is known as a loosely typed or weakly typed language. You do not need to specify what kind of data a variable will hold. You can assign a number to a variable, and later change it to a string or a boolean without the engine throwing an error. One major mistake to avoid is manually assigning the value undefined to a variable to clear it or mark it as empty. While JavaScript will let you do this, it is highly discouraged by the developer community. The keyword undefined is meant to be used exclusively by the JavaScript engine as a default state. If you need to explicitly state that a variable is empty, you should use null instead. Understanding these small details makes a huge difference when debugging complex applications and tracing variable states in your code. What is your favorite method for handling empty or uninitialized variables in your projects? #JavaScript #WebDevelopment #NamasteJavaScript #JSFundamentals #CodingJourney #FrontendEngineer #UndefinedVsNotDefined #CleanCode
To view or add a comment, sign in
-
-
Javascript: Quotes in strings ⚠️ A small mistake with quotes can break your JavaScript code. Many beginners face this problem when working with strings. In JavaScript, quotes are used to create text. But using the wrong quote inside a string can cause an error. Here are the basics 👇 • Use single quotes let text = 'Hello World'; • Use double quotes let text = "Hello World"; • Use backticks (template strings) let text = `Hello World`; • Use different quotes inside a string "I'm learning JavaScript" • Escape quotes if needed 'It\'s JavaScript' Learning this small concept will save you from many syntax errors. #JavaScript #WebDevelopment #FrontendDevelopment #LearnJavaScript #CodingForBeginners #ProgrammingTips #SoftwareDevelopment #TechLearning #DeveloperSkills #CodeNewbie
To view or add a comment, sign in
-
-
𝗦𝗽𝗿𝗲𝗮𝗱 𝗩𝗦 𝗥𝗲𝘀𝘁 𝗢𝗽𝗲𝗿𝗮𝘁𝗼𝗿𝘀 𝗜𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 You've seen ... in JavaScript and wondered what it does. The same syntax is used for two purposes: - Spread operator expands values - Rest operator collects values Understanding this difference is crucial for writing clean JavaScript. The spread operator expands elements from arrays or objects. It's like opening a box and taking everything out. It spreads elements individually and creates a shallow copy, avoiding mutation. The rest operator collects multiple values into one. It's like gathering everything into a box. All arguments are collected into an array. Here are the key differences: - Spread operator expands values - Rest operator collects values - Spread operator is used on the right side, rest operator on the left side - Spread operator outputs individual elements, rest operator outputs an array You can use spread and rest operators to merge arrays, remove properties from objects, and more. Mastering spread and rest operators helps you write cleaner code, handle data efficiently, and solve interview problems confidently. Source: https://lnkd.in/gmFfBhXX
To view or add a comment, sign in
-
Useful JavaScript Tricks Developers Should Know 🚀 JavaScript has some powerful features that can make your code cleaner and more efficient. Here are a few JavaScript tricks I use regularly: 🔹 Destructuring Extract values from objects easily const { name, age } = user; 🔹 Optional Chaining Avoid undefined errors user?.profile?.name 🔹 Default Parameters Set default values function greet(name = "Developer") { return `Hello ${name}`; } 🔹 Spread Operator Copy arrays or objects const newArray = [...oldArray]; 🔹 Short Circuit Evaluation Cleaner conditional logic isLoggedIn && showDashboard() These small tricks can make your code more readable and efficient. Still learning JavaScript every day 🚀 What’s your favorite JavaScript trick? #JavaScript #FrontendDeveloper #ReactNative #SoftwareEngineer #CodingTips #WebDevelopment
To view or add a comment, sign in
-
-
🚀 Day 10 of My JavaScript Journey ✨Today I explored how JavaScript actually works behind the scenes — and honestly, it changed the way I look at code completely 🤯 Here’s what I learned 👇 🧠 How JavaScript Code RunsJavaScript doesn’t just execute line by line — it first creates an Execution Context which manages everything. ⚙️ Execution Context Phases1️⃣ Memory Allocation Phase Variables get stored with undefined Functions are stored completely 2️⃣ Execution Phase Code runs line by line Values get assigned and functions execute 📦 Call Stack & Execution Flow JavaScript uses a Call Stack to manage function calls Each function creates its own execution context Stack follows LIFO (Last In, First Out) 💾 Stack vs Heap Memory Stack → Stores primitive values (fast ⚡) Heap → Stores objects (reference-based 🧩) 🤖 Interpreter BehaviorJavaScript reads and executes code step by step using an interpreter — not compiled like some other languages. ❓ Why undefined Appears?Because during memory phase, variables are declared but not initialized yet. ⬆️ Hoisting Explained var is hoisted with undefined Functions are fully hoisted let & const are hoisted but stay in Temporal Dead Zone (TDZ) ❌ 🚫 Temporal Dead Zone (TDZ)You can’t access let & const variables before initialization — it throws an error. ⚠️ Function Expressions vs Hoisting Function declarations → hoisted ✅ Function expressions → behave like variables ❌ 💡 Key TakeawayUnderstanding execution context, memory, and hoisting makes debugging WAY easier and helps write cleaner code 🔥 📌 Slowly moving from writing code → to understanding how it actually works inside #JavaScript #WebDevelopment #MERNStack #CodingJourney #LearnToCode #FrontendDevelopment #DeveloperLife
To view or add a comment, sign in
-
-
Built-in vs Manual Flattening in JavaScript Stop writing custom logic to flatten arrays in JavaScript. There’s already a built-in method for it: flat(Infinity) It flattens nested arrays of any depth into a single-level array, no loops, no recursion. Example: [1, [2, [3, [4]]]].flat(Infinity) // → [1, 2, 3, 4] Sometimes the simplest solutions are already part of the language. Knowing your standard library can save you more time than any framework.
To view or add a comment, sign in
-
-
🚀 JavaScript Practice: Improving Logic with Real Examples 💡 🚀Today I focused on strengthening my core JavaScript skills by working on two small but powerful problems.🚀 1. Character Frequency Counting 💬I explored how to count how many times each character appears in a string like "racecar". This helped me understand how objects can be used to store and update values dynamically. I also learned how to transform that data into a clean, readable format.💬 📌 Key learning: 🔹 Using objects to track frequency 🔹 Converting data into a structured format 🔹 Building clean output instead of messy strings 2. Array Pair Formatting Next, I worked on converting an array into a custom pair format like [1:2, 3:4, 5:6]. This improved my understanding of looping with steps and grouping elements logically. 📌 Key learning: Iterating through arrays in steps Grouping elements into pairs Understanding the difference between actual data structures and formatted output 🔥 Overall Takeaways ✔ Improved problem-solving approach ✔ Better understanding of objects and arrays ✔ Learned how to format output cleanly and efficiently #JavaScript #CodingPractice #FrontendDevelopment #ProblemSolving #LearningJourney
To view or add a comment, sign in
-
More from this author
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development