JavaScript's most confusing line — and it's only 15 characters Look at this carefully: typeof("6" / "abc") // → 'number' "6" / "abc" // → NaN Wait. The result is NaN — Not a Number. But typeof says it's a number? Yes. That's not a bug. That's JavaScript working exactly as designed. Here's what's actually happening: 🔹 JS tries to divide "6" by "abc" 🔹 It coerces "6" into the number 6 first 🔹 "abc" can't be coerced — becomes NaN 🔹 6 / NaN = NaN And here's the part that breaks everyone's brain: NaN is technically of type number in JavaScript. NaN = Not a Number. typeof NaN = "number". ✔️ NaN means the operation failed to produce a valid number ✔️ But the type system still classifies it as numeric type ✔️ It's an IEEE 754 floating point standard decision — not just JS ✔️ NaN === NaN returns false — NaN is not equal to itself Pro tip: Never check for NaN using === Use Number.isNaN(value) instead. It's the only reliable way. JavaScript doesn't always fail loudly. Sometimes it just quietly returns NaN and keeps moving. That silent failure is what makes JS bugs so hard to trace in real apps. Did you know NaN was typeof number before seeing this? #JavaScript #WebDevelopment #Programming #SoftwareEngineering #Frontend #JS #TechLearning
JavaScript's NaN Type Confusion Explained
More Relevant Posts
-
Ever faced a moment in JavaScript where something just didn’t make sense? 😅 I was debugging a small issue and saw this: 1 + "2" → "12" "5" - 2 → 3 [] == ![] → true At first, I thought I messed up somewhere… but nope — it was type coercion doing its thing. Basically, JavaScript tries to be “helpful” by converting values automatically. Sometimes it helps… sometimes it confuses you even more. Here are a few examples I explored 👇 • 1 + "2" → "12" (number becomes string) • "10" - 5 → 5 (string becomes number) • true + 1 → 2 • false + 1 → 1 • null + 1 → 1 • undefined + 1 → NaN • [] + [] → "" • [] + {} → "[object Object]" • {} + [] → 0 (weird one 👀) • [] == false → true • "0" == false → true • null == undefined → true • null === undefined → false What I learned from this 👇 → If there’s a string, + usually concatenates → Other operators (-, *, /) convert to number → == can trick you, === is safer Now whenever I see weird JS behavior… my first thought is: “Is type coercion involved?” 😄 #javascript #webdevelopment #coding #frontend #learning
To view or add a comment, sign in
-
-
🧠 JavaScript Myth Busting: "Let and Const are not Hoisted" (Yes, they are!) Have you ever been told in an interview that "let" and "const" aren’t hoisted, but "var" is? It’s one of the most common misconceptions in JavaScript. 👉 Here is the 100% technical truth: All declarations in JavaScript ("var", "let", "const", "function", "class") are hoisted. So, why do they behave differently? It’s all about Initialization and a friendly little neighborhood called the Temporal Dead Zone (TDZ). --- 🚨 The Difference: 1️⃣ "var" is hoisted AND initialized immediately with the value of "undefined". You can access it before its line of code without crashing. 2️⃣ "let" and "const" are hoisted BUT NOT initialized. The JavaScript engine knows they exist, but it reserves the memory without setting any starting value. --- 💀 Enter the Temporal Dead Zone (TDZ): The TDZ is the period of time between the start of a block and the moment the variable is actually initialized (the line where you wrote the declaration in your code). If you try to touch a "let" or "const" variable while it is trapped in the TDZ, JavaScript throws a ReferenceError. --- 💡 Why does this matter? The TDZ exists to enforce better coding practices. It helps prevent bugs by stopping you from using variables that have been created but aren't yet ready for use. --- 📌 Check out the image below for a simple breakdown! 👇 💬 Drop your best analogies in the comments! #javascript #coding #webdevelopment #programmingmyths #softwareengineering #learncoding #frontend
To view or add a comment, sign in
-
-
"If you’re not using "map", "filter", and "reduce" in JavaScript… you're probably writing more code than needed." 😅 These 3 array methods can level up your code instantly 👇 🔹 map() 👉 Transforms each element of an array 👉 Returns a new array 💻 Example: const nums = [1, 2, 3]; const doubled = nums.map(n => n * 2); // [2, 4, 6] 🔹 filter() 👉 Filters elements based on a condition 👉 Returns a new array 💻 Example: const nums = [1, 2, 3, 4]; const even = nums.filter(n => n % 2 === 0); // [2, 4] 🔹 reduce() 👉 Reduces array to a single value 👉 Very powerful (but often misunderstood) 💻 Example: const nums = [1, 2, 3, 4]; const sum = nums.reduce((acc, curr) => acc + curr, 0); // 10 🚀 Pro Tip: Use "map" for transformation, "filter" for selection, and "reduce" for everything else. 💬 Which one do you use the most in your projects? #javascript #webdevelopment #mern #coding #developers
To view or add a comment, sign in
-
Javascript is a weird language! 🤯 Take a guess before scrolling... . . . . ANSWERS: ✅ [] == ![] → true (wait, what?!) ✅ typeof null → "object" (it's not though) ✅ NaN === NaN → false (NaN doesn't even equal itself) ✅ '3' + 1 → "31" (string concatenation) ✅ '3' - 1 → 2 (numeric subtraction) WHY THIS HAPPENS: 1. The Empty Array Paradox Arrays are truthy, but when compared using loose equality, both sides get converted to numbers - empty arrays become 0, and the negation of a truthy value also becomes 0 2. The typeof null Bug This is a long-standing bug in JavaScript that was never fixed for backward compatibility, It's been wrong since day one. 3. NaN is Special This behavior follows the IEEE 754 standard for floating-point numbers. Use isNaN() to check for it instead. 4. The + Operator Does Double Duty When one operand is a string, + concatenates. The - operator only does math, so it forces type conversion to numbers. THE LESSON? Always use strict equality (===) instead of loose equality (==). It checks both value AND type without coercion. JavaScript is powerful, but it demands respect and understanding of its quirks. Have you been bitten by any of these? Drop your favorite JavaScript WTF moment in the comments 👇 P.S. If JavaScript were a person, it would be that friend who says "trust me" right before something goes horribly wrong. But we love it anyway. ❤️ #JavaScript #WebDevelopment
To view or add a comment, sign in
-
-
I had this random thought while coding the other day… We’re always told primitives in JavaScript are “simple”, right? No methods. No properties. But then this works: "hello".toUpperCase() At first I was like… okay, JavaScript magic I guess 😅 Turns out, it’s not magic. Behind the scenes, JavaScript kind of “borrows” an object for a moment. When you call a method, it quietly wraps it like this: (new String("hello")).toUpperCase() The method runs → returns "HELLO" → then the object just disappears. Like it was never there. This is called autoboxing. Which explains why: - You can use methods on primitives - But you can’t actually store properties on them Try this: "hello".lang = "en" Looks fine… but nothing really gets saved. Because that “object” you were talking to? It’s already gone. I’ve been using JavaScript for a while, and only recently really thought about this 😅 What about you? Did you already know this, or just know about it? #JavaScript #FrontendDevelopment #WebDevelopment #JavaScriptTips #ProgrammingConcepts #Developers #SoftwareEngineering #Coding
To view or add a comment, sign in
-
Stop writing JavaScript like it’s still 2015. 🛑 The language has evolved significantly, but many developers are still stuck using clunky, outdated patterns that make code harder to read and maintain. If you want to write cleaner, more professional JS today, start doing these 3 things: **1. Embrace Optional Chaining (`?.`)** Stop nesting `if` statements or using long logical `&&` chains to check if a property exists. Use `user?.profile?.name` instead. It’s cleaner, safer, and prevents those dreaded "cannot read property of undefined" errors. **2. Master the Power of Destructuring** Don't repeat yourself. Instead of calling `props.user.name` and `props.user.email` five times, extract them upfront: `const { name, email } = user;`. It makes your code more readable and your intent much clearer. **3. Use Template Literals for Strings** Stop fighting with single quotes and `+` signs. Use backticks (`` ` ``) to inject variables directly into your strings. It handles multi-line strings effortlessly and makes your code look significantly more modern. JavaScript moves fast—make sure your coding habits are moving with it. What’s one JS feature you can’t live without? Let’s chat in the comments! 👇 #JavaScript #WebDevelopment #CodingTips #SoftwareEngineering #Frontend #Programming
To view or add a comment, sign in
-
💥 JavaScript: Where Logic Goes to Die 🤯 Think you understand JavaScript? These mind-bending quirks might change your mind… ⚡ Ever wondered: 👉 Why 9999999999999999 becomes 10000000000000000? 👉 Why 1 < 2 < 3 is true, but 3 > 2 > 1 is false? 👉 Why [] == false is true but [] === false is false? 🧠 Welcome to the world of: ✔️ Type Coercion ✔️ Floating Point Precision ✔️ Weird Comparisons ✔️ Truthy vs Falsy Values 💡 For example (from page 9): 0.1 + 0.2 === 0.3 → ❌ false Because JavaScript uses floating-point math, resulting in 0.30000000000000004 😂 And the classic: 'b' + 'a' + + 'a' + 'a' → “banana” (sort of 😅) 🚀 These aren’t bugs — they’re how JavaScript actually works! 📌 If you're a developer, mastering these quirks will save you from real-world bugs. 💬 Which one shocked you the most? #JavaScript #WebDevelopment #Coding #JS #Frontend #Programming #Developers #CodingLife
To view or add a comment, sign in
-
🚀 JavaScript Hoisting — what it actually means (with a simple mental model) Most people say: “Variables and functions are moved to the top". Even the educators on youtube (some of them) are teaching that and even I remember answering that in my first interview call. That’s not wrong… but it’s also not the full picture. Then Priya what’s really happening? JavaScript doesn’t “move” your code. Instead, during execution, it runs in two phases: 1️⃣ Creation Phase Memory is allocated Variables → initialised as undefined Functions → fully stored in memory 2️⃣ Execution Phase Code runs line by line Values are assigned 🎨 Think of it like this: Before running your code, JavaScript prepares a “memory box” 📦 Creation Phase: a → undefined sayHi → function() { ... } Execution Phase: console.log(a) → undefined a = 10 🔍 Example 1 (var) console.log(a); // undefined var a = 10; 👉 Why? Because JS already did: var a = undefined; ⚡ Example 2 (function) sayHi(); // Works! function sayHi() { console.log("Hello"); } 👉 Functions are fully hoisted with their definition. 🚫 Example 3 (let / const) console.log(a); // ❌ ReferenceError let a = 10; 👉 They are hoisted too… But stuck in the Temporal Dead Zone (TDZ) until initialised. 🧩 Simple rule to remember: var → hoisted + undefined function → hoisted completely let/const → hoisted but unusable before declaration 💬 Ever seen undefined and wondered why? 👉 That’s hoisting working behind the scenes. #javascript #webdevelopment #frontend #reactjs #programming #100DaysOfCode
To view or add a comment, sign in
-
-
🔁 Understanding the forEach() loop in JavaScript The forEach() method is a simple way to iterate over arrays and perform an action for each element. 👉 Syntax: array.forEach((item, index) => { // logic here }); 👉 Example: const numbers = [1, 2, 3, 4]; numbers.forEach((num, index) => { console.log(`Index: ${index}, Value: ${num}`); }); 💡 Key Points: ✔️ Executes a function for each array element ✔️ Does not return a new array ✔️ Cannot break or use return to stop the loop If you need a return value, consider using map() instead. Small concepts like this build a strong JavaScript foundation 🚀 #JavaScript #WebDevelopment #Frontend #Coding #LearnToCode
To view or add a comment, sign in
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
Don’t use typeof to check numeric data types. Use Number.isFinite