Course Lessons

JAVASCRIPT FOUNDATIONS + AI MINDSET

Back to Course

ES6+ Modern JavaScript Features

JAVASCRIPT... Lesson 11 of 41 6 min

ES6+ Modern JavaScript

Destructuring, Spread, Template Literals & Safe Operators

By AI Learning Assistant  ·  JavaScript  ·  ES6+  ·  Modern Syntax

🤖 AI-POWERED LESSON

This article is paired with a live AI session. As you read, you will see real questions asked to an AI assistant and the answers that came back, showing you exactly how to use AI to write cleaner, safer, and more modern JavaScript.

JavaScript has evolved beautifully. What used to take ten lines of clumsy code can now be written in two elegant lines. ES6 (ECMAScript 2015) and the versions that followed brought features that make our code more readable, less error prone, and genuinely fun to write. Think of it as upgrading from a bicycle to an electric scooter — you still get where you're going, but the ride is smoother and faster.

Today we will master six powerful modern features: destructuring (unpacking values like opening a gift box), spread operator (splatting arrays and objects like magic), template literals (string superpowers with backticks), default parameters (safety nets for functions), optional chaining (the save me from crashes operator), and nullish coalescing (the I know you meant zero, not undefined operator).

By the end, you will read old JavaScript and immediately see how to modernize it. You will write code that is shorter, clearer, and more professional. And you will use AI to refactor legacy code like a seasoned engineer.

Destructuring

UNPACK OBJECTS & ARRAYS LIKE A GIFT

Destructuring is like receiving a package and pulling out exactly what you need without unpacking everything else. Instead of writing const name = course.name three times, you write const { name, days, free } = course. It works beautifully with objects and arrays.

const course = { name : "JS Mastery" , days : 30 , free : true }; const { name , days , free } = course

🎁 DESTRUCTURING IN ACTION

You can also rename variables during destructuring: const { name: courseName } = course. And array destructuring: const [first, second] = ["HTML", "CSS"] gives you first="HTML", sec. Perfect for swapping values!

Spread Operator

SPLAT · COPY · COMBINE · ... MAGIC

The spread operator ... takes an array or object and spreads its elements into a new array or object. Instead of week1.concat(week2), you write [...week1, ...week2]. It's perfect for copying arrays without mutating the original, and for merging objects.

const week1 = [ "HTML" , "CSS" ]; const week2 = [ "JavaScript" , "React" ]; const fullStack = [ ... week1 , ... week2 ];

Template Literals

BACKTICKS & ${} · STRING SUPERPOWERS

Remember the old days of "Hello " + name + "!"? So many plus signs, so much squinting. Template literals use backticks (`) and ${variable} to embed values directly. They also preserve line breaks, making multiline strings effortless.

const student = "Kemi" const day = 11 console . log ( `${student} is on Day ${day} of JS Mastery!` );

Default Parameters

FALLBACK VALUES · SAFE FUNCTIONS

Instead of checking if (name === undefined) inside your function, you can assign a default value right in the parameter list. If the caller doesn't provide an argument, the default kicks in. This makes functions more robust and self documenting.

const greet = ( name = "Student" ) => `Hello, ${name}!`

Optional Chaining & Nullish Coalescing

?. · ?? · STOP THE CRASHES

Have you ever seen Cannot read property 'name' of undefined? That crash happens when you try to access a property on something that doesn't exist. Optional chaining (?.) stops the crash and returns undefined instead. Nullish coalescing (??) gives you a default value only when something is null or undefined (not when it's 0 or false).

🔐 Try It Yourself: Safe API Data Access

Click the buttons to simulate fetching user data — some responses are incomplete. Watch how optional chaining prevents crashes.

Click a button to see safe data access using optional chaining and nullish coalescing.

LIVE AI LEARNING SESSION

Ask your AI assistant this question ↓

💬 YOU ASK THE AI:

"What is optional chaining (?.) and nullish coalescing (??) in JavaScript? Show me real examples of where they prevent errors."

🤖 AI RESPONDS:

These two operators are lifesavers when working with data from APIs, user inputs, or any uncertain structure. Let me break them down with real situations.

Optional Chaining (?.) stops a JavaScript error when you try to access a property of undefined or null. Instead of crashing, it returns undefined. Think of it as a polite knock: "Is there a user? Is there a profile? If yes, give me the name. If not, just say undefined — don't crash my app."

Real example: const city = user?.address?.city ?? "Unknown". Without optional chaining, missing address would crash. With it, you safely get undefined, then nullish coalescing gives "Unknown".

Nullish Coalescing (??) is different from ||. The OR operator treats falsy values (0, "", false) as triggers for the default. But sometimes 0 is a valid number! Nullish coalescing only triggers when the value is null or undefined, not when it's 0 or an empty string.

Real example: const volume = userSettings.volume ?? 50. If volume is 0 (user muted), ?? keeps it 0. But || would replace 0 with 50, breaking mute functionality.

Together they are unstoppable: const displayName = user?.profile?.nickname ?? "Guest". Safe navigation + sensible default in one line. No more nested ifs or try-catch just to read a property.

// Without optional chaining (crash risk) const city = data.user.address.city; // 💥 TypeError if address missing const safeCity = data?.user?.address?.city ?? "Unknown"; // ✅ Safe!

📝 MY NOTE — IN MY OWN WORDS

The AI made optional chaining feel like a safety harness. Before this, I would write four nested if statements just to check if a user had a profile picture. Now I write user?.profile?.picture?.url and smile. The demo with the three API responses showed me that even when the API returns null or an incomplete object, my app doesn't crash. Nullish coalescing finally solved a mystery for me: why my volume slider defaulted to 50 even when the user wanted 0. Now I use ?? everywhere for numbers and || only for true boolean fallbacks. I am going to refactor all my old code today!

Modern Refactor Challenge

FROM OLD TO ES6+ IN SECONDS

// Old style (pre ES6) var course = { name : "JS Mastery" , days : 30 }; var name = course . name // Modern ES6+ (clean, safe, beautiful) const { name , days } = course ; // One line, no repetition

🤖 HOW AI ACCELERATES MODERN JAVASCRIPT

Ask AI: "Take this old JavaScript code and rewrite it using ES6 destructuring, spread, and template literals." Paste your code and watch the magic.

Ask: "Where should I use optional chaining in this function to prevent crashes?" The AI will identify risky property access lines and suggest fixes.

Challenge AI: "Convert this entire file to modern syntax and explain each change." You will learn faster by seeing before and after comparisons.

AI-Assisted JavaScript Learning · ES6+ Modern Features · Write Clean, Safe, Joyful Code

Complete this lesson

Mark as complete to track your progress