ডিফাইনহীন Undefined
লাইফের সবকিছুই যে ঠিকঠাক ফিটফাট থাকবে, এমন কোনো কথা নাই। মাঝেমধ্যে একটু ঘাঁটতে গেলে দেখবি, জিনিসপত্র ঠিকমতো ডিফাইন করা নাই। এই যে ঠিক করা নাই বা ডিফাইন করা নাই, এইটাকে ইংরেজিতে undefined বলতে পারস এবং এই undefined জিনিসটা মাঝেমধ্যে জাভাস্ক্রিপ্টে দেখতে পাবি। কারণে-অকারণে বা অনেক সিচুয়েশনেই undefined হতে পারে। তার মধ্যে আমি কয়েকটা কারণ বলতেছি—
1) যখন তুই কোনো ভেরিয়েবল ডিক্লেয়ার করস, কিন্তু সেটাতে কোনো মান সেট করস নাই, তখন ডিফল্টভাবে ভেরিয়েবলটির মান undefined থাকে।
let first;
console.log(first);
Output: undefined2) যখন কোনো ফাংশন রিটার্ন স্টেটমেন্ট থাকে না, তখন ফাংশনটি অটোমেটিকভাবে undefined রিটার্ন করে।
function second(a, b) {
const total = a + b;
}
console.log(second());
Output: undefined3) যদি তুই কোনো ফাংশনে কম প্যারামিটার পাঠাস, তাহলে যে প্যারামিটারগুলো দেস নাই, সেগুলার মান undefined হয়ে যায়।
function third(a, b, c, d) {
console.log(a, b, c, d);
}
third(2, 5);
Output: 2 5 undefined undefined4) যদি কোনো ফাংশনের রিটার্ন স্টেটমেন্ট থাকে, কিন্তু রিটার্নের পর কোনো ভেরিয়েবল বা কোনো মান
না থাকে, তাহলে সে undefined রিটার্ন করে।
function noNegative(a, b) {
if (a < 0 || b < 0) {
return;
}
return a + b;
}
console.log(noNegative(2, -5));
Output: undefined5) যদি কোনো অবজেক্টে এমন একটা প্রোপার্টি খুঁজিস, যেটা আসলে অবজেক্টের মধ্যে নাই, তাহলে সেই প্রোপার্টির মান undefined হয়।
const fifth = { id: 2, name: 'ponchom', age: 40 };
console.log(fifth.salary);
Output: undefined6) অ্যারের মধ্যে যে ইনডেক্সে উপাদান নাই, সেই ইনডেক্সে গিয়ে উপাদান খুঁজিস, তাহলে বলবে, সেই ইনডেক্সে উপাদান বা মান ডিফাইন করা নাই। অর্থাৎ undefined পাবি। যেমন নিচের অ্যারের মধ্যে 5 টা উপাদান আছে। অর্থাৎ 0 থেকে শুরু করে 4 ইনডেক্স পর্যন্ত উপাদান আছে। এখন তুই যদি 51 ইনডেক্সের উপাদান খুঁজতে চাস, সে তোকে দিতে পারবে না। কারণ, সেই ইনডেক্সে কোনো কিছু নাই। তাই সে undefined দিয়ে বুঝাবে, সেই ইনডেক্সে উপাদান ডিফাইন করা হয় নাই।
const sixth = [4, 89, 87, 56, 54];
console.log(sixth[51]);
Output: undefined7) যখন অ্যারের কোনো এলিমেন্ট ডিলিট করিস, সেই index-এর উপাদানের মান undefined হয়ে যায়।
const seventh = [ 8, 9, 7, 6, 4];
delete seventh [1];
console.log(seventh [1]);
Output: undefined8) তুই যদি সরাসরি কোনো ভেরিয়েবলকে undefined দিয়ে সেট করিস, সেটিও সম্ভব।
const eighth = undefined;null vs undefined:
undefined-এর মানে বুঝায় ডিফাইন করা নাই বা ডিফাইন করা হয়নি। অন্য দিকে কোনো কিছু নাই, যদি ইচ্ছা করে বুঝাইতে চাই, সেক্ষেত্রে আরেকটা জিনিস আছে, সেটাকে null বলে। তবে null-এর undefined-এর মধ্যে কিছু ডিফারেন্স আছে।
console.log(typeof undefined);
console.log(typeof null);
Output:
undefined
objectnull-এর টাইপ object, যা একটি JavaScript-এর পুরনো ভুল। এটি ঠিক করা হয়নি। কারণ, চেইঞ্জ করতে গেলে অনেক ওয়েবসাইটে যেসব কোড লিখে রাখছে, সেগুলা সব হুট করে এরর দিতে শুরু করতে পারে।
কখনোই নিজে থেকে undefined দিয়ে ভ্যালু সেট করা উচিত না, এর পরিবর্তে null ব্যবহার করবি। undefined সাধারণত সিস্টেমের মাধ্যমে ব্যবহার হয়, আর null ইচ্ছাকৃতভাবে ভ্যালুর অভাব বোঝাতে ব্যবহৃত হয়।
Practice:
- তুই একটা ভ্যারিয়েবল ডিক্লেয়ার করলি, কিন্তু কোনো ভ্যালু দিলি না। এবার সেটা কনসোলে প্রিন্ট কর আর দেখ, কী আসে।
- তোর একটা ফাংশন আছে, যা দুইটা নাম্বার যোগ করে, কিন্তু কোনো রিটার্ন স্টেটমেন্ট নেই। এখন ওই ফাংশনটাকে কল করে কনসোলে দেখ, রিটার্ন কী আসছে।
- [10, 20, 30, 40, 50]। তারপর এর মধ্যে থেকে 2 ইনডেক্স (যেটাতে 30 আছে) এলিমেন্টটি ডিলিট কর। পরে ঐ ইনডেক্সে গিয়ে দেখ, কীরকম আউটপুট আসে।
- যোগ করার একটা ফাংশন লিখে ফেলেছিস function sum(a, b, c) { }। আর এই ফাংশনকে কল করছস sum(5, 10); এইভাবে। এইবার ফাংশনের ভিতরে কনসোল লগ করে দেখ, থার্ড প্যারামিটারের মান কী। কেন সেটা হয়েছে।
- const student = { name: "serious sojib", roll: 1, masks: 99 }; এই অবজেক্ট থেকে student-এর marks পেতে গেলে কত পাবি। সেটা কেন পাচ্ছস?