Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • JavaScript Documentation48টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • JavaScript কী?
  • Syntax & Comments
  • Variables
  • Data Types: Basics
  • Data Types: Conversion
  • Data Types: Advanced
  • Strings
  • Numbers & Math
  • Date & Time
  • Operators
  • Conditions
  • Loops
  • Functions: Basics
  • Functions: Intermediate
  • Functions: Advanced
  • Scope & Hoisting
  • Closures & this
  • ES6+ Modern
  • Arrays: Basics
  • Arrays: Intermediate
  • Arrays: Advanced
  • Objects: Basics
  • Objects: Intermediate
  • Objects: Advanced
  • Class: Basics
  • Class: Intermediate
  • Class: Advanced
  • DOM: Basics
  • DOM: Intermediate
  • DOM: Advanced
  • Events: Basics
  • Events: Intermediate
  • Events: Advanced
  • Async JavaScript
  • Promise
  • Async / Await
  • Fetch API
  • JSON
  • Modules
  • Browser Storage
  • Event Loop Deep
  • Prototype Chain
  • Iterators & Generators
  • WeakMap, WeakSet, Proxy
  • Error Handling
  • Practice Problems
  • Mini Projects
  • Basics
  • Functions & Scope
  • Types & Syntax
  • Arrays & Objects
  • Advanced
  • Functional Programming
  • Objects & Symbols
  • Async Deep Dive
  • Modern JavaScript
  1. Docs
  2. JavaScript
  3. প্রশ্ন/উত্তর
  4. Modern JavaScript
  5. Q46. What are optional chaining (?.) and nullish coalescing (??)?
JavaScriptModern JavaScript

Q46. What are optional chaining (?.) and nullish coalescing (??)?

null-safe property access ও default মান বসানোর দুটি ES2020 operator।

Optional chaining (`?.`) দিয়ে nested property পড়া নিরাপদ করা যায় — মাঝের কোনো লেভেল null বা undefined হলে পুরো chain undefined হয়ে যায়, error ছুড়ে না। আর nullish coalescing (`??`) দিয়ে null বা undefined হলে বিকল্প মান বসানো যায়।

সমস্যাjavascript
javascript
const user = {
  name: "Rahim",
  address: {
    city: "ঢাকা",
  },
};

console.log(user.address.city);    // "ঢাকা"
console.log(user.profile.email);   // ❌ TypeError

user.profile বলে কোনো প্রপার্টি নেই, তাই সেটা undefined। এরপর .email পড়তে গিয়ে JavaScript দেখে undefined-এর প্রপার্টি পড়ছে, যেটা অসম্ভব — তাই TypeError পড়ে এবং পুরো কোড থেমে যায়।

optional chainingjavascript
javascript
console.log(user.profile?.email);        // undefined
console.log(user.address?.city);        // "ঢাকা"
console.log(user.profile?.contact?.phone); // undefined — দুই লেভেলেই নিরাপদ

ধাপে ধাপে — user.profile মান undefined হওয়ায় ?. থেমে যায় এবং পুরো expression-এর মান undefined হয়ে যায়, তাই কোনো error হয় না। আর user.address মান object হওয়ায় ?. আপনা city প্রপার্টি খুঁজে পড়ে।

?? ব্যবহার করলে মান null বা undefined হলেই বিকল্প মান বসে, কিন্তু 0, "" বা false-এর মতো falsy মানকে ধরে না — এটাই || থেকে প্রধান পার্থক্য।

?? বনাম ||javascript
javascript
const count = 0;
const name = "";

console.log(count || 10);   // 10  — 0 কে "ফালতু" ধরা হয়েছে
console.log(count ?? 10);   // 0   — 0 সত্যিকারের মান, তাই রাখা হয়েছে

console.log(name || "Rahim"); // "Rahim" — "" ফালতু ধরা হয়েছে
console.log(name ?? "Rahim"); // ""      — "" সত্যিকারের মান
বাস্তব ব্যবহারjavascript
javascript
function getDisplayName(user) {
  return user.profile?.name ?? "অতিথি";
}

console.log(getDisplayName({}));                    // "অতিথি"
console.log(getDisplayName({ profile: { name: "" } })); // "" — খালি রাখা হয়েছে

// বাস্তব উদাহরণ — API response-এর default মান
const response = await fetch("/api/config");
const data = await response.json();

const theme = data.settings?.theme ?? "light";
const retries = data.config?.retries ?? 3;
method ও indexjavascript
javascript
// method call ও index-এও কাজ করে
const response = await fetch("/api/users");

const data = await response?.json?.();
const first = list?.[0]?.name;
const value = config?.["theme"] ?? "light";
বিধানjavascript
javascript
// ❌ `??` অপারেটর `||` বা `&&`-এর সাথে মিশিয়ে লেখা যায় না
const value = a ?? b || c;   // SyntaxError
const value = a || b ?? c;   // SyntaxError

// ✅ আগে parenthesize করুন
const value = a ?? (b || c);
const value = (a || b) ?? c;
সতর্কতাjavascript
javascript
// ব্রাউজারে সাময়িকভাবে ব্যবহারের জন্য
const value = a?.b ?? fallback;
// babel বা esbuild ছাড়া পুরোনো browser-এ কাজ করবে না
Operatorমান অনুপস্থিত হলে0 হলেfalse হলেundefined হলে
?.undefinedচালুচালুundefined
??বিকল্পমূল মানমূল মানবিকল্প
||বিকল্পবিকল্পবিকল্পবিকল্প
মনে রাখুন

?. শুধু বাইরের কাছ থেকে আসা ডেটা — API response, query parameter, localStorage-এর মতো জায়গায় ব্যবহার করুন, যেখানে null ও undefined স্বাভাবিক। নিজের নিয়ন্ত্রিত object-এ এগুলো ব্যবহার করলে লুকানো বাগ চেপে যেতে পারে।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
Modern JavaScript বিভাগের আরও প্রশ্নJavaScript প্রশ্ন/উত্তর
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com