বেশীরভাগ সময়, অপারেটর ও ফাংশন সমুহ নিজে থেকেই তাদের কাছে দেয়া ভ্যালুগুলো রূপান্তর করে থাকে।
উদাহারণ হিসাবে , alert
নিজে থেকেই ভ্যালুকে স্টিংয়ে রূপান্তর করে নেয়। অন্যদিকে, গানিতিক অপারেটরগুলি ভ্যালুকে সংখ্যায় রূপান্তর করে।
যদিও কিছু কিছু ক্ষেত্রে আমাদেরকেই ভ্যালুকে নিজেদের মত করে রূপান্তর করে নিতে হয়।
এই অধ্যায়ে, আমরা অবজেক্ট নয় বরং, মৌলিক বিষয়গূলো জানবো। পরবর্তিতে, অবজেক্টের ধারণা পেলে, আমরা অবজেক্ট রূপান্তর নিয়ে আলোচনা করবো। <info:object-toprimitive>.
কোন ভ্যালু থেকে স্টিং দরকার হলে স্টিং রূপান্তর করা হয়।
উদাহরণ স্বরূপ, alert(value)
একাজটি করে নেয় ভ্যালুটিকে দেখাতে।
আমরা একে String(value)
ফাংশন থেকেও করতে পারি:
let value = true;
alert(typeof value); // বুলিয়ান
*!*
value = String(value); // এখন ভ্যালুটি একটি স্টিং "true"
alert(typeof value); // স্টিং
*/!*
প্রায় সব স্টিং রুপান্তর সুস্পষ্ট। এখানে, false
হয়ে যায় "false"
, null
হয়ে যায় "null"
, ইত্যাদি।
গানিতিক ফাংশন এবং এক্সপ্রেশনের ক্ষেত্রে সংখ্যায় রুপান্তর নিজে থেকেই হয়ে থাকে।
যেমন, ভাগের /
সময় দুটি স্টিং:
alert( "6" / "2" ); // 3, স্টিংয়ের সংখ্যায় বদলে যাওয়া
আমরা Number(value)
ব্যাবহার করেও স্পষ্ট করে value
কে সংখ্যায় রূপান্তর করতে পারি:
let str = "123";
alert(typeof str); // স্টিং
let num = Number(str); // সংখ্যায় 123 হয়ে গেছে
alert(typeof num); // সংখ্যা
স্পট করে এই রুপান্তরের পন্থাটি তখনই কাজে লাগে, যখন এমন কোন সোর্স থেকে ভ্যালু পাই, যা স্টিং দেয় অথচ যেটাকে কোন সংখ্যায় দেয়ার কথা, যেমন ঃ টেক্সট ফর্ম ।
যদি স্টীং কোন ভ্যালিড সংখ্যা না হয়, তবে তা NaN
হয়ে যায়। যথা:
let age = Number("an arbitrary string instead of a number");
alert(age); // NaN, রূপান্তর হয়নি
সংখ্যা রুপান্তরের নিয়ম:
ভ্যালু | বদলে যায়... |
---|---|
undefined |
NaN |
null |
0 |
true ও false |
1 ও 0 |
string |
স্টিংয়ের শুরু ও শেষের স্পেস থেকে তা মুছে ফেলা হয়। বাকিটা খালি স্টীং হলে, তা 0 হবে। নাহয় নাম্বারগুলি স্টিং থেকে নেয়া হয়। এরর হলে NaN আসে। |
Examples:
alert( Number(" 123 ") ); // 123
alert( Number("123z") ); // NaN ("z" এর সংখ্যা রুপান্তরে এরর)
alert( Number(true) ); // 1
alert( Number(false) ); // 0
এখানে জেনে রাখি null
ও undefined
এক্ষেত্রে ভিন্ন আচরণ করে: null
হয়ে যাবে শূন্য আর undefined
হবে NaN
.
প্রায় সব গানিতিক অপারেটর ভ্যালুকে সংখ্যায় রূপান্তর করে নেয়। তবে উল্লেখযোগ্য একটি ব্যতিক্রম হলো যোগ `+`, যদি এর দুপাশের একটি ভ্যালুও স্টিং হয় তবে অপরটিও স্টিং হয়ে যাবে
তখন এটি স্টিংগুলাকে যুক্ত করে ফেলে:
```js run
alert( 1 + '2' ); // '12' (ডানপাশে স্টিং)
alert( '1' + 2 ); // '12' (বাপাশে স্টিং)
```
এটা তখনই হয় যদি অন্তত একটি আর্গুমেন্ট স্টিং থাকে, নাহয় তা সংখ্যায় রুপান্তরিত হয়ে যাবে।
বুলিয়ানের রূপান্তর সবচেয়ে সহজতম।
এটি লজিকাল এক্সপ্রেশনের ক্ষেত্রে হয় (পরবর্তিতে কণ্ডিশনাল টেস্ট সহ অন্যগুলি দেখবো) তবে এটি সুস্পট করেও রূপান্তর করা যায় Boolean(value)
.
রূপান্তর নীতি:
- খালি ভ্যালু, যেমনঃ
0
, খালি স্টিং,null
,undefined
, ওNaN
, হবেfalse
. - অন্যসব হয়ে যায়
true
.
এক্ষেত্রে:
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false
alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
````warn header="Please note: the string with zero \"0\"
is `true`"
কিছু প্রোগ্রামিং ভাষায় ( পি এইচ পি ) তে `"0"` কে `false` ধরে, কিন্তু জাভাস্ক্রিপ্ট, স্টিং খালি না হলে `true` ধরে নেয়।
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // স্পেস, এটাও true (স্টিং খালি না হলেই true)
## সারসংক্ষেপ
বহুল ব্যাবহৃত ৩টি রূপান্তরসমূহ হচ্ছে স্টিংয়ে,সংখ্যায়, বুলিয়ানে।
**`স্টিংয়ে রূপান্তর`** -- আউটপুট দেখতে হলে হয়। অথবা `String(value)` দিয়ে করা যায়। প্রায় সব মৌলিক ভ্যালুর জন্য এটা খুব স্পষ্ট।
**`সংখ্যায় রূপান্তর`** -- গানিতিক অপারেশনে হয়। `Number(value)` দিয়েও করতে পারি।
রূপান্তর নীতি:
| ভ্যালু | বদলে যায়... |
|-------|-------------|
|`undefined`|`NaN`|
|`null`|`0`|
|<code>true / false</code> | `1 / 0` |
| `string` | স্টিংয়ে যা তাই আসে, স্টিংয়ের শুরু ও শেষের স্পেস থেকে তা মুছে ফেলা হয়। বাকিটা খালি স্টীং হলে, তা `0` হবে। নাহয় নাম্বারগুলি স্টিং থেকে নেয়া হয়। এরর হলে `NaN` আসে। |
**`বুলিয়ানে রূপান্তর`** -- লজিকাল অপারেশনে হয়। আবার `Boolean(value)` দিয়েও করা যায।
Follows the rules:
| ভ্যালু | বদলে যায়... |
|-------|-------------|
|`0`, `null`, `undefined`, `NaN`, `""` |`false`|
|অন্য যেকোন ভ্যালু| `true` |
প্রায় সব নীতিই বুঝা অ মনে রাখা সোজা। তবে কিছু কমন ভুল হলো:
- `undefined` হয় `NaN` সংখ্যা হিসাব করলে, `0` নয়
- `"0"` ও স্পেস `" "` বুলিয়ানে true
অবজেক্ট এখানে কভার করা হয় নি। আমরা এখানে আবার আসবো। <info:object-toprimitive> এটা শুধুই অব্জেক্টের জন্য যখন আমরা আরো ভালো করে জাভাস্ক্রিপ্ট শিখে ফেলবো.