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. JavaScript Data Types: Advanced
JavaScriptAdvanced

JavaScript Data Types: Advanced

Primitive vs reference গভীরে, boxed object, bigint ও symbol, typeof pitfalls, comparing values গুলো — বাংলায়।

25টি অংশবাংলা ভাষায়

এবার primitive আর reference-এর ভেতরের আচরণ — value নাকি reference-এ যায়, কীভাবে copy ও compare হয় — এই গভীর ধারণা interview-এ ও বড় project-এ আসল কাজে লাগে।

Value নাকি Reference?

let a = 10;
let b = a;      // value copy
b = 20;
console.log(a); // 10 — a অক্ষত

const obj1 = { key: 1 };
const obj2 = obj1;   // reference — একই object
obj2.key = 2;
console.log(obj1.key); // 2 — obj1-ও বদলে গেল!

console.log(obj1 === obj2); // true (একই reference)

Primitive value-র মতো copy হয় — আলাদা আলাদা জায়গা। object/array reference-এ যায় — two variable একই জিনিসের দিকে তাকায়। তাই এক জায়গায় বদলালে অন্য সাইটেও দেখা যায়।

Object-কে copy করা

const original = { name: "রহিম", address: { city: "ঢাকা" } };

// Shallow copy — উপরের স্তর আলাদা
const shallow = { ...original };
shallow.address.city = "চট্টগ্রাম";
console.log(original.address.city); // "চট্টগ্রাম" — নিচের স্তর share!

// Deep copy — সব স্তর আলাদা
const deep = structuredClone(original);
deep.address.city = "খুলনা";
console.log(original.address.city); // "চট্টগ্রাম" — অক্ষত

{ ...obj } shallow copy — ভেতরের nested object একই reference থেকে যায়। পুরোপুরি আলাদা copy পেতে structuredClone() (আধুনিক) বা JSON.parse(JSON.stringify(obj)) (পুরনো, তবে function/undefined হারায়)।

Object তুলনা

const x = { v: 5 };
const y = { v: 5 };

console.log(x === y); // false — reference আলাদা

const z = x;
console.log(x === z); // true — একই object

// মান দিয়ে তুলনা দরকার?
console.log(JSON.stringify(x) === JSON.stringify(y)); // true (ঢং)

// গভীর তুলনার তৈরি কৌশল
function deepEqual(a, b) {
  return JSON.stringify(a) === JSON.stringify(b);
}
console.log(deepEqual(x, y)); // true

object-কে === দিয়ে তুলনা করলে reference তুলনা হয়, মান নয়। মান দিয়ে তুলতে JSON string-বা বড় ক্ষেত্রে লাইব্রেরি (lodash isEqual) ব্যবহৃত।

Primitive object (boxing)

const text = "বাংলা";

console.log(text.length);       // 5 — দেখে মনে হয় property!
console.log(text.toUpperCase()); // "বাংলা"

console.log("জাভাস্ক্রিপ্ট".slice(0, 6)); // "জাভাস্ক্রিপ"

const num = 3.1416;
console.log(num.toFixed(2)); // "3.14"

জাভাস্ক্রিপ্ট মুহূর্তের জন্য primitive-কে একটা temporary object-এ মুড়ে দেয় (boxing) — তাই string/number-এ method চালানো যায়। ব্যবহারের পর সেই temporary বাতিল।

bigint

const bigNumber = 9007199254740993n;
const fromString = BigInt("12345678901234567890");

console.log(bigNumber + 1n); // 9007199254740994n
console.log(fromString);     // 12345678901234567890n

// bigint আর number মিশানো যায় না:
// bigNumber + 1 // TypeError
console.log(Number(bigNumber)); // 9007199254740992 (সতর্ক!

bigint বড় পূর্ণসংখ্যার জন্য। শেষে n বসিয়ে লিখা হয়। বড় precision প্রয়োজন হলে ব্যবহার করুন — তবে number-এর সাথে সরাসরি মেশাবেন না।

symbol

const id1 = Symbol("id");
const id2 = Symbol("id");

console.log(id1 === id2); // false — সবসময় unique

const user = {
  name: "রহিম",
  [id1]: 123,
};

console.log(user[id1]); // 123
console.log(Object.keys(user)); // ["name"] — symbol loup-এ আসে না

symbol হলো অনন্য (unique) identifier — একই নাম দিলেও দুটি symbol আলাদা। object-এর key হিসেবে ব্যবহার করলে সহজে conflict হয় না (jQuery-style library-তে দরকারি)।

typeof trap

console.log(typeof null);           // "object" ❌
console.log(typeof NaN);           // "number" 😅
console.log(typeof []);            // "object"
console.log(typeof function(){});  // "function"

// নিরাপদ চেক:
console.log(value === null);          // null চেক
console.log(Number.isNaN(NaN));       // NaN চেক
console.log(Array.isArray([]));       // array চেক

typeof null === "object" একটি ঐতিহাসিক bug ও স্থায়ী আচরণ। তাই টাইপ চেক করার সময় typeof সাথে লজিকাল চেক যুক্ত করুন।

ঘটনাফলাফলমন্তব্য
primitive copyনিজস্ব valueবদলালে অন্যটি অক্ষত
object copyreferenceএকই জিনিস
{ ...obj }shallownested share হয়
structuredClonedeepসব স্তর আলাদা
typeof null"object"null চেক করতে === null
typeof []"object"array চেক Array.isArray
Reference ভুলে যাবেন না

function-এ object পাঠালে function ভেতরে বদলালে বাইরের object-ও বদলায়। random প্রভাব এড়াতে দরকার হলে structuredClone দিয়ে copy পাঠান।

Interview hint

কমন প্রশ্ন: "আমি কীভাবে object-কে copy করি?" — শুরুতে shallow (...) ও deep (structuredClone) পার্থক্য বলা + nested-এ shallow-র বিপদ বলা।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরJavaScript Data Types: Type ConversionপরেরJavaScript Strings (স্ট্রিং)
এই পেজে
Tech Tutor

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

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

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

mdanamolhasan1998@gmail.com