بیایید ببینیم که در جاوااسکریپت چهچیزهای ویژهای وجود دارد، چهچیزهایی میتوانیم با آن بسازیم و با سایر تکنولوژیها آشنا شویم.
جاوااسکریپت چیست؟
جاوااسکریپت در ابتدا برای زنده کردن صفحات وب ایجاد شده است. به برنامه های این زبان اسکریپت گفته میشود. میتوان آنها را درست در HTML یک صفحه وب نوشت و با بارگیری صفحه به طور خودکار اجرا میشوند. اسکریپتها به صورت متن ساده ارائه و اجرا می شوند. آنها برای اجرا به کامپایلر احتیاج ندارند.
از این جنبه، جاوااسکریپت با زبان دیگری به نام جاوا بسیار متفاوت است.
چرا به آن جاوااسکریپت میگویند؟
وقتی جاوااسکریپت ساخته شد، در ابتدا نام آن لایواسکریپت (LiveScript) بود. اما جاوا در آن زمان بسیار محبوب بود، بنابراین تصمیم گرفته شد که قرار دادن یک زبان جدید به عنوان برادر کوچکتر جاوا کمک کند.
اما با تکامل، جاوااسکریپت به زبانی کاملاً مستقل با مشخصات خاص خود به نام ECMAScript تبدیل شد و اکنون هیچ ارتباطی با جاوا ندارد.
امروزه جاوااسکریپت میتواند نه تنها در مرورگر، بلکه در سرور یا در هر دستگاهی که برنامه خاصی به نام موتور جاوااسکریپت (JavaScript engine) دارد نیز اجرا شود.
این مرورگر دارای یک موتور جاسازی شده است که گاهی اوقات ماشین مجازی جاوااسکریپت (JavaScript virtual machine) نامیده می شود.
خوب است که نام های بالا را به خاطر بسپارید زیرا در مقاله های توسعه دهندگان در اینترنت استفاده می شود. ما نیز از آنها استفاده خواهیم کرد. به عنوان مثال، اگر ویژگی X توسط V8 پشتیبانی می شود، احتمالاً در Chrome و Opera کار می کند.
موتورها چگونه کار می کنند؟
موتورها پیچیده هستند. اما اصول ساده است.
موتور (تعبیه شده در مرورگر) اسکریپت ها را می خواند (تجزیه می کند)
سپس اسکریپت را به زبان ماشین تبدیل می کند (کامپایل می کند)
و سپس کد ماشین (machine)، خیلی سریع اجرا می شود
موتور در هر مرحله از فرآیند بهینه سازی را اعمال می کند. حتی اسکریپت کامپایل شده را هنگام اجرا تماشا (watches) می کند، داده هایی را که از آن می گذرد تجزیه و تحلیل (analyzes) می کند و کد ماشین (machine code) را بر اساس این دانش بیشتر بهینه می کند.
جاوااسکریپت درون مرورگر چه کاری می تواند انجام دهد؟
جاوااسکریپت مدرن یک زبان برنامه نویسی ایمن است. دسترسی کم سطح به RAM یا CPU را فراهم نمی کند، زیرا در ابتدا برای مرورگرهایی ایجاد شده است که نیازی به آن ندارند.
قابلیت های جاوااسکریپت تا حد زیادی به محیطی که در آن در حال اجرا است بستگی دارد. به عنوان مثال، Node.js از توابع پشتیبانی می کند که به جاوااسکریپت امکان خواندن/نوشتن فایلهای دلخواه، انجام درخواست های شبکه و غیره را می دهد.
جاوااسکریپت درون مرورگر می تواند تمام کارهایی را که مربوط به دستکاری صفحه وب، تعامل با کاربر و سرور وب است انجام دهد.
به عنوان مثال، جاوااسکریپت درون مرورگر قادر است:
تگ های HTML جدیدی به صفحه اضافه کنید، محتوای موجود و همچنین style ها را تغییر دهید.
به اقدامات کاربر واکنش نشان دهید، با کلیک ماوس، حرکات pointer، فشار دادن کلیدها اجرا کنید.
درخواست ها را از طریق شبکه به سرورهای از راه دور ارسال کنید، فایل ها را دانلود و آپلود کنید (اصطلاحاً فناوری های AJAX و COMET)
کوکی ها را دریافت و تنظیم کنید، از بازدید کننده (visitor) سوالاتی بپرسید، پیام ها را نشان دهید.
داده ها را در سمت کلاینت (local storage) بخاطر بسپارید.
جاوااسکریپت چه کاری نمی تواند در مرورگر انجام دهد؟
توانایی های جاوااسکریپت در مرورگر به دلیل امنیت کاربر محدود است. هدف این است که از دسترسی یک صفحه وب بد به اطلاعات خصوصی یا آسیب رساندن به داده های کاربر جلوگیری کند.
نمونه هایی از این محدودیت ها عبارتند از:
جاوااسکریپت در یک صفحه وب نمی تواند فایل های دلخواه را روی هارد دیسک بخواند/بنویسد، آنها را کپی یا برنامه ها را اجرا کند. دسترسی مستقیمی به عملکردهای سیستم عامل ندارد.
مرورگرهای مدرن اجازه کار با فایلها را می دهند، اما دسترسی محدود است و فقط درصورتیکه کاربر اقدامات خاصی مانند دراپ کردن فایل ها در مرورگر یا انتخاب آن از طریق تگ <input> را انجام دهد، دسترسی محدود است.
روش هایی برای تعامل با دوربین/میکروفون و سایر دستگاه ها وجود دارد، اما آنها به مجوز صریح (explicit permission) کاربر نیاز دارند. بنابراین یک صفحه فعال شده با جاوااسکریپت ممکن است به زبانی دوربین وب را فعال نکرده، محیط اطراف را رصد کرده و اطلاعات را به NSA ارسال کند.
تب ها/window های مختلف به طور کلی از یکدیگر اطلاع ندارند. بعضی اوقات این کار را می کنند، به عنوان مثال وقتی یک پنجره از جاوااسکریپت برای باز کردن پنجره دیگر استفاده می کند. اما حتی در این حالت، جاوااسکریپت از یک صفحه ممکن است به صفحه دیگر دسترسی نداشته باشد (اگر از سایت های مختلف (از دامنه، پروتکل یا پورت دیگری) باشد.
این سیاست تک منبع (Same Origin Policy) نامیده می شود. برای حل این مسئله، هر دو صفحه باید در مورد تبادل داده توافق کنند و حاوی یک کد جاوااسکریپت خاص است که آن را مدیریت می کند. ما در آموزش به آن خواهیم پرداخت.
این محدودیت ، مجدداً برای ایمنی کاربر است. صفحه ای از http://anysite.com که یک کاربر باز کرده است نباید بتواند به یک تب مرورگر دیگر با آدرس http://gmail.com دسترسی پیدا کند و اطلاعات را از آنجا بدزدد.
جاوااسکریپت می تواند به راحتی از طریق شبکه با سروری که صفحه فعلی از آن آمده ارتباط برقرار کند. اما توانایی آن در دریافت داده از سایت ها/دامنه های دیگر فلج است. گرچه ممکن است، اما از طرف دور به توافق صریح (بیان شده در سرصفحه های HTTP) نیاز دارد. یک بار دیگر، این یک محدودیت ایمنی است.
در صورت استفاده از جاوااسکریپت در خارج از مرورگر، به عنوان مثال در سرور، چنین محدودیتی وجود ندارد. مرورگرهای مدرن همچنین به پلاگین/افزونه هایی اجازه می دهند که مجوزهای طولانی را درخواست کنند.
چه چیزی جاوااسکریپت را منحصر به فرد می کند؟
حداقل سه چیز جالب در مورد جاوااسکریپت وجود دارد:
ادغام کامل با HTML و CSS
کارهای ساده به سادگی انجام می شود.
پشتیبانی توسط همه مرورگرهای اصلی و بصورت پیش فرض فعال می شود.
جاوااسکریپت تنها فناوری مرورگری است که این سه مورد را با هم ترکیب می کند. این همان چیزی است که جاوااسکریپت را منحصر به فرد می کند. به همین دلیل گسترده ترین ابزار برای ایجاد رابط های مرورگر است. همانطور که گفته شد، جاوااسکریپت همچنین امکان ایجاد سرور، برنامه های موبایل و غیره را فراهم می کند.
زبانهای بیش از جاوااسکریپت
سینتکس جاوااسکریپت متناسب با نیازهای همه نیست. افراد مختلف ویژگی های مختلفی می خواهند. این انتظار می رود ، زیرا پروژه ها و الزامات برای همه متفاوت است.
بنابراین اخیراً انبوهی از زبانهای جدید ظاهر شده است که قبل از اجرا در مرورگر به جاوااسکریپت تبدیل می شوند.
ابزارهای مدرن transpilation را بسیار سریع و شفاف می کنند، در واقع به توسعه دهندگان این امکان را می دهد تا به زبان دیگری کد بزنند و آن را به صورت خودکار under the hood تبدیل کنند.
نمونه هایی از این زبان ها:
کافه اسکریپت (CoffeeScript) یک سینتکس شیرین برای جاوااسکریپت است. این دستور مختصر را معرفی می کند و به ما امکان می دهد کد روشن تر و دقیق تری بنویسیم. معمولاً توسعه دهندگان روبی آن را دوست دارند.
تایپ اسکریپت (TypeScript) بر ساده سازی "تایپ دقیق داده ها" متمرکز شده است تا توسعه و پشتیبانی از سیستم های پیچیده را ساده کند. توسط مایکروسافت ساخته شده است.
فلو (Flow) همچنین تایپ داده را اضافه می کند، اما به روشی متفاوت. توسعه یافته توسط فیس بوک.
دارت (Dart) یک زبان مستقل است که دارای موتور مخصوص به خود است که در محیط های غیر مرورگر (مانند برنامه های موبایل) کار می کند، اما همچنین می تواند به جاوااسکریپت منتقل شود. ساخته شده توسط گوگل.
برایتان (Brython) یک سرویس دهنده Python به جاوااسکریپت است که به شما امکان می دهد برنامه را در Python خالص و بدون جاوااسکریپت بنویسید.
تعداد بیشتری وجود دارد. البته، حتی اگر از یکی از زبانهای قابل انتقال استفاده کنیم، باید جاوااسکریپت را نیز بدانیم تا واقعاً بفهمیم چه کاری انجام می دهیم.
خلاصه
جاوااسکریپت در ابتدا به عنوان یک زبان فقط برای مرورگر ایجاد شد، اما اکنون در بسیاری از محیط های دیگر نیز از آن استفاده می شود.
امروزه جاوااسکریپت از موقعیت منحصر به فردی به عنوان گسترده ترین زبان مرورگر با یکپارچه سازی کامل در HTML و CSS برخوردار است.
زبانهای زیادی وجود دارند که به جاوااسکریپت انتقال یافته و ویژگیهای خاصی را ارائه می دهند. توصیه می شود پس از تسلط بر جاوااسکریپت، حداقل به طور خلاصه نگاهی به آنها بیندازید.