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

از ویکی کد
پرش به ناوبری پرش به جستجو
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

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

مثال

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

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

مثال

1 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 (یک عدد نیست) خواهد بود:

مثال

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

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

مثال

1 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 بررسی کنیم خروجی نوع عددی خواهد بود:

مثال

1 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 ) خواهد بود.

مثال

1 typeof Infinity;     // returns "number"


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

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

مثال

1 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 (به فارسی: اصلی) هستند که از عبارت‌های ساده تشکیل می‌شوند:

1 var x = 123;

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

1 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 بازگردانده شود.

منابع آموزشی