JavaScript Data Types: Type Conversion
Type conversion ও coercion — String()/Number()/Boolean(), explicit vs implicit, strict equality — বাংলায়।
প্রোগ্রামে প্রায়ই এক টাইপ থেকে অন্য টাইপে মান বদলাতে হয়। দুই পথ: conversion (সচেতন, explicit) ও coercion (জাভাস্ক্রিপ্টে নিজে-নিজে, implicit)।
Explicit conversion — String()
const num = 42;
const str = String(num);
console.log(str); // "42"
console.log(typeof str); // "string"
console.log(String(true)); // "true"
console.log(String(null)); // "null"
console.log(String(undefined)); // "undefined"Number()
console.log(Number("42")); // 42
console.log(Number("42px")); // NaN
console.log(Number(true)); // 1
console.log(Number(false)); // 0
console.log(Number(null)); // 0
console.log(Number(undefined)); // NaN
console.log(Number("")); // 0Number() মান না পারলে NaN দেয়। খালি string 0 হয় আর undefined হয় NaN — এই দুইটা সতর্ক থাকার জায়গা।
Boolean()
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined));// false
console.log(Boolean(NaN)); // false
console.log(Boolean("বাংলা")); // true
console.log(Boolean(42)); // true
console.log(Boolean([])); // true
console.log(Boolean({})); // trueBoolean() এ শুধু falsy মানগুলো false দেয়: 0, "", null, undefined, NaN, false। বাকি সব true — খালি array/object-ও।
Implicit coercion কী
Coercion হলো জাভাস্ক্রিপ্ট নিজে থেকে টাইপ বদলে ফেলা। + অপারেটরের সামনে string থাকলে + জোড়া লাগায়, কিন্তু -, *, / সংখ্যা বানাতে চায় — তাই একই মানে ভিন্ন ফল! এই পার্থক্যই সবচেয়ে বেশি bug জন্মায়।
console.log("5" + 3); // "53" (string জোড়া)
console.log("5" - 3); // 2 (number)
console.log("5" * 3); // 15
console.log("5" + null); // "5null"
console.log("5" + true);// "5true"
console.log(5 == "5"); // true (coercion দিয়ে তুলনা)
console.log(5 === "5"); // false (টাইপও মেলে)strict equality ব্যবহার করুন
// == coercion করে, === করে না
console.log(0 == false); // true ❌
console.log(0 === false); // false ✓
console.log("" == false); // true ❌
console.log("" === false); // false ✓
// NaN কারও সমান নয়
console.log(NaN === NaN); // false
console.log(Number.isNaN("x")); // true — নিরাপদ চেকসবসময় `===` / `!==` ব্যবহার করুন। ==-র coercion নিয়ম মুখস্থ রাখা কঠিন — অভ্যাসেই strict operator ধরুন।
Number.isNaN বনাম isNaN
console.log(isNaN("hello")); // true ❌ (coercion করে)
console.log(Number.isNaN("hello")); // false ✓ (টাইপ চেক)
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN(42)); // falseজরুরি conversion কৌশল
const value = "123";
const withPlus = +value; // 123 (unary +)
const withParseInt = parseInt(value, 10); // 123
const withParseFloat = parseFloat("3.99"); // 3.99
const withNumber = Number(value); // 123
console.log(typeof withPlus); // "number"+value ছোট্ট ট্রিক, parseInt(value, 10)-এ base 10 দেওয়া নিরাপদ। টেক্সটের ভেতরে সংখ্যা থাকলে ("42px") parseInt কাজ করে, Number() করে না।
| লক্ষ্য | কৌশল | নোট |
|---|---|---|
| number → string | String(n) / n.toString() | |
| string → number | Number(s), +s, parseInt, parseFloat | parseInt text-ভিতরে মান পায় |
| anything → boolean | Boolean(x), !!x | falsy সেট চেনা জরুরি |
| array চেক | Array.isArray(x) | typeof এ object |
| NaN চেক | Number.isNaN(x) | global isNaN-কে এড়িয়ে চলুন |
+ দিয়ে string জোড়া, - দিয়ে number — এই অসমতা ধরতে না পারলে অপ্রত্যাশিত ফল আসবে। === ব্যবহার করে, String()/Number() দিয়ে সচেতনভাবে convert করুন।
"10" + 5, "10" - 5, Number(null), Boolean("false") — কনসোলে চালিয়ে আগে নিজে উত্তর ভাবুন, তারপর মিলিয়ে দেখুন।