درس 18 از 24

ASCII چیست؟ آموزش charCodeAt() و fromCharCode() در جاوااسکریپت + مثال

بخش: کار با رشته در جاوااسکریپت

در برنامه‌نویسی، درک این موضوع که کاراکترها چگونه به‌صورت عدد نمایش داده می‌شوند، یک مفهوم بنیادی است. اینجاست که ASCII وارد می‌شود. ASCII که مخفف American Standard Code for Information Interchange است، یک استاندارد کدگذاری کاراکترهاست که در رایانه‌ها برای نمایش متن استفاده می‌شود. این استاندارد به هر کاراکتر یک مقدار عددی اختصاص می‌دهد که برای ماشین‌ها به‌طور عمومی قابل تشخیص است.

در این درس، بررسی خواهیم کرد که ASCII چیست، چگونه کار می‌کند، و متدهای جاوااسکریپت مثل charCodeAt() و fromCharCode() چه ارتباطی با کدگذاری کاراکترها دارند. با اینکه رشته‌ها در جاوااسکریپت به‌صورت داخلی از Unicode (UTF-16) استفاده می‌کنند، مقادیر ASCII با ۱۲۸ کاراکتر اول Unicode یکسان هستند، و به همین دلیل مثال‌های مبتنی بر ASCII در جاوااسکریپت درست کار می‌کنند.

ASCII سیستمی برای کدگذاری کاراکترهایی مانند حروف، ارقام، و نمادها به مقادیر عددی است. هر کاراکتر به یک عدد مشخص نگاشت می‌شود.

برای مثال، حرف بزرگ A در ASCII با عدد 65 نمایش داده می‌شود، در حالی که حرف کوچک a با 97 نمایش داده می‌شود. این کدگذاری به رایانه‌ها اجازه می‌دهد متن را ذخیره و دستکاری کنند.

استاندارد ASCII شامل ۱۲۸ کاراکتر است، از جمله:

  • حروف بزرگ و کوچک انگلیسی (A-Z, a-z)
  • اعداد (0-9)
  • علائم نگارشی و نمادهای رایج (!, @, # و غیره)
  • کاراکترهای کنترلی (مانند رفتن به خط بعد و تب)

در جاوااسکریپت، می‌توانید با استفاده از متد charCodeAt() به کد عددی یک کاراکتر دسترسی پیدا کنید. این متد کد یونیت UTF-16 کاراکتر را در یک ایندکس مشخص برمی‌گرداند. برای ۱۲۸ کاراکتر اول، این مقدار با کد ASCII یکسان است.

بیایید یک مثال را ببینیم:

let letter = "A";
console.log(letter.charCodeAt(0));  // 65
65

در این مثال، A اولین کاراکتر رشته است، و فراخوانی charCodeAt(0) کد عددی آن را برمی‌گرداند (که برای کاراکترهای پایه‌ی لاتین با مقدار ASCII آن برابر است)، یعنی 65.

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

let symbol = "!";
console.log(symbol.charCodeAt(0));  // 33
33

در اینجا، کد عددی علامت تعجب ! برابر 33 برگردانده می‌شود (که با مقدار ASCII آن مطابقت دارد).

در حالی که charCodeAt() به شما کمک می‌کند کد عددی یک کاراکتر را به دست بیاورید، متد fromCharCode() به شما امکان می‌دهد برعکس این کار را انجام دهید: یعنی یک کد یونیت UTF-16 را (که برای کاراکترهای پایه با ASCII یکسان است) به کاراکتر متناظر آن تبدیل کنید.

بیایید این را در عمل ببینیم:

let char = String.fromCharCode(65);
console.log(char);  //  A
"A"

در این مثال، fromCharCode(65) کد عددی 65 را (که با مقدار ASCII حرف A برابر است) دوباره به کاراکتر A تبدیل می‌کند.

یک مثال دیگر، تبدیل عدد 97 به حرف کوچک متناظر آن است:

let char = String.fromCharCode(97);
console.log(char);  // a
"a"

این متدها مخصوصاً زمانی مفید هستند که لازم باشد کاراکترها را بر اساس مقادیر عددی آن‌ها دستکاری یا مقایسه کنید.

برای مثال، ممکن است از charCodeAt() استفاده کنید تا با مقایسه‌ی مقدار ASCII یک کاراکتر، بررسی کنید که آیا آن کاراکتر یک حرف بزرگ، حرف کوچک، یا یک رقم است.

از طرف دیگر، fromCharCode() می‌تواند برای تولید پویا‌ی کاراکترها از روی کدهای ASCII آن‌ها استفاده شود.


سوالات

متد charCodeAt() وقتی روی یک رشته در جاوااسکریپت استفاده می‌شود چه چیزی را برمی‌گرداند؟

  • تعداد کاراکترهای رشته
  • ایندکس یک کاراکتر در رشته
  • کد یونیت UTF-16 یک کاراکتر در یک ایندکس مشخص
  • نمایش هگزادسیمال یک کاراکتر

خروجی کد زیر چه خواهد بود؟

console.log(String.fromCharCode(66));
  • B
  • b
  • 6
  • A

کدام‌یک از موارد زیر نمونه‌ای از مفید بودن کدگذاری کاراکترها در برنامه‌نویسی است؟

  • بررسی اینکه یک مقدار null یا undefined است یا نه
  • محاسبه طول یک رشته
  • تبدیل یک عدد به یک مقدار اعشاری
  • دستکاری کاراکترها بر اساس مقادیر عددی آن‌ها