جاوااسکریپت

جاوااسکریپت
پارادایم برنامه‌نویسیرویدادمحور، تابعی، دستوری
طراحی شده توسطدر ابتدا برندان آیک، سپس مشارکت کننده‌های کلیدی دیگری در مشخصات اکما اسکریپت اضافه شدند.
ظهوریافته در۴ دسامبر ۱۹۹۵؛ ۲۹ سال پیش (۱۹۹۵-04}})[۱]
انتشار پایدار
ECMAScript 2024[۲] ویرایش در ویکی‌داده / ژوئن ۲۰۲۴؛ خطا: ناتوان در تجزیهٔ پارامتر اول در قالب تاریخ یا زمان. (ژوئن ۲۰۲۴-خطا: زمان نامعتبر}})
انتشار آزمایشی
ECMAScript 2025[۳] ویرایش در ویکی‌داده / ۲۷ مارس ۲۰۲۴؛ خطا: ناتوان در تجزیهٔ پارامتر اول در قالب تاریخ یا زمان. (۲۷ مارس ۲۰۲۴-خطا: زمان نامعتبر}})
پویا، کم‌زور، اردکی
سیستم‌عاملمرورگرهای وب
وبگاه
پیاده‌سازی‌های بزرگ
وی۸, JavaScriptCore , SpiderMonkey, Chakra
متأثر از
AWK,[۵] سی، HyperTalk, جاوا،[۶] لوآ، پرل، اسکیم، سلف
تأثیر گذاشته بر
تایپ‌اسکریپت، کافی‌اسکریپت، AssemblyScript, اکشن‌اسکریپت، دارت، Objective-J, اوپا، Haxe

JavaScript در ویکی‌کتاب (انگلیسی)
جاوا اسکریپت (قالب پرونده)
پسوند(های) نام پرونده
.js
نوع رسانهٔ اینترنتی
  • application/javascript
  • text/javascript (obsolete)[۷]
شناسانه نوع یکسان
com.netscape.javascript-source[۸]
گونهزبان اجرانامه‌نویسی
این مقاله قسمتی از

سری جاوااسکریپت است.

جاوااسکریپت
نحو جاوااسکریپت
جاوااسکریپت
لوگوی غیررسمی جاوااسکریپت

جاوااسکریپت (به انگلیسی: JavaScript، ‎/ˈɑːvəˌskrɪpt/‎) با کوته‌نوشت JS، نوعی زبان برنامه‌نویسی است که با ویژگی‌های ارائه شده در مشخصات اکما اسکریپت مطابق است.[۹] جاوااسکریپت نوعی زبان سطح بالا، کامپایل درجا و چندالگویی است. جاوااسکریپت نحو آکولادی دارد، نوع‌دهی آن پویا است، نوع شیءگرا‌ی‌اش بر پایه پیش‌نمونه است و دارای توابع کلاس اول است.[۱۰]

در کنار HTML و CSS، جاوااسکریپت یکی از فن‌آوری‌های هسته‌ای وب جهان‌گستر است.[۱۱]

علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، دلیل این نام‌گذاری محبوبیت زبان جاوا در هنگام تولد جاوااسکریپت بود؛ اگر چه ساختار این زبان به سی پلاس پلاس (++C) و سی شارپ (C#) شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شده‌است. از همین رو دستورهای متداول مانند if, for, try..catch, while و … در این زبان هم یافت می‌گردند.

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

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

کاربرد گسترده این زبان در سایت‌ها و صفحات اینترنتی بوده و به کمک این زبان می‌توان به اشیاء داخل صفحات اچ‌تی‌ام‌ال دسترسی پیدا کرد و آن‌ها را تغییر داد. به همین علت برای پویانمایی در سمت کاربر، از این زبان استفاده می‌شود.

تاریخچه

جاوااسکریپت را در ابتدا شخصی به نام برندان آیک در شرکت نت‌اسکیپ با نام Mocha طراحی نمود. این نام بعداً به LiveScript و نهایتاً به جاوااسکریپت تغییر یافت.[۱۲] اولین نمونه‌های جاوااسکریپت در اواخر دهه ۱۹۹۰ برای مرورگر وب Netscape Navigator ایجاد شد.

اولین نسخه جاوااسکریپت در نسخه B32.0 این مرورگر در دسامبر ۱۹۹۵ معرفی و عرضه شد. این نامگذاری منجر به سردرگمی‌های زیادی شده و این ابهام را ایجاد می‌کند که جاوااسکریپت با جاوا مرتبط است در حالی که اینطور نیست.

عدهٔ زیادی این کار را ترفند تجاری برای به‌دست آوردن بخشی از بازار جاوا که در آن موقع زبان جدید مطرح برای برنامه‌نویسی تحت وب بود می‌دانند.

javaScript به صورت «جاواسکریپت» خوانده می‌شود، ولی در فارسی به صورت «جاوااسکریپت» ترجمه می‌شود و اگر به صورت «جاوااسکریپت» ترجمه شود اشتباه است چون دوکلمه جدا ازهم نیست و اگر به صورت دو کلمه جدا نوشته شود خطاهای نگارشی ایجاد می‌شود، به‌طور مثال ممکن است کلمه جاوا در انتهای خط و کلمه اسکریپت در ابتدای خط بعدی نوشته شود.

علیرغم اشتباه عمومی، زبان جاوااسکریپت با زبان جاوا ارتباطی ندارد، اگر چه ساختار این زبان به سی پلاس پلاس(++C) و جاوا شباهت دارد که این امر برای یادگیری آسان در نظر گرفته شده‌است.

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

برای سالهای طولانی، جاوااسکریپت فقط در تعداد محدودی از مرورگرها کار می‌کرد. مایکروسافت اینترنت اکسپلورر، بزرگ‌ترین پایگاه مرورگر، خیلی زود از جاوااسکریپت پشتیبانی نکرد. در عوض، مایکروسافت اسکریپت اختصاصی سمت مشتری خود را با نام JScript ایجاد کرد. در روزهای ابتدایی توسعهٔ وب، برنامه‌نویسان که مایل به ایجاد وب‌سایت‌های پویا بودند، اغلب مجبور به انتخاب یک خانواده مرورگر از خانوادهٔ دیگر شدند. این کمتر از ایدئال بود زیرا اینترنت را کمتر در دسترس جهانی قرار می‌داد.

جاوااسکریپت تا سال ۱۹۹۹ استاندارد نشده و به‌طور گسترده هم پذیرفته نشد. حتی پس از استانداردسازی، سازگاری مرورگر برای بیش از یک دهه همچنان مسئله ساز بود.

به دلیل موفقیت عمدهٔ جاوااسکریپت در نقش اسکریپت‌نویسی سمت کاربر (Client Side Scripting Language) برای صفحات وب، مایکروسافت یک نسخه سازگار از این زبان را ایجاد کرد و به علت مشکلات حقوقی آن را جی اسکریپت نامید. این زبان در نسخه ۳٫۰ از مرورگر اینترنت اکسپلورر و در اوت ۱۹۹۶ داده شد. تفاوت‌های این دو زبان به حدی جزئی است که اغلب جی اسکریپت و جاوااسکریپت به جای هم به کار می‌روند. هرچند که مایکروسافت در اینجا چند ده دلیل برای تفاوت جی اسکریپت با استاندارد اکما مطرح می‌کند.

نت‌اسکیپ جاوااسکریپت را به سازمان اکما اینترنشنال برای استانداردسازی ارسال کرده‌است و نتیجه نسخهٔ استاندارد شده‌ای به نام اکما اسکریپت است.[۱۳]

جاوااسکریپت به یکی از زبان‌های برنامه‌نویسی پرطرفدار در وب تبدیل شده‌است. هر چند ابتدا بسیاری از برنامه‌نویسان حرفه‌ای زبان را کم ارزش تلقی می‌کردند چون مخاطبان آن نویسندگان صفحات وب و آماتورهای این چنینی بودند.[۱۴] ظهور ایجکس بار دیگر جاوااسکریپت را در معرض توجه قرار داد و برنامه‌نویسان حرفه‌ای بیشتری را به خود جذب نمود. نتیجه ازدیاد فریمورک و کتابخانه‌های جامعی در این زمینه، بهبود شیوه‌های رایج برنامه‌نویسی در جاوااسکریپت و افزایش کاربرد جاوااسکریپت خارج از وب است.[۱۵]

امکانات زبانی

کلمات کلیدی

کلمات کلیدی هر زبان برنامه نویسی، به کلماتی گفته می‌شود که در کُد آن زبان دارای معانی خاصی هستند. به عنوان مثال در جاوااسکریپت، کلمه کلیدی async قبل از تعریف یک تابع، نشان می‌دهد که آن یک تابع ناهمزمان (Asynchrony) است.

برخی از کلمات کلیدی در جاوااسکریپت رِزِرو شده هستند، به این معنی که در کد این زبان، نمی‌توان از این کلمات به عنوان نام (یا شناسه) متغیر ها یا توابع و... استفاده کرد. البته همه کلمات کلیدی همیشه رزرو نمی‌شوند. به عنوان مثال کلمه کلیدی await تنها در تابعی که با async تعریف شده باشد، رزرو می‌شود [۱۶] (می‌توانید در بخش نمونه ها، مثال نوشته شده این مطلب را بررسی کنید)

موتور های جاوااسکریپت همیشه نام متغیرها را با حالت string مقایسه می‌کنند، پس اگر سعی کنید چنین کدی بنویسید باز هم با ارور مواجه خواهید شد [۱۷]:

const els\u{65} = -1;
// Uncaught SyntaxError: else is an invalid identifier

کلمات کلیدی رزرو شده [۱۸]

این کلمات در هیچ حالتی نمی‌توانند به عنوان نام یک شئ، متغیر یا تابع اتخاذ شوند:

break case catch catch
class const continue debugger
default delete do else
export extends false finally
for function if import
in instanceof new null
return super switch this
throw true try typeof
var void while with

کلمات زیر فقط در strict mode رزرو می‌شوند :

  • let (در کد strict mode و در بدنه تعریف های const، let و class رزرو می‌شود)
  • static (فقط در کد strict mode رزرو می‌شود)
  • yield (فقط در بدنه توابع سازنده رزرو می‌شود)

کلمه کلیدی await هم تنها در بدنه کد توابع async رزرو می‌شود.

کلمات کلیدی رزرو شده برای آینده [۱۹]

کلمات کلیدی زیر، برای آینده توسط ECMAScript رزرو شده اند. در حال حاضر هیچ کاری نمی‌کنند ولی ممکن است در آینده از آنها استفاده شود، لذا همین الان هم نمی‌توان از آنها به عنوان نام متغیر، تابع و... استفاده کرد: این کلمات همیشه رزرو شده هستند:

  • enum

کلمات زیر فقط در strict mode رزرو می‌شوند:

implements interface package
private protected public

کلمات کلیدی رزرو شده (برای آینده) در استاندارد های قدیمی تر کلمات کلیدی زیر، برای آینده توسط استاندارد های قدیمی‌تر ECMAScript رزرو شده‌اند :

abstract boolean byte char
final float goto int
native short synchronized throws
double long transient volatile

مشخصه هایی با معانی خاص [۲۰]

برخی از کلمات هستند که معانی خاصی در برخی موضوعات خاص دارند، در حالی که به هیچ وجه رزرو نشده‌اند:

  • arguments (کلمه‌کلیدی نیست، اما در strict mode نمی‌تواند به عنوان نام متغیر، تابع و... اتخاذ شود)
  • as (درimport * as ns from "mod")
  • async
  • eval (کلمه‌کلیدی نیست، اما در strict mode نمی‌تواند به عنوان نام متغیر، تابع و... اتخاذ شود)
  • from (در import x from "mod")
  • get
  • of
  • set

در مجموع، جاوااسکریپت شامل ۶۴ کلمهٔ رزرو شده است.

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

فریم‌ورک‌های مبتنی بر جاوااسکریپت

فریم‌ورک‌ها و کتابخانه‌های زیادی برای این زبان توسعه یافته‌است، مانند کتابخانه‌های جی‌کوئری، ری اکت، ویو جی‌اس و فریم‌ورک انگولار جی‌اس.

تعداد فریمورک‌ها و کتابخانه‌های این زبان تا سال ۲۰۲۲ میلادی حدود ۲٬۰۰۰٬۰۰۰ عدد اعلام شده‌است.[۲۱]

زبان امری و ساخت یافته

جاوااسکریپت از تمامی نحو ساختاری زبان سی پشتیبانی می‌کند. مانند گزاره (if و switch و حلقه‌های while و…) یک مورد استثناء تعیین حوزهٔ متغیرهاست: تعریف حوزه در حد block در جاوااسکریپت وجود ندارد. هر چند جاوااسکریپت ۱٫۷ با کلمهٔ کلیدی let این نوع حوزه دهی را امکان‌پذیر می‌سازد. مانند زبان C در جاوااسکریپت بین عبارت و گزاره تفاوت وجود دارد.

پویایی

تایپ دهی پویا: مانند اکثر زبان‌های نویسه‌ای تایپ به مقدارها منسوب می‌گردد و نه به متغیرها. برای مثال متغیر x ممکن است به یک عدد وابسته سازی شود، و بعداً به یک رشته. جاوااسکریپت برای تعیین تایپ شی راه‌های مختلفی از جمله تایپ دهی اردکی (duck typing) را دارد (در ES6 از const استفاده می‌شود).[۲۲]

تایپ دهی ضعیف: زبان جاوااسکریپت از نظر تایپ دهی ضعیف به‌شمار می‌آید و در آن نتیجهٔ عملیاتی مانند ۵ + “۳۷”، عبارت “۵۳۷” خواهد بود (عدد را با رشته جمع کرده‌است).

اشیاء به دید آرایه‌های انتسابی: جاوااسکریپت تقریباً تماماً بر اساس اشیاء است. اشیاء، آرایه‌های انتسابی به همراه یک «ساختار شماتیک» هستند. نام ویژگی اشیاء، کلیدهای آرایه انتسابی هستند و در واقع obj.x = ۱۰ با obj[“x”] = ۱۰ هم ارز هستند و شیوه نگارش با نقطه صرفاً یک سینتکس قندی است. ویژگی‌ها و مقدارهایشان در زمان اجرا قابلیت تغییر اضافه و حذف دارند. همچنین می‌توان روی ویژگیهای یک شی با ساختار for … in پیمایش کرد.

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

تابعی بودن

تابعی بودن: توابع موجوداتی «درجه اول» محسوب می‌شوند، یعنی خود یک شی هستند بنابراین می‌توانند ویژگی داشته باشند، در آرگومانهای تابع‌ها داده شوند و مانند هر شی دیگری با آن‌ها رفتار شود

توابع داخلی و بستارها: توابع داخلی (توابع تعریف شده داخل یک تابع دیگر) هر بار که تابع بیرونی فرا خوانده شود، ایجاد می‌شوند و متغیرهای توابع بیرونی تا زمانی که تابع داخلی وجود داشته باشد، وجود خواهند داشت، حتی پس از اتمام آن فراخوانی از تابع بیرونی. (مثال: اگر تابع داخلی به عنوان مقدار برگشتی تابع باشد، هنوز به متغیرهای تابع بیرونی دسترسی دارد) – این مکانیزم بستار گرفتن در جاوااسکریپت است.

ساختار شماتیک» محوری

ساختار شماتیک: جاوااسکریپت به جای رده‌ها برای تعریف ویژگی‌های اشیاء، که شامل متدها و وراثت است از «ساختار شماتیک» استفاده می‌کند (پیش‌نمونه). امکان شبیه‌سازی بسیاری از امکانات رده-محور با ساختارهای شماتیک جاوااسکریپت امکان‌پذیر است.

توابع در نقش سازندهٔ اشیاء

برای توابع علاوه بر نقش عادی، به عنوان سازنده اشیاء هم عمل می‌کنند. آوردن یک new قبل فراخوانی تابع، آن را با کلمهٔ کلیدی this وابسته سازی شده به شی جدید اجرا می‌کند. ویژگی prototype از تابع مورد نظر، ساختار شماتیک شی جدید را مشخص می‌کند. گرچه در ES6 تعریف این توابع سازنده با کلمه‌کلیدی class انجام می‌شود، اما سیتکس class ها در جاوا اسکریپت فقط نوعی سینتکس قندی است[۲۳] :

class ClassA {
  constructor(foo, bar) {
    this.Foo = foo
    this.Bar = bar
  }
}

 const bux = new ClassA("Hello", "World")
 
// bux.Foo is "Hello"
// bux.Bar is "World"

نمونه پایین حالت واقعی همین مثال بالاست که از ES5 به قبل استفاده می‌شد[۲۴] :

const ClassA = function (foo, bar) {
this.Foo = Foo;
this.Bar = bar;
}
const bux = new ClassA("Hello", "World")
 
// bux.Foo is "Hello"
// bux.Bar is "World"

توابع در نقش متد: برخلاف بیشتر زبان‌های شی گرا تفاوتی میان تعریف تابع و متد وجود ندارد. بلکه تفاوت در زمان فراخوانی تابع است، زمانی که یک تابع به عنوان متد یک شی فراخوانده می‌شود کلمهٔ کلیدی this محلی آن تابع به شی مورد نظر وابسته سازی می‌شود.

امکانات دیگر

جاوااسکریپت برای تأمین اشیاء و متدها که با آن‌ها تعامل کند به یک محیط اجرایی (مانند مرورگر وب) نیاز دارد تا بتواند به این ترتیب با دنیای خارج ارتباط برقرار کند. همچنین برای دسترسی به سایر نویسه‌ها (include) هم به این محیط نیازمند است (مانند تگ <script>در HTML). (البته این یک ویژگی زبانی نیست اما در عمل اغلب این‌طور پیاده‌سازی شده‌است)

تعداد متغیر پارامتر (variadic): تعداد نامعینی پارامتر را می‌توان به یک تابع ارسال نمود. تابع می‌تواند هم از طریق پارامترهای رسمی و هم از طریق شی محلی arguments به آن‌ها دسترسی داشته باشد.

Literalهای آرایه و شی

مانند بسیاری از زبان‌های نویسه‌ای آرایه‌ها و اشیاء (که در زبان‌های دیگر همان آرایه‌های انتسابی هستند) را می‌توان با یک نحو موجز ایجاد و توصیف نمود. در واقع این شیوهٔ نگارش پایهٔ قالب داده‌ای جی‌سون هم هست.

عبارات منظم

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

نظام تایپ دهی

انواع زیر جزو انواع داده‌های قابل دسترس در زبان جاوااسکریپت است. در استاندارد اکما انواع دیگری هم تعریف شده که صرفاً داخلی است و برای پیاده‌سازی است.[۲۵]

تعریف نشده: این تایپ فقط یک مقدار با نام 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>

برای استفاده ساده از عناصر اچ‌تی‌ام‌ال و دام:

<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>

برنامه مرتب‌سازی یک آرایه

<script type="text/javascript">
 var myArray = [1, 5, 8, 2, 3, 0, 2, 9, 11];
 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>

برنامه جابه‌جایی:

<script type="text/javascript">
 var a = 10, b = 40;
 [a,b] = [b,a]
 alert("" + a + " " + b);
</script>

برنامه فاکتوریل:

<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();

کلمه کلیدی await تنها در تابعی که با async تعریف شده باشد، رزرو می‌شود [۱۶]:

(function(){
  let await = -1
  console.log(await)
})()

// -1

اما اگر تابع را بصورت async تعریف کنیم، با خطا مواجه خواهیم شد :

(async function(){
  let await = 90
  console.log(await)
})()

// Uncaught SyntaxError: await is a reserved identifier

البته این اتفاق مربوط به await در ESM نمی‌افتد و کلمه‌کلیدی await در سطوح دیگر هم رزرو می‌شود.[۲۷] کامنت گذاری در جاوا اسکریپت:

//Single Line Comment

/*
Multi
Line
Comment
*/

/*
 * Documentiation
 * Comment
*/

وانیلا جاوااسکریپت

وانیلا جاوااسکریپت یا وانیلا جی اس (Vanilla JS) اصطلاحی است که به همان زبان جاوااسکریپت گفته می‌شود. در حقیقت وانیلا جی اس هیچ چهارچوب یا کتابخانهٔ خاصی نیست. این اصطلاح بیشتر برای کسانی ساخته شده‌است که گمان می‌کنند برای استفاده از جاوااسکریپت حتماً باید از کتابخانه‌های موجود یا سکوی خاصی استفاده بکنند.[۲۸]

وانیلا جی اس از آنجا که اصطلاحی دیگر برای استفاده از زبان جاوااسکریپت بدون استفاده از سکوی یا کتابخانه خاصی است، سریع‌ترین کتابخانه جاوااسکریپت موجود تلقی می‌شود.[۲۹]

برتری و محبوبیت

در سال ۲۰۱۸ و ۲۰۱۹، جاوااسکریپت به عنوان یکی از برترین زبان‌های دنیا برگزیده شد. البته قبل از سال ۲۰۱۸، جاوااسکریپت رتبهٔ خوبی داشت. در سال ۲۰۲۰، جاوااسکریپت، در رتبه دوم یا سوم قرار گرفته‌است.

ناگفته نباشد که جاوا اسکریپت در سال‌های ۲۰۱۸ و ۲۰۱۹ به عنوان محبوب‌ترین زبان نیز برگزیده شد.

طبق نظرسنجی‌های انجام شده توسط وبگاه استک‌اورفلو جاوااسکریپت به مدت ۹ سال متوالی تا سال ۲۰۲۱، به‌عنوان پرکاربردترین زبان برنامه‌نویسی انتخاب شده بود.[۳۰]

فناوری

به نظر می‌رسد که زبان برنامه‌نویسی مورد علاقه طراحان وب در انتشار تصاویر خیره‌کننده تلسکوپ فضایی جیمز وب هم نقش داشته‌است. بر اساس سند مربوط به ماژول ابزارهای علمی یکپارچه جیمز وب (ISIM)، نرم‌افزار این ماژول توسط یک پردازنده اسکریپت کنترل می‌شود که فرمان‌های دریافتی را تحت اسکریپت‌هایی به زبان جاوا اسکریپت اجرا می‌کند. کدی که مسئولیت تبدیل این دستورها جاوا اسکریپت به کارهای عملی را دارد، می‌تواند ده برنامه را به‌صورت همزمان اجرا کند.[۳۱]البته نوع زبانی که این اسکریپت‌ها با آن نوشته شده دقیقاً Nombas ScriptEase 5.00e است که آخرین نسخه آن در سال ۲۰۰۳ منتشر شد. چون توسعه این تلسکوپ از دهه‌ها پیش آغاز شده بود و ظاهراً دانشمندان با همان فناوری‌های قدیمی کارهای خود را پیش برده‌اند.

پانویس

  1. Press release announcing JavaScript, "Netscape and Sun announce JavaScript", PR Newswire, December 4, 1995
  2. "ECMAScript® 2024 Language Specification". ژوئن 2024. Retrieved 30 August 2024.
  3. "ECMAScript® 2025 Language Specification". 27 مارس 2024. Retrieved 17 April 2024.
  4. "nodejs/node-eps". GitHub.
  5. "Brendan Eich: An Introduction to JavaScript, JSConf 2010". p. 22m. Retrieved November 25, 2019. Eich: "function", eight letters, I was influenced by AWK.
  6. ""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.[پیوند مرده]
  7. "RFC 4329". Apps.ietf.org. Archived from the original on 2014-03-16. Retrieved 16 February 2016.
  8. "System-Declared Uniform Type Identifiers". Mac OS X Reference Library. Apple Inc. Retrieved 2010-03-05.
  9. "ECMAScript® 2020 Language Specification".
  10. "JavaScript". Wikipedia (به انگلیسی). 2020-03-31.
  11. 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.
  12. Krill, ‎Paul (۲۰۰۸–۰۶–۲۳), "JavaScript creator ponders past, future", InfoWorld (به انگلیسی) {{citation}}: Check date values in: |تاریخ= (help)نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link) Retrieved on 2009-05-19.
  13. "Netscape Press Release", Cgi.netscape.com (به انگلیسی), archived from the original on 3 December 1998, retrieved 7 June 2009 Retrieved on 2009-05-19.
  14. "JavaScript: The World's Most Misunderstood Programming Language", Crockford.com (به انگلیسی) Retrieved on 2009-05-19.
  15. «مجله توسعه وب». https://dev.to/somedood/nodejs-breaking-javascript-out-of-the-browser-since-2009-53cn. نود جی اس. پیوند خارجی در |وبگاه= وجود دارد (کمک)
  16. ۱۶٫۰ ۱۶٫۱ «Lexical grammar - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۰۲. دریافت‌شده در ۲۰۲۴-۱۰-۰۹.
  17. «Lexical grammar - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۰۲. دریافت‌شده در ۲۰۲۴-۱۰-۰۹.
  18. «Lexical grammar - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۰۲. دریافت‌شده در ۲۰۲۴-۱۰-۰۹.
  19. «Lexical grammar - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۰۲. دریافت‌شده در ۲۰۲۴-۱۰-۰۹.
  20. «Lexical grammar - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۰۲. دریافت‌شده در ۲۰۲۴-۱۰-۰۹.
  21. "node package manager". npmjs.com (به انگلیسی). Retrieved 2022-02-17.
  22. Flanagan, ‎David (2006), JavaScript: The Definitive Guide (به انگلیسی), O'Reilly Media, p. ۱۷۶–۱۷۸{{citation}}: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)
  23. "Syntactic Sugar and JavaScript Diabetes". freeCodeCamp.org (به انگلیسی). 2018-02-07. Retrieved 2024-10-09.
  24. «Object.prototype.constructor - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۷-۲۵. دریافت‌شده در ۲۰۲۴-۰۹-۰۳.
  25. JavaScript ECMA Standard (PDF) (به انگلیسی)
  26. JavaScript Typing System (به انگلیسی)
  27. «await - JavaScript | MDN». developer.mozilla.org (به انگلیسی). ۲۰۲۴-۰۹-۲۶. دریافت‌شده در ۲۰۲۴-۱۱-۱۰.
  28. what is vanillajs? (وانیلا جی اس چیست؟)
  29. valilla-js.com
  30. "Stack Overflow Developer Survey 2021". Stack Overflow (به انگلیسی). Retrieved 2022-03-13.
  31. «جاوا اسکریپت زبان برنامه‌نویسی تلسکوپ فضایی جیمز وب - تلسکوپ جیمز وب». ۲۰۲۲-۰۸-۲۰. دریافت‌شده در ۲۰۲۲-۰۸-۲۰.

منابع

پیوند به بیرون

{{زبان‌های برنامه‌نویسی}}

Read other articles:

This is a list of rail accidents and incidents that happened in different railway lines in the Philippines. A Philippine National Railways 2500-class diesel electric locomotive hauling KiHa 52 coaches in Santa Mesa, Manila. 1954 2 September: 82 people were killed when an overloaded train carrying timber broke apart, derailed and crashed into a bridge and fell into a 30.4 metres (100 ft) ravine as it approached a steep portion of track in Barangay Fabrica, Sagay City, Negros Occidental. M...

 

KARA Best 2007-2010Album kompilasi karya KaraDirilis29 September 2010Direkam2007 - 2010GenreK-pop, dance-popDurasi39:34BahasaKoreaLabelUniversal SigmaKronologi Kara Kara Special Premium Box for Japan(2010)Kara Special Premium Box for Japan2010 KARA Best 2007-2010(2010) Jumping(2010)Jumping2010 KARA Best 2007-2010 adalah album kompilasi terbaik berbahasa Jepang pertama dari grup vokal wanita asal Korea Selatan Kara. Album ini dirilis pada tanggal 29 September 2010 di Jepang dalam 2 edisi: ...

 

Lindach Gemeinde Rügland Koordinaten: 49° 23′ N, 10° 35′ O49.387510.579722222222464Koordinaten: 49° 23′ 15″ N, 10° 34′ 47″ O Höhe: 464 m ü. NHN Einwohner: 74 (Jan. 2014)[1] Postleitzahl: 91622 Vorwahl: 09828 Lindach (fränkisch: Linda[2]) ist ein Gemeindeteil der Gemeinde Rügland im Landkreis Ansbach (Mittelfranken, Bayern).[3] Inhaltsverzeichnis 1 Geografie 2 Geschichte 3 Einwohn...

Garde nationale chyprioteΕθνική Φρουρά Fondation Juin 1964 Commandement Commandant en chef Lt. Gen. Dimokritos Zervakis[1] Ministre de la Défense Charalambos Petrides Main-d'œuvre Âges militaires 18-50 Actifs 12,000 Réservistes 75,000 Budgets Budget € 350 Million Pourcentage du PNB 1.8% modifier  La garde nationale chypriote (grec moderne : Ethnikí Frourá, Εθνική Φρουρά ; turc : Kıbrıs Ulusal Muhafızları), aussi appelée garde nationale ...

 

Karawang TimurKecamatanPeta Lokasi Kecamatan Karawang TimurPeta lokasi Kecamatan Karawang TimurNegara IndonesiaProvinsiJawa BaratKabupatenKarawangPemerintahan • Camat-Populasi • Total127,373 jiwa jiwaKode Kemendagri32.15.26 Kode BPS3215112 Luas29,77 km2Desa/kelurahan4/4 Karawang Timur adalah sebuah kecamatan di Kabupaten Karawang, Provinsi Jawa Barat, Indonesia. Ibu kota kecamatan ini berada di Kelurahan Adiarsa Timur. Kecamatan ini termasuk kawasan Karawang Kota,...

 

Рудницький Іван Володимирович  Солдат Загальна інформаціяНародження 7 лютого 1995(1995-02-07)ЧуднівСмерть 10 лютого 2015(2015-02-10) (20 років)СпартакВійськова службаПриналежність  УкраїнаВид ЗС  Збройні силиРід військ  Десантні військаФормування  95 ОАеМБрВійни / битви В...

У Вікіпедії є статті про інших людей із прізвищем Девідсон. Джиммі Девідсон Особисті дані Повне ім'я Джеймс Андерсон Девідсон Народження 8 листопада 1925(1925-11-08)[1][2]   Дуглас Вотер, Південний Ланаркшир, Шотландія, Велика Британія Смерть 24 січня 1996(1996-01-24)[1] (70 р

 

Замок Коннах Шаблон:Визначна пам'ятка: зображення відсутнє: Тип замокКраїна  Ірландія : ISO3166-1 alpha-3:IRL; ISO3166-1 цифровий:372; Замок Коннах (англ. Connagh Castle) — один із замків Ірландії, розташований в графстві Корк, в долині Брейд. Історія замку Коннах Замок Коннах башт...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (سبتمبر 2018) اسحق نيفيس ريفيرا معلومات شخصية الميلاد 6 يناير 1982 (41 سنة)  سان خوان، بورتوريكو  مركز اللعب وسط الجنسية الولايات المتحدة  معلومات النادي النادي الحال...

Abisag dari Suman merawat Daud, pada sekitar tahun 1435 Sunamitisme adalah praktik seorang pria tua ditidurkan dengan seorang perawan muda, namun tanpa berhubungan intim, untuk menjaga kemudaannya. Tujuannya adalah agar kehangatan dan kelembaban wanita muda tersebut akan tertransfer ke pria tua tersebut dan merevitalisasikannya.[1] Istilah tersebut berdasarkan pada cerita Raja Daud dan Abisag, seorang wanita muda asal Sunem, dalam Alkitab. Saat Raja Daud berusia tua dan tak dapat mend...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (مايو 2023) رسم توضيحي لحساب مؤشر الوجهية على مقطعين من صورة الموناليزا.التحيز نحو الوجه (بالإنجليزية: Face-ism)‏ هو إعطاء الأهمية النسبية للوجه في تصوير الرجال والنساء، إذ ...

 

اتحاد الجامعات الأفريقيةالتاريخالتأسيس 12 نوفمبر 1967[1] — 1967[2] الإطارالاختصار AAU (بالإنجليزية)[3] النوع منظمة غير حكوميةuniversity association (en) المقر الرئيسي أكرا البلد  غانا[4] لغات أخرى الإنجليزية التنظيمالشركاء اليونسكو[5] الانتماء Global Sustainability Coalition for Open Scienc...

Parking space reserved for women Women's parking space in an Italian rest area Women's parking space in an Austrian garage Women's parking spaces are specially designated and identified parking spaces in parking garages and parking lots to be used by women. They are usually much larger than normal parking spots to reduce accidents and near exits to increase the safety of women, to facilitate parking, or to facilitate walking to shopping or employment destinations. To improve women's safety, s...

 

Ancient Sanskrit scripture This article may require copy editing for grammar, style, cohesion, tone, or spelling. You can assist by editing it. (October 2022) (Learn how and when to remove this template message) A page from a Garuda Purana manuscript (Sanskrit, Devanagari) Part of a series onHindu scriptures and texts Shruti Smriti List Vedas Rigveda Samaveda Yajurveda Atharvaveda Divisions Samhita Brahmana Aranyaka Upanishads UpanishadsRig vedic Aitareya Kaushitaki Sama vedic Chandogya Kena ...

 

MSzOSzNational Confederation of Hungarian Trade UnionsMagyar Szakszervezetek Országos SzövetségeFoundedMarch 1990HeadquartersBudapest, HungaryLocationHungaryMembers 465,000Key peopleLászló Sandor, presidentAffiliationsITUC, ETUC, TUACWebsitewww.mszosz.hu The National Confederation of Hungarian Trade Unions (MSzOSz) is a national trade union center in Hungary. It was formed in 1990 and has a membership of 465,000 active members and 250,000 pensioners and apprentices. The MSzOSz is affilia...

Spanish light machine gun FAO 7.92mm FAOTypeLight machine gunPlace of originCzechoslovakia/SpainService historyUsed bySpainEgyptWarsIfni WarProduction historyDesigned1951Produced1951-1958No. built10,508SpecificationsMass9.10 kg (20.06 lb)Length1,180 mm (46.5 in)Cartridge7.92×57mm Mauser7.62×51mm NATOActionGas-operated, tilting breechblockRate of fire600-650 rounds/minMuzzle velocity850 m/s (2,789 ft/s)Effective firing...

 

Stasiun Gedungratu Stasiun Gedungratu, Juli 2022LokasiPemanggilan, Natar, Lampung Selatan, Lampung 35362IndonesiaKetinggian+117 mOperatorKereta Api IndonesiaDivisi Regional IV TanjungkarangLetak dari pangkalkm 22+770 lintas Panjang–Tanjungkarang–Prabumulih[1]Jumlah jalur4 (jalur 4: sepur lurus)Informasi lainKode stasiunGDR6904GEDUNG[2]KlasifikasiIII/kecil[2]SejarahNama sebelumnyaStopplaats HadjimenahTanggal pentingDibuka kembali10 Juni 2014[3]Operasi layana...

 

Bizzell Memorial Library Cherokee Gothic is a term coined by Frank Lloyd Wright for a vernacular architectural style used on the campus of the University of Oklahoma.[1][2] The term was invented by Wright while on a tour of the school's grounds, and, when coined, applied to Bizzell Memorial Library and Evans Hall.[3][4] These buildings combined conventional Gothic and Native American elements.[5] The buildings were constructed in dark and pale bricks an...

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article is an orphan, as no other articles link to it. Please introduce links to this page from related articles; try the Find link tool for suggestions. (October 2021) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged ...

 

Peter Blommeveen by Anton Woensam (1535) Stained glass window of Peter Blomevenna (1510–1530) Peter Blomevenna Cart. Dutch: Pieter Blommeveen; 29 March 1466 in Leiden – 14 August 1536 in Cologne) was a Carthusian author and prior of Cologne Charterhouse from 1507 to 1536. He was a translator of Denis the Carthusian, among many other works, and an active opponent of early Protestantism. He was a close friend of Werner Rolewinck (died 1502).[1] Biography Because of the avarice of hi...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!