اعداد (numbers) در JS

نوع داده اعداد یا numbers در JS شامل اعداد اعشار و بدون اعشار (اعداد صحیح) است.

let x = 2.5;
let y = 25;
document.getElementById("test").innerHTML = x + "<br>" + y;

نکته: برخلاف سایر زبان های برنامه نویسی در JS  نوع داده اعشاری با نوع داده اعداد صحیح در یک دسته numbers هستند.

نکته: به اعداد صحیح، integer یا int هم گفته می شود.

نکته: به اعداد اعشاری، decimal یا floating point هم گفته می شود.

در نوع داده numbers برای ذخیره اعداد خیلی بزرگ یا کوچک می توان از نماد e استفاده کرد.

let x = 1015e5; // 101500000
document.getElementById("demo").innerHTML = x;
let x = 1015e-5; // 0.01015
document.getElementById("demo").innerHTML =  x;

نکته: نماد e مخفف exponent است.

دقت اعداد در JS

دقت اعداد صحیح و اعشاری در JS نهایتا تا 15 رقم است. در اعداد بزرگتر از 15 رقم، امکان خطا وجود دارد.

در JS اعداد اعشاری بزرگتر از 16 رقم قابل ذخیره نیستند.

let x = 999999999999999;  // 999999999999999 -> 15 رقم
let y = 9999999999999999; // 9999999999999992 -> 16 رقم

let a = 9.99999999999999; // 9.99999999999999 -> 15 رقم
let b = 9.999999999999999; // 9.999999999999998 -> 16 رقم
let c = 9.9999999999999999; // 10 -> 17 رقم

نکته: در JS، محاسبات ریاضی روی اعداد اعشاری دقیق نیست.

let x = 0.7 + 0.1;  // 0.7999999999999999
let x = ((0.7*10) + (0.1*10)) / 10;  // 0.8

رشته های عددی ( String numbers) در JS

رشته هایی که محتوای عددی دارند، اصطلاحا رشته عددی نامیده می شوند.

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

در JS برای محسابات ریاضی سعی می شود، به صورت اتوماتیک رشته های عددی به numbers تبدیل شوند.

let x = "100";
let y = "10";
        
document.getElementById("multiplication").innerHTML = x * y;   // 1000  -> صحیح
document.getElementById("division").innerHTML = x / y;  // 10  -> صحیح
document.getElementById("subtraction").innerHTML = x - y;  // 90  -> صحیح
document.getElementById("addition").innerHTML = x + y;  // 10010  -> غلط

نکته: در نمونه کد بالا در خط 7، نتیجه + اشتباه است.

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

جمع اعداد و رشته های عددی در JS

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

اگر دو عدد (numbers) را جمع کنید. خروجی، یک عدد است.

let x = 10;
let y = 20;
x + y;  // 10 + 20 = 30

اگر دو رشته (string) را جمع کنید. خروجی، یک رشته به هم پیوسته است.

let x = "10";
let y = "20";
x + y;  // "10" + "20" = "1020" 

اگر یک عدد (numbers) و یک رشته (string) را جمع کنید. خروجی، یک رشته به هم پیوسته است.

let x = "10";
let y = 20;
x + y; // "10" + 20 = "1020"
let x = 10;
let y = "20";
x + y; // 10 + "20" = "1020"
var x = 10;
var y = 20;
var z = "30";
x + y + z;  // 10 + 20 + "30" = "3030"

نکته: عملیات جمع، در JS از سمت چپ به راست محاسبه می شود.در واقع تا زمانی که numbers باشد از جمع جبری استفاده می شود. به محض برخورد با رشته جمع جبری به چسبیدن رشته ها تغییر پیدا می کند. در نمونه کد بالا 10 و 20 هر دو numbers هستند پس جمع جبری آن ها 30 می شود. و در ادامه چون به رشته 30 برخورد می کند پس نتیجه 3030 می شود.

var x = "10";
var y = 20;
var z = 30;
x + y + z;  // "10" + 20 + 30 = "102030"

نکته: در نمونه کد بالا چون اولین مقدار یک رشته است. به numbers های بعد از آن توجهی نمی شود. و تمام علامت های جمع از چسبیدن رشته ها پیروی می کند.

NaN در JS

NaN یک کلمه رزرو شده جاوا اسکریپت است که نشان می دهد مقدار عدد نیست.

NaN مخفف کلمه Not a Number است.

let x = 100 / "Ehsan";

 

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

let x = 100 / "20";

با استفاده از متد سراسری isNaN()، می توانید عددی یا غیر عددی بدون یک مقدار را بررسی کنید. مقدار برگشتی isNaN یک بولین است.

isNaN(100 / "Ehsan");

نوع داده NaN، یک numbers است.

typeof NaN;

نکته: در نوشتار NaN به بزرگی و کوچکی حروف دقت کنید.

بی نهایت (Infinity) در JS

اعداد خارج از محدوده اعداد ممکن در JS، بی نهایت (Infinity) را برمی گرداند.

محدوده numbers در JS از:

از  -1.797693134862316E+308

تا 1.797693134862315E+308

به بازه کوچک تر از آن -Infinity و بزرگ تر از آن Infinity می گویند.

let x = 1.797693134862315E+308;
let y = x * 2;
let a = 5 / 0;

نوع داده infinity، یک numbers است.

typeof Infinity;

نکته: در نوشتار Infinity به بزرگی و کوچکی حروف دقت کنید.

هگزادسیمال (Hexadecimal) در JS

جاوا اسکریپت می تواند مقادیر هگزادسیمال را دریافت کند. مقادیر هگزادسیمال بر مبنا 16 هستند.

نکته: برای تفسیر مقادیر هگزادسیمال حتما باید قبل از آن، 0x اضافه کرد.

let a = 0xdd2;

نکته: برای اطلاعات بیشتر درباره مبنا، به صفحه مبنا در ویکی پدیا مراجعه کنید.

اعداد به عنوان اشیاء در JS

اعداد JS از نوع ابتدایی (Primitives Type) هستند.

let x = 123;

اما مانند مثال زیر اعداد می توانند به عنواع شیء با کلمه ی کلیدی new نیز تعریف شوند.

let x = new Number(123);

نکته: به این دلیل که استفاده از اعداد به صورت شیء باعث کاهش سرعت اجرا و ایجاد مشکل های دیگر می شود، توصیه می شود به هیچ وجه استفاده نشود.

نکته: به هر نوع داده به غیر از Object، نوع ابتدایی یا Premitive Type گفته می شود. مانند: رشته های، اعداد و..

خلاصه درس

در این فصل با موارد زیر آشنا شدیم:

  • اعداد (numbers)
  • نماد e
  • دقت اعداد
  • رشته های عددی
  • جمع عددی و جمع غیر عددی
  • NaN در JS
  • Infinity در JS
  • Hexadecimal در JS
  • اعداد به عنوان اشیاء

توسعه دهندگان
احسان اسلامی