جاوا اسکریپت
| طراحیشده توسط | برندان ایچ | ||||||
|---|---|---|---|---|---|---|---|
| توسعهدهنده | نتاسکیپ کامیونیکیشنز، موزیلا | ||||||
| ۱٫۸٫۵ / ژوئن ۲۰۱۸ | |||||||
| |||||||
| پسوند نام پرونده | .js |
|---|---|
| نوع رسانهٔ اینترنتی |
|
| Uniform Type Identifier (UTI) | com.netscape.javascript-source[۲] |
| نوع ساختار | زبان اسکریپتنویسی |
| این مقاله قسمتی از
سری جاوااسکریپت است. |
| جاوااسکریپت |
| نحو جاوااسکریپت |
| جاوااسکریپت |
جاوااسکریپت، به اختصار JS (به انگلیسی: JavaScript) زبان برنامهنویسی سطح بالا، پویا، مبتنی بر شی، وابستگی کم به نوع (Weakly typed)، چند رویه و تفسیری است. در کنار HTML و CSS، جاوااسکریپت یکی از سه هسته صفحات دنیای وب میباشد.
JavaScript به صورت «جاواسکریپت» خوانده میشود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه میشود و اگر به صورت «جاوا اسکریپت» ترجمه شود اشتباه است چون دو کلمه جدا از هم نیست و اگر به صورت دو کلمه جدا نوشته شود خطاهای نگارشی ایجاد میشود، بهطور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.
علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس (++C) و جاوا شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شدهاست. از همین رو دستورهای متداول مانند if, for, try..catch ,"while" و… در این زبان هم یافت میگردند.
این زبان میتواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته میشوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی میتواند به عنوان نمونهای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم مناسب میباشد.
کاربرد گسترده این زبان در سایتها و صفحات اینترنتی میباشد و به کمک این زبان میتوان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویانمایی در سمت کاربر، از این زبان استفاده میشود.
محتویات
تاریخچه[ویرایش]
جاوااسکریپت را در ابتدا شخصی به نام برندان ایچ در شرکت نتاسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[۳] این تغییر نام تقریباً با افزوده شدن پشتیبانی از جاوا در مرورگر وب Netscape Navigator همزمانی دارد. اولین نسخهٔ جاوااسکریپت در نسخه 2.0B3 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نام گذاری منجر به سردرگمیهای زیادی شده و این ابهام را ایجاد میکند که جاوااسکریپت با جاوا مرتبط است در حالی که اینطور نیست. عدهٔ زیادی این کار را یک ترفند تجاری برای به دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامهنویسی تحت وب بود میدانند.[۴][۵]
به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش زبان نویسهای سمت کاربر (Client Side Scripting Language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوتهای این دو زبان به حدی جزیی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار میروند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد ECMA مطرح میکند.
نتاسکیپ جاوااسکریپت را به سازمان Ecma International برای استانداردسازی ارسال کردهاست و نتیجه نسخهٔ استاندارد شدهای به نام ECMAScript است.[۶]
جاوااسکریپت به یکی از زبانهای برنامهنویسی پر طرفدار در وب تبدیل شدهاست. هر چند ابتدا بسیاری از برنامه نویسان حرفهای زبان را کم ارزش تلقی میکردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۷] ظهور ایجکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه نویسان حرفهای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانههای جامعی در این زمینه، بهبود شیوههای رایج برنامهنویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است. [نیازمند منبع]
امکانات زبانی[ویرایش]
امکانات زیر (در صورت قید نشدن) همگی مطابق استاندارد ECMAScript میباشند.
کلمات کلیدی[ویرایش]
جاوا اسکریپت شامل ۶۴ کلمات کلیدی است.
| abstract | arguments | await | boolean |
| break | byte | case | catch |
| char | class | const | continue |
| debugger | default | delete | do |
| double | else | enum | eval |
| export | extends | false | final |
| finally | float | for | function |
| goto | if | implements | import |
| in | instanceof | int | interface |
| let | long | native | new |
| null | package | private | protected |
| public | return | short | static |
| super | switch | synchronized | this |
| throw | throws | transient | true |
| try | typeof | var | void |
| volatile | while | with | yield |
فریم ورکهای مبتنی بر جاوااسکریپت[ویرایش]
فریم ورکها و کتابخانه های زیادی برای این زبان درست شدهاست مانند کتابخانه های جیکوئری، آنگولار جیاس ، نود جیاس ، ری اکت ، وی یو جی اس و فریم ورک انگولار .
زبان امری و ساخت یافته[ویرایش]
جاوااسکریپت از تمامی نحو ساختاری زبان C پشتیبانی میکند. مانند گزاره (if و switch و حلقههای while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکانپذیر میسازد. مانند زبان c در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.
پویایی[ویرایش]
تایپ دهی پویا: مانند اکثر زبانهای نویسهای تایپ به مقدارها منسوب میگردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راههای مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد(در ES6 از const استفاده میشود).[۸]
تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف بهشمار میآید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود (عدد را با رشته جمع کردهاست).
اشیاء به دید آرایههای انتسابی:
جاوااسکریپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایههای انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و در واقع 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 در نظر گرفته میشود.
زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت میگیرد، مانند ۵ + “۳۷” که میشود “۵۳۷”
عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد میگردد مانند ۳ – “۵۷” که مقدار عددی ۵۴- را به دست میدهد.[۱۰]
مثال[ویرایش]
چند برنامه ساده به جاوااسکریپت
برنامههای ورودی و خروجی در مرورگر وب:
1 <script type="text/javascript">
2 alert ("Hello world");
3 var x = prompt("Enter Name:", "Default name");
4 alert ("Hello, " + x)
5 </script>7c21b17e9j829bed3b6a9f0fae5fe3f52f513d4e7f7340163bb839908f47ea910
برای استفاده ساده از عناصر 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>
وانیلا جاوااسکریپت[ویرایش]
وانیلا جاوااسکریپت یا وانیلا جی اس (Vanilla JS) اصطلاحی است که به همان زبان جاوااسکریپت اطلاق میشود. در حقیقت، وانیلا جی اس هیچ چهارچوب (Framework) یا کتابخانهٔ خاصی نیست. این اصطلاح بیشتر برای کسانی ساخته شدهاست که گمان میکنند برای استفاده از جاوااسکریپت، حتماً باید از کتابخانههای موجود یا سکوی خاصی استفاده بکنند.[۱۱]
وانیلا جی اس از آنجا که اصطلاحی دیگر برای استفاده از زبان جاوااسکریپت بدون استفاده از سکوی یا کتابخانه خاصی است، سریعترین کتابخانه جاوااسکریپت موجود تلقی میشود.[۱۲]
پانویس[ویرایش]
- ↑ "RFC 4329". Apps.ietf.org. Archived from the original on 2014-03-16. Retrieved 16 February 2016.
- ↑ "System-Declared Uniform Type Identifiers". Mac OS X Reference Library. Apple Inc. Retrieved 2010-03-05.
- ↑ Krill, Paul (2008–06–23), "JavaScript creator ponders past, future", InfoWorld Check date values in:
|تاریخ=(help) Retrieved on 2009-05-19. - ↑ "Programming languages used on the Internet and the World Wide Web (WWW)", Webdevelopersnotes.com Retrieved on 2009-05-19.
- ↑ "O'Reilly - Safari Books Online - 0596101996 - JavaScript: The Definitive Guide, 5th Edition", Safari.oreilly.com Retrieved on 2009-05-19.
- ↑ "Netscape Press Release", Cgi.netscape.com Retrieved on 2009-05-19.
- ↑ "JavaScript: The World's Most Misunderstood Programming Language", Crockford.com Retrieved on 2009-05-19.
- ↑ Flanagan, David (2006), JavaScript: The Definitive Guide, O'Reilly Media, p. ۱۷۶–۱۷۸, ISBN 0-596-10199-6
- ↑ JavaScript ECMA Standard (PDF)
- ↑ JavaScript Typing System
- ↑ what is vanillajs? (وانیلا جی اس چیست؟)
- ↑ valilla-js.com
منابع[ویرایش]
- Wikipedia contributors, "JavaScript," Wikipedia, The Free Encyclopedia, http://en.wikipedia.org/w/index.php?title=JavaScript&oldid=208218277%7B%7B
پیوند به بیرون[ویرایش]
- مرکز توسعه موزیلا
- مستندات رسمی موزیلا در مورد جاوااسکریپت
- مراجع ای برای نسخههای اصلی جاوااسکریپت: 1.5
- امکانات جدید جاوااسکریپت: 1.6, 1.7, 1.8, 1.8.1
- فهرست نسخههای جاوااسکریپت: 1.5 - 1.8
- آشنایی مجدد با جاوااسکریپت
- جاوا اسکریپت در کرلی (بر پایهٔ دیموز)
- مصاحبه با Brendan Eich
- الگو:شبکههای رایانهای
- جاوااسکریپت
- اختراعهای آمریکایی
- زبانهای اسکریپتنویسی
- زبانهای برنامهنویسی اسکریپتی
- زبانهای برنامهنویسی بر پایه پیشنمونه
- زبانهای برنامهنویسی خانواده سی
- زبانهای برنامهنویسی دارای استاندارد ایزو
- زبانهای برنامهنویسی زنده
- زبانهای برنامهنویسی ساختهشده در ۱۹۹۵ (میلادی)
- زبانهای برنامهنویسی سطح بالا
- زبانهای برنامهنویسی شیءگرا
- زبانهای برنامهنویسی ماشینی پویا
- زبانهای برنامهنویسی مبتنی بر شیء
- زبانهای تابعی
- معرفیشدههای ۱۹۹۵ (میلادی)
- نرمافزارهای چندسکویی