ابتدا جاوا اسکریپت را با زبان برنامه نویسی جاوا java اشتباه نگیرید .
جاوااسکریپت ( JavaScript ) چیست ؟
زبان برنامه نویسی اسکریپت مبتی بر اشیاء است که توسط NetScape تولید شدهاست. این زبان، یک زبان شیگرا است که بر اساس استاندارد ECMA-262 Edition 3 نوشته شدهاست.
علیرغم اشتباه عمومی، زبان جاوا اسکریت با زبان برنامه نویسی جاوا ارتباطی ندارد، اگر چه ساختار این زبان به زبان برنامه نویسی سی پلاس پلاس (++C) و جاوا شباهت دارد؛ که این امر برای یادگیری آسان در نظر گرفته شدهاست. از همین رو دستورهای متداول مانند if, for, try..catch ,”while” و… در این زبان هم یافت میگردند.
این زبان میتواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته میشوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی میتواند به عنوان نمونهای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب میباشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنی میباشد و به کمک این زبان میتوان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویا نمایی در سمت کاربر، از این زبان استفاده میشود.
توانایی های جاوا اسکریپت
توانایی ها و قابلیت های جاوا اسکریپت بسیار متنوع بوده و تنها به موارد که در زیر می آید خلاصه نمی شود. در زیر لیستی از قابلیت های این اسکریپت آورده شده است:
- امکان تغییر در متون نمایش داده شده در مرورگر
- امکان تغییر رنگها، رنگ پس زمینه و موقعیت قرار گیری المانهای استفاده شده در طراحی وب سایت
- تغییر در مشخصه های المانها و CSS آنها
- متحرک سازی، انیمیشن و پویا نمایی
- تعامل با کاربر و از طریق المانهای ورودی نظیر Textbox ها، RadioButton ها، TextArea و غیره
- عکس العمل نشان دادن به واکنش های کاربران نظیر تغییر عکسها با حرکت موس روی آنها
- نمایش اخطار و یا پیام به کاربران
- انجام محاسبات ریاضی
- ساخت و تولید کد HTML بصورت پویا و برحسب شرایط مورد نیاز
- منوهای جالب همراه با انیمیشن
- جمع آوری اطلاعات کاربران از سایت و آمارگیری
مزایای جاوا اسکریپت
در زیر لیستی از مزایای استفاده از جاوا اسکریپت آورده شده است. لازم به ذکر است که مزایا این زبان برنامه نویسی تنها به این موارد ختم نمی شود:
- دادن پویایی به صفحات استاتیک وب سایت ها
- برخی از عملیات را نمی توان بدون استفاده از این زبان برنامه نویسی انجام داد. نظیر تعامل با کاربر، یافتن اطلاعات کاربری بازدید کنندگان نظیر IP های آنها و موارد دیگر
- نزدیک بودن این زبان برنامه نویسی به زبانها برنامه نویسی دیگر نظیر C, C++ و یا C#
- امکان استفاده از کتابخانه های آماده این زبان برنامه نویسی نظیر کتابخانه های استاندارد ریاضی
- سادگی در برنامه نویسی و پیاده سازی بدون درگیر شدن با کامپایلرهای پیچیده.
معایب جاوا اسکریپت
از جمله معایب جاوا اسکریپت می توان موارد برتر زیر را بر شمرد:
- کند بودن در زمان اجرا بدلیل عدم کامپایل شدن کدها.
- دیباگ کردن آن بسیار مشکل است.
- چنانچه خطایی در اجرای برنامه رخ دهد، در برخی از موارد بدون دادن پیامی یا ارائه هیچگونه راهنمایی، از برنامه خارج می شود.
- در همه مرورگرها قابل اجرا نمی باشد (در مرورگرهای قدیمی) و نیز برخی کاربران، برای سو استفاده سایت ها، امکان اجرای اینگونه اسکریپت ها را بر روی مرورگر خود لغو می کنند.
- بر روی مرورگر اجرا می شود در نتیجه هیچگونه امکانی برای مبادله با سرور سایت را ندارد.
نکته ای که در پایان بار دیگر می خواهیم متذکر شویم این است که جاوا اسکریپت برنامه تی است که روی کامپیوتر کلاینت یا همان مرورگر اجاره می شود (در مقایسه با اسکریپت هایی که بر روی سرور اجرا می شوند نظیر ASP یا PHP)
تاریخچه
جاوا اسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نتاسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوا اسکریپت تغییر یافت. این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوا اسکریپت در نسخه 2.0B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمیهای زیادی شده و این ابهام را ایجاد میکند که جاوا اسکریپت با جاوا مرتبط است در حالی که این طور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه نویسی تحت وب بود میدانند.
به دلیل موفقیت عمدهٔ جاوا اسکریپت در نقش زبان نویسهای سمت کاربر (client side scripting language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را Jscript نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در آگوست ۱۹۹۶ داده شد. تفاوتهای این دو زبان به حدی جزیی است که اغلب Jscript و جاوا اسکریپت به جای هم به کار میروند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت Jscript با استاندارد ECMA مطرح میکند.
نتاسکیپ جاوا اسکریپت را به سازمان Ecma International برای استاندارد سازی ارسال کردهاست و نتیجه نسخهٔ استاندارد شدهای به نام ECMA Script است.
جاوا اسکریپت به یکی از زبانهای برنامه نویسی پر طرفدار در وب تبدیل شدهاست. هر چند ابتدا بسیاری از برنامه نویسان حرفهای زبان را کم ارزش تلقی میکردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۶] ظهور ایجکس بار دیگر جاوا اسکریپت را در معرض توجه قرار داد و برنامه نویسان حرفهای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانههای جامعی در این زمینه، بهبود شیوههای رایج برنامه نویسی در جاوا اسکریپت و افزایش کاربرد جاوا اسکریپت خارج از وب است.
امکانات زبانی
امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMA Script میباشند.
زبان امری و ساخت یافته
جاوا اسکریپت از تمامی نحو ساختاری زبان C پشتیبانی میکند. مانند گزاره (if و switch و حلقههای while و…) یک مورد استثنا تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوا اسکریپت وجود ندارد. هر چند جاوا اسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکانپذیر میسازد. مانند c در جاوا اسکریپت بین عبارت و گزاره تفاوت وجود دارد.
پویایی
؛ تایپ دهی پویا: مانند اکثر زبانهای نویسهای تایپ به مقدارها منسوب میگردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوا اسکریپت برای تعیین تایپ شی راههای مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد.
؛ تایپ دهی ضعیف: زبان جاوا اسکریپت از نظر تایپ دهی ضعیف به شمار میآید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود. (عدد را با رشته جمع کردهاست)
؛ اشیا به دید آرایههای انتسابی: جاوا اسکیرپت تقریباً تماماً بر اساس اشیا است. اشیا، آرایههای انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیا، کلیدهای آرایه انتسابی هستند و درواقع obj.x = ۱۰
با obj[“x”] = ۱۰
هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگیها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین میتوان روی ویژگیهای یک شی با ساختار for … in
پیمایش کرد.
؛ ارزیابی در زمان اجرا: جاوااسکریپت یک تابع eval دارد که قادر است گزارههای تولید شده در یک رشته در زمان اجرا را، اجرا کند.
تابعی بودن
؛ تابعی بودن: توابع موجوداتی «درجه اول» محسوب میشوند، یعنی خود یک شی هستند؛ بنابراین میتوانند ویژگی داشته باشند، در آرگومانهای تابعها داده شوند و مانند هر شی دیگری با آنها رفتار شود
؛ توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد میشوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوا اسکریپت است.
ساختار شماتیک» محوری
؛ ساختار شماتیک: جاوا اسکریپت به جای ردهها برای تعریف ویژگیهای اشیا، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده میکند (پیشنمونه). امکان شبیهسازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوا اسکریپت امکانپذیر است.
- توابع در نقش سازندهٔ اشیا
برای توابع علاوه بر نقش عادی، به عنوان سازنده ی اشیا هم عمل میکنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا میکند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص میکند.
؛ توابع در نقش متد: بر خلاف بیشتر زبانهای شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده میشود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی میشود.
امکانات دیگر
جاوا اسکریپت برای تامین اشیا و متدها که با آنها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسهها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این طور پیادهسازی شدهاست)
؛ تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را میتوان به یک تابع ارسال نمود. تابع میتواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments
به آنها دسترسی داشته باشد.
- Literalهای آرایه و شی
مانند بسیاری از زبانهای نویسهای آرایهها و اشیا (که در زبانهای دیگر همان آرایههای انتسابی هستند) را میتوان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب دادهای جیسون هم هست.
- عبارات منظم
جاوا اسکریپت به شیوهای مشابه زبان پرل از عبارات منظم پشتیبانی میکند که نحوی قدرتمند و موجز را به شکلی فراتر از توابع پیش ساخته برای کار با رشتهها، فراهم میکند.
نظام تایپ دهی
انواع زیر جزو انواع دادههای قابل دسترس در زبان جاوا اسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیادهسازی است.
تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشدهاست
نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null
نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را میپذیرد.
نوع رشته: در بر گیرندهٔ تمام رشتههای متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیسهای نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.
زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته میشود (مستقل از این که شیوهٔ واقعی نگه داری رشته چه باشد). تمام عملیات بر روی رشتهها آنها را به عنوان اعداد صحیح بدون علامت در نظر میگیرند و تضمین کنندهٔ تولید رشته به حالت normalize شده نیست و تضمینهای خاص زمانی هم ندارد. علت این تصمیم گیری سادگی در پیادهسازی ذکر شدهاست.
نوع عدد: نوع عدد در جاوا اسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).
نوع شی: شی در جاوا اسکریپت یک مجموعه بدون ترتیب از ویژگیها است. هر ویژگی میتواند داخلی، فقط-خواندنی، غیرقابل حذف، و غیرقابل پیمایش باشد (یا ترکیبی از اینها یا هیچکدام)
تبدیلات خودکار
این زبان دارای تبدیلات خود کار بین این انواع دادهای است.
زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی !
و &&
و ||
استفاده شود، تبدیل به نوع دودویی را انجام میدهد. مقادیر ۰ و ۰- و NaN
به false
و سایر مقادیر عددی به true
نگاشت میگردد. همچنین رشتهٔ تهی false
و سایر رشتهها true
در نظر گرفته میشود. انواع شی و تابع true
و undefined
و null
هم false
در نظر گرفته میشود.
زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت میگیرد، مانند ۵ + “۳۷” که میشود “۵۳۷”
عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد میگردد مانند ۳ – “۵۷” که مقدار عددی ۳۴- را به دست میدهد
مثال
چند برنامه ساده به جاوا اسکریپت
برنامههای ورودی و خروجی در مرورگر وب:
<script type="text/javascript"> alert ("Hello world"); var x = prompt("Enter Name:", "Default name"); alert ("Hello, " + x) </script>
برای استفاده ساده از عناصر HTML و DOM:
<script type="text/javascript"> document.write("Hello world"); function handle() { document.write("You entered: " + document.getElementById("myinput").value); } </script> <form> <input type="text" id="myinput"/> <input type="button" onclick="handle()" value="Click here"/> </form>
برنامه sort:
<script type="text/javascript"> var myarray = [۱٬۵٬۸٬۲٬۳٬۰٬۲٬۹٬۱۱]; var i = 0; var j = 0; for (i = 0; i <myarray.length ; ++i) { for (j = 0; j <myarray.length; ++j) { if (myarray[i] <myarray[j]) { var tmp = myarray[i]; myarray[i] = myarray[j]; myarray[j] = tmp; } } } for (i = 0; i <myarray.length; ++i) { document.write (myarray[i] + " "); } </script>
برنامه swap:
<script type="text/javascript"> var a = 10, b = 40; [a,b] = [b,a] alert("" + a + " " + b); </script>
برنامه factorial:
<script type="text/javascript"> function factorial(x) { if (x> ۰) return x * factorial(x-1); return 1; } alert(factorial(5)); </script>