
تاریخچه JavaScript
آیا تاریخچه جاوااسکریپت رو میدونید؟ اینکه جاوا اسکریپت (به انگلیسی: Javascript) از کجا آمده و چجوری به اینجا رسیده؟ و اینکه چرا اسمش شبیه زبان برنامه نویسی جاواست؟
(اگر تفاوت جاوا و جاوا اسکریپت رو نمیدونی حتما این مطلب رو بخون: تفاوت جاوا و جاوااسکریپت)
فهرست مطالب:
موکا
سال 1995 (سال 1374خودمان، در حالی که من در کلاس سوم ابتدایی مشغول یاد گرفتن جدول ضرب بودم) یک برنامه نویس آمریکایی به نام برندان آیک (به انگلیسی: Brendan Eich) که در شرکت نت اسکیپ Netscape فعالیت میکرد، یک زبان برنامه نویسی اسکریپتی به نام Mocha طراحی کرد.
موکا یک نوع نوشیدنی خوشمزه است که با قهوه دم کرده و پودر کاکائو درست میشود.

زبان موکا به این دلیل طراحی شده که میخواستند امکانات جدیدی را به دنیای وب اضافه کنند.
مثلا تا آن موقع صفحات وب نسبت به رویدادهای مختلف (مثل کلیک کردن و کشیدن و یا حرکت موس) نمی توانستند واکنش نشان بدهند و همینجوری صاف توی چشمهای کاربر زل می زدند و کار خاصی از دستشان بر نمی آمد.
تا قبل از جاوااسکریپت، تمام صفحات وب فقط از متن و تصویر ثابت تشکیل شده بود. و در وب خبری از افکت و انیمیشن و بازخورد نبود.
طراحی قدیم سایت شرکت اپل طراحی قدیمی سایت AOL سایت قدیم شرکت آمازون بدون جاوااسکریپت
به همین دلیل به یک زبان ساده روی بستر وب نیاز بود که پیچیدگی زیادی نداشته باشد و بتواند یک تکانی به دنیای وب بدهد و مدیریت رفتارها و رویدادهای وب را پیاده سازی کند.
بعد از مدتی، شرکت نت اسکیپ، نام زبان موکا را تغییر داد. و نام جدید آن را لایواسکریپت (به انگلیسی: LiveScript) گذاشت.
این اولین فصل از تاریخچه جاوااسکریپت بود: پیدایش!
چرا برای جاوا و جاوا اسکریپت از اسامی مشابه استفاده شده ؟
در همین زمان، شرکت سان مایکروسیستمز که مالک زبان جاوا بود، و از موفقیت جاوا در پلتفرم های مختلف خیلی خوش به حالش شده بود، این نیاز را احساس کرد که زبان جاوا باید در دنیای وب هم ورود پیدا کند.
اما زبان جاوا برای اجرا شدن روی مرورگرهای اینترنتی بسیار سنگین و بزرگ بود. مرورگرهای اینترنتی که آن جوری اصلا نمی توانستند و زیر پلتفرمشان درد می گرفت، نتوانستند بستر خوبی برای اجرای جاوا باشند.
به همین دلیل پس از توافق نت اسکیپ و سان مایکروسیستمز، قرار شد نام زبان لایو اسکریپت به جاوا اسکریپت Javascript تغییر پیداکند.

این توافق تجاری باعث شد که سهم هر دو شرکت سان مایکروسیستمز و نت اسکیپ از بازار افزایش پیداکند. در حقیقت این کار یک حربه تجاری در مقابل رقبای جاوا و جاوااسکریپت بود.
مگر رقیب جاوا و جاوااسکریپت که بود؟
مایکروسافت!
مایکروسافت عادت دارد که از محصولات موفق دیگران یک نسخه مشابه بسازد. و البته چه کسی است که نداند این محصولات مایکروسافت چقدر موفق بوده اند!
همزمان با این رویدادها، مایکروسافت نیز یک نسخه از جاوا اسکریپت را برداشته و سعی میکرد آن را با استانداردهای خودش ارائه دهد.
مایکروسافت نام این زبان را جی اسکریپت (به انگلیسی: Jscript) گذاشت (که اصلا هم به جاوااسکریپت شباهت ندارد!). و برای اولین بار در مرورگر محبوب و حرفه ای اینترنت اکسپلورر 3 از آن استفاده کرد.
خیلی از مردم فکر می کنند که جی اسکریپت و جاوااسکریپت زبانهای متفاوت اما مشابه هستند. در صورتی که این دو، فقط دو نام برای یک زبان برنامه نویسی هستند. دلیل این امر تمایل مایکروسافت به تملک و مایکروسافتی کردنِ همه چیز است.
هرچند مایکروسافت این حقیقت را قبول ندارد و چندین دلیل برای تفاوت جی اسکریپت و جاوااسکریپت می تراشد. (اینجا را ببینید)
نسخه استاندارد جاوااسکریپت
نت اسکیپ بعدها در سال 1997 زبان جاوااسکریپت را به سازمان ecma international ارائه داد تا تبدیل به یک زبان استاندارد شود. این زبان استاندارد، ECMAScript نام گرفت.
از این قسمت به بعد، تاریخچه جاوااسکریپت دچار تغییر و تحول هایی شد و پیچیدگی هایی نیز به آن افزوده شد. (این تغییرات و پیچیدگی ها را بعداً در مطالب مربوط به خودش برایتان توضیح خواهم داد)
در لیست زیر، نسخه های استداندارد اکما اسکریپت را به صورت خلاصه مشاهده می کنید:
نسخه | نام رسمی | توضیحات |
1 | ECMAScript 1 (1997) | اولین نسخه استاندارد جاوااسکریپت |
2 | ECMAScript 2 (1998) | تغییرات اندک |
3 | ECMAScript 3 (1999) | اضافه شدن عبارات با قاعده (به انگلیسی: regular expressions) اضافه شدن بلوک های مدیریت سعی و خطا (try , catch) |
4 | ECMAScript 4 | این نسخه هیچوقت عرضه نشد! |
5 | ECMAScript 5 (2009) | اضافه شدن strict mode اضافه شدن پشتیبانی از JSON اضافه شدن متد String.trim() اضافه شدن متد Array.isArray() اضافه شدن متدهای پیمایش در آرایه ها(Iterator ها) |
5.1 | ECMAScript 5.1 (2011) | تغییرات اندک |
6 | ECMAScript 2015 | اضافه شدن let و const اضافه شدن مقادیر پیشفرض برای پارامترها اضافه شدن متد Array.find() اضافه شدن متد Array.findIndex() |
7 | ECMAScript 2016 | اضافه شدن اپراتور (**) که عدد قبل از خودش را به توان عدد بعد میرساند اضافه شدن Array.prototype.includes |
8 | ECMAScript 2017 | اضافه شدن String padding اضافه شدن object properties جدید اضافه شدن فانکشن های Async اضافه شدن حافظه مشترک |
9 | ECMAScript 2018 | اضافه شدن پراپرتی های rest / spread اضافه شدن پیمایشگر Async اضافه شدن متد Promise.finally() بروزرسانی و توسعه عبارات با قاعده |