نوع‌های اولیه ECMAScript

ECMAScript پنج نوع ابتدایی (primitive type) دارد، یعنی Undefined، 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 با مقدار تعریف نشده متفاوت است. اما عملگر typeof واقعاً بین این دو مقدار تفاوت نمی‌گذارد. به عنوان مثال، کد زیر را در نظر بگیرید:

var oTemp;
alert(typeof oTemp);  // خروجی "undefined"
alert(typeof oTemp2);  // خروجی "undefined"

کد قبلی برای هر دو متغیر "undefined" را نمایش می‌دهد، حتی اگر فقط متغیر oTemp2 از قبل تعریف نشده باشد. اگر از عملگرهای دیگری غیر از typeof برای oTemp2 استفاده شود، خطا ایجاد می‌شود، زیرا عملگرهای دیگر فقط برای متغیرهای تعریف شده قابل استفاده هستند.

به عنوان مثال، کد زیر خطا می‌اندازد:

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 بیتی از اعداد اعشاری را نمایش دهد.

هر عددی که مستقیماً وارد می‌شود (و نه از یک متغیر دیگر) به عنوان عدد معرفا می‌شود. به عنوان مثال، کد زیر یک متغیر برای ذخیره مقدار عددی تعریف می‌کند که توسط عدد معرفا 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-e نمایش داده شود17(در اینجا، 10 به توان منفی 17 برده شده است، به این معنا که باید 10 را 17 بار تقسیم کرد). ECMAScript به طور پیش‌فرض اعداد اعشاری با 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 استفاده کرد که با عدد 16 بیتی نمایش داده می‌شوند (Unicode یک مجموعه بین‌المللی از کاراکترها است که در این آموزش به آن پرداخته خواهد شد).

طول رشته و مکان حرف‌ها

کاراکترهای قالبی رشته‌ای توسط نیم‌کد‌های (" یا (') بیان شده‌اند. در حالی که در Java از نیم‌کد‌های (

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

نوع String شامل چندین کاراکتر قالبی است که توسعه‌دهندگان Java، C و Perl باید با آن آشنا باشند.

در زیر لیستی از کاراکترهای قالبی ECMAScript آورده شده است:

قابل‌توجه معنای
\n برگشت به خط
\t تک‌tab
\b خالی
\r برگشت به خط
\f صفحه‌بر
\\\\ کشش
\' نیم‌کد
\" نیم‌کد
\0nnn کد هشت‌ریختی nnn نمایشگر کاراکتر (n یکی از اعداد هشت‌ریختی از 0 تا 7 است)
\xnn کد شانزده‌ریختی nn نمایشگر کاراکتر (n نمایشگر یکی از اعداد شانزده‌ریختی از 0 تا F است)
\unnnn کد شانزده‌ریختی nnnn نمایشگر کاراکتر Unicode (n نمایشگر یکی از اعداد شانزده‌ریختی از 0 تا F است)