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

রহস্যময়ী জাভাস্ক্রিপ্টঃ true + true + true === 3, true - true === 0 হচ্ছে কিভাবে?

শেয়ার করুনঃ

আপনারা অনেকসময় খেয়াল করেছেন true + true সমান সমান 2 হচ্ছে, বা এখানে যতটা বুলিয়ান ভ্যালু true একসাথে + অপারেটর দিয়ে যুক্ত করছেন, যোগফল ঠিক ততোটাই দেখাচ্ছেঃ

true + true + true === 3
// true

true + true
// 2

এটা হওয়ার কারণও মূলত সেই আগের পর্বে উল্লেখিত কারণেই। ইকমাস্ক্রিপ্ট এর স্ট্যান্ডার্ড অনুযায়ী + অপারেটরটার দুইরকমের কাজ করতে পারে যখন দুই অপারেন্ডের মাঝখানে বসে। একটা হচ্ছে যোগ(Addiiton) করা, আরেকটা হচ্ছে স্ট্রিং যুক্ত(String Concatenation) করা।

এই প্লাস + অপারেটরটি যখন দুইটা বুলিয়ান এর মাঝখানে বসবে, তখন সেটা টাইপ কোয়ারশন হয়ে নাম্বারে কনভার্ট হয়ে যাবে। তাই উপরে উল্লেখিত জায়গায় true যেহেতু বুলিয়ান তাই ইকমাস্ক্রিপ্ট এর স্ট্যান্ডার্ড অনুযায়ী এখানে + অপারেটরটি যোগ করার জন্যেই ব্যবহৃত হবে এবং true নাম্বার টাইপে কনভার্ট হয়ে যাবেঃ

Number(true)
// 1

দেখতেই পাচ্ছেন true কে নাম্বার টাইপে টাইপ কোয়ারশন করলে সেটার ভ্যালু 1 দেখাচ্ছে, আশা করি এখানেই ক্লিয়ার হয়ে গেছে যে কেন true + true এর ফলাফল এমন দেখাচ্ছে। এখানে মূলত সবগুলো বুলিয়ান true নাম্বারে টাইপ কোয়ারশন হয়ে একেকটার ভ্যালু 1 হয়ে গিয়েছেঃ

1 + 1 + 1 === 3
// true

1 + 1
// 2

তো ৩ টা 1 যোগ করলে অবশ্যই সেটার ফলাফল 3 হবে, এবং ২ টা যোগ করলে সেটার ফলাফল 2 হবে।

একইভাবে যখন আমরা একটা বুলিয়ান true থেকে আরেকটা বুলিয়ান true মাইনাস - করছি তখন সেটার ফলাফল 0 হয়ে যাচ্ছে, কারণ সেই একই। এখানে বুলিয়ান true গুলো - অপারেটরের কারণে বিয়োগ হয়েছে(স্পেক), টাইপ কোয়ারশনের কারণে বুলিয়ান true গুলোর ভ্যালু 1 হয়ে গিয়েছে। ফলাফলে রেজাল্ট প্লেইন 1 থেকে 1 বিয়োগ হয়ে দেখাচ্ছেঃ

true - true === 0
// true

1 - 1 === 0
// true

আশা করি এই দুইটা কেস আপনাদের এখন একদম ক্লিয়ার। তবে মনে প্রশ্ন জাগতেই পারে যে false ও তো একটা বুলিয়ান, তো সেক্ষেত্রেও কি ফলাফল সেইমই হবে? জি ঘটনা সেইম, তবে false এ টাইপ কোয়ারশন হয়ে নাম্বারে গেলে এটার ভ্যালু 1 হয় না, বরং এটা 0 হবেঃ

Number(false)
// 0

সেজন্যে আপনি যতটা false+ যোগ করেন, ফলাফল 0ই হবেঃ

false + false + false + false
// 0 

0 + 0 + 0 + 0
// 0

তেমনি - মাইনাস করলেও সেই 0ই হবেঃ

false - false
// 0

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

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

জাভাস্ক্রিপ্ট ব্যাসিক
জাভাস্ক্রিপ্টঃ কি, কেন, কখন? জাভাস্ক্রিপ্টঃ কোথায় এবং কিভাবে ইউজ করা হয়? জাভাস্ক্রিপ্টঃ ব্যাসিক ক্রোম ডেভেলপার কন্সোল জাভাস্ক্রিপ্টঃ ভ্যারিয়েবল এবং ডাটা টাইপ জাভাস্ক্রিপ্টঃ অপারেটর নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ কন্ডিশনাল স্টেটমেন্ট নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ লুপ নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ অ্যারে নিয়ে সবকিছু জাভাস্ক্রিপ্টঃ ব্যাসিক অবজেক্ট জাভাস্ক্রিপ্টঃ ব্যাসিক ফাংশন জাভাস্ক্রিপ্টঃ স্টেটমেন্ট আর এক্সপ্রেশন জাভাস্ক্রিপ্টঃ ড্রাই প্রিন্সিপ্যাল জাভাস্ক্রিপ্টঃ নাকি ইকমাস্ক্রিপ্ট? জাভাস্ক্রিপ্টঃ বিহ্যাইন্ড দ্যা সীন জাভাস্ক্রিপ্টঃ হোইস্টিং(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 হচ্ছে?