اعداد

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مثال های جاوا اسکریپت
مرجع جاوا اسکریپت

جاوا اسکریپت فقط یک نوع از اعداد را می‌شناسد. اعداد می‌توانند به صورت اعشاری یا بدون اعشار نوشته شوند. [۱]

مثال

1 var x = 3.14; // A number with decimals
2 var y = 3; // A number without decimals


مشاهدهٔ نتیجه


اعداد بسیار بزرگ یا بسیار کوچک را می‌توان به صورت عدد علمی نوشت:

مثال

1 var x = 123e5;    // 12300000
2 var y = 123e-5;   // 0.00123


مشاهدهٔ نتیجه


تمامی اعداد در جاوا اسکریپت همیشه از نوع ۶۴ بیت اعشاری هستند

برخلاف سایر زبان‌های برنامه‌نویسی، جاوا اسکریپت انواع مختلفی از اعداد همانند integer , Short , long , floating-point و… را برای خود تعریف نکرده‌است.

اعداد در جاوا اسکریپت تحت استاندارد IEEE754 و با دقت اعداد اعشاری بالا ذخیره می‌شوند.

در این نوع از ذخیره‌سازی اعداد در ۶۴ بیت ذخیره می‌گردند، جایی که اعداد (کسر) در بیت ۰ تا ۵۱ ذخیره می‌شود، توان عدد از بیت ۵۲ ام تا ۶۲ بیت و علامت، در بیت ۶۳ ام ذخیره می‌گردد.

مقدار یا به عبارتی عدد اصلی توان علامت
۵۲ بیت (از ۰ تا ۵۱) ۱۱ بیت (از ۵۲ تا ۶۲) یک بیت (بیت ۶۳)

دقت اعداد در جاوا اسکریپت

اعداد صحیح (عددهای بدون اعشار یا کسری) تا ۱۵ رقم قابل محاسبه هستند.

مثال

1 var x = 999999999999999;   // x will be 999999999999999
2 var y = 9999999999999999;  // y will be 10000000000000000


مشاهدهٔ نتیجه


بیشترین دقت اعشاری که پشتیبانی می‌شود ۱۷ رقم است، اما دقت این اعداد اعشاری همیشه %۱۰۰ نیست:

مثال

var x = 0.2 + 0.1;         // x will be 0.30000000000000004


مشاهدهٔ نتیجه


برای حل مشکل بالا بهتر است که از ضرب و تقسیم استفاده کنید:

مثال

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3


مشاهدهٔ نتیجه


جمع بستن اعداد و رشته های متنی

هشدار !!!

جاوا اسکریپت از عملگر + هم برای جمع کردن و هم برای چسباندن رشته‌ها استفاده می‌کند.

اعداد با یکدیگر جمع می‌شوند. رشته‌ها به یکدیگر می‌چسبند.

اگر شما دو عدد را با یکدیگر جمع ببندید، نتیجه نیز یک عدد خواهد بود:

مثال

1 var x = 10;
2 var y = 20;
3 var z = x + y;           // z will be 30 (a number)


مشاهدهٔ نتیجه


اگر شما دو رشتهٔ متنی را با یکدیگر جمع ببندید، در نتیجه رشته‌ها یکدیگر چسبیده می‌شوند:

مثال

1 var x = "10";
2 var y = "20";
3 var z = x + y;           // z will be 1020 (a string)


مشاهدهٔ نتیجه


اگر شما یک عدد را با یک رشتهٔ متنی جمع ببندید، نتیجه یک مجموعه از رشته‌ها خواهد بود:

مثال

1 var x = 10;
2 var y = "20";
3 var z = x + y;           // z will be 1020 (a string)


مشاهدهٔ نتیجه


اگر شما یک رشتهٔ متنی و یک عدد را با یکدیگر جمع ببندید، نتیجه یک مجموعه از رشته‌ها خواهد بود:

مثال

1 var x = "10";
2 var y = 20;
3 var z = x + y;           // z will be 1020 (a string)


مشاهدهٔ نتیجه


یک اشتباه که ممکن است رخ دهد این است که فکر کنید نتیجه تکه کد زیر برابر با ۳۰ می‌شود:

مثال

1 var x = 10;
2 var y = 20;
3 var z = "The result is: " + x + y;


مشاهدهٔ نتیجه


یک اشتباه که ممکن است رخ دهد این است که فکر کنید نتیجه تکه کد زیر برابر با ۱۰۲۰۳۰ می‌شود:

مثال

1 var x = 10;
2 var y = 20;
3 var z = "30";
4 var result = x + y + z;


مشاهدهٔ نتیجه

مفسر جاوا اسکریپت از سمت چپ به راست کار می‌کند.

ابتدا ۲۰ + ۱۰ با یکدیگر جمع می‌شود زیرا هر دو یعنی x و y، عدد هستند.

سپس عبارت " ۳۰ " + ۳۰ به یکدیگر می‌چسبند زیرا که z یک متغیر از نوع رشته‌ای است.

عددهای متنی یا رشته ای

رشته‌های متنی در جاوا اسکریپت می‌توانند محتوای عددی داشته باشند:

1 var x = 100;         // x is a number
2 
3 var y = "100";       // y is a string

جاوا اسکریپت در تمامی عملگرهای عددی رشته‌های متنی را به عدد تبدیل می‌کند: کد زیر کار خواهد کرد:

1 var x = "100";
2 var y = "10";
3 var z = x / y;       // z will be 10


مشاهدهٔ نتیجه


کد زیر هم همانند کل بالا کار خواهد کرد:

1 var x = "100";
2 var y = "10";
3 var z = x * y;       // z will be 1000


مشاهدهٔ نتیجه


و کد زیر هم کار خواهد کرد:

1 var x = "100";
2 var y = "10";
3 var z = x - y;       // z will be 90


مشاهدهٔ نتیجه


اما کد زیر کار نخواهد کرد:

1 var x = "100";
2 var y = "10";
3 var z = x + y;       // z will not be 110 (It will be 10010)


مشاهدهٔ نتیجه


در آخرین مثال، جاوا اسکریپت از عملگر + برای چسباندن رشته‌های متنی به یکدیگر استفاده می‌کند.

کلمهٔ کلیدی NaN – عدد نباشد

NaN یک کلمهٔ کلیدی است که مشخص می‌کند یک عدد مطابق با قوانین داده‌های عددی در جاوا اسکریپت همخوانی ندارد.

زمانی که سعی می‌کنید عملیات‌های ریاضی را با رشته‌های متنی غیر عددی انجام دهید نتیجهٔ عبارت NaN (یک عدد نیست) خواهد بود:

مثال

var x = 100 / "Apple";  // x will be NaN (Not a Number)


مشاهدهٔ نتیجه


اما در صورتی که یک رشتهٔ متنی شامل مقادیر عددی شود، نتیجه یک عدد خواهدبود:

مثال

var x = 100 / "10";     // x will be 10


مشاهدهٔ نتیجه


شما می‌توانید از تابع isNaN() که یک تابع global است استفاده کنید تا از عدد بودن یک مقدار یا عدد نبودن آن اطلاع پیدا کنید:

مثال

1 var x = 100 / "Apple";
2 isNaN(x);               // returns true because x is Not a Number


مشاهدهٔ نتیجه


به NaN نگاه کنید. اگر شما از کلمهٔ NaN در یک عملیات ریاضی استفاده کنید، نتیجه نیز برابر با عبارت NaN خواهد بود:

مثال

1 var x = NaN;
2 var y = 5;
3 var z = x + y;         // z will be NaN


مشاهدهٔ نتیجه


و یا نتیجه یک رشتهٔ متنی به هم چسبیده خواهد بود:

مثال

1 var x = NaN;
2 var y = "5";
3 var z = x + y;         // z will be NaN5


مشاهدهٔ نتیجه


کلمهٔ کلیدی NaN از نوع عددی است: اگر نوع این کلمه را با کد typeof NaN بررسی کنیم خروجی نوع عددی خواهد بود:

مثال

typeof NaN;            // returns "number"


مشاهدهٔ نتیجه


بی نهایت

مقدار Infinity یا بی‌نهایت (یا منفی بی‌نهایت -Infinity) مقداری است که جاوا اسکریپت زمانی که شما محاسبه‌ای انجام دهید که حاصل آن از بزرگترین عدد ممکن بیشتر باشد.

مثال

1 var myNumber = 2;
2 while (myNumber != Infinity) {   // Execute until Infinity
3   myNumber = myNumber * myNumber;
4 }


مشاهدهٔ نتیجه


تقسیم بر صفر نیز موجب بروز Infinity می‌شود:

مثال

1 var x =  2 / 0;       // x will be Infinity
2 var y = -2 / 0;       // y will be -Infinity


مشاهدهٔ نتیجه


مقدار Infinity یک عدد است، اگر برای این مقدار از عملگر typeof Infinity استفاده کنید مقدار بازگشتی عملگر typeof، نوع عددی (number) خواهد بود.

مثال

typeof Infinity;     // returns "number"


مشاهدهٔ نتیجه


عددهای هگزادسیمال (مبنای ۱۶)

مفسر جاوا اسکریپت اگر عددی با 0x شروع شود آن را به عنوان عدد هگزادسیمال (مبنای ۱۶) در نظر می‌گیرد.

مثال

var x = 0xFF;        // x will be 255


مشاهدهٔ نتیجه

هیچ وقت عددی را با صفر شروع نکنید. (همانند ۰۷).

برخی از نسخه‌های (به انگلیسی: versions) مفسر جاوا اسکریپت، اگر یک عدد با صفر شروع شود آن را در مبنای ۸ (octal) در نظر می‌گیرند.

به صورت پیشفرض، جاوا اسکریپت اعداد را بر مبنای ۱۰ نمایش می‌دهد.

اما شما می‌توانید از متد toString() برای چاپ اعداد مبنای ۲ تا مبنای ۳۶ استفاده کنید.

اعداد هگزادسیمال مبنای ۱۶ هستند. اعداد دسیمال مبنای ۱۰ هستند. اعداد اکتال (به انگلیسی: Octal) مبنای ۸ هستند. اعداد باینری نیز مبنای ۲ هستند.

مثال

1 var myNumber = 32;
2 myNumber.toString(10);  // returns 32
3 myNumber.toString(32);  // returns 10
4 myNumber.toString(16);  // returns 20
5 myNumber.toString(8);   // returns 40
6 myNumber.toString(2);   // returns 100000


مشاهدهٔ نتیجه


اعداد می توانند اشیاء باشند

به صورت عادی اعداد در جاوا اسکریپت اعدادی از نوع primitve (به فارسی: اصلی) هستند که از عبارت‌های ساده تشکیل می‌شوند:

var x = 123;

اما اعداد را نیز می‌توان با استفاده از کلمهٔ کلیدیبه صورت یک شیء تعریف کرد:

var y = new Number(123);

مثال

1 var x = 123;
2 var y = new Number(123);
3 
4 // typeof x returns number
5 // typeof y returns object


مشاهدهٔ نتیجه

اعداد را به صورت اشیاء تعریف نکنید. این امر موجب کند شدن اجرای کد می‌شود.

کلمهٔ کلیدی new موجب پیچیده شدن کد شما می‌شود. این امر می‌تواند موجب بروز خطاهای ناخواسته شود:

زمانی که از عملگر == استفاده می‌کنید، اعداد برابر با یکدیگر برابرند:

مثال

1 var x = 500;             
2 var y = new Number(500);
3 
4 // (x == y) is true because x and y have equal values


مشاهدهٔ نتیجه


زمانی که از === استفاده می‌کنید، اعداد برابر، با یکدیگر برابر نیستند، زیرا عملگر === عملوندهای خود را از نظر برابری مقدار و نوع بررسی می‌کند.

مثال

1 var x = 500;             
2 var y = new Number(500);
3 
4 // (x === y) is false because x and y have different types


مشاهدهٔ نتیجه


و یا حتی نتیجه می‌تواند بدتر باشد. اشیاء را نمی‌توان مقایسه کرد:

مثال

1 var x = new Number(500);             
2 var y = new Number(500);
3 
4 // (x == y) is false because objects cannot be compared


مشاهدهٔ نتیجه


به تفاوت بین (x==y) و (x===y) توجه کنید.

مقایسه کردن دو شیء در جاوا اسکریپت همیشه باعث می‌شود که مقدار false بازگردانده شود.


منابع آموزشی