جاوااسکریپت
جاوااسکریپت (به انگلیسی: JavaScript، /ˈdʒɑːvəˌskrɪpt/) با کوتهنوشت JS نوعی زبان برنامهنویسی است که با ویژگیهای ارائه شده در مشخصات اکما اسکریپت مطابق میباشد.[6] جاوااسکریپت نوعی زبان سطح بالا، کامپایل درجا، و چندالگویی است. جاوااسکریپت نحو آکولادی دارد، نوع دهی آن پویا است، نوع شیءگرایی اش بر پایه پیشنمونه است، و دارای توابع کلاس اول میباشد.[7]
الگو برنامهنویسی | رویدادمحور، تابعی، دستوری |
---|---|
طراحی شده توسط | در ابتدا برندان ایچ، سپس مشارکت کنندههای کلیدی دیگری در مشخصات اکما اسکریپت اضافه شدند. |
ظهوریافته در | ۴ دسامبر ۱۹۹۵[1] |
انتشار پایدار | |
انتشار آزمایشی | اکما اسکریپت ۲۰۲۱
|
پویا، اردکی | |
| |
پیادهسازیهای بزرگ | |
V8, JavaScriptCore , SpiderMonkey, Chakra | |
متأثر از | |
AWK,[4] سی، HyperTalk, جاوا،[5] لوآ، پرل، پایتون، اسکیم، سلف | |
تأثیر گذاشته بر | |
TypeScript, CoffeeScript, AssemblyScript, ActionScript, Dart, Objective-J, Opa, Haxe | |
![]() |
این مقاله قسمتی از
سری جاوااسکریپت است. |
جاوااسکریپت |
نحو جاوااسکریپت |
جاوااسکریپت |

در کنار HTML و CSS، جاوااسکریپت یکی از فنآوریهای هستهای وب جهانگستر است.[8]
علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، دلیل این نام گذاری محبوبیت زبان جاوا در هنگام تولد جاوااسکریپت بود؛ اگر چه ساختار این زبان به سی پلاس پلاس (++C) و سی شارپ (C#) شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شدهاست. از همین رو دستورهای متداول مانند if, for, try..catch ,"while" و… در این زبان هم یافت میگردند.
این زبان میتواند هم به صورت ساخت یافته و هم به صورت شی گرا مورد استفاده قرار گیرد. در این زبان اشیاء با اضافه شدن متدها و خصوصیات پویا به اشیاء خالی ساخته میشوند، بر خلاف جاوا. بعد از ساخته شدن یک شی به روش فوق، این شی میتواند به عنوان نمونهای برای ساخته شدن اشیاء مشابه مورد استفاده قرار گیرد.
به علت این قابلیت زبان جاوااسکریپت برای ساختن نمونه از سیستم، مناسب است.
پسوند(های) نام پرونده | .js |
---|---|
نوع رسانهٔ اینترنتی |
|
شناسانه نوع یکسان | com.netscape.javascript-source[10] |
گونه | زبان اجرانامهنویسی |
کاربرد گسترده این زبان در سایتها و صفحات اینترنتی بوده و به کمک این زبان میتوان به اشیاء داخل صفحات HTML دسترسی پیدا کرد و آنها را تغییر داد. به همین علت برای پویانمایی در سمت کاربر، از این زبان استفاده میشود.
تاریخچه
جاوااسکریپت را در ابتدا شخصی به نام برندان آیک در شرکت نتاسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[11] اولین نمونههای جاوااسکریپت در اواخر دهه ۱۹۹۰ برای مرورگر وب Netscape Navigator ایجاد شد. در آن زمان، صفحات وب ایستا بودند و تعامل کمی با کاربر، فراتر از کلیک کردن روی پیوندها و بارگیری صفحات جدید، ایجاد میکردند. برای اولین بار، جاوااسکریپت انیمیشن، محتوای تطبیقی و اعتبار سنجی فرم را در صفحه فعال کردهاست.
برای سالهای طولانی، جاوااسکریپت فقط در تعداد محدودی از مرورگرها کار میکرد. مایکروسافت اینترنت اکسپلورر، بزرگترین پایگاه مرورگر، خیلی زود از جاوااسکریپت پشتیبانی نکرد. در عوض، مایکروسافت اسکریپت اختصاصی سمت مشتری خود را با نام JScript ایجاد کرد. در روزهای ابتدایی توسعهٔ وب، برنامهنویسان که مایل به ایجاد وبسایتهای پویا بودند، اغلب مجبور به انتخاب یک خانواده مرورگر از خانوادهٔ دیگر شدند. این کمتر از ایده آل بود زیرا اینترنت را کمتر در دسترس جهانی قرار میداد.
جاوااسکریپت تا سال ۱۹۹۹ استاندارد نشده و بهطور گسترده هم پذیرفته نشد. حتی پس از استانداردسازی، سازگاری مرورگر برای بیش از یک دهه همچنان مسئله ساز بود.
به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش اسکریپتنویسی سمت کاربر (Client Side Scripting Language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوتهای این دو زبان به حدی جزئی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار میروند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد ECMA مطرح میکند.
نتاسکیپ جاوااسکریپت را به سازمان Ecma International برای استانداردسازی ارسال کردهاست و نتیجه نسخهٔ استاندارد شدهای به نام اکما اسکریپت است.[12]
جاوااسکریپت به یکی از زبانهای برنامهنویسی پرطرفدار در وب تبدیل شدهاست. هر چند ابتدا بسیاری از برنامهنویسان حرفهای زبان را کم ارزش تلقی میکردند چون مخاطبین آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[13] ظهور ایجکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامهنویسان حرفهای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانههای جامعی در این زمینه، بهبود شیوههای رایج برنامهنویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.[14]
امکانات زبانی
این زبان برنامهنویسی دارای کلمات کلیدی مرسومی است که بنا به گفتههای شرکت سازنده در زیر قید شدهاند.
کلمات کلیدی
جاوااسکریپت شامل ۶۴ کلمهٔ کلیدی است.
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 استفاده میشود).[15]
تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف بهشمار میآید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود (عدد را با رشته جمع کردهاست).
اشیاء به دید آرایههای انتسابی:
جاوااسکریپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایههای انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و در واقع obj.x = ۱۰
با obj[“x”] = ۱۰
هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سهولت نحوی است. ویژگیها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین میتوان روی ویژگیهای یک شی با ساختار for … in
پیمایش کرد.
ارزیابی در زمان اجرا: جاوااسکریپت یک تابع eval دارد که قادر است گزارههای تولید شده در یک رشته در زمان اجرا را، اجرا کند.
تابعی بودن
تابعی بودن: توابع موجوداتی «درجه اول» محسوب میشوند، یعنی خود یک شی هستند بنابراین میتوانند ویژگی داشته باشند، در آرگومانهای تابعها داده شوند و مانند هر شی دیگری با آنها رفتار شود
توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد میشوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.
ساختار شماتیک» محوری
ساختار شماتیک: جاوااسکریپت به جای ردهها برای تعریف ویژگیهای اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده میکند (پیشنمونه). امکان شبیهسازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکانپذیر است.
- توابع در نقش سازندهٔ اشیاء
برای توابع علاوه بر نقش عادی، به عنوان سازنده اشیاء هم عمل میکنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا میکند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص میکند.
توابع در نقش متد: بر خلاف بیشتر زبانهای شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده میشود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی میشود.
امکانات دیگر
جاوااسکریپت برای تأمین اشیاء و متدها که با آنها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسهها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب اینطور پیادهسازی شدهاست)
تعداد متغیر پارامتر (variadic):
تعداد نامعینی پارامتر را میتوان به یک تابع ارسال نمود. تابع میتواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments
به آنها دسترسی داشته باشد.
- Literalهای آرایه و شی
مانند بسیاری از زبانهای نویسهای آرایهها و اشیاء (که در زبانهای دیگر همان آرایههای انتسابی هستند) را میتوان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب دادهای جیسون هم هست.
جاوااسکریپت به شیوهای مشابه زبان پرل از عبارات منظم پشتیبانی میکند که نحوی قدرتمند و موجز را به شکلی فراتر از توابع پیش ساخته برای کار با رشتهها، فراهم میکند.
نظام تایپ دهی
انواع زیر جزو انواع دادههای قابل دسترس در زبان جاوااسکریپت است. در استاندارد ECMA انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیادهسازی است.[16]
تعریف نشده: این تایپ فقط یک مقدار با نام undefined دارد و متعلق به تمام متغییرهای مقدار دهی نشدهاست
نوع تهی: نوع تهی هم فقط یک مقدار دارد با نام null
نوع دودویی: نمایندهٔ یک مقدار منطقی است و دو مقدار true و false را میپذیرد.
نوع رشته: در بر گیرندهٔ تمام رشتههای متناهی از ۰ یا بیشتر عنصر ۱۶ بیتی بدون علامت است. این عناصر با اندیسهای نامنفی قابل دسترسی هستند. طول رشته تعداد عناصر داخل آن و طول رشتهٔ تهی برابر ۰ است.
زمانی که رشته حاوی متن واقعی باشد هر عنصر به عنوان یک واحد UTF-16 در نظر گرفته میشود (مستقل از این که شیوهٔ واقعی نگهداری رشته چه باشد). تمام عملیات بر روی رشتهها آنها را به عنوان اعداد صحیح بدون علامت در نظر میگیرند و تضمینکنندهٔ تولید رشته به حالت normalize شده نیست و تضمینهای خاص زمانی هم ندارد. علت این تصمیمگیری سادگی در پیادهسازی ذکر شدهاست.
نوع عدد: نوع عدد در جاوااسکریپت مطابق با استادارد IEEE برای اعداد شناور دودویی است (با اندکی تفاوت).
نوع شی: شی در جاوااسکریپت یک مجموعه بدون ترتیب از ویژگیها است. هر ویژگی میتواند داخلی، فقط-خواندنی، غیرقابل حذف، و غیرقابل پیمایش باشد. (یا ترکیبی از اینها یا هیچکدام)
تبدیلات خودکار
این زبان دارای تبدیلات خودکار بین این انواع دادهای است.
زمانی که بخواهد یک if را ارزیابی کند یا از عملگرهای منطقی !
و &&
و ||
استفاده شود، تبدیل به نوع دودویی را انجام میدهد. مقادیر ۰ و ۰- و NaN
به false
و سایر مقادیر عددی به true
نگاشت میگردد. همچنین رشتهٔ تهی false
و سایر رشتهها true
در نظر گرفته میشود. انواع شی و تابع true
و undefined
و null
هم false
در نظر گرفته میشود.
زمانی که یکی از عملوندهای عملگر + رشته باشد، تبدیل به رشته صورت میگیرد، مانند ۵ + “۳۷” که میشود “۵۳۷”
عملگرهای دیگری عددی (جز جمع) منجر به تبدیل به عدد میگردد مانند ۳ – “۵۷” که مقدار عددی ۵۴- را به دست میدهد.[17]
مثال
چند برنامه ساده به جاوااسکریپت
برنامههای ورودی و خروجی در مرورگر وب:
<script type="text/javascript">
alert ("Hello world");
var x = prompt("Enter Name:", "Default name");
alert ("Hello, " + x)
</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>
استفاده از توابع «سازنده» برای ساخت شی جدید:
function Foo(arg, otherArg) {
this.prop = arg;
this.otherProp = otherArg;
}
Foo.prototype.bar = function() {
console.log(this.prop, this.otherProp);
}
var foo = new Foo("First arg", "Second arg");
foo.bar();
ارث بری در جاوااسکریپت با استفاده از زنجیره «پیش نمونه»:
function Creature(age) {
this.age = age;
}
Creature.prototype.printAge = function() {
console.log(this.age);
}
function Human(name, family, age) {
Creature.call(this, age);
this.name = name;
this.family = family;
}
Human.prototype = Object.create(Creature.prototype);
Human.prototype.constructor = Human;
Human.prototype.printFullName = function() {
console.log(this.name, this.family);
}
var human = new Human("Foo", "Bar", 100);
human.printAge();
human.printFullName();
وانیلا جاوااسکریپت
وانیلا جاوااسکریپت یا وانیلا جی اس (Vanilla JS) اصطلاحی است که به همان زبان جاوااسکریپت اطلاق میشود. در حقیقت، وانیلا جی اس هیچ چهارچوب (Framework) یا کتابخانهٔ خاصی نیست. این اصطلاح بیشتر برای کسانی ساخته شدهاست که گمان میکنند برای استفاده از جاوااسکریپت، حتماً باید از کتابخانههای موجود یا سکوی خاصی استفاده بکنند.[18]
وانیلا جی اس از آنجا که اصطلاحی دیگر برای استفاده از زبان جاوااسکریپت بدون استفاده از سکوی یا کتابخانه خاصی است، سریعترین کتابخانه جاوااسکریپت موجود تلقی میشود.[19]
برتری و محبوبیت
در سال ۲۰۱۸ و ۲۰۱۹، جاوااسکریپت به عنوان یکی از برترین زبانهای دنیا برگزیده شد. البته قبل از سال ۲۰۱۸، جاوااسکریپت رتبهٔ خوبی داشت. در سال ۲۰۲۰، جاوااسکریپت، در رتبه دوم یا سوم قرار گرفتهاست.
ناگفته نباشد که جاوا اسکریپت در سالهای ۲۰۱۸ و ۲۰۱۹ به عنوان محبوبترین زبان نیز برگزیده شد.
پانویس
- Press release announcing JavaScript, "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
- {{cite web|url=https://www.ecma-international.org/ecma-262/11.0/|title=Standard ECMA-262|publisher=Ecma International|date=June 17, 2020}}
- "nodejs/node-eps". GitHub.
- "Brendan Eich: An Introduction to JavaScript, JSConf 2010". p. 22m. Retrieved November 25, 2019.
Eich: "function", eight letters, I was influenced by AWK.
- ""Coders at Work: Reflections on the Craft of Programming"". Retrieved December 25, 2018.
Eich: The immediate concern at Netscape was it must look like Java.
- "ECMAScript® 2020 Language Specification".
- "JavaScript". Wikipedia. 2020-03-31.
- Flanagan, David. JavaScript - The definitive guide (6 ed.). p. 1.
JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages and JavaScript to specify the behaviour of web pages.
- "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. - "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.
- «مجله توسعه وب». https://dev.to/somedood/nodejs-breaking-javascript-out-of-the-browser-since-2009-53cn. نود جی اس. پیوند خارجی در
|وبگاه=
وجود دارد (کمک) - 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