برای پاسخ به این سوال، باید کمی درباره نحوهی تفسیر اعداد در جاوا اسکریپت و همچنین تبدیل رشتهها به اعداد بدانیم.
0x
شروع میشوند و از ارقام 0
تا 9
و حروف A
تا F
تشکیل شدهاند. هر رقم هگزادسیمال معادل ۴ بیت (نیم بایت) است.Number()
را روی یک رشته فراخوانی میکنیم، جاوا اسکریپت سعی میکند آن رشته را به یک عدد تبدیل کند. اگر رشته با یک عدد معتبر شروع شود، بقیهی کاراکترها نادیده گرفته میشوند و عدد معادل آن برگردانده میشود.Number("0x11")
:0x
متوجه میشود که رشتهی ورودی به صورت هگزادسیمال نمایش داده شده است.0x1
برابر با عدد دهدهی 1
است.0x10
برابر با عدد دهدهی 16
است.0x11
برابر است با:1 * 16^1 + 1 * 16^0 = 16 + 1 = 17
برای درک بهتر، بیایید به سیستم اعداد هگزادسیمال و دهدهی نگاهی بیندازیم:
تبدیل از هگزادسیمال به دهدهی:
برای تبدیل یک عدد هگزادسیمال به دهدهی، هر رقم هگزادسیمال را به توانی از 16 میرسانیم و سپس نتایج را با هم جمع میکنیم. توان هر رقم، برابر با مکان آن رقم در عدد هگزادسیمال از راست به چپ است (شروع از صفر).
مثال: 0x10
حالا نتایج را با هم جمع میکنیم: 1 * 1 + 16 * 1 = 17
بنابراین، عدد هگزادسیمال 0x10
برابر است با عدد دهدهی 17
.
خلاصه:
1
است.16
است.
نتیجهگیری:
بنابراین، وقتی عبارت Number("0x11")
را در جاوا اسکریپت اجرا میکنیم، جاوا اسکریپت رشتهی "0x11"
را به عنوان یک عدد هگزادسیمال تفسیر میکند و آن را به عدد دهدهی معادل یعنی 17
تبدیل میکند.
نکات مهم:
Number()
مقدار NaN
(Not a Number) را برمیگرداند.parseInt()
استفاده کرد و پایه عددی مورد نظر را به عنوان آرگومان دوم به آن پاس داد.مثالها:
console.log(Number("0b101")); // خروجی: 5 (تبدیل از باینری به دهدهی) console.log(parseInt("101", 2)); // خروجی: 5 (تبدیل از باینری به دهدهی) console.log(Number("0o13")); // خروجی: 11 (تبدیل از اکتال به دهدهی)