ایکما اسکریپت نوع اولیه

ECMAScript میں 5 اصل نوعیات ہیں، جو 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 دارد، یعنی مقدار نمونه‌ای آن.

alert(null == undefined);  // خروجی "true"

با اینکه این دو مقدار برابر هستند، اما معنای متفاوتی دارند. undefined مقداری است که به متغیری تعریف شده اما به آن مقدار اولیه داده نشده است، null برای نشان دادن عدم وجود یک شیء استفاده می‌شود (این نکته در بحث از عملگر typeof نیز به طور مختصر توضیح داده شده است). اگر یک تابع یا روش قرار است یک شیء را بازگرداند و شیء پیدا نشود، معمولاً مقدار null را بازمی‌گرداند.

نوع بولین

بولین یعنی 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-e کے طور پر نمائش کیاجاسکتا ہے17در اینجا، 10 به توان منفی 17 برده شده است (این بدان معناست که باید 10 را 17 بار تقسیم کرد). ECMAScript به طور پیش‌فرض اعداد اعشاری که 6 یا بیشتر پیش‌کشده 0 دارند را به صورت عدد علمی تبدیل می‌کند.

توضیح:ارقام浮point می‌توانند به صورت 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 کی قیمت کا استعمال نہیں کیا جائے گا۔NaN کی قیمت کا استعمال NaN() کے ذریعے بہت اچھا ہوتا ہے:

alert(isNaN("blue"));  //خروج "true"
alert(isNaN("666"));  //خروج "false"

String نوعیت

String نوعیت کا خاص مقام یہ ہے کہ وہ واحد اولیائی نوعیت ہے جس کا اندازہ کیا نہیں جاسکتا۔ Unicode کارکتروں کو صرف 0 یا زیادہ کو ذخیرہ کیا جاسکتا ہے، 16 بیتی اعداد و شمار سے نمائش کی جاتی ہیں (Unicode ایک بین الاقوامی کارکتر سیٹ ہے، اس تعلیم میں بعد میں بات کی جائیگی)。

کوئی بھی کارکتر کوئی بھی مقام رکھتا ہے، پہلا کارکتر مقام 0 سے شروع ہوتا ہے، دوسرا کارکتر مقام 1 میں، اور مزید کارکتر مقامات میں جیسی کی طرح جارہا ہے۔ یہ معنیات یہ ہے کہ کارکتر کا آخری مقام کوئی بھی کارکتر کی لسانیات کی کل لمبائی سے کم ایک ہوگا:

عبارت کی لمبائی اور حرف کی مقام

کارکتر کی لسانیات دوسرے دائرے میں بند یا ایک دائرے میں بند سے اعلان کی جاتی ہیں، جبکہ Java میں دوسرے دائرے میں بند سے لسانیات اور ایک دائرے میں بند سے کارکتر کا اعلان کیا جاتا ہے، لیکن جبکہ ECMAScript میں کارکتر کا نوعیت نہیں ہے، اس لئے دونوں نمائش کا استعمال کیا جاسکتا ہے۔ مثال کے طور پر، نیچے کا دو سارا کوڈ درست ہے:

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

String کا نوعیت شامل کچھ دیگر کارکتر کی لسانیات بھی ہیں، Java، C اور Perl کے مصنفین کو اس پر بہت پیارا ہوگا。

ایسا کارکتر کی لسانیات ECMAScript کی لسانیات میں دی گئی ہیں:

قابل کچلنا مفہوم
\n نئی لائن
\t توجیہ گاہ
\b خالی جگہ
\r بائیں چرچا
\f پیشان چرچا
\\\ بائیں کی ناودان
\' ایک دائرے میں بند
\" دو دائرے میں بند
\0nnn آٹو کوڈ nnn مظہر کا کارکتر (ن 0 سے 7 تک کا آٹو کا اعداد و شمار ہے)
\xnn چودہویں کوڈ nn مظہر کا کارکتر (ن 0 سے F تک کا ایک چودہویں اعداد و شمار ہے)
\unnnn چودہویں کوڈ nnnn مظہر کا اورینک کارکتر (ن 0 سے F تک کا ایک چودہویں اعداد و شمار ہے)