جاوا اسکریپت (JavaScript) یک زبان برنامه نویسی است، زبانی که در ابتدا صرفاً قرار بود به مرورگر Netscape (که مرورگری ایستا بود)، منطق بیفزاید و به آن کاربری تعاملی ببخشد. زبان برنامه نویسی جاوا اسکریپت در سالهای پس از معرفیاش نهتنها در رقابت بر سر برنامه نویسی مبتنی بر مرورگر جای بسیاری از زبانها و فناوریهای دیگر را گرفت، بلکه از فضای سمت کاربر نیز فراتر رفته و به زبان غالب سمت سرور تبدیل شده است.
موارد استفاده و کاربرد های جاوا اسکریپت
پروتکل Hyper Text Transport Protocol یا HTTP را دقیقاً به همان منظوری طراحی کردهاند که از نامش برمیآید، یعنی انتقال متن HTML در شبکه. اما مشکل HTML این است که کاملاً ایستاست و قابلیت پیادهسازی منطق را ندارد.
ویژگیهای اساسی نظیر اعتبارسنجی ورودی کاربر، تصحیح خودکار، نوار پیشرفت یا ایجاد تغییرات گرافیکی هنگام جابجایی ماوس را امروزه بدیهی میشماریم و به سادگی از کنارشان میگذریم، درحالیکه مرورگر بهخودیخود و بدون اسکریپت نویسی از پس انجام هیچیک برنمیآید. با این اوصاف وقتی وب جایگاه و اهمیت خود را پیدا کرد، فعالان و عرضهکنندگان به فکر سازوکاری افتادند که امکان تعامل در صفحات وب مبتنی بر HTML را فراهم سازد.
جایگزین های جاوا اسکریپت
مایکروسافت با توسعه VBScript و فناوریهای افزونه نظیر ActiveX Data Object (ADO)، رقیبی برای جاوا اسکریپت وارد عرصه کرد. Sun Microsystems نیز برنامکهای مبتنی بر جاوا را توسعه داد که چند پلتفرمی بودند و در همه مرورگرها کاربرد داشتند.
با رشد و تکامل اینترنت، فناوریهای بسیار دیگری آمدند و رفتند. در پایان، جاوا اسکریپت در نبرد بر سر محبوبیت پیروز شد و تنها فناوری اسکریپت نویسی سمت کاربر است که مرورگرهای کروم (Chrome)، فایرفاکس (Firefox)، سافاری (Safari) و اینترنت اکسپلورر (Internet Explorer) پشتیبانی میکنند.
در مقابل زبانهای کامپایلشده مانند ++C و جاواجاوا چیست؟ تعریف، معنی و ویژگی های جاوا (java) از 0تا100جاوا یک زبان برنامه نویسی همه منظوره، مبتنی بر کلاس و شی گرا است که برای داشتن وابستگی های پیاده سازی کمتر طراحی شده است، زبان برنامه نویسی جاوا شبیه ++C است، جاوا اسکریپت زبانی تفسیرشده است؛ بهعبارتی کد JavaScript مرحله کامپایل میانی (که در آن کد اصلی به زبان ماشین تبدیل میشود تا پردازش آن برای CPU آسان باشد) را پشت سر نمیگذارد. در عوض، کامپیوتری که جاوا اسکریپت را پردازش میکند، در حین اجرا آن را تفسیر میکند. ازآنجاکه کد JavaScript مثل bytecode جاوا یا فایل اجرایی باینری در پکیج سازگار با CPU قرار نمیگیرد، اجرای برنامهاش از برنامه مشابهی که با Scala یا #F نوشته باشند، کندتر است. با وجود این موتورهای مدرن جاوا اسکریپت را بسیار بهینه کردهاند و با بهرهگیری از سخت افزارهای امروزی، ناکارآمدیهایش ندرتاً به چشم میآید.
تقابل جاوا اسکریپت (JavaScript) و جاوا (Java)
چهار حرف اول نام JavaScript و Java، این تصور اشتباه را ایجاد میکند که جاوا اسکریپت و جاوا مشابهت دارند. هرچند برخی از عناصر بسیار اساسی سینتکس جاوا و جاوا اسکریپت مشترک است، اما شباهت دیگری با هم ندارند. از جمله شباهتهای سینتکس این دو زبان میتوان به استفاده از نقطهویرگول برای پایان دادن به دستورها، استفاده از کروشه برای تعیین بلوک کد و ساختارهای حلقهای و تکرارشونده نسبتاً یکسان اشاره کرد.
این دو زبان عرضهکننده یکسانی ندارند، شرکت یکسانی حفظ و نگهداری آنها را برعهده ندارد و در ویژگیهای اساسی زبانهای برنامه نویسی نظیر شی گرایی (Object Orientation) و تایپ قوی بودن تفاوت عمده دارند. جاوا و جاوا اسکریپت دو زبان برنامه نویسی تماماً مجزا هستند و اصلاً نباید آنها را با یکدیگر اشتباه گرفت.
مبانی برنامه نویسی جاوا اسکریپت
HTML تگ ویژهای بهصورت <SCRIPT> ارائه میکند که توسعهدهندگان را قادر میسازد جاوا اسکریپت را در دل نشانه گذاری (Markup)های صفحه جای دهند.
تعریف متغیر با استفاده از کلمه کلیدی var در جاوا اسکریپت بسیار ساده است و قواعد پیچیدهای را که در زبان های برنامه نویسی دیگر نظیر ++C و Java مشاهده میشود، در بر نمیگیرد. جاوا اسکریپت را بهعنوان زبان بدون تایپ (Untyped language) میشناسند، یعنی متغیرها میتوانند در هنگام اجرای برنامه اشکال مختلفی به خود بگیرند.
مثلاً در برنامه زیر متغیری به نام greeting تعریف میکنیم و در قدم اول، مقداری از جنس رشته متن (String) به آن میدهیم. اما مقدار همین متغیر را در خط بعد برنامه به عدد صحیح (Integer) 10 تغییر میدهیم. سپس متغیر جدیدی به نام product تعریف میکنیم و حاصلضرب greeting در خودش را در آن میریزیم.
var greeting = 'Hello World';
greeting = 10;
var product = greeting * greeting;
کاربرد کلید واژه var در جاوا اسکریپت برای تعریف متغیر
فرض کنید در جاوا اسکریپت متغیری به نام greeting تعریف کردهایم که از نوع string است و رشته متنی را در خود جای میدهد. ازآنجاکه در این زبان تغییر نوع متغیر فوق به عدد صحیح، آن هم در حین اجرا مجاز است، جاوا اسکریپت را زبان تایپ ضعیف (Weakly typed language) مینامند. در زبانهای تایپ قوی نظیر ++C یا Java، تبدیل نوع متغیر به این شکل، باعث خطای کامپایل میشود.
جاوا اسکریپت: کلید واژه let در مقابل var
در جاوا اسکریپت کلید واژه var را برای تعریف متغیر بهکار میگیرند. البته استفاده از این کلید واژه دامنه (scope) متغیر را گستردهتر از آنچه احتمالاً نیاز داریم تعریف میکند. این امر میتواند با دیگر بخشهای کد، بهویژه آنهایی که حاوی متغیرهایی با نام مشابه هستند، تداخل ایجاد کند.
نسخه 6 استاندارد ECMAScript، کلید واژه let را برای تعریف متغیرها معرفی کرد. کلید واژههای var و let هر دو سینتکس یکسانی دارند؛ وقتی متغیری را با کلید واژه var تعریف کنیم، دامنهاش به تابعی محدود میشود که متغیر را آنجا تعریف کردهایم: یعنی خارج از بلوک کد آن تابع، دیگر متغیر مورد نظر قابل فراخوانی نیست. درحالیکه کلید واژه let، دامنه متغیر را به بلوک کد متغیر محدود میکند.
{
let greeting = 'Hello World';
greeting = 10;
let product = greeting * greeting;
}
توابع و متدهای جاوا اسکریپت
محتوای تگ <SCRIPT> هم میتواند کدهایی را در خود جای دهد که هنگام برخورد کاربر به آن فراخوانی میشود و هم میتواند حاوی توابع جاوا اسکریپت باشد. توابع جاوا اسکریپت با متد در دیگر زبان های برنامه نویسی متناظر هستند. تابع جاوا اسکریپت حاوی کدی است که با رویداد (Event)های مرورگر نظیر کلیک ماوس، بارگذاری صفحه، ارسال فرم یا فشار دادن کلیدی خاص فراخوانی و فعال میشود. البته متداول است که توابع جاوا اسکریپت برای انجام مقصودشان، توابع دیگری را فراخوانی کنند.
نمونه کد جاوا اسکریپت
در ادامه مثال سادهای از کد جاوا اسکریپت را قرار دادهایم که با استفاده از HTML و JavaScript، سنگ-کاغذ-قیچی را اجرا میکند. تگ <SCRIPT> زیر حاوی تابع جاوا اسکریپت به نام playRoshambo است که رویداد onclick آن را فعال میکند. البته این کد حالتی را در نظر میگیرد که کاربر روی انکر لینک (anchor link) حاوی متن «کاغذ» کلیک میکند. نتیجه بازی در تگ <div> با نام نتایج نمایش داده میشود.
<script type="text/javascript">
playRoshambo = function(clientGesture) {
//server always chooses rock
if (clientGesture == 'rock') {
result = "tie";
}
if (clientGesture == 'paper') {
result = "win";
}
if (clientGesture == 'scissors') {
result = "lose";
}
document.getElementById('results').innerHTML = result;
}
</script >
کتابخانه های مدرن جاوا اسکریپت
موتور اصلی جاوا اسکریپت که در پکیجی با مرورگرهای مدرن همراه است، تنها مجموعه ابتدایی از APIها را برای توسعه نرم افزار فراهم میکند. برای انجام وظایف پیچیده نظیر اجرای چرخه درخواست-پاسخ مبتنی بر Ajax یا حتی انجام تجزیه و تحلیل پیشرفته DOM یا دستکاری رشتهها، باید مقدار زیادی کد نوشت. عرضهکنندگان اصلی در اینکه از کدام نسخه JavaScript بهره میگیرند و تا چه حد بدون اشکال این کار را انجام میدهند، با یکدیگر تفاوت دارند و همین امر، پیچیدگی کار کدنویسی را بیشتر میکند.
برای برطرفسازی مشکل تفاوت مرورگرها و نیز ارائه پکیجهای ازپیشآماده کد برای انجام امور رایج، کتابخانه های جاوا اسکریپت به یکی از پایههای اصلی توسعه UI مبتنی بر مرورگر تبدیل شدهاند. jQuery محبوبترین کتابخانه جاوا اسکریپت است که امروزه کاربرد دارد؛ البته رقبایی مثل Prototype و Dojo نیز محبوبیت خود را دارند.
نقاط ضعف جاوا اسکریپت
معمولاً از این دو جنبه جاوا اسکریپت را مورد انتقاد قرار میدهند که زبان تایپ ضعیف است و شی گرا نیست. توسعهدهندگان نرم افزار زبان های شی گرا با تایپ قوی را ترجیح میدهند، زیرا این ویژگیها روند توسعه نرم افزار را تسریع و درعینحال به حفظ کیفیت نرم افزار کمک میکنند.
با این حال ازآنجاکه جاوا اسکریپت به زبان بالفعل مرورگرهای اینترنت تبدیل شده، توانایی نوشتن کد با کیفیت بالا و بدون اشکال از اولویتهای اصلی بسیاری از اعضای جامعه توسعه نرم افزار است. در نتیجه زبانهای جدیدی مانند TypeScript را پدید آوردهاند که هم تایپ قوی و هم شی گرا هستند. TypeScript بسیار به جاوا اسکریپت شباهت دارد، اما برخلاف جاوا اسکریپت که تفسیر میشود، زبانی کامپایلشده است. البته برخلاف جاوا یا ++C که کد اصلیشان به bytecode یا باینری کامپایل میشود، کد TypeScript به جاوا اسکریپت خالص کامپایل و بر اساس مرورگر مورد نظر، بهینه میشود.
فریمورک (Framework)های جاوا اسکریپت
یکی از روندهای مهم صنعت طراحی رابط کاربری (UI) این است که منطق، پردازش و مدیریت وضعیت را تا جای ممکن به سمت کاربر منتقل میکنند و تعامل با سرور را نیز با RESTful APIهای سبک و سرویسهای وب انجام میدهند. این امر منجر به توسعه فریمورک های همهجانبه جاوا اسکریپت شده است که تمام جنبههای سمت مشتری را کنترل و تجربه کاربری رابط تک صفحهای (SPI) را ارائه میکنند.
فریمورک های محبوب فضای JavaScript عبارتند از Angular، React و Ember که منطقشان اغلب مبتنی بر زبانهای کامپایل شده جاوا اسکریپت از جمله کتابخانههای TypeScript و JavaScript نظیر jQuery است و از کتابخانههای Handlebars.js یا Mustache.js برای قالب صفحه استفاده میکنند.
جمع بندی
با توسعه و رشد روزافزون اینترنت و فناوری وب، افزودن منطق و امکان تعامل با صفحات وب به اولویت مهمی برای کاربران و البته طراحان این صفحات تبدیل شده است. هرچند در گذشته صفحات وب فقط میتوانستند اطلاعات را بهصورت ایستا به کاربر انتقال دهند، اما امروزه با کمک زبان های اسکریپت نویسی و بهرهگیری از پکیجهای مربوط به آنها در مرورگرها، صفحات وب منطق یافتهاند و میتوان با آنها تعامل کرد. هر بار روی دکمهای در یک وبسایت میزنید و اتفاق خاصی رخ میدهد، فرمی را پر و ارسال میکنید، با جابجایی ماوس شاهد تغییرات گرافیکی وبسایت هستید و...، باید بدانید که این امکانات همگی بهلطف اسکریپت نویسی و مهمترین زبان این حوزه، یعنی جاوا اسکریپت فراهم شده است.
جاوا اسکریپت (JavaScript) چیست؟
پروتکل Hyper Text Transport Protocol یا HTTP را به منظور انتقال متن HTML در شبکه ایجاد کردهاند، اما این پروتکل مشکل ایستایی دارد و نمیتوان در آن منطق را پیادهسازی کرد. در واقع مرورگرها بهخودیخود ویژگیهای اساسی نظیر اعتبارسنجی ورودی کاربر، تصحیح خودکار، نوار پیشرفت یا ایجاد تغییرات گرافیکی هنگام جابجایی ماوس را ندارند و بدون اسکریپت نویسی از پس انجام هیچیک برنمیآیند. اینجاست که جاوا اسکریپت (JavaScript) نقش اساسی خود را نشان میدهد و این وظایف مهم را برعهده میگیرد.
ارتباط زبان برنامه نویسی جاوا اسکریپت و جاوا چیست؟
هرچند نام این دو زبان برنامه نویسی مشابهت دارد، چهار حرف اولشان یکی و برخی از عناصر سینتکسشان مشترک است، اما شباهت دیگری با هم ندارند. استفاده از نقطهویرگول برای پایان دادن به دستورها، استفاده از کروشه برای تعیین بلوک کد و ساختارهای حلقهای و تکرارشونده نسبتاً یکسان از جمله شباهتهای سینتکس این دو زبان است. عرضهکننده این دو زبان یکسان نیست، حفظ و نگهداری آنها برعهده شرکتهای متفاوت است و در ویژگیهای اساسی زبانهای برنامه نویسی نظیر شی گرایی (Object Orientation) و تایپ قوی بودن تفاوت عمده دارند. این دو زبان برنامه نویسی کاملاً مجزا هستند و بههیچوجه نباید آنها را با یکدیگر اشتباه گرفت.
جاوا اسکریپت زبان compiled است یا interpreted؟
مرحله کامپایل میانی را که در آن کد اصلی به زبان ماشین تبدیل میشود تا CPU راحتتر بتواند آن را پردازش کند، پشت سر نمیگذارد. در عوض، کامپیوتری که جاوا اسکریپت را پردازش میکند، آن را در حین اجرا تفسیر میکند. بنابراین در مقابل زبانهای کامپایلشده مانند ++C و Java، جاوا اسکریپت زبانی تفسیرشده است. ازآنجاکه کد JavaScript مثل bytecode جاوا یا فایل اجرایی باینری در پکیج سازگار با CPU قرار نمیگیرد، اجرای برنامهاش از برنامه مشابهی که با Scala یا #F نوشته باشند، کندتر است. با وجود این موتورهای مدرن جاوا اسکریپت را بسیار بهینه کردهاند و با بهرهگیری از سخت افزارهای امروزی، ناکارآمدیهایش ندرتاً به چشم میآید.