ইসিএমএসএক্স অরিজিনাল টাইপ

ECMAScript-এর 5টি প্রকৃত টাইপ আছে, যেগুলো হল উন্মুক্ত, Null, Boolean, Number এবং String。

typeof অপারেটর

typeof অপারেটরটির একটি পারামিটার আছে, যেটা পরীক্ষিত হতে চাওয়া বিন্যাস বা মান।উদাহরণস্বরূপ:

var sTemp = "test string";
alert (typeof sTemp);    //ফলাফল "string"
alert (typeof 86);    //ফলাফল "number"

বিন্যাস বা মানকে typeof অপারেটর কল করা হলে, ফলাফলটি নিচের মধ্যে একটি হবে:

  • undefined - যদি বিন্যাসটি Undefined টাইপ
  • boolean - যদি বিন্যাসটি Boolean টাইপ
  • number - যদি বিন্যাসটি Number টাইপ
  • string - যদি বিন্যাসটি String টাইপ
  • object - যদি বিন্যাসটি একটি উপভোগ্য টাইপ বা Null টাইপ হয়

মন্তব্য:আপনি হয়তো জিজ্ঞাসা করবেন, কেন typeof অপারেটর null মানের জন্য "Object" ফলাফল দেয়।এটা আসলে JavaScript-এর প্রথম কার্যকরীতে একটি ত্রুটি ছিল, যা ECMAScript দ্বারা অনুসরণ করা হয়েছিল।এখন, null-কে একটি অবজেক্টের প্রতিস্থাপক হিসাবে মনে করা হয়, যা এই মতবিদ্যা বুঝায়, কিন্তু প্রযুক্তিগতভাবে, তা একটি প্রকৃত মান হয়。

Undefined টাইপ

এর আগের ভাবে, Undefined টাইপটি শুধুমাত্র একটি মান রাখে, যেটা undefined।যখন একটি বিন্যাস একটি স্থাপনা না করা হয়, তখন তার ডিফল্ট মান undefined হয়。

var oTemp;

আগের একল লাইনটি বিন্যাসকৃত oTemp-কে ঘোষণা করে, কোনও মান না দিয়ে। এই বিন্যাসকৃতকে undefined মান দেওয়া হবে, অর্থাৎ undefined টাইপের লিটারাল। এই বিন্যাসকৃতকে undefined-এর মান সমান করার জন্য নিচের কোডটি ব্যবহার করা যাবে:

var oTemp;
alert(oTemp == undefined);

এই কোডটি "true" দেখাবে, যা বলতে আছে যে এই দুটি মান নিশ্চিতভাবে সমান। typeof অপারেটরটির মাধ্যমেই এই বিন্যাসকৃতকে undefined মান হিসাবে দেখা যাবে:

var oTemp;
alert(typeof oTemp); // আউটপুট "undefined"

সুচনা:undefined মানটি undefined মানকে ভিন্ন নয়, কিন্তু typeof অপারেটরটি এই দুটি মানকে পৃথক করে না। নিচের কোডটি দেখুন:

var oTemp;
alert(typeof oTemp);  // আউটপুট "undefined"
alert(typeof oTemp2);  // আউটপুট "undefined"

আগের কোডটি দুটি বিন্যাসকৃতকেই "undefined" ফিরিয়ে দিয়েছে, যদিও শুধুমাত্র oTemp2 একমাত্র বিন্যাসকৃতকেই বিন্যাসকৃত করা হয়নি। oTemp2-কে typeof-এর বাইরে অন্য কোনও অপারেটরের সাথে ব্যবহার করা হলে, ত্রুটি হবে, কারণ অন্য অপারেটররা শুধুমাত্র বিন্যাসকৃত বিন্যাসকৃতকেই ব্যবহার করা যায়。

যেমন, নিচের কোডটি ত্রুটি দেয় হবে:

var oTemp;
alert(oTemp2 == undefined);

যখন ফাংশন কোনও স্পষ্ট ফিরিয়ে দেওয়া মান না দেয়, তখন ফিরিয়ে দেওয়া হয় "undefined" মান, যেমন নিচে দেখা যাচ্ছে:

function testFunc() {
{}
alert(testFunc() == undefined);  // আউটপুট "true"

Null টাইপ

আরেকটি একমাত্র মানবিশিষ্ট টাইপ Null, যেটির একমাত্র মান null আছে, অর্থাৎ এটির লিটারাল। undefined মানটি একসঙ্গেই null মান থেকে উদ্ভূত, তাই ECMAScript এগুলোকে সমান হিসাবে বিবেচনা করে。

alert(null == undefined);  // আউটপুট "true"

যদিও এই দুটি মান সমান, তবু তাদের অর্থ ভিন্ন। undefined হল এমন একটি মান যা যখন একটি বিন্যাসকৃত বিন্যাসকৃত করা না হয় তখন এই বিন্যাসকৃত বিন্যাসকৃতকে দেওয়া হয়, null তখন একটি অস্তিত্বহীন অবজেক্ট (যখন typeof অপারেটরকে নিয়ে আলোচনা করা হয়, এই বিষয়টি সাধারণত উল্লেখ করা হয়)। যদি কোনও ফাংশন বা মেথড একটি অবজেক্ট ফিরিয়ে দেবে, তবে এই অবজেক্টটি পাওয়া যায় না তখন, সাধারণত null ফিরিয়ে দেওয়া হয়。

Boolean টাইপ

Boolean টাইপ ECMAScript-এর অন্যতম সবচেয়ে ব্যবহৃত টাইপগুলির মধ্যে একটি। এটি দুটি মান আছে true এবং false (অর্থাৎ দুটি Boolean লিটারাল)。

যদিও false 0-এর সমান নয়, 0-এর প্রয়োজনে false-এ রূপান্তর করা যেতে পারে, তাই Boolean স্টেটমেন্টে উভয়কেই নিরাপদভাবে ব্যবহার করা যায়।

var bFound = true;
var bLost = false;

Number টাইপ

ECMA-262 এক্স-এরজিস্টেইটেরমধ্যে সবচেয়ে বিশেষ টাইপটি Number টাইপ।এই টাইপটি 32-বিট ইন্টিজার এবং 64-বিট ফ্লোটিং পয়েন্ট সংখ্যা উভয়ই প্রকাশ করতে পারে।

প্রথমবার প্রবেশ করা (না, অন্য একটি ভেক্টর থেকে প্রবেশ করা) কোনও সংখ্যা, Number টাইপের লিটারাল হিসাবে বিবেচিত হয়।যেমন, নিচের কোড দিয়ে একটি সংখ্যা মান সংরক্ষিত হয়, তার মান 86 লিটারাল দ্বারা নির্ধারিত:

var iNum = 86;

অষ্টকোটি সংখ্যা এবং হেক্সাডেসিমাল

সংখ্যা আরও একদম অষ্টকোটি (8-এর মূল) বা হেক্সাডেসিমাল (16-এর মূল) লিটারাল হিসাবে প্রকাশ করা যেতে পারে।অষ্টকোটি লিটারালের প্রথম সংখ্যা 0 হতে হবে, এরপর কোনও অষ্টকোটি সংখ্যা (0-7)।যেমন নিচের কোড:

var iNum = 070;  //070 সমান 56 একক সংখ্যায়

হেক্সাডেসিমাল লিটারাল তৈরি করতে, প্রথম সংখ্যা 0 হতে হবে, এরপর এক্স (x) লিপ্ত, এরপর কোনও হেক্সাডেসিমাল সংখ্যা (0-9 এবং A-F)।এই অক্ষরগুলি বড় বা ছোট হতে পারে।যেমন:

var iNum = 0x1f;  //0x1f সমান 31 একক সংখ্যায়
var iNum = 0xAB;  //0xAB সমান 171 একক সংখ্যায়

সুচনা:সব সংখ্যা ওটোমেটিকভাবে আটোমাইক বা হেক্সাডেসিমাল লিটারাল হিসাবে প্রকাশ করা যেতে পারে, কিন্তু সব গণিতীয় অপারেশন দশমিক ফলাফল প্রকাশ করে।

ফ্লোটিং পয়েন্ট

ফ্লোটিং পয়েন্ট মান নির্ধারণ করতে, দশমিক পয়েন্ট এবং দশমিক পয়েন্টের পরের একটি সংখ্যা (যেমন, 1.0 বা 1) অন্তর্ভুক্ত করতে হবে।এটা ফ্লোটিং লিটারাল হিসাবে বিবেচিত হয়।যেমন:

var fNum = 5.0;

ফ্লোটিং লিটারালের আকর্ষক বিষয়টি হল, যখন তা গণিতীয় ক্ষেত্রে ব্যবহৃত হয়, তখন সত্যিকারের মধ্যে স্ট্রিং হিসাবে সংরক্ষিত হয়।

বৈজ্ঞানিক সূত্র

অত্যন্ত বড় বা অত্যন্ত ছোট সংখ্যা জুড়ে, বৈজ্ঞানিক সূত্র দ্বারা ফ্লোটিং পয়েন্ট সংখ্যা প্রকাশ করা যেতে পারে, একটি সংখ্যা সংখ্যা (ডিসিমাল সংখ্যা সহ) এর পর e (বা E) দিয়ে, এরপর 10-এর গুণিতক পদান্তর প্রকাশ করা যেতে পারে।যেমন:

var fNum = 5.618e7

এই সংকেতটি 56180000 এই সংখ্যাকে প্রকাশ করে।বৈজ্ঞানিক সূত্রকে গণিতীয় এক্সপ্রেসনে রূপান্তর করলে এই মান পাওয়া যায়: 5.618 x 107

আরও, অত্যন্ত ছোট সংখ্যা কেমন 0.00000000000000008-এর মতো বৈজ্ঞানিক সূত্রে প্রকাশ করা যেতে পারে, 8-e17এখানে, 10-কে -17 তম মূল পরিমাণে উন্নীত করা হয়েছে, যার অর্থ হলো 10-কে 17বার ভাগ করতে হবে।ECMAScript-এর ডিফল্ট ভাবে, 6 বা 6টিরও বেশি প্রথম ০-এর সঙ্গে ব্যবহৃত ফ্লোটিং পয়েন্ট সংখ্যাকে বৈজ্ঞানিক সংখ্যা রূপান্তরিত করা হয়।

সুচনা:ফ্লোটিং পয়েন্ট মানকেও 64-বিট IEEE 754 ফরম্যাটে সংরক্ষণ করা যায়, যার মানে হলো দশমিক মানটিকে সর্বোচ্চ 17টি দশমিক স্থান পর্যন্ত সংরক্ষণ করা হয়।17টি দশমিক স্থানের পরবর্তী মানগুলো কাটানো হবে, যার ফলে কিছু ছোট গণিতিক ত্রুটি হবে。

বিশেষ Number মান

কিছু বিশেষ মানও Number ধরনের মধ্যে নির্ধারিত হয়েছে।প্রথম দুটি হলো Number.MAX_VALUE এবং Number.MIN_VALUE, যা Number মান সংকলনের বাহ্যিক সীমাকে নির্ধারণ করে।সবকটি ECMAScript সংখ্যা এই দুটি মানের মধ্যে থাকতে হবে।তবে, গণনার ফলাফল এই দুটি মানের মধ্যে থাকতে পারে না。

যখন গণনার ফলাফল Number.MAX_VALUE-কে অতিক্রম করে, তখন তা Number.POSITIVE_INFINITY-এর মান দেওয়া হবে, যার অর্থ হলো আর কোনো নম্বর নেই।একইভাবে, Number.MIN_VALUE-কে অতিক্রম করে সৃষ্টি হওয়া সংখ্যার গণনাকেও Number.NEGATIVE_INFINITY-এর মান দেওয়া হবে, যার অর্থ হলো আর কোনো নম্বর নেই।যদি গণনার ফলাফল অসীম মান হয়, তবে তা আর অন্যান্য গণনায় ব্যবহার করা যাবে না。

প্রকৃতপক্ষে, অসীম মানকে বিশেষ মান হিসাবে প্রকাশ করা হয়, (আপনি আশা করেছেন) যেমন Infinity।Number.POSITIVE_INFINITY-এর মান Infinity।Number.NEGATIVE_INFINITY-এর মান -Infinity।

অসীম সংখ্যা পজিটিভ হতেও নেগেটিভ হতেও পারে, তাই একটি পদ্ধতি ব্যবহার করে একটি সংখ্যা কি সীমিত নয় (কোনো একক অসীম সংখ্যা পরীক্ষা করতে পারবে না) বলা যায়।কোনো সংখ্যাকেই isFinite() পদ্ধতিকে বিডিও করা যায়, যাতে নিশ্চিত করা যায় যে সংখ্যা অসীম নয়।উদাহরণস্বরূপ:

var iResult = iNum * some_really_large_number;
if (isFinite(iResult)) {
    alert("finite");
{}
else {
    alert("infinite");
{}

শেষতম বিশেষ মানটি NaN হয়েছে, যার অর্থ হলো নন-নম্বর (Not a Number)。NaN একটি অসাধারণ বিশেষ মান।সাধারণত, এই ধরনের ঘটনা হয় যখন (String, Boolean ইত্যাদি) ধরন কনভার্সন ব্যর্থ হয়।উদাহরণস্বরূপ, 'blue' শব্দটিকে সংখ্যা হিসাবে রূপান্তরিত করার চেষ্টা ব্যর্থ হবে, কারণ তার সমানভাবের কোনো সংখ্যা নেই।অসীম মানের মতো, NaN-কেও গণিতিক গণনায় ব্যবহার করা যায় না।NaN-এর আরেকটি অসাধারণ গুণটি হলো, তা নিজের সঙ্গেও অসমান, যার ফলে নিচের কোডটি ফলাফল হিসাবে false ফিরাবে:

alert(NaN == NaN);  // আউটপুট "false"

এই কারণে, NaN মানকের ব্যবহার করা না দেওয়া সুপারিশ করা হয়।ফাংশন isNaN() অত্যন্ত ভালোভাবে কাজ করে:

alert(isNaN("blue"));  // আউটপুট "true"
alert(isNaN("666"));  // আউটপুট "false"

String টাইপ

String টাইপ-এর বিশেষ বৈশিষ্ট্য হল যে এটা একমাত্র সুসংকীর্ণ প্রমাণ্য টাইপ।এটা 0 থেকে অবশ্যই Unicode অক্ষরগুলি সংরক্ষণ করতে পারে (Unicode একটি আন্তর্জাতিক অক্ষর প্রকাশ, এই শিক্ষাক্রমের পরের অংশে আলোচনা করা হবে)।

স্ট্রিং-এর প্রত্যেক অক্ষরই একটি বিশেষ স্থান রয়েছে, প্রথম অক্ষর 0-এর থেকে শুরু করে, দ্বিতীয় অক্ষর 1-এর থেকে, এবং এইভাবে চলে যায়।তাই স্ট্রিং-এর শেষতম অক্ষরের স্থান হবে স্ট্রিং-এর দৈর্ঘ্য থেকে 1 কমানো:

স্ট্রিংস লঞ্চনা এবং চারাকর অবস্থান

স্ট্রিং লিখিত অক্ষরগুলি ডবল কোটা ("') বা সিঙ্গল কোটা ('')-এর মাধ্যমে ঘোষিত হয়।জাভা তথা কোটা ডবল কোটা-এর মাধ্যমে স্ট্রিং-কে ঘোষিত করে, কোটা সিঙ্গল-এর মাধ্যমে অক্ষর-কে ঘোষিত করে।কিন্তু ECMAScript-এর অক্ষর টাইপ নেই, তাই এই দুইটি প্রকার ঘোষণায় কোনও একটি ব্যবহার করা যেতে পারে।উদাহরণ হিসেবে, নিম্নলিখিত দুইটি কোডগুলি কার্যকর হয়:

var sColor1 = "red";
var sColor2 = 'red';

String টাইপও কিছু অক্ষর লিখিত অন্তর্ভুক্ত করে, Java, C ও Perl-র ডেভেলপারদের এটা অত্যন্ত পরিচিত

নিম্নে ECMAScript-র অক্ষর লিখিত তালিকা দেওয়া হল:

লিখিত অর্থ
\n নতুন লাইন
\t ট্যাব
\b স্পেস
\r এনক্রিয়া
\f পুনরায় বিভাজন
\\ রিভার্স স্ল্যাশ
\' সিঙ্গল কোটা
\" ডবল কোটা
\0nnn অষ্টদশ কোড nnn নির্দেশ করে অক্ষর (n 0 থেকে 7-র মধ্যে একটি অষ্টদশ সংখ্যা (n)
\xnn সদ্দিগ্রাহ্য কোড nn নির্দেশ করে অক্ষর (n 0 থেকে F-র মধ্যে একটি দেশীয় সংখ্যা (n)
\unnnn সদ্দিগ্রাহ্য কোড nnnn নির্দেশ করে Unicode অক্ষর (n 0 থেকে F-র মধ্যে একটি দেশীয় সংখ্যা (n)