انصار میرزایی
انصار میرزایی
خواندن ۶ دقیقه·۳ سال پیش

مقدمه ای بر جاوا اسکریپت

اول از همه باید ببینیم چه چیزی جاوااسکریپت رو بسیار خاص کرده و چه چیزی رو باهاش به دست میاریم و چه فناوری هایی از جاوااسکریپت استفاده میکنن

جاوا اسکریپت چیه؟

جاوا اسکریپت در ابتدا برای “زنده کردن صفحات وب” ایجاد شد و ما ، به برنامه های تولید شده با این زبان اسکریپت (script)میگیم.

این اسکریپت ها رو میشه مستقیما توی HTML یک صفحه وب نوشت و با بارگذاری صفحه به طور خودکار اجرا میشن.

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

حالا چرا بهش میگن جاوااسکریپت؟ ?

زمانی که جاوا اسکریپت ایجاد شد، بهش میگفتن: "LiveScript". اما جاوا توی اون دوران خیلی محبوب بود،پس تصمیم گرفتن از لفظ "برادر کوچکتر" استفاده کنن تاکه از اسم جاوا برای معرفی خودشون کمک بگیرن.اما روز به روز که جاوا اسکریپت تکامل پیدا کرد، به یک زبان کاملاً مستقل با مشخصات خاص خودش به نام ECMAScript تبدیل شد و حالا اصلاً ارتباطی با جاوا نداره.


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

مرورگرها خودشون دارای یک موتور جاسازی شده هستن که اغلب بهشون "ماشین مجازی جاوا اسکریپت" میگیم.

موتورهای مختلف اسم های (codenames) متفاوتی دارن. مثلا:

  • اولی : V8 در کروم و اپرا و Edge
  • دومی: SpiderMonkey در فایرفاکس
  • موتورهای دیگه ای مثل «Chakra» برای اینترنت اکسپلورر، «JavaScriptCore»، «Nitro» و «SquirrelFish» برای Safari و ... وجود داره.

اصطلاحات بالا رو سعی کنید یادتون باشه چون داخل خیلی از مقاله ها استفاده می شن. ما هم استفاده خواهیم کرد . برای مثال، اگر «ویژگی X توسط V8 پشتیبانی بشه»، احتمالاً در Chrome، Opera و Edge کار می‌کنه.

موتورها چیکار میکنن؟ ?

به طور کلی موتورها ساختار پیچیده ای دارن. اما اصول اولیه اون ها ساده و قابل درکه

1 -موتور اسکریپت رو می خونه ("تجزیه می کنه").

2 - بعدش اسکریپت رو به زبان ماشین تبدیل می کنه ("کامپایل") می کنه.

3 -و در آخر، کد توسط ماشین خیلی سریع اجرا می شه.

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


جاوا اسکریپتِ درون_مرورگر چه کاری می تونه انجام بده؟

جاوا اسکریپت مدرن یه زبان برنامه نویسی "ایمن" هستش. دسترسی سطح پایین به حافظه یا CPU رو فراهم نمی کنه، چون از اول برای مرورگرهایی که به این ویژگی ها نیاز نداشتن ایجاد شد.

دسترسی های جاوا اسکریپت تا حد زیادی به محیطی که توی اون اجرا می‌شه بستگی داره. برای مثال، Node.js از یه سری توابعی پشتیبانی می‌کنه که به جاوا اسکریپت اجازه خوندن/نوشتن فایل‌های دلخواه، انجام درخواست‌های شبکه ای و ... رو می‌ده.

جاوا اسکریپت درون_مرورگری می تونه همه کارهای مربوط به دستکاری صفحه وب، تعامل با کاربر و وب سرور رو انجام بده.

به عنوان مثال میتونه:

  • یه صفحه HTML جدید اضافه کنه،محتوا و سبک موجود رو تغییر بده.
  • به تحرکات و اقدامات کاربر واکنش نشون بده، مثلا با کلیک ماوس، حرکت اشاره گر، فشار دادن کلید اجرا بشه.
  • میتونه از طریق شبکه به سرورها درخواست ارسال کنه، فایل دانلود و یا آپلود کنه (به اصطلاح ، فناوری های AJAX و COMET).
  • کوکی ها رو دریافت و یا تنظیم کنه، میتونید از بازدیدکننده سوال بپرسید و یا پیامی رو بهش نشون بدید.
  • یه سری داده ها رو به خاطر بسپاره ("local storage").


جاوا اسکریپتِ درون_مرورگر چه کارهایی رو نمی تونه انجام بده؟

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

نمونه هایی از این محدودیت ها عبارتند از:

  • جاوا اسکریپت توی یک صفحه وب عملیات خوندن/نوشتن روی هارد دیسک رو ممکنه نتونه انجام بده،و یا اون ها رو کپی کنه یا برنامه هایی رو ازش اجرا کنه چون دسترسی مستقیم به عملکردهای سیستم عامل (OS)رو نداره.

مرورگرهای مدرن به این جاوااسکریپت اجازه می‌دن با فایل‌ها کار کنه، اما همچنان دسترسی محدود هستش
و تنها در صورتی این اتفاق میوفته که کاربر اقدامات خاصی رو انجام بده، مثلا "انداختن" یک فایل در پنجره
مرورگر یا انتخاب اون از طریق تگ <input>.

راه‌هایی هم برای تعامل با دوربین/میکروفون و سایر دستگاه‌ها وجود داره، اما اونها هم به اجازه صریح کاربر
نیاز دارن. بنابراین یک صفحه دارای جاوا اسکریپت نمیتونه یواشکی دوربین وب رو فعال کنه، محیط اطراف
رو مشاهده کنه و اطلاعات رو ارسال کنه به F.₳.T.Ã ?

  • تب ها/پنجره های مختلف معمولاً از هم اطلاعی ندارن ولی گاهی اوقات این کار رو انجام می دن، برای مثال زمانی که یک پنجره با استفاده از جاوا اسکریپت، یه پنجره دیگه ای رو باز میکنه. اما حتی در این مورد هم، جاوا اسکریپتِ یک صفحه، نمیتونه به بقیه ، که از سایت های مختلف (از دامنه، پروتکل یا پورت متفاوت) دیگه ای اومدن، دسترسی داشته باشه.

به این "Same Origin Policy" می گن. برای حل این مشکل، هر دو صفحه باید برای تبادل داده توافق کنن و
این کار رو هم یک کد جاوا اسکریپت خاصی انجام و مدیریت میکنه. که بعدا در رابطه باهاش حتما مقاله
های جدایی میزارم.

این محدودیت -مجدداً میگم - برای ایمنی کاربر هستش. صفحه ای مانند .http://virgool.io که کاربر بازش
کرده نباید به برگه مرورگر دیگه ای با آدرس http://google.com دسترسی داشته باشه و اطلاعات را از اونجا
بدزده.?

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

اگر جاوا اسکریپت خارج از مرورگر، به عنوان مثال روی یک سرور، اجرا بشه، چنین محدودیت هایی رو هم نداره. حتی مرورگرهای مدرن هم، با پلاگین ها و یا افزونه هایی اجازه پیدا میکنند که مجوزهایی رو درخواست کنند.


چه چیزی باعث میشه جاوااسکرپت منحصر به فرد باشه؟

حداقل سه تا چیز عالی در مورد جاوا اسکریپت وجود داره:

  • ادغام کامل با HTML/CSS.
  • کارای ساده به سادگی انجام می شه.
  • توسط همه ی مرورگرهای اصلی پشتیبانی می شه و به طور پیش فرض هم فعاله.


جاوا اسکریپت تنها فناوری مبتنی بر مرورگر هستش که این سه مورد راو با هم ترکیب کرده.?

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


فراتر از جاوااسکریپت

سینتکس جاوا اسکریپت با نیازهای همه سازگار نیست. افراد مختلف ویژگی های متفاوتی می خوان.

این قابل درک هستش، چون که پروژه ها و الزامات برای همه متفاوته.

بنابراین اخیراً تعداد زیادی از زبان‌های جدید ظاهر شده‌ که قبل از اجرا در مرورگر، اول به جاوا اسکریپت تبدیل (converted) می‌شن.

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

نمونه هایی از این زبان ها:

CoffeeScript

TypeScript

Flow

Dart

Brython

Kotlin


خلاصه

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

جاوا اسکریپت به عنوان پرکاربردترین زبان مرورگر هستش که به طور کامل با HTML/CSS ادغام شده و موقعیت منحصر به فردی داره.

زبان‌های زیادی وجود داره که به جاوا اسکریپت تبدیل (transpiled) می‌شن و ویژگی‌های خاصی رو هم ارائه می‌کنن. توصیه می شه پس از تسلط بر جاوا اسکریپت، حداقل به طور خلاصه نگاهی به اونها هم بیندازید.


خیلی ممنون که تا اینجا اومدی و سعی کردی یه آشنایی اولیه از جاوااسکریپت به دست بیاری

اگه چیزی بود که من اشتباه متوجه شدم حتما بهم بگو تا کنار هم یاد بگیریم ?

منبع :javascript.info



جاوااسکریپتjavascriptecmascriptآشنایی با جاوااسکریپت
شاید از این پست‌ها خوشتان بیاید