Q13. What is the typeof operator and what are its possible return values?
typeof কী বের করে, সব সম্ভাব্য ফলাফল এবং কিছু চমকপ্রদ ব্যতিক্রম।
typeof একটি unary operator — এটি কোনো ভেরিয়েবল বা expression-এর ডেটা টাইপ বের করে দেয় এবং সবসময় একটি string ফেরত দেয়।
console.log(typeof "text"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" ← চমকপ্রদ!
console.log(typeof 10n); // "bigint"
console.log(typeof Symbol("id")); // "symbol"
console.log(typeof function () {}); // "function"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"ফলাফল মাত্র ৮টি — string, number, bigint, boolean, undefined, object, symbol, function। যেকোনো কিছুই function ছাড়া বাকি সবকিছুকে object বলে ডাকা হয়, তাই ফলাফল দেখে সবসময় নিজের ধরন পুরোপুরি বোঝা যায় না।
তিনটি জায়গায় ফলাফল ভুল লাগে, এগুলো চেনা জরুরি।
typeof null; // "object" — ভাষার পুরোনো বাগ
typeof NaN; // "number" — NaN-ও একটি number
typeof []; // "object" — array হলো object
typeof new Date(); // "object"
typeof /regex/; // "object"typeof আরেকটি কাজও করে — ঘোষিত না করা ভেরিয়েবল লিখলেও ReferenceError না দিয়ে "undefined" ফেরত দেয়, ফলে ফিচার ডিটেক্ট করা নিরাপদ হয়।
console.log(typeof neverDeclared); // "undefined" — কোনো error নেই
console.log(neverDeclared); // ReferenceErrorArray বা null আলাদা করতে হলে Array.isArray() আর value === null ব্যবহার করুন — typeof দিয়ে চেক করবেন না।
ফাংশনের ভিতরে ভেরিয়েবল নাকি না, কোন ধরনের ফাংশন তা চেক করতে typeof যথেষ্ট নয় — এর জন্য fn.prototype দেখা বা fn instanceof Function ব্যবহার করুন।