مقدمه ای بر جاوا اسکریپت

جاوا اسکریپت علیرغم نامش فقط به جاوا مرتبط است زیرا این دو شباهت های نحوی کمی دارند. سینتکس جاوا اسکریپت در توسعه اولیه خود به طور ضعیفی از نحو جاوا الهام گرفته شده بود و زمانی که برای اولین بار در نسخه بتای Netscape Navigator در سال 1995 عرضه شد، "LiveScript" نامیده شد، هم برای همسویی با برخی از دیگر پیشنهادات نامگذاری شده نت اسکیپ و هم به عنوان اشاره ای به این واقعیت. که "زنده" در مرورگر اجرا می شود. مایکروسافت کمی بعد با اینترنت اکسپلورر 3.0 پیاده سازی جاوا اسکریپت خود را با نام "JScript" منتشر کرد.

نت‌اسکیپ این کار اولیه را به Ecma International ارسال کرد، سازمانی که استانداردهای فنی را توسعه و منتشر می‌کند تا نحوه درک این زبان برنامه‌نویسی توسط مرورگرهای دیگر را رسمی و جزئی کند. در سال 1997، Ecma International ECMA-262 را منتشر کرد و اولین نسخه از یک زبان برنامه نویسی به نام ECMAScript را استاندارد کرد. ECMAScript استانداردی است که ایجاد زبان‌های برنامه‌نویسی خاص‌تر را اطلاع‌رسانی می‌کند، برای مثال، کارهای بعدی مایکروسافت روی JScript که اکنون از بین رفته، Adobe's ActionScript و خود جاوا اسکریپت.

این تمایز هنگام بحث در مورد جنبه ها و ویژگی های خاص جاوا اسکریپت مهم است. "ES5" به اولین نسخه اصلی "نسخه‌ای" استاندارد ECMAScript در سال 2009، پس از سال‌ها توسعه تدریجی‌تر اشاره دارد. "ES6" (یا "ES2015") مخفف استانداردهای تعیین شده توسط ویرایش ششم ECMAScript است که در سال 2015 منتشر شد. پس از ES6، نسخه‌های جدیدی از استاندارد ECMAScript سالانه منتشر می‌شود که تغییرات و اضافات هر نسخه در هر سال ذکر می‌شود. مانند "ES2016" یا "ES2017".

قوانین اساسی

برخلاف زبان های کامپایل شده، جاوا اسکریپت از کدی که شخص می نویسد به فرمی که مرورگر می تواند آن را بفهمد ترجمه نمی شود. یک اسکریپت در کنار دارایی هایی مانند نشانه گذاری، تصاویر و شیوه نامه ها به مرورگر ارسال می شود، مرورگر آن را به همان روشی که نوشته شده تفسیر می کند: به عنوان یک دنباله خوانا از کاراکترهای یونیکد، که از چپ به راست و از بالا به پایین تجزیه می شود.

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

  • توکن ها
  • کاراکترهای کنترل قالب
  • پایان دهنده های خط
  • نظرات
  • فضای سفید (تقریباً همیشه به معنای زبانه ها و فاصله ها است).

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

در سطح بالایی، برنامه های جاوا اسکریپت از عبارات و عبارات تشکیل شده اند.

بیانیه ها

دستور یک واحد دستورالعمل است که از یک یا چند خط کد تشکیل شده است که یک عمل را نشان می دهد. برای مثال، می‌توانید از عبارت زیر برای تعیین مقدار به متغیری به نام myVariable استفاده کنید:

let myVariable = 4;

myVariable;
> 4

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

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

بیانیه ها را مسدود کنید

یک دستور بلوک هر تعداد گزاره و اعلان را در یک جفت پرانتز ( {} ) گروه بندی می کند. این به شما امکان می دهد عبارات را در مکان هایی که جاوا اسکریپت فقط یک مورد را انتظار دارد ترکیب کنید.

شما اغلب دستورات بلوک را در کنار دستورات جریان کنترل می بینید، مانند if :

if ( x === 2 ) {
  //some behavior;
}

عبارات

عبارت واحدی از کد است که به یک مقدار منجر می شود و بنابراین می تواند در هر جایی که مقداری مورد انتظار است استفاده شود. 2 + 2 عبارتی است که به مقدار 4 می رسد:

2 + 2;
> 4

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

2 + 2 * 4;
> 10

( 2 + 2 ) * 4;
> 16

let myVariable = ( 2 + 2 );

myVariable;
> 4

تایپ ضعیف

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

به عنوان مثال، اگر یک عدد را به یک مقدار رشته در یک زبان قوی تایپ شده، مانند پایتون اضافه کنید، نتیجه یک خطا است:

>>> "1" + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

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

"1" + 1;
> "11"

انواع داده ها نیز می توانند به صراحت مورد اجبار قرار گیرند. مثال زیر مقدار عددی 100 را با استفاده از روش toString داخلی جاوا اسکریپت به مقدار رشته ای "100" وادار می کند:

let myVariable = 100;

typeof myVariable;
> "number"

myVariable = myVariable.toString();
> "100"

typeof myVariable;
> "string"

حساسیت به حروف کوچک

برخلاف HTML و اکثر CSS، خود جاوا اسکریپت کاملاً به حروف بزرگ و کوچک حساس است. این بدان معنی است که شما همیشه باید همه چیز را به طور مداوم با حروف بزرگ بنویسید، از ویژگی ها و روش های ساخته شده در زبان گرفته تا شناسه هایی که خودتان تعریف می کنید.

console.log( "Log this." );
> Log this.

console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;

myvariable;
> Uncaught ReferenceError: myvariable is not defined

myVariable;
> 2

فضای خالی

جاوا اسکریپت به فضای سفید حساس نیست. این بدان معناست که مفسر مقدار و نوع (برگه ها یا فاصله ها) فضای خالی استفاده شده را نادیده می گیرد.

                     console.log(       "Log this"  );console.log("Log this too");
> "Log this."
> "Log this too."

با این حال، وجود فضای خالی می تواند به عنوان یک جداکننده بین نشانه های واژگانی مهم باشد:

let x;

[ نشانه ها : [let] [x] ]

letx;
> Uncaught ReferenceError: letx is not defined

[ نشانه ها : [letx] ]

در جایی که از فضای خالی برای جداسازی نشانه های واژگانی معنی دار استفاده می شود، تجزیه کننده مقدار و نوع فضای خالی را نادیده می گیرد:

let           x                             =                           2;

[ نشانه ها : [let] [x] [=] [2] ]

همین امر در مورد شکست های خط نیز صادق است، اگرچه مواردی وجود دارد که شکستن خط می تواند با پایان دادن زودهنگام یک دستور، مشکلاتی ایجاد کند:

let x
=
2;

[ نشانه ها : [let] [x] [=] [2] ]

از نظر سبک، برخی از انواع گزاره ها اغلب یک خط را اشغال می کنند:

let x = 1;
let y = 2;

در حالی که برخی از عبارات معمولاً از چندین خط استفاده می کنند:

if ( x == 2 ) {
  //some behavior;
}

با این حال، این قراردادها صرفاً به خاطر خوانایی هستند. جاوا اسکریپت مثال های قبلی را به همان شکل زیر تفسیر می کند:

let x=1;let y=2;
if(x==2){}

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

استفاده از کاراکترهای فضای خالی در جاوا اسکریپت تا حد زیادی به ترجیحات نویسنده و نگهدارنده بستگی دارد. پروژه‌های جاوا اسکریپت با چند برنامه‌نویس که کد را مشارکت می‌دهند، معمولاً قراردادهای فضای خالی خاصی را پیشنهاد یا اعمال می‌کنند تا از قالب‌بندی کد یکنواخت اطمینان حاصل کنند - به عنوان مثال، استفاده از برگه‌ها یا فاصله‌ها برای تورفتگی عبارات تو در تو:

let myVariable = 10;

if ( typeof myVariable === "number" ) {
    console.log( "This variable is a number." );
    if( myVariable > 5 ) {
     console.log( "This variable is greater than five." );
    }
}

> "This variable is a number."
> "This variable is greater than five."

درک خود را بررسی کنید

بیان چیست؟

مجموعه ای از بیانیه ها و اعلامیه ها.
یک واحد کد که منجر به یک مقدار می شود.
نظری که توضیح می دهد که کد چه کار می کند.

جاوا اسکریپت به حروف بزرگ و کوچک حساس است.

نادرست
درست است