جاوااسکریپت: زبان برنامه‌نویسی سطح بالا

جاوااسکریپت (به انگلیسی: JavaScript، ‎/ˈdʒɑːvəˌskrɪpt/‎) با کوته‌نوشت JS، نوعی زبان برنامه‌نویسی است که با ویژگی‌های ارائه شده در مشخصات اکما اسکریپت مطابق است.

جاوااسکریپت نوعی زبان سطح بالا، کامپایل درجا و چندالگویی است. جاوااسکریپت نحو آکولادی دارد، نوع‌دهی آن پویا است، نوع شیءگرا‌ی‌اش بر پایه پیش‌نمونه است و دارای توابع کلاس اول است.

جاوااسکریپت
پارادایم برنامه‌نویسیرویدادمحور، تابعی، دستوری
طراحی شده توسطدر ابتدا برندان آیک، سپس مشارکت کننده‌های کلیدی دیگری در مشخصات اکما اسکریپت اضافه شدند.
ظهوریافته در۴ دسامبر ۱۹۹۵؛ ۲۸ سال پیش (۱۹۹۵-04}})
انتشار پایدار
ECMAScript 2023 ویرایش در ویکی‌داده
ژوئن ۲۰۲۳؛ ۱۰ ماه پیش (ژوئن ۲۰۲۳-خطا: زمان نامعتبر}})
انتشار آزمایشی
ECMAScript 2025 ویرایش در ویکی‌داده
۲۷ مارس ۲۰۲۴؛ ۳۲ روز پیش (۲۷ مارس ۲۰۲۴-خطا: زمان نامعتبر}})
پویا، کم‌زور، اردکی
سیستم‌عاملمرورگرهای وب
  • .js
  • .cjs
  • .mjs
وبگاه
پیاده‌سازی‌های بزرگ
وی۸, JavaScriptCore , SpiderMonkey, Chakra
متأثر از
AWK, سی، HyperTalk, جاوا، لوآ، پرل، اسکیم، سلف
تأثیر گذاشته بر
تایپ‌اسکریپت، کافی‌اسکریپت، AssemblyScript, اکشن‌اسکریپت، دارت، Objective-J, اوپا، Haxe

جاوااسکریپت: تاریخچه, امکانات زبانی, فریم‌ورک‌های مبتنی بر جاوااسکریپت JavaScript در ویکی‌کتاب (انگلیسی)
جاوا اسکریپت (قالب پرونده)
پسوند(های) نام پرونده
.js
نوع رسانهٔ اینترنتی
  • application/javascript
  • text/javascript (obsolete)
شناسانه نوع یکسان
com.netscape.javascript-source
گونهزبان اجرانامه‌نویسی
این مقاله قسمتی از

سری جاوااسکریپت است.

جاوااسکریپت
نحو جاوااسکریپت
جاوااسکریپت
جاوااسکریپت: تاریخچه, امکانات زبانی, فریم‌ورک‌های مبتنی بر جاوااسکریپت
لوگوی غیررسمی جاوااسکریپت

در کنار HTML و CSS، جاوااسکریپت یکی از فن‌آوری‌های هسته‌ای وب جهان‌گستر است.

علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، دلیل این نام‌گذاری محبوبیت زبان جاوا در هنگام تولد جاوااسکریپت بود؛ اگر چه ساختار این زبان به سی پلاس پلاس (++C) و سی شارپ (C#) شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شده‌است. از همین رو دستورهای متداول مانند if, for, try..catch, while و … در این زبان هم یافت می‌گردند.

این زبان می‌تواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته می‌شوند، برخلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی می‌تواند به عنوان نمونه‌ای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.

به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم، مناسب است.

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

تاریخچه

جاوااسکریپت را در ابتدا شخصی به نام برندان آیک در شرکت نت‌اسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت. اولین نمونه‌های جاوااسکریپت در اواخر دهه ۱۹۹۰ برای مرورگر وب Netscape Navigator ایجاد شد.

اولین نسخه جاوااسکریپت در نسخه B32.0 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نامگذاری منجر به سردرگمی‌های زیادی شده و این ابهام را ایجاد می‌کند که جاوااسکریپت با جاوا مرتبط است در حالی که اینطور نیست.

عدهٔ زیادی این کار را ترفند تجاری برای به‌دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه‌نویسی تحت وب بود می‌دانند.

javaScript به صورت «جاواسکریپت» خوانده می‌شود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه می‌شود و اگر به صورت «جاوااسکریپت» ترجمه شود اشتباه است چون دوکلمه جدا ازهم نیست و اگر به صورت دو کلمه جدا نوشته شود خطاهای نگارشی ایجاد می‌شود، به‌طور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.

علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شده‌است.

در آن زمان، صفحات وب ایستا بودند و تعامل کمی با کاربر، فراتر از کلیک کردن روی پیوندها و بارگیری صفحات جدید، ایجاد می‌کردند. برای اولین بار، جاوااسکریپت انیمیشن، محتوای تطبیقی و اعتبار سنجی فرم را در صفحه فعال کرده‌است.

برای سالهای طولانی، جاوااسکریپت فقط در تعداد محدودی از مرورگرها کار می‌کرد. مایکروسافت اینترنت اکسپلورر، بزرگ‌ترین پایگاه مرورگر، خیلی زود از جاوااسکریپت پشتیبانی نکرد. در عوض، مایکروسافت اسکریپت اختصاصی سمت مشتری خود را با نام JScript ایجاد کرد. در روزهای ابتدایی توسعهٔ وب، برنامه‌نویسان که مایل به ایجاد وب‌سایت‌های پویا بودند، اغلب مجبور به انتخاب یک خانواده مرورگر از خانوادهٔ دیگر شدند. این کمتر از ایدئال بود زیرا اینترنت را کمتر در دسترس جهانی قرار می‌داد.

جاوااسکریپت تا سال ۱۹۹۹ استاندارد نشده و به‌طور گسترده هم پذیرفته نشد. حتی پس از استانداردسازی، سازگاری مرورگر برای بیش از یک دهه همچنان مسئله ساز بود.

به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش اسکریپت‌نویسی سمت کاربر (Client Side Scripting Language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوت‌های این دو زبان به حدی جزئی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار می‌روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد اکما مطرح می‌کند.

نت‌اسکیپ جاوااسکریپت را به سازمان اکما اینترنشنال برای استانداردسازی ارسال کرده‌است و نتیجه نسخهٔ استاندارد شده‌ای به نام اکما اسکریپت است.

جاوااسکریپت به یکی از زبان‌های برنامه‌نویسی پرطرفدار در وب تبدیل شده‌است. هر چند ابتدا بسیاری از برنامه‌نویسان حرفه‌ای زبان را کم ارزش تلقی می‌کردند چون مخاطبان آن نویسندگان صفحات وب و آماتورهای این چنینی بودند. ظهور ایجکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه‌نویسان حرفه‌ای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانه‌های جامعی در این زمینه، بهبود شیوه‌های رایج برنامه‌نویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.

امکانات زبانی

این زبان برنامه‌نویسی دارای کلمات کلیدی مرسومی است که بنا به گفته‌های شرکت سازنده در زیر قید شده‌اند.

کلمات کلیدی

جاوااسکریپت شامل ۶۴ کلمهٔ کلیدی است.

abstract arguments await boolean
break byte case catch
char class const continue
debugger default delete do
double else enum eval
export extends false final
finally float for function
goto if implements import
in instanceof int interface
let long native new
null package private protected
public return short static
super switch synchronized this
throw throws transient true
try typeof var void
volatile while with yield

فریم‌ورک‌های مبتنی بر جاوااسکریپت

فریم‌ورک‌ها و کتابخانه‌های زیادی برای این زبان توسعه یافته‌است، مانند کتابخانه‌های جی‌کوئری، ری اکت، ویو جی‌اس و فریم‌ورک انگولار جی‌اس.

تعداد فریمورک‌ها و کتابخانه‌های این زبان تا سال ۲۰۲۲ میلادی حدود ۲٬۰۰۰٬۰۰۰ عدد اعلام شده‌است.

زبان امری و ساخت یافته

جاوااسکریپت از تمامی نحو ساختاری زبان سی پشتیبانی می‌کند. مانند گزاره (if و switch و حلقه‌های while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکان‌پذیر می‌سازد. مانند زبان C در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.

پویایی

تایپ دهی پویا: مانند اکثر زبان‌های نویسه‌ای تایپ به مقدارها منسوب می‌گردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راه‌های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد (در ES6 از const استفاده می‌شود).

تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف به‌شمار می‌آید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود (عدد را با رشته جمع کرده‌است).

اشیاء به دید آرایه‌های انتسابی: جاوااسکریپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایه‌های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و در واقع obj.x = ۱۰ با obj[“x”] = ۱۰ هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگی‌ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می‌توان روی ویژگیهای یک شی با ساختار for … in پیمایش کرد.

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

تابعی بودن

تابعی بودن: توابع موجوداتی «درجه اول» محسوب می‌شوند، یعنی خود یک شی هستند بنابراین می‌توانند ویژگی داشته باشند، در آرگومانهای تابع‌ها داده شوند و مانند هر شی دیگری با آن‌ها رفتار شود

توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد می‌شوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.

ساختار شماتیک» محوری

ساختار شماتیک: جاوااسکریپت به جای رده‌ها برای تعریف ویژگی‌های اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده می‌کند (پیش‌نمونه). امکان شبیه‌سازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکان‌پذیر است.

    توابع در نقش سازندهٔ اشیاء

برای توابع علاوه بر نقش عادی، به عنوان سازنده اشیاء هم عمل می‌کنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا می‌کند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص می‌کند.

توابع در نقش متد: برخلاف بیشتر زبان‌های شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده می‌شود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی می‌شود.

امکانات دیگر

جاوااسکریپت برای تأمین اشیاء و متدها که با آن‌ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه‌ها (include) هم به این محیط نیازمند است (مانند تگ