جاوااسکریپت (به انگلیسی: JavaScript، /ˈdʒɑːvəˌskrɪpt/) با کوتهنوشت JS، نوعی زبان برنامهنویسی است که با ویژگیهای ارائه شده در مشخصات اکما اسکریپت مطابق است.
جاوااسکریپت نوعی زبان سطح بالا، کامپایل درجا و چندالگویی است. جاوااسکریپت نحو آکولادی دارد، نوعدهی آن پویا است، نوع شیءگرایاش بر پایه پیشنمونه است و دارای توابع کلاس اول است.
پارادایم برنامهنویسی | رویدادمحور، تابعی، دستوری |
---|---|
طراحی شده توسط | در ابتدا برندان آیک، سپس مشارکت کنندههای کلیدی دیگری در مشخصات اکما اسکریپت اضافه شدند. |
ظهوریافته در | ۴ دسامبر ۱۹۹۵ |
انتشار پایدار | |
انتشار آزمایشی | |
پویا، کمزور، اردکی | |
سیستمعامل | مرورگرهای وب |
| |
وبگاه | |
پیادهسازیهای بزرگ | |
وی۸, JavaScriptCore , SpiderMonkey, Chakra | |
متأثر از | |
AWK, سی، HyperTalk, جاوا، لوآ، پرل، اسکیم، سلف | |
تأثیر گذاشته بر | |
تایپاسکریپت، کافیاسکریپت، AssemblyScript, اکشناسکریپت، دارت، Objective-J, اوپا، Haxe | |
پسوند(های) نام پرونده | .js |
---|---|
نوع رسانهٔ اینترنتی |
|
شناسانه نوع یکسان | 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) هم به این محیط نیازمند است (مانند تگ