اعداد JavaScript

JavaScript فقط یک نوع اعداد دارد.

در نوشتن اعداد می‌توان یا بدون نقطه یا با نقطه نوشت.

JavaScript شماره‌ای

نوشتن数值‌های JavaScript می‌تواند با نقطه و بدون نقطه باشد:

مثال

var x = 3.14;    // عدد با نقطه
var y = 3;       // عدد بدون نقطه

آزمایش کنید

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

مثال

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

آزمایش کنید

数值های JavaScript همیشه عدد اعشاری 64 بیت هستند

برخلاف بسیاری از زبان‌های برنامه‌نویسی دیگر، JavaScript نوع‌های مختلفی از اعداد را تعریف نمی‌کند، مانند اعداد صحیح، کوتاه، بلند، اعشاری و غیره.

数值های JavaScript همیشه به عنوان عدد اعشاری دوگانه ذخیره می‌شوند، بر اساس استاندارد بین‌المللی IEEE 754.

این فرمت با 64 بیت ذخیره می‌شود، که 0 تا 51 شامل اعداد (قطعات) و 52 تا 62 شامل اعتبار و 63 بیت شامل نشان است:

مقدار(به عنوان Fraction/Mantissa) اعتبار نشان
52 bits(0 - 51) 11 bits (52 - 62) 1 bit (63)

دقت

اعداد صحیح (بدون استفاده از اعداد اعشاری یا نماتیک) به 15 رقم دقیق خواهند بود.

مثال

var x = 999999999999999;   // x خواهد بود 999999999999999
var y = 9999999999999999;  // y خواهد بود 10000000000000000

آزمایش کنید

بزرگترین عدد اعشاری 17 رقم است، اما حساب اعشاری همیشه 100% دقیق نیست:

مثال

var x = 0.2 + 0.1;         // x خواهد بود 0.30000000000000004

آزمایش کنید

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

مثال

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x خواهد بود 0.3

آزمایش کنید

جمع عدد و رشته

اخطار !!

جمع و پیوند JavaScript از علامت + استفاده می‌کنند.

اعداد با جمع استفاده می‌شوند. رشته‌ها با پیوند.

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

مثال

var x = 10;
var y = 20;
var z = x + y;           // z خواهد بود 30 (یک عدد)

آزمایش کنید

اگر به دو رشته اضافه کنید، نتیجه پیوند رشته‌ای خواهد بود:

مثال

var x = "10";
var y = "20";
var z = x + y;           // z شامل 1020 (رشته) خواهد بود

آزمایش کنید

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

مثال

var x = 10;
var y = "20";
var z = x + y;           // z خواهد بود 1020 (یک رشته)

آزمایش کنید

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

مثال

var x = "10";
var y = 20;
var z = x + y;           // z شامل 1020 (رشته) خواهد بود

آزمایش کنید

یک خطای رایج این است که فکر می‌کنند نتیجه باید 30 باشد:

مثال

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

آزمایش کنید

یک خطای رایج این است که فکر می‌کنند نتیجه باید 102030 باشد:

مثال

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

آزمایش کنید

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

چون x و y هر دو عدد هستند، 10 + 20 جمع خواهند شد.

چون z یک رشته است، 30 + "30" پیوستگی داده می‌شود.

رشته عددی

رشته‌های JavaScript می‌توانند حاوی محتوای عددی باشند:

var x = 100;         // x یک عدد است
var y = "100";       // y یک رشته است

در همه عملیات عددی، JavaScript سعی می‌کند رشته‌ها را به اعداد تبدیل کند:

این مثال به این صورت اجرا می‌شود:

var x = "100";
var y = "10";
var z = x / y;       // z خواهد بود 10

آزمایش کنید

این مثال نیز به این صورت اجرا می‌شود:

var x = "100";
var y = "10";
var z = x * y;       // z خواهد بود 1000

آزمایش کنید

این مثال به این صورت اجرا می‌شود:

var x = "100";
var y = "10";
var z = x - y;      // z خواهد بود 90

آزمایش کنید

اما این مثال مانند مثال بالا اجرا نخواهد شد:

var x = "100";
var y = "10";
var z = x + y;       // z شامل 110 نخواهد بود (بلکه 10010 خواهد بود)

آزمایش کنید

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

NaN - غیر عدد

NaN از کلمات نگه‌داری شده JavaScript است و نشان‌دهنده این است که یک عدد قانونی نیست.

با استفاده از یک رشته غیر عددی برای تقسیم، NaN (Not a Number) به دست می‌آید:

مثال

var x = 100 / "Apple";  // x خواهد بود NaN (Not a Number)

آزمایش کنید

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

مثال

var x = 100 / "10";     // x خواهد بود 10

آزمایش کنید

شما می‌توانید از تابع جهانی JavaScript استفاده کنید isNaN() برای تعیین اینکه یک مقدار آیا عدد است یا خیر:

مثال

var x = 100 / "Apple";
isNaN(x);               // بازمی‌گردد به true، زیرا x عدد نیست

آزمایش کنید

در محاسبات ریاضی باید دقت کنید NaN. NaN، پس نتیجه نیز NaN:

مثال

var x = NaN;
var y = 5;
var z = x + y;         // z خواهد بود NaN

آزمایش کنید

نتیجه شاید به صورت چسبیده باشد:

مثال

var x = NaN;
var y = "5";
var z = x + y;         // z خواهد بود NaN5

آزمایش کنید

NaN است عدد،typeof NaN بازمی‌گردد number:

مثال

typeof NaN;             // بازمی‌گردد به "number"

آزمایش کنید

Infinity

Infinity یا -Infinity)) بازمی‌گردد به مقدار عددی که جاوااسکریپت در محاسبات عددی هنگامی که از محدوده ممکن خارج می‌شود، بازمی‌گرداند.

مثال

var myNumber = 2;
while (myNumber != Infinity) {          // تا زمانی که Infinity باشد، اجرا می‌شود
    myNumber = myNumber * myNumber;
}

آزمایش کنید

تقسیم بر صفر (0) نیز می‌تواند Infinity:

مثال

var x =  2 / 0;          // x خواهد بود Infinity
var y = -2 / 0;          // y خواهد بود -Infinity

آزمایش کنید

Infinity است عدد:typeOf Infinity بازمی‌گردد number

مثال

typeof Infinity;        // بازمی‌گردد به "number"

آزمایش کنید

شانزده‌سانی

جاوااسکریپت اعداد با پیشوند 0x اعداد متغیرهای عددی به عنوان شانزده‌سانی تفسیر می‌شوند.

مثال

var x = 0xFF;             // x خواهد بود 255.

آزمایش کنید

هرگز اعداد را با پیشوند صفر بنویسید (مثلاً 07).

برخی از نسخه‌های جاوااسکریپت اعداد با پیشوند صفر را به عنوان اعداد هشتی تفسیر می‌کنند.

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

اما شما می‌توانید از toString() این روش اعداد را به صورت شانزده‌سانی، هشتی یا دودویی نمایش می‌دهد.

مثال

var myNumber = 128;
myNumber.toString(16);     // بازمی‌گردد به 80
myNumber.toString(8);      // بازمی‌گردد به 200
myNumber.toString(2);      // بازمی‌گردد به 10000000

آزمایش کنید

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

معمولاً جاوااسکریپت اعداد را به صورت مقادیر اولیه با استفاده از کلمات عادی ایجاد می‌کند: var x = 123

اما همچنین می‌توان از کلمات کلیدی استفاده کرد new تعریف شده به عنوان اشیاء: var y = new Number(123)

مثال

var x = 123;
var y = new Number(123);
// typeof x به number برمی‌گردد
// typeof y به object برمی‌گردد

آزمایش کنید

لطفاً اشیاء عددی ایجاد نکنید. این کار سرعت اجرا را کاهش می‌دهد.

new کلمات کلیدی باعث پیچیدگی کد می‌شوند و نتایج غیرقابل پیش‌بینی ایجاد می‌کنند:

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

مثال

var x = 500;             
var y = new Number(500);
// (x == y) به true است زیرا x و y دارای ارزش یکسان هستند

آزمایش کنید

وقتی که از === پس از استفاده از عملگر برابر، اعداد برابر به غیر برابر تبدیل می‌شوند زیرا: === پالس‌ها نیاز به نوع و مقدار یکسان دارند.

مثال

var x = 500;             
var y = new Number(500);
// (x === y) به false است زیرا نوع x و y متفاوت است

آزمایش کنید

حتی بدتر. اشیاء قابل مقایسه نیستند:

مثال

var x = new Number(500);             
var y = new Number(500);
// (x == y) به false است زیرا اشیاء قابل مقایسه نیستند

آزمایش کنید

اشیاء JavaScript قابل مقایسه نیستند.