اعداد
جاوا اسکریپت فقط یک نوع از اعداد را میشناسد. اعداد میتوانند به صورت اعشاری یا بدون اعشار نوشته شوند. [۱]
مثال
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
بازگردانده شود.
منابع آموزشی