আপনারা কখনো কখনো হয়তো এরকম জিনিস দেখেছেন যে [] === 0
, false হচ্ছে, কিন্তু [] == 0
আবার true
হচ্ছেঃ
[] === 0
// false
[] == 0
// true
এটার পেছনেও সেই জাভাস্ক্রিপ্ট এর দুইটাওয়ালা ==
ও তিনটাওয়ালা ===
ইকুয়ালেটি অপারেটরের কারসাজি কাজ করছে। আমরা গত পর্ব থেকে জানি যে এই দুইটাওয়ালা ==
ও তিনটাওয়ালা ===
অপারেটরের মধ্যে পার্থক্য আছে। তিনটাওয়ালা ===
ইকুয়ালিটি অপারেটর কড়াকড়িভাবে(Strictly) কম্পেয়ার করে কোনোরকম টাইপ কোয়ারশন বা কোন কিছু না করে, যেখানে দুইটায়ালা ==
ইকুয়ালিটি অপারেটর ইকমাস্ক্রিপ্ট এর স্পেক অনুযায়ী ক্ষেত্রেবিশেষে টাইপ কোয়ারশন ইউজ করে অপারেন্ডের টাইপ পরবর্তন করে সেটার তুলনা করে।
জাভাস্ক্রিপ্ট এ অ্যারেকে অবজেক্ট হিসেবে গণ্য করা হয়, আর আপনারা যদি এখানে ইকমাস্ক্রিপ্ট এর স্পেক দেখেন তাহলে দেখবেন অবজেক্ট থাকলে সেটার আচরণ কেমন হবে ==
অপারেটর ইউজ করার সময়। যদি অবজেক্ট এর সাথে কোন নাম্বার, স্ট্রিং বা BigInt অথবা Symbol থাকে তাহলে এখানে অবজেক্ট এর টাইপ পরিবর্তন হয়ে একটা প্রিমিটিভ ভ্যালুতে কনভার্টেড হয়ে যাবে। এখন ঠিক কোন টাইপে কনভার্ট হবে সেটা যার সাথে তুলনা করছেন সেটার উপর নির্ভর করবে। এখানে আমরা যেহেতু নাম্বারের সাথে তুলনা করছি, তাই অ্যারেটিকে নাম্বারে নেওয়া হবেঃ
Number([])
// 0
ঠিক এই কারণেই ==
অপারেটর ইউজ করে 0
এর সাথে খালি অ্যারে []
কে তুলনা করা সেটা সত্য true
হয়েছেঃ
[] == 0
// true
0 == 0
// true
অন্যদিকে ===
অপারেটরটা যেহেতু স্ট্রিক্ট ইকুয়ালেটি চেকে ইউজ হয়, তাই সেক্ষেত্রে অবশ্যই একটা অ্যারে []
, 0
এর সমান নয়, তাই মিথ্যা false
দেখাচ্ছেঃ
[] === 0
// false