جاوااسکریپت چیست؟
جاوااسکریپت چه زبانی است؟ چه ویژگیهای مهمی دارد و چه تکنولوژیهای دیگری با آن سر و کار دارند؟
جاوااسکریپت زبانی بود که برای جان بخشیدن به صفحات وب ایجاد شد.
به برنامههایی که با این زبان نوشته میشوند «اسکریپت (Script)» گفته میشود. این اسکریپتها به راحتی داخل فایلهای html نوشته میشوند و با باز شدن آن فایل در مرورگر، به صورت خودکار اجرا میشوند.
اسکریپت در قالب متنی ساده نوشته شده و اجرا میشود، و نیاز نیست کار خاصی انجام دهید که قابلیت اجرا پیدا کند.
جاوااسکریپت همان جاوا نیست! جاوااسکریپت با زبان دیگری که «جاوا» نامیده میشود بسیار تفاوت دارد.
چرا جاوا اسکریپت؟
ابتدا که جاوااسکریپت به وجود آمد اسم دیگری داشت (live script).
در آن زمان زبان جاوا خیلی معروف بود، و سازندهی جاوااسکریپت هم تا حدودی از زبان جاوا ایده گرفته بود و بنابراین زبان خودش را جاوااسکریپت نامید. ولی پس از مدّت کوتاهی که خصوصیّات جاوااسکریپت به عنوان یک استاندارد معرّفی شد نام رسمیاش به «Ecma Script» تغییر پیدا کرد، اگرچه نام «جاوااسکریپت» همچنان به عنوان نام تجاری این زبان باقی ماندهاست.
امروزه زبان جاوااسکریپت به شدّت تحوّل پیدا کرده است و زبانی کاملاً مستقل است که هیچ ربطی به زبان جاوا ندارد.
امروزه نه تنها روی مرورگر، بلکه روی سرور یا حتّی هر دستگاهی میتوان جاوااسکریپت را اجرا کرد. به ابزارهایی که در این محیطها اسکریپتها را اجرا میکنند «موتور جاوااسکریپت» گفته میشود.
تمام مرورگرها در درون خود یک موتور جاوااسکریپت دارند.
هر کدام از این موتورهای جاوااسکریپت دارای اسم خاص خودشان هستند:
- V8– موتور جاوااسکریپت مرورگر Chrome و Opera
- Spider Monkey– موتور جاوااسکریپت مرورگر Firefox
- Trident و Chakra موتورهای جاوااسکریپت نسخههای مختلف اینترنتاکسپلورر هستند. موتورهای Nitro و SquirrelFish نیز متعلّق به مرورگر Safari هستند. علاوه بر اینها موتورهای دیگری هم وجود دارند که مشهور نیستند.
از آن جایی که در مقالات و آموزشهای مختلف به اسم این موتورها بر میخورید، خوب است که آنها را حفظ کنید. حتّی خود ما هم در آینده از این اسمها استفاده خواهیم کرد. مثلاً وقتی میگوییم «فلان قابلیت در موتور V8 وجود دارد»، پس شما متوجّه میشوید که در مرورگر Chrome و Opera میتوانید از آن قابلیت استفاده کنید.
موتورهای جاوااسکریپت چگونه کار میکنند؟
روند کار این موتورها خیلی پیچیده است، ولی درک کلّی عملکرد آن ساده است.
- موتور جاوااسکریپت، اسکریپت را میخواند (اصطلاحاً میگوییم «تجزیه (Parse)» میکند).
- سپس اسکریپت را به زبان ماشین تبدیل میکند (اصطلاحاً میگوییم «کامپایل» میکند). زبان ماشین، زبانی است که کامپیوتر آن را میفهمد.
- سپس کد ماشین خیلی سریع اجرا میشود.
موتور جاوااسکریپت در هر کدام از این مراحل کدها را بهینهسازی میکند، حتّی موقع اجرای کد ماشین نیز روند اجرای آن را تحت نظر میگیرد، تحلیل میکند و…
چه کارهایی را میشود با جاوااسکریپت در مرورگر انجام داد؟
جاوااسکریپت یک زبان برنامهنویسی بیخطر است و نمیتواند به CPU یا حافظهی RAM دسترسی سطح پایین (low-level) داشته باشد (یعنی نمیتواند مستقیماً با آنها کار کند). چون در اصل این زبان برای مرورگرها ساخته شده که نیازی به این کار ندارند.
قابلیّتهای جاوااسکریپت به شدّت به محیطی که اسکریپت را اجرا میکند بستگی دارد. مثلاً Node.js به جاوااسکریپت امکان میدهد تا کارهایی مثل خواندن و نوشتن فایلها روی هارد دیسک و… را نیز انجام دهد.
از این به بعد به کد جاوااسکریپتی که قرار است توسّط یک مرورگر اجرا شود، «جاوااسکریپت مرورگری» میگوییم.
جاوااسکریپت مرورگری میتواند هر کاری را که در زمینهی دستکاری صفحهی وب، تعامل با کاربر و سرور باشد انجام دهد.
مثلاً جاوااسکریپت مرورگری میتواند:
- کد HTML جدید به صفحه اضافه کند، محتوای صفحه را تغییر دهد، استایلها را دستکاری کند.
- به عکسالعملهای کاربر واکنش نشان دهد، مثل کلیک موس، فشردن کلیدها، جابجا شدن اشارهگر موس.
- به سرور درخواست ارسال کند، فایلها را دانلود و آپلود کند (اصطلاحا به این قابلیّتها AJAX و COMET گفته میشود).
- کوکیها را اضافه یا حذف کند، از کاربر اطّلاعات بگیرد، پیغام نمایش دهد.
- اطّلاعاتی را در سمت کلاینت ذخیرهسازی کند.
چه کارهایی را نمیشود با جاوااسکریپت مرورگری انجام داد؟
مرورگرها برای حفظ ایمنی کاربران محدودیّتهایی را در جاوااسکریپت مرورگری اعمال میکنند. هدف از این محدودیتها جلوگیری از دسترسی یک صفحهی وبِ مخرّب به اطّلاعات خصوصی کاربر و جلوگیری از صدمه دیدن اطّلاعات توسّط آن صفحه است.
نمونههایی از این محدودیتها:
۱. جاوااسکریپت مرورگری نمیتواند فایلهای هارد دیسک را بخواند، تغییر دهد، کپی کند یا برنامهای را اجرا کند. به صورت کلّی جاوااسکریپت مرورگری هیچگونه دسترسی مستقیم به سیستم کاربر ندارد.
البته در شرایطی میتوان به فایلهایی از روی هارد دیسک دسترسی داشت، و آن هم موقعی است که کاربر فایلی را در پنجرهی مرورگر دراپ میکند یا اینکه فایل را توسّط یک تگ <input type="file">
انتخاب میکند.
جاوااسکریپت مرورگری میتواند به میکروفون یا دوربین کاربر یا… دسترسی پیدا کند، ولی فقط به شرطی که کاربر صراحتا اجازهی این کار را بدهد. بنابراین خیالتان راحت باشد از بابت اینکه یک صفحهی وب را باز کردهاید و میترسید جاسوسی کند و فیلم شما و محیط اطرافتان را بگیرد و برای NSA و سازمان سیا بفرستد!
۲. پنجرهها و تبهای مختلف مرورگر از یکدیگر خبری ندارند. مگر اینکه از جاوااسکریپت برای باز کردن پنجرهای دیگر استفاده کرده باشید. البته در این صورت نیز اگر سایتی که در پنجرهی جدید باز شده است، سایتی غیر از سایت فعلی باشد باز هم دسترسی وجود نخواهد داشت، که برای دور زدن آن لازم است که در هر دو صفحه کدهای جاوااسکریپت خاصی وجود داشته باشند که تبادل اطّلاعات را انجام دهند.
دلیل این محدودیت نیز برای حفظ امنیت است، مثلا اگر سایت folan-site.com در یک پنجره و سایت gmail.com در پنجرهی دیگر باز باشد، folan-site.com نتواند اطّلاعات جیمیل شما را سرقت کند.
۳. جاوااسکریپتِ مرورگری به راحتی میتواند از طریق اینترنت با سروری که این صفحهی وب متعلّق به آن است ارتباط داشته باشد، ولی نمیتواند با سایر سایتها ارتباط داشه باشد، مگر این که آن سایتهای دیگر موافقت خودشان را اعلام کنند.
در سایر محیطها (غیر از مرورگر) چنین محدودیّتهایی وجود ندارد. مثلا اگر کد جاوااسکریپت خود را در سمت سرور اجرا میکنید از شرّ این محدودیتها خلاص میشوید. ضمنا مرورگرهای جدید هم به شما امکان نصب پلاگینها و افزونههایی میدهند که میتواند این محدودیتها را دور بزند.
چه چیزی جاوااسکریپت را منحصر به فرد کرده است؟
جاوااسکریپت کاملاً با HTML و CSS هماهنگ و یکپارچه است و همچنین در تمام مرورگرهای اصلی پشتیبانی میشود و به صورت پیشفرض فعّال است.
این ویژگیها فقط در جاوااسکریپت وجود دارد و هیچ زبان و تکنولوژی دیگری اینگونه نیست.
زبانهایی فراتر از جاوااسکریپت
ساختار زبان جاوااسکریپت نیازهای همهی افراد را جوابگو نیست. افراد مختلف قابلیّتهای گوناگونی را میخواهند.
بنابراین زبانهای زیادی پدیدار شدند که قبل از اینکه در مرورگر اجرا شوند به جاوااسکریپت تبدیل میشوند (اصطلاحاً میگوییم transpile میشوند).
ابزارهای جدیدی برای این موضوع به وجود آمدهاست که عمل transpile را بسیار سریع انجام میدهند. این ابزارها به برنامهنویس اجازه میدهند که با یک زبان برنامهنویسی دیگر کدنویسی کند و در همین حین به صورت خودکار این کدها را تبدیل میکنند.
چند نمونه از این زبانها:
CofeeScript: زبانی است که هدفش سادهتر نوشتن جاوااسکریپت است که کمک میکند کدهای تمیزتر و خلاصهتری بنویسید. برنامهنویسان Ruby معمولاً این زبان را دوست دارند.
TypeScript: همان جاوااسکریپت است که strict type است و امکانات اضافهتری نیز دارد (در آینده متوجّه خواهید شد این به چه معناست!). تایپاسکریپت برای پیادهسازی سیستمهای پیچیده و سادهسازی روند کار خیلی مفید است. این زبان را مایکروسافت به وجود آورده است.
Flow: این زبان نیز همان جاوااسکریپت strict type است، مثل تایپ اسکریپت، البته با تفاوتهایی. این زبان را فیسبوک به وجود آورده است.
Dart: زبانی مستقل است که در محیطهایی غیر از مرورگر (مثل اپلیکیشنهای موبایل) به کار میرود. گوگل در ابتدا این زبان را به عنوان جایگزینی برای جاوااسکریپت ارائه داد. ولی تاکنون این زبان هم برای اجرا در مرورگرها باید به جاوااسکریپت transpile شود، دقیقاً مثل زبانهای قبلی.
غیر از این موارد زبانهای دیگری نیز وجود دارند که به جاوااسکریپت transpile میشوند. البته اگر بخواهید به جای جاوااسکریپت با این زبانها کار کنید، باید قبل از آن جاوااسکریپت را به خوبی یاد داشته باشید تا دقیقاً بفهمید دارید چه کاری انجام میدهید.
خلاصه
جاوااسکریپت در ابتدا به عنوان زبانی ارائه شد که قرار بود فقط در مرورگرها کار کند، ولی امروزه در سایر محیطها نیز به وفور استفاده میشود.
در حال حاضر جاوااسکریپت دارای جایگاه منحصر به فردی است، زیرا تنها زبانی است که مرورگرها به صورت گسترده آن را پذیرفته اند و کاملاً با HTML و CSS هماهنگ و یکپارچه است.
زبانهای زیادی وجود دارند که به جاوااسکریپت transpile میشوند و قابلیّتهای مختلفی را عرضه میکنند. توصیه میکنیم بعد از اینکه خوب به جاوااسکریپت تسلّط پیدا کردید به این زبانها نیز نگاهی هرچند مختصر داشته باشید.