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