آموزش اعداد در جاوا اسکریپت
بررسی نوعهای عددی
جاوا اسکریپت تنها یک نوعِ عددی دارد.
اعداد میتوانند با یا بدونِ اعشار نوشته شوند.
اعداد بسیار بزرگ یا بسیار کوچک میتوانند با نماد علمی(توان) نوشته شوند:
اعداد در جاوا اسکریپت، اعدادِ 64 بیتِ ممیز شناور هستند
برخلاف بسیاری از دیگر زبانهای برنامه نویسی، جاوا اسکریپت نوعهای عددیِ مختلف مانند integer و short و long و floating-point را تعریف نمیکند.
اعداد جاوا اسکریپت، همواره به صورت اعداد ممیز شناور با دقت دوبرابر(دقت دوگانه) بر اساس استاندارد بینالمللی IEEE 754، ذخیره میشوند.
این فرمت، اعداد را در 64 بیت ذخیره میکند به طوری که عدد (کسر) در بیتهای 0 تا 51 ذخیره میشود و توان در بیتهای 52 تا 62 و علامت در بیت 63 ذخیره میشود.
| علامت | توان | مقدار |
|---|---|---|
| 1 بیت(63) | 11 بیت(52 - 62) | 52 بیت (0 - 51) |
اکثر زبانهای برنامه نویسی نوعهایِ عددیِ زیادی دارند:
اعداد صحیح(integer):
byte (8-bit), short (16-bit), int (32-bit), long (64-bit)
اعداد حقیقی(Real یا ممیز شناور):
float (32-bit), double (64-bit)
اعداد جاوا اسکریپت همواره به صورت double(ممیز شناورِ 64 بیت) هستند.
دقتِ اعداد صحیح(Integer Precision)
دقت اعداد صحیح(یعنی اعدادی که نقطه یا همان ممیز اعشاری، یا توان ندارند) تا 15 رقم میباشد.
مثال شماره 3
let x = 999999999999999; // x will be 999999999999999
let y = 9999999999999999; // y will be 10000000000000000
امتحان کنیدحداکثر تعداد اعشار 17 رقم میباشد.
دقت ممیز شناور(Floating Precision)
مثال شماره 5
برای حل مشکل بالا، می توانیم اعداد را در 10 ضرب کنیم و به صورت زیر بر 10 تقسیم کنیم:
let x = (0.2 * 10 + 0.1 * 10) / 10;
امتحان کنیدجمع کردن اعداد و رشتهها
هشدار!!
جاوا اسکریپت از عملگر + هم برای جمع کردن اعداد و هم برای الحاق رشتهها استفاده میکند.
اعداد با هم جمع میشوند. اما رشته ها به یکدیگر الحاق میشوند.
اگر دو عدد را با هم جمع کنیم، نتیجه یک عدد خواهد بود:
اگر دو رشته را با هم جمع کنیم، نتیجه این میشود که آنها به هم ملحق میشوند:
اگر ما یک عدد و یک رشته را با هم جمع کنیم، نتیجه یک رشته خواهد بود و با هم الحاق خواهند شد:
اگر یک رشته و یک عدد را با هم جمع کنیم، نتیجه یک رشته خواهد بود و آنها با هم الحاق میشوند:
یک اشتباه متداول در جاوا اسکریپت این است که فکر کنیم نتیجه ی کد زیر، برابر با 30 خواهد شد:
یک اشتباه متداول این است که فکر کنیم نتیجه ی کد زیر برابر با 102030 خواهد بود:
مفسر جاوا اسکریپت از چپ به راست کار میکند.
ابتدا جمعِ 10 + 20 انجام میشود، زیرا x و y هردو، عدد هستند.
سپس الحاق 30 + "30" انجام میشود، زیرا z یک رشته است.
رشتههای عددی در جاوا اسکریپت
رشتههای جاوا اسکریپت میتوانند حاوی محتوای عددی باشند:
let x = 100; // یک عدد است x
let y = "100"; // یک رشته است y
جاوا اسکریپت سعی میکند در تمام عملیاتهای عددی، رشتهها را به عدد تبدیل کند، به مثال های زیر توجه کنید:
این مثال به درستی کار میکند:
این مثال نیز به درستی کار میکند:
این مثال نیز به درستی کار می کند:
اما مثال زیر کار نمی کند:
در مثال بالا، جاوا اسکریپت از عملگر + برای الحاق رشته ها استفاده کرده است.
بررسی مقدار NaN مخفف Not a Number(عدد نیست)
NaN یک کلمهی رزرو شده در جاوا اسکریپت است که مشخص می کند که یک عدد، درحقیقت یک عدد قانونی نمیباشد.
اگر سعی کنیم با استفاده از یک رشتهی غیرِعددی، محاسباتی را انجام دهیم، نتیجه یک مقدار NaN خواهد بود(یعنی نتیجه یک عدد نخواهد بود):
اما اگر رشته ی مورد نظر، عددی باشد(یعنی یک عدد بین علامت های نقل قول باشد) نتیجهی تقسیم یک عدد خواهد بود:
ما میتوانیم لز تابع سراسری isNaN() برای فهمیدن اینکه آیا یک مقدار، یک عدد نیست(is not a number) استفاده کنیم:
مراقب NaN باشید. اگر شما از NaN در یک عملیات ریاضی استفاده کنید، نتیجه نیز NaN خواهد بود:
یا اینکه نتیجه ممکن است یک الحاق به صورت NaN5 باشد:
NaN یک عدد(number) است: زیرا دستور typeof NaN مقدار number را برمیگرداند:
بینهایت یا Infinity در جاوا اسکریپت
اگر در یک محاسبه یک عدد داشته باشیم که از بزرگترین عددِ امکان پذیر، بزرگتر باشد، جاوا اسکریپت مقدار Infinity (یا -Infinity) را برمیگرداند.
مثال شماره 22
let myNumber = 2;
// اجرا تا بی نهایت
while (myNumber != Infinity) {
myNumber = myNumber * myNumber;
}
امتحان کنیدتقسیم بر 0 نیز باعث ایجاد شدن Infinity میشود:
مقدار Infinity یک عدد است: زیرا دستور typeof Infinity مقدار number را برمی گرداند:
مقادیر هگزادسیمال در جاوا اسکریپت(اعداد در مبنای 16)
اگر ثابت های عددی با مقدار 0x شروع شوند، جاوا اسکریپت آنها را بعنوان مقادیر هگزادسیمال در نظر میگیرد.
هرگز در جلوی یک عدد، یک 0 را قرار ندهید(مانند 07).
اگر در جلوی یک عدد، یک 0 قرار داده شود، زیرا برخی از نسخههای جاوا اسکریپت آن را بعنوان یک عدد اُکتال(مبنای 8) در نظر می گیرند.
جاوا اسکریپت به طور پیش فرض، اعداد را در مبنای 10 (دهدهی یا دسیمال) نشان میدهد.
اما ما میتوانیم با استفاده از متد toString() اعداد را از مبنای 2 تا مبنای 36 بعنوان خروجی تبدیل کنیم.
هگزادسیمال مبنای 16 است. دسیمال یا اعشاری در مبنای 10 است. اُکتال در مبنای 8 است. باینری در مبنای 2 است.
مثال شماره 26
let myNumber = 32;
myNumber.toString(32);
myNumber.toString(16);
myNumber.toString(12);
myNumber.toString(10);
myNumber.toString(8);
myNumber.toString(2);
امتحان کنیداعداد جاوا اسکریپت بعنوان آبجکت ها
به طور معمول، اعدادِ جاوا اسکریپت، یک سری مقادیرِ اولیه محسوب می شوند که از لیترالها(literals) ایجاد شده اند:
let x = 123;
اما اعداد همچنین می توانند با استفاده از کلمهی کلیدی new به صورت آبجکتها تعریف شوند:
let y = new Number(123);
آبجکتهای Number را ایجاد نکنید.
کلمهی کلیدی new کدها را پیچیدهتر میکند و سرعت اجرا را کُند می کند.
آبجکتهای Number میتوانند نتایج غیرمنتظره ایجاد کنند:
مثال شماره 28
وقتی که از عملگر == استفاده می کنیم، x و y برابر هستند:
let x = 500;
let y = new Number(500);
امتحان کنیدمثال شماره 29
وقتی که از عملگر === استفاده می کنیم، x و y برابر نیستند:
let x = 500;
let y = new Number(500);
امتحان کنیدبه تفاوت بین (x==y) و (x===y) توجه کنید.
مثال شماره 30
ارزش (x == y) برابر با true است یا false?
let x = new Number(500);
let y = new Number(500);
امتحان کنیدمثال شماره 31
ارزش (x == y) برابر با true است یا false?
let x = new Number(500);
let y = new Number(500);
امتحان کنیدمقایسهی دو آبجکت جاوا اسکریپت همواره مقدار false را برمی گرداند.
منبع: www.w3schools.com/js
- بازدید: 43
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.