জাভাস্ক্রিপ্ট এক্সপ্লোর করার সময় প্রায়-ই আমাদের মাথায় একটা প্রশ্ন ঘুরতে থাকে
👉 জাভাস্ক্রিপ্টে, [ ] == [ ] ➟ false কিন্ত [ ] == ![ ] ➟ true হয় কেন????
এর কারণ নিয়ে আমরা অনেকেই তেমন মাথা ঘামায় না হয়তো। যাক চলেন আজকে জেনে নিই এর আসল কারণ কিঃ ( ধৈর্য ধরে পুরোটা বুঝেন। প্রথমে কিছু ডেফিনেশন দেওয়া আছে যাতে পরবর্তীতে টার্ম গুলো বুঝা যায়।)
প্রথমে আমাদের জানতে হবে, 👉 মূলত [ ] দিয়ে জাভাস্ক্রিপ্টে কি বুঝানো হয়;
◻️ [ ] হচ্ছে Array Literal. ◻️ [ ] দিয়ে মূলত empty array object তৈরি করে ◻️ যতবার আমরা [ ] ব্যবহার করি প্রতিবার একটা নতুন array object তৈরি হয়।
যাইহোক, অতঃপর আমরা এটা বুঝতে পারি প্রতিটি [ ] দিয়ে মূলত বিভিন্ন ধরনের অবজেক্ট-কেই নির্দেশ করা হয়।
👉 অপারেটরের অগ্রাধিকার বলতে কি বুঝি?
যেহেতু আমরা “!” এবং “==” ব্যবহার করবো তাহলে চলুন এগুলো নিয়ে কিছু কথাবার্তা বলা যাকঃ
◻️ ! মূলত NOT লজিক্যাল এবং একটি ইউনারি অপারেটর(সিঙ্গেল অপারেন্ড)। ◻️ == দিয়ে মূলত equal অর্থাৎ সমতা অপারেটর বুঝানো হয়। এছাড়াও এটি একটি বাইনারি অপারেটর যার অর্থ হলো এর মধ্যে দুটি অপারেন্ড আছে। ◻️ ! মূলত অন্যদের তুলনায় বেশি অগ্রাধিকার বহন করে এবং বিভিন্ন ক্ষেত্রে এটিই সর্বপ্রথম এক্সিকিউট বা কার্যকর হবে;
👉 == কিভাবে কাজ কাজ করে?
এটা বুঝার জন্য কিছু বিষয় নিয়ে আমরা ডিসকাস করবো যেমনঃ
➡️ অবজেক্ট টু অবজেক্ট ➡️ অবজেক্ট টু বুলিয়ান
এবার চলেন আমাদের টপিকে ফিরে যাই, ☑️ অবজেক্ট টু অবজেক্ট কম্পারিজন
- True রিটার্ন করা হয় শুধুমাত্র যদি উভয় অপারেন্ড একই অবজেক্ট উল্লেখ করে।
- ⚠️ শুধু মনে রাখবেন, আমাদের ক্ষেত্রে [ ] সবসময় একটি নতুন অবজেক্ট তৈরি করে। সুতরাং, এটি বিভিন্ন ধরনের অবজেক্ট উল্লেখ করে।
☑️ অবজেক্ট টু বুলিয়ান তুলনা
তুলনা করার আগে উভয় অপারেন্ড কে সংখ্যায় রুপান্তর করে।
বুলিয়ান false হলে এর মান 0 হয়ে যায়
- বুলিয়ান true হলে এর মান 1 হয়ে যায়।
- Array Literal [ ] রুপান্তরিত হয়ে 0 হয়ে যায়।
👉 False এ কি কি রুপান্তরিত হয়????
না ভাই, দুনিয়ার সব false এ রুপান্তরিত হয়না। শুধুমাত্র ৭টা জিনিস false এ রুপান্তরিত হয়ে থাকে।
চলেন দেখে নিই এই ৭টা কি কি-
- False
- 0 ( +0 এবং -0 উভয়ই)
- 0n (bigint zero)
- Null
- undefined
- NaN
- “” (Empty string)
NB: empty array সহ সব ধরনের অবজেক্ট ই “true” তে রুপান্তরিত হয়।
📌এবার দেখবো কিভাবে [ ] কে বুলিয়ান এবং নাম্বারে রুপান্তরিত করা হয়।
[ ] মূলত একটি অবজেক্ট হলেও এর বুলিয়ান কনভার্সন “true” রিটার্ন করবে।
নাম্বার কনভার্সনের ক্ষেত্রে [ ] রুপান্তরিত হয়ে “0” হয়।
⇥ [ ] ➟ false ⇥ [ ] ➟ 0
অনেক ছন্নছাড়া আলোচনা হলো এবার আমরা ফাইনালি, 👉 [ ] == [ ] এই বিষয়টি নিয়ে আলোচনা করবোঃ
- এখানে উভয় অপারেন্ড -ই হলো অবজেক্ট
- অবজেক্ট টু অবজেক্ট কম্পারিজনের ক্ষেত্রে, উভয় অপারেন্ড একই অবজেক্ট উল্লেখ করছে কিনা এটি == দিয়ে যাচাই করা হয়।
- [ ] প্রতিবার নতুন অবজেক্ট তৈরি করে এবং তাই এর বিভিন্ন রেফারেন্স রয়েছে।
এইসকল কারণেই এটি “false” রিটার্ন করে।
👉 এবার কথা বলা যাক, [ ] == ![ ] নিয়ে,
- বাকিদের চাইতে ! এর বেশি অগ্রাধিকার থাকায় এটি সবার প্রথমে এক্সিকিউট হবে।
- ! মূলত অপারেন্ডকে বুলিয়ানে কনভার্ট করে এর অপোজিট বুলিয়ান ভ্যালু রিটার্ণ করে।
![ ] ➟ !true ➟ false
📌 লক্ষ্য করেন, কেন [ ] == false হলো,
আমরা এখন অবজেক্ট টু বুলিয়ান কম্পারিজন দিয়ে আলোচনা করছি,
অবজেক্ট টু বুলিয়ান কম্পারিজনের জন্য, == উভয় অপারেন্ডকে কম্পেয়ার বা তুলনা করার পূর্বে নাম্বারে পরিবর্তিত করে নেয়।
=> [ ] ➟ 0 => false ➟ 0
- এর ফলে এক্সপ্রেশনটি দাঁড়ায়, 0==0
এবং এটি True রিটার্ণ করে।
(নেক্সট টাইম == এবং === এর মধ্যকার যতধরনের আলোচনা করা সম্ভব সবগুলোই দেওয়ার চেষ্টা করবো ইনশাআল্লাহ। তাহলে আরও অনেক কিছুই ক্লিয়ার হয়ে যাবে)
আজাইরা কথাঃ
আমি লিখাগুলো খুব লিনিয়ার স্ট্রাকচারে লিখার চেষ্টা করি যাতে গুরত্বপূর্ন বিষয় গুলো খুব সিম্পল ভাবে তুলে ধরা যায়। তাছাড়া গৎবাঁধা, ফরমাল কথাবার্তা এবং বিশাল বিশাল লিখার প্রচুর রিসোর্স অলরেডি আছেই। আমি বলবো না এভাবেই বেস্ট, এটা শুধুমাত্র আমার এক্সপ্লেইন করার মেথড।