৪ জানুয়ারী, ২০২৩
পড়তে মিনিট লাগতে পারে

রহস্যময়ী জাভাস্ক্রিপ্টঃ [] === 0 মিথ্যা(false) হলেও [] == 0 আবার সত্য(true) হয় কিভাবে?

শেয়ার করুনঃ

আপনারা কখনো কখনো হয়তো এরকম জিনিস দেখেছেন যে [] === 0, false হচ্ছে, কিন্তু [] == 0 আবার true হচ্ছেঃ

[] === 0
// false

[] == 0
// true

এটার পেছনেও সেই জাভাস্ক্রিপ্ট এর দুইটাওয়ালা == ও তিনটাওয়ালা === ইকুয়ালেটি অপারেটরের কারসাজি কাজ করছে। আমরা গত পর্ব থেকে জানি যে এই দুইটাওয়ালা == ও তিনটাওয়ালা === অপারেটরের মধ্যে পার্থক্য আছে। তিনটাওয়ালা === ইকুয়ালিটি অপারেটর কড়াকড়িভাবে(Strictly) কম্পেয়ার করে কোনোরকম টাইপ কোয়ারশন বা কোন কিছু না করে, যেখানে দুইটায়ালা == ইকুয়ালিটি অপারেটর ইকমাস্ক্রিপ্ট এর স্পেক অনুযায়ী ক্ষেত্রেবিশেষে টাইপ কোয়ারশন ইউজ করে অপারেন্ডের টাইপ পরবর্তন করে সেটার তুলনা করে।

জাভাস্ক্রিপ্ট এ অ্যারেকে অবজেক্ট হিসেবে গণ্য করা হয়, আর আপনারা যদি এখানে ইকমাস্ক্রিপ্ট এর স্পেক দেখেন তাহলে দেখবেন অবজেক্ট থাকলে সেটার আচরণ কেমন হবে == অপারেটর ইউজ করার সময়। যদি অবজেক্ট এর সাথে কোন নাম্বার, স্ট্রিং বা BigInt অথবা Symbol থাকে তাহলে এখানে অবজেক্ট এর টাইপ পরিবর্তন হয়ে একটা প্রিমিটিভ ভ্যালুতে কনভার্টেড হয়ে যাবে। এখন ঠিক কোন টাইপে কনভার্ট হবে সেটা যার সাথে তুলনা করছেন সেটার উপর নির্ভর করবে। এখানে আমরা যেহেতু নাম্বারের সাথে তুলনা করছি, তাই অ্যারেটিকে নাম্বারে নেওয়া হবেঃ

Number([])
// 0

ঠিক এই কারণেই == অপারেটর ইউজ করে 0 এর সাথে খালি অ্যারে [] কে তুলনা করা সেটা সত্য true হয়েছেঃ

[] == 0
// true

0 == 0
// true

অন্যদিকে === অপারেটরটা যেহেতু স্ট্রিক্ট ইকুয়ালেটি চেকে ইউজ হয়, তাই সেক্ষেত্রে অবশ্যই একটা অ্যারে [], 0 এর সমান নয়, তাই মিথ্যা false দেখাচ্ছেঃ

[] === 0
// false

 

ট্যাগঃ
শেয়ার করুনঃ

ক্রমানুসারে এই জাভাস্ক্রিপ্ট সিরিজঃ

জাভাস্ক্রিপ্ট ব্যাসিক
জাভাস্ক্রিপ্টঃ কি, কেন, কখন? জাভাস্ক্রিপ্টঃ কোথায় এবং কিভাবে ইউজ করা হয়? জাভাস্ক্রিপ্টঃ ব্যাসিক ক্রোম ডেভেলপার কন্সোল জাভাস্ক্রিপ্টঃ ভ্যারিয়েবল এবং ডাটা টাইপ জাভাস্ক্রিপ্টঃ অপারেটর নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ কন্ডিশনাল স্টেটমেন্ট নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ লুপ নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ অ্যারে নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ ব্যাসিক অবজেক্ট জাভাস্ক্রিপ্টঃ ব্যাসিক ফাংশন জাভাস্ক্রিপ্টঃ স্টেটমেন্ট আর এক্সপ্রেশন জাভাস্ক্রিপ্টঃ ড্রাই প্রিন্সিপ্যাল জাভাস্ক্রিপ্টঃ নাকি ইকমাস্ক্রিপ্ট? জাভাস্ক্রিপ্টঃ বিহ্যাইন্ড দ্যা সীন জাভাস্ক্রিপ্টঃ হোইস্টিং(Hoisting) নিয়ে ধারণা জাভাস্ক্রিপ্টঃ স্কোপ(Scope) নিয়ে ধারণা জাভাস্ক্রিপ্টঃ ক্লোজারস(Closures) নিয়ে ধারণা জাভাস্ক্রিপ্টঃ ইফি, Immediately Invoked Function Expressions (IIFE)
জাভাস্ক্রিপ্ট অ্যাডভান্স
জাভাস্ক্রিপ্ট অ্যাডভান্সঃ ‘this’ কীওয়ার্ড জাভাস্ক্রিপ্ট অ্যাডভান্সঃ call(), bind() এবং apply() মেথড জাভাস্ক্রিপ্ট অ্যাডভান্সঃ অবজেক্ট ওরিয়েন্টেড জাভাস্ক্রিপ্ট জাভাস্ক্রিপ্ট অ্যাডভান্সঃ ফাংশন কন্সট্রাকটর(Constructor) এবং ‘new’ কীওয়ার্ড জাভাস্ক্রিপ্ট অ্যাডভান্সঃ ইনহেরিট্যান্স (Inheritance) জাভাস্ক্রিপ্ট অ্যাডভান্সঃ স্ট্রিক্ট (Strict) মোড
জাভাস্ক্রিপ্ট ইএস ৬(ES6)
জাভাস্ক্রিপ্ট ইএস ৬(ES6): নতুন কি আছে? জাভাস্ক্রিপ্ট ইএস ৬(ES6): let এবং const দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা জাভাস্ক্রিপ্ট ইএস ৬(ES6):ইফি (Immediately Invoked Function Expressions) জাভাস্ক্রিপ্ট ইএস ৬(ES6): টেমপ্লেট লিটারেল(Template Literal) ও স্ট্রিং মেথড জাভাস্ক্রিপ্ট ইএস ৬(ES6): অ্যারো (Arrow) ফাংশন ও লেক্সিক্যাল(Lexical) ‘this’ কীওয়ার্ড জাভাস্ক্রিপ্ট ইএস ৬(ES6): অ্যারে জাভাস্ক্রিপ্ট ইএস ৬(ES6): স্প্রেড(Spread) অপারেটর জাভাস্ক্রিপ্ট ইএস ৬(ES6): ডি-স্ট্রাকচারিং (Destructuring) জাভাস্ক্রিপ্ট ইএস ৬(ES6): রেস্ট(Rest) প্যারামিটার জাভাস্ক্রিপ্ট ইএস ৬(ES6): ডিফল্ট(Default) প্যারামিটার জাভাস্ক্রিপ্ট ইএস ৬(ES6): ম্যাপ (Map) জাভাস্ক্রিপ্ট ইএস ৬(ES6): ক্লাস (Class) জাভাস্ক্রিপ্ট ইএস ৬(ES6): ক্লাস ও ইনহেরিট্যান্স (Inheritance) জাভাস্ক্রিপ্ট ইএস ৬(ES6): সব ইনভারোমেন্ট এ ইএস৬
নিত্যদিনের জাভাস্ক্রিপ্ট
নিত্যদিনের জাভাস্ক্রিপ্টঃ ফার্স্ট ক্লাস ফাংশন ও হাইয়ার অর্ডার ফাংশন নিত্যদিনের জাভাস্ক্রিপ্টঃ map(), filter() ও reduce() নিত্যদিনের জাভাস্ক্রিপ্টঃ some() ও every() মেথড নিত্যদিনের জাভাস্ক্রিপ্টঃ অবজেক্ট এ লুপ চালানো নিত্যদিনের জাভাস্ক্রিপ্টঃ ডট নোটেশন এবং ব্র্যাকেট নোটেশন নিত্যদিনের জাভাস্ক্রিপ্টঃ ম্যাথ (Math) অবজেক্ট নিত্যদিনের জাভাস্ক্রিপ্টঃ ডেট (Date) অবজেক্ট নিত্যদিনের জাভাস্ক্রিপ্টঃ লজিক্যাল অপারেটর অর (।।) এবং অ্যান্ড (&&) নিত্যদিনের জাভাস্ক্রিপ্টঃ কন্ডিশনাল/টার্নারি (Ternary) অপারেটর নিত্যদিনের জাভাস্ক্রিপ্টঃ রেগুলার এক্সপ্রেশন (Regular Expression) নিত্যদিনের জাভাস্ক্রিপ্টঃ এরর হ্যান্ডলিং (Error Handling) নিত্যদিনের জাভাস্ক্রিপ্টঃ ডেভেলপার কন্সোল (Console) নিত্যদিনের জাভাস্ক্রিপ্টঃ অ্যাসিনক্রোনাস (Asynchronous) নিত্যদিনের জাভাস্ক্রিপ্টঃ কলব্যাক(Callback) ফাংশন নিত্যদিনের জাভাস্ক্রিপ্টঃ প্রমিস (Promise) নিত্যদিনের জাভাস্ক্রিপ্টঃ async এবং await
রহস্যময়ী জাভাস্ক্রিপ্ট
রহস্যময়ী জাভাস্ক্রিপ্টঃ type of NaN === “number” কেনো? রহস্যময়ী জাভাস্ক্রিপ্টঃ 9 + '1’ সমান ‘91’, আবার 91 - ‘1’ সমান 90 হচ্ছে কিভাবে? রহস্যময়ী জাভাস্ক্রিপ্টঃ true + true + true === 3, true - true === 0 হচ্ছে কিভাবে? রহস্যময়ী জাভাস্ক্রিপ্টঃ [] === 0 মিথ্যা(false) হলেও [] == 0 আবার সত্য(true) হয় কিভাবে? রহস্যময়ী জাভাস্ক্রিপ্টঃ [] === ‘’ মিথ্যা(false) হলেও [] == ‘’ আবার সত্য(true) হয় কিভাবে? রহস্যময়ী জাভাস্ক্রিপ্টঃ [] + [] খালি স্ট্রিং(’’) হচ্ছে কেনো? রহস্যময়ী জাভাস্ক্রিপ্টঃ [] + {} আবার কেনো '[object Object]’ দেখাচ্ছে? রহস্যময়ী জাভাস্ক্রিপ্টঃ {} + [] আবার শূন্য(0) কেনো? রহস্যময়ী জাভাস্ক্রিপ্টঃ [] + {} === {} + [] কিভাবে সত্য true হচ্ছে?