جاوا اسکریپت. انواع داده ها و عملگرها انواع داده جاوا اسکریپت نوع متغیر را تنظیم می کند

متغیر یک مکان حافظه با نام است که هم می توانید برخی از اطلاعات را در آن ذخیره کنید و هم آن را از آن بازیابی کنید.

اعلام (ایجاد) متغیرها با استفاده از کلمه کلیدی var انجام می شود.

// message - نام متغیر var message;

هنگامی که یک متغیر ایجاد می کنید، می توانید بلافاصله یک مقدار به آن اختصاص دهید.

تخصیص یک مقدار به یک متغیر با استفاده از عملگر "=" انجام می شود.

// برای مثال، یک ایمیل متغیر ایجاد کنید و رشته را به آن اختصاص دهید. [ایمیل محافظت شده]"var email =" [ایمیل محافظت شده]"; // متغیر ایمیل را به یک ایمیل با مقدار جدید تنظیم کنید = " [ایمیل محافظت شده]";

برای به دست آوردن مقدار یک متغیر، کافی است با نام آن را ارجاع دهید.

// برای مثال، مقدار متغیر ایمیل را به کنسول مرورگر خروجی دهید: console.log(email);

برای اعلام بیش از یک متغیر با استفاده از یک کلمه کلیدی var، باید از کاما استفاده کنید.

قیمت var = 78.55، تعداد = 10، پیام;

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

Var output = "موفقیت"; // متغیر دارای خروجی نوع داده رشته ای = 28 است. // همان متغیر، اما از قبل از نوع داده "تعداد" خروجی = true; // همان متغیر، اما در حال حاضر یک مقدار بولی را ذخیره می کند

مقدار یک متغیر را می توان به تعداد نامحدود بار تغییر داد.

// متغیر سن ایجاد می شود var age. // به متغیر age مقدار 67 age = 67 اختصاص داده می شود. // سن متغیر روی "سن بازنشستگی" تنظیم شده است age = "سن بازنشستگی"; // سن متغیر روی 55 سن = 55 تنظیم شده است.

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

نام متغیر می تواند از حروف، اعداد و نمادهای $ و _ تشکیل شده باشد. در این حالت اولین کاراکتر متغیر نباید عدد باشد. علاوه بر این، نمی توانید از کلمات رزرو شده به عنوان نام متغیر استفاده کنید.

// ایجاد دو متغیر، متغیر اول تلفن نام دارد، متغیر دوم meassage است. تلفن var، پیام؛

مورد حروف در نام متغیر مهم است. یعنی مثلاً متغیر phone و Phone دو متغیر متفاوت هستند.

اگر از حالت سخت استفاده نمی شود، می توانید یک متغیر با مقدار اولیه بدون کلمه کلیدی var ایجاد کنید.

قیمت = 250.00; // یک متغیر ایجاد کرد و آن را با عدد 250.00% = "20%" مقداردهی اولیه کرد. // یک متغیر ایجاد کرد و آن را با رشته "20%" مقداردهی اولیه کرد.

اما ایجاد متغیر به این روش توصیه نمی شود.

انواع داده ها

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

متغیرهای حاوی انواع داده های اولیه ارزش خود را به صراحت ذخیره می کنند.

5 نوع داده اولیه در جاوا اسکریپت وجود دارد:

  • عدد؛
  • رشته؛
  • نوع بولی (بولی);
  • خالی؛
  • تعریف نشده

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

Var x = 77، y = x; x = 55; y; // 77

متغیرهای حاوی یک شی در واقع خود شی را ذخیره نمی کنند، بلکه ارجاعی به آن هستند.

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

// مثال 1 (با نوع داده "شیء") var coord1 = (x: 77، y: 100)، coord2 = coord1; coord1.x = 55; // ویژگی x شی را به مقدار جدید coord2.x تنظیم کنید. // 55، زیرا coord1 و coord2 حاوی ارجاع به یک شی هستند // مثال 2 (با نوع داده آرایه) var coord1 = , coord2 = coord1; coord1 = 55; // عنصر با شاخص 0 را به یک مقدار جدید coord2 تنظیم کنید. // 55، زیرا coord1 و coord2 حاوی ارجاع به یک شی هستند // مثال 3 (با نوع داده "تاریخ") var date1 = new Date(2018,00,01), date2 = date1; date2 = date2.setDate(date2.getDate()+7); // تاریخ را 7 روز افزایش دهید date1; // 01/07/2018، زیرا date1 و date2 حاوی ارجاع به یک شی هستند

عدد

نوع داده عددی در جاوا اسکریپت عمومی است. برای نمایش اعداد صحیح و کسری استفاده می شود.

Var int = 5; // عدد صحیح var float = 5.98; // یک عدد کسری

فرمت نمایش اعداد در جاوا اسکریپت مطابق با استاندارد IEEE 754-2008 است.

اعداد صحیح در جاوا اسکریپت را می توان نه تنها در آن مشخص کرد سیستم اعشاریسیستم اعداد، بلکه در سیستم اعداد اکتالی (0) یا هگزادسیمال (0x) با استفاده از پیشوندهای نشان داده شده در پرانتز:

Var int = 010; // 8 int = 055; // 45 int = 0xFF; //255 int = 0xB8; // 184

نوشتن اعداد به صورت نمایی امکان پذیر است:

Var num = 2e3; // نماد نمایی عدد 2*10^3 (2000) num = 2e-3; // نماد نمایی عدد 2*10^-3 (0.002) num = 3.2e3; // 3200 num = 1.5e-2; // 0.015

علاوه بر اعداد، نوع داده عددی حاوی مقادیر عددی خاصی نیز می باشد:

  • بی نهایت (بی نهایت مثبت);
  • -بی نهایت (بی نهایت منفی);
  • NaN (عدد نیست).

مقدار ویژه Infinity به معنای عدد مثبت بسیار بزرگ است. عددی که نمی تواند در جاوا اسکریپت نمایش داده شود زیرا بسیار بزرگ است.

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

نمونه ای از عباراتی که در نتیجه محاسبه آنها مقادیر عددی خاصی را برمی گرداند:

5/0; // بی نهایت -5/0; // -Infinity Math.pow(10,399); // بی نهایت (10 به توان 399) Math.pow(10,399); // -بی نهایت (-10 به توان 399)

مقدار NaN در نتیجه انجام عملیات ریاضی که جاوا اسکریپت نمی تواند محاسبه کند، برگردانده می شود.

5 - "سلام"؛ // NaN (یک خط از عدد 5 کم کنید) 1000 / "20px"; // NaN (عدد تقسیم بر رشته) true * "1rem"; // NaN (مقدار بولی true ضرب در رشته)

آنچه بسیار جالب است این است که مقدار NaN در جاوا اسکریپت با هیچ چیز از جمله خودش برابر نیست.

NaN == NaN; // NaN نادرست === NaN; //نادرست

نوع داده بولی

Boolean یک نوع داده اولیه است که فقط دو مقدار دارد: true و false.

Var a = درست؛ var b = false;

رشته

رشته یک نوع داده است که در جاوا اسکریپت برای نمایش متن استفاده می شود.

یک رشته جاوا اسکریپت می تواند از 0 یا بیشترشخصیت ها.

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

ایجاد یک رشته (به معنای واقعی کلمه) با قرار دادن متن در تک یا انجام می شود نقل قول های دوگانه.

"جاوا اسکریپت"؛ "ECMAScript"؛

در جاوا اسکریپت هیچ تفاوتی بین نقل قول های تکی و دوگانه وجود ندارد.

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

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

""ECMAScript""; // بدون فرار (با استفاده از نقل قول تکی) "\"ECMAScript\""; // با فرار

یک رشته در جاوا اسکریپت می تواند شامل کاراکترهای خاصی باشد. به عنوان مثال، \n (فید خط)، \t (تب)، \r (بازگشت حمل) و غیره.

"این یک جمله است.\nو این نیز یک جمله است، اما از یک خط جدید شروع می شود.";

با رشته ها می توانید عملیات جمع (اتحاد) یا به عبارت دیگر الحاق را انجام دهید. برای این کار از عملگر "+" استفاده می شود. منظور از این عملیات الحاق خط دوم به انتهای خط اول است.

"من عاشق" + "جاوا اسکریپت"؛ // من عاشق جاوا اسکریپت هستم

مقدار "تعریف نشده" است

undefined یک نوع داده اولیه ویژه است که دارای یک مقدار واحد برابر با undefined است.

این نوع داده دارای یک متغیر اعلام شده است که هنوز مقداری به آن اختصاص داده نشده است.

Var num; //تعریف نشده

مقدار undefined نیز هنگام دسترسی به یک ویژگی ناموجود یک شی برگردانده می شود.

Var obj = (); // شی خالی obj.prop; //تعریف نشده

مقدار "تهی".

null یک نوع داده اولیه خاص است که یک مقدار واحد برابر با null دارد.

null فقط یک مقدار ویژه است که به معنای "هیچ" یا "مقدار ناشناخته" است. واضح است که هیچ معنایی ندارد

هدف - شی

یک شی یک ساختار داده ای است که از جفت نام-مقدار تشکیل شده است.

ایجاد یک شی با استفاده از نماد تحت اللفظی شی به صورت زیر انجام می شود:

( name_1: value_1، name_2: value_2، name_3: value_3، ... )

همانطور که می بینید، نام با استفاده از دو نقطه از مقدار جدا می شود و جفت ها با استفاده از کاما از یکدیگر جدا می شوند.

علاوه بر این، اگر مقدار جفت یک تابع باشد، آن را متد این شی می نامند. همه جفت های دیگر، یعنی جفت هایی که در آنها تابعی به عنوان مقدار استفاده نمی شود، ویژگی های شی نامیده می شوند.

به عبارت دیگر، یک شی یک ساختار داده ای است که از ویژگی ها و روش ها تشکیل شده است.

Var person = ( نام: "Vitaly"، سن: 27، getAge: تابع () ( بازگشت "Age: " + this.age; ) )

دسترسی به خصوصیات یک شی از طریق نقطه یا با استفاده از علامت گذاری براکت انجام می شود.

// نمایش مقدار ویژگی age در کنسول مرورگر // روش اول (از طریق یک نقطه) console.log(person.age); // روش 2 (با استفاده از پرانتز) console.log(person["age"]); // متد getAge را فراخوانی کنید. مقداری که برمی گرداند به کنسول console.log(person.getAge()) خروجی می شود.

نوع اپراتور

عملگر typeof برای به دست آوردن اطلاعات در مورد نوع داده یک عبارت به عنوان یک رشته استفاده می شود.

نحو عملگر typeof (گزینه بدون پرانتز):

نوع بیان

نحو عملگر نوع (با استفاده از پرانتز):

نوع (بیان)

نام وار، سن = 37، ایمیل = " [ایمیل محافظت شده]"، isLicense = true، علاقه: null، lastExperience: ( دوره: "ژوئن 2011 - ژوئن 2018"، مکان: "ISACA، مسکو"، موقعیت: "طراح وب")، getExperience: function() ( بازگشت lastExperience.period + " ("+ lastExperience.position + " - " + lastExperience.place + ")"؛ ); نوع نام؛ // نوع سن "تعریف نشده"؛ // نوع "تعداد" مجوز است؛ // نوع علاقه "بولی"؛ / / "object" (1) typeof lastExperience؛ // "object" typeof getExperience؛ // "function" (2) /* (1) یک اشکال است که از اولین پیاده‌سازی آن در زبان وجود داشته است. به منظور حفظ سازگاری ثابت شده است و این باید هنگام نوشتن اسکریپت ها در نظر گرفته شود؛ null یک نوع داده ابتدایی است، یک شی نیست */ /* (2) - بسیار راحت است که نوع عملگر توابع را جداگانه جدا کند؛ اما یک تابع در جاوااسکپت نیز شی است؛ این را می توان به راحتی با اجرای ساختار زیر تأیید کرد: */ typeof getExperience.__proto__.__proto__ // "object" (نمونه اولیه تابع یک شی است)

ثابت ها

با انتشار ECMAScript 6، ایجاد ثابت ها امکان پذیر شد. این کار با استفاده از کلمه کلیدی const انجام می شود.

Const COLOR_RED = "#ff0000";

ثابت متغیری است که مقدار آن از تغییر محافظت می شود. آن ها هنگامی که می خواهید مقدار را تغییر دهید، یک خطا پرتاب می شود.

Const COLOR_RED = "#ff0000"; COLOR_RED = "#f44336"; // Uncaught TypeError: انتساب به متغیر ثابت.

به عنوان مثال، اگر یک ثابت حاوی یک شی باشد، نمی توان آن را تغییر داد، یا بهتر بگوییم ارجاع به آن. اما خواص این شی را می توان تغییر داد.

Const COLORS = ( قرمز: "#ff0000"، سبز: "#00ff00"، آبی: "#00ff00" ) COLORS = ["#ff0000","#00ff00","#00ff00"]; // Uncaught TypeError: انتساب به متغیر ثابت. COLORS.green = "#4caf50";

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

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

این آموزش شما را با انواع داده های جاوا اسکریپت آشنا می کند.

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

تایپ پویا

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

در زبان های پویا می توان از متغیرهایی با همین نام برای ذخیره استفاده کرد انواع متفاوتداده ها.

به عنوان مثال، متغیر t که با کلمه کلیدی var تعریف شده است، می تواند انواع مختلفی از داده ها را ذخیره کند. همچنین می توان آن را مقدار دهی اولیه کرد اما تعریف نشده رها کرد:

var t = 16; // t یک عدد است
var t = "ترزا"; // t یک رشته است
var t = درست; // t یک بولی است
var t; // t تعریف نشده است

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

شماره

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

var num1 = 93;
var num2 = 93.00;

در مثال بالا، هر دو متغیر شامل اعداد هستند، خواه کاما در آن وجود داشته باشد یا خیر.

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

var num3 = 987e8; // 98700000000
var num4 = 987e-8; // 0.00000987

در جاوا اسکریپت، اعداد تا 15 رقم دقیق در نظر گرفته می شوند. به این معنی که پس از رسیدن به رقم شانزدهم، اعداد گرد می شوند:

var num5 = 999999999999999; // به عنوان 999999999999999 باقی می ماند
var num6 = 9999999999999999; // تا 10000000000000000 گرد شد

همچنین اعداد در جاوا اسکریپت دارای سه معنی نمادین هستند:

بی نهایت - مقدار عددی، که عدد مثبتی است که به بی نهایت نزدیک می شود.

بی نهایت یک مقدار عددی است که نشان دهنده یک عدد منفی است که به بی نهایت نزدیک می شود.

NaN - غیر یک عدد، حالت خاصی از یک عدد ممیز شناور.

Infinity و -Infinity هنگام شمارش یک عدد فراتر از حداکثر تعداد ممکن موجود در جاوا اسکریپت برمی گردند. آنها همچنین هنگام شمارش مقادیر تعریف نشده مانند تقسیم بر صفر ظاهر می شوند:

var num7 = 5 / 0; //بی نهایت
var num8 = -5 / 0; // -بی نهایت

از نظر فنی، اگر عدد بزرگتر از 1.797693134862315E+308 باشد، Infinity برگردانده می شود، که حد بالایی در جاوا اسکریپت است.

به همین ترتیب، زمانی که عدد از حد پایین تر، -1.797693134862316E+308 فراتر رود، -Infinity نمایش داده می شود.

عدد Infinity همچنین می تواند در حلقه ها استفاده شود:

در حالی که (num9 != بی نهایت) (
// کد در اینجا از طریق num9 = Infinity اجرا می شود
}

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

var x = 20 / "کوسه"؛ // x NaN خواهد بود

از آنجایی که 20 را نمی توان با رشته کوسه تقسیم کرد، مقدار x NaN خواهد بود.

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

var y = 20 / "5"؛ // y 4 خواهد شد

از آنجایی که جاوا اسکریپت می تواند 5 را به عنوان یک مقدار عددی در نظر بگیرد، 5 با عملگر تقسیم ریاضی کار می کند.

اگر یک متغیر در یک عبارت روی NaN تنظیم شود، نتیجه NaN خواهد بود، حتی اگر عملوند دوم یک عدد باشد.

var a = NaN;
var b = 37;
var c = a + b; // c NaN خواهد بود

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

رشته های

یک رشته دنباله ای از یک یا چند کاراکتر (حروف، اعداد و سایر نمادها) است. رشته ها داده های متنی را نشان می دهند.

در جاوا اسکریپت، رشته ها به دو صورت تک و دو کوتیومی می آیند. برای ایجاد یک رشته، باید دنباله ای از کاراکترها را در نقل قول قرار دهید:

var singleQuotes = "این یک رشته در گیومه های تک است.";
var doubleQuotes = "این یک رشته در دو گیومه است.";

می توانید از نقل قول های تک یا دوگانه استفاده کنید، اما باید از یک نوع نقل قول به طور مداوم در همان کد استفاده کنید.

برنامه "سلام، جهان!" نشان می دهد که چگونه رشته ها در برنامه نویسی کامپیوتر استفاده می شوند. اساسا، در در این مثالیک رشته دنباله ای از کاراکترها است که عبارت "سلام، دنیا!" در هشدار().





تابع helloFunction() (
هشدار ("سلام، جهان!");
}



مرا کلیک کن



با اجرای کد و کلیک بر روی دکمه من کلیک کنید، یک پنجره پاپ آپ با متن مشاهده خواهید کرد:

مانند سایر انواع داده، رشته ها را می توان در متغیرها ذخیره کرد.

var hw = "سلام، جهان!";

سپس می توانید رشته را با فراخوانی متغیر نمایش دهید:

...

var hw = "سلام، جهان!";
تابع helloFunction() (
هشدار (hw);
}

...
سلام دنیا!

رشته ها اجازه می دهند اطلاعات به کاربر منتقل شود و به برنامه برگردد.

نوع داده بولی

یک نوع داده Boolean (یا Boolean) از دو مقدار درست و نادرست تشکیل شده است.

این نوع برای نشان دادن مقادیر حقیقت مرتبط با منطق و الگوریتم ها در علوم کامپیوتر استفاده می شود.

توجه: این نوع داده به نام جورج بول ریاضیدان نامگذاری شده است.

بسیاری از عملیات در ریاضیات نتایجی را ایجاد می کنند که می توان آنها را درست یا نادرست ارزیابی کرد:

بیشتر از:

  • 500 > 100 درست است
  • 1 > 5 نادرست

کمتر از:

  • 200 < 400 true
  • 4 < 2 false
  • 5 = 5 درست است
  • 500 = 400 نادرست

مانند انواع دیگر، نوع داده Boolean را می توان در متغیرها ذخیره کرد.

var myBool = 5 > 8; // نادرست

از آنجایی که 5 بزرگتر از 8 نیست، myBool false خواهد بود.

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

آرایه ها

یک آرایه می تواند حاوی چندین مقدار در یک متغیر باشد. این بدان معناست که شما می توانید لیستی از مقادیر را در داخل یک آرایه ذخیره کرده و آنها را تکرار کنید.

هر مقدار درون آرایه یک عنصر نامیده می شود. شما می توانید با استفاده از یک شاخص به عناصر یک آرایه دسترسی داشته باشید.

آرایه ها با براکت مربع تعریف می شوند.

آرایه رشته مانند این است:

var fish = ["کوسه"، "کاتل ماهی"، "دلقک ماهی"، "مارماهی"];

با فراخوانی متغیر ماهی، نتیجه را خواهید گرفت:

["کوسه"، "کاتر ماهی"، "دلقک ماهی"، "مارماهی"]

آرایه ها یک نوع داده بسیار انعطاف پذیر هستند زیرا قابل تغییر هستند: می توانید مقادیر عناصر را اضافه، حذف و تغییر دهید.

اشیاء

یک شی در جاوا اسکریپت از جفت کلید: ارزش تشکیل شده است.

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

جفت ها در جسم با فاصله از هم جدا می شوند:

var sammy = (نام:"والی"، نام خانوادگی:"کوسه"، رنگ:"آبی"، مکان:"اقیانوس");

یک شی را می توان روی چندین خط نیز نوشت (این امر به ویژه برای اشیاء بزرگ صادق است).

ور والی = (
نام: "والی"،
نام خانوادگی: "کوسه"،
رنگ آبی"،
مکان: "اقیانوس"
};

کار با انواع داده های متعدد

هر برنامه‌ای که ایجاد می‌کنید احتمالاً حاوی چندین نوع داده خواهد بود، اما عملیات معمولاً روی یک نوع داده انجام می‌شود. ریاضی برای اعداد اعمال می شود و برش برای رشته ها اعمال می شود.

با استفاده از عملگرهایی که با انواع داده ها کار می کنند (به عنوان مثال، عملگر + می تواند اعداد را اضافه کند یا رشته ها را به هم متصل کند)، می توانید نتایج غیرمنتظره ای دریافت کنید.

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

var o = "اقیانوس" + 5 + 3;

با فراخوانی متغیر o نتیجه زیر را دریافت خواهید کرد:

با این حال، اگر رشته ابتدا شامل اعداد و سپس یک رشته باشد، عملگر + جمع و سپس الحاق را انجام می دهد:

var p = 5 + 3 + "اقیانوس"؛
8 اقیانوس

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

نتیجه

اکنون با انواع داده جاوا اسکریپت آشنا شدید. هر یک از انواع ذکر شده در اینجا هنگام نوشتن برنامه های جاوا اسکریپت مهم است.

برچسب ها: متغیر، شناسه ای است که مقداری به آن اختصاص داده شده است. یک متغیر در یک برنامه قابل دسترسی است، بنابراین با مقدار اختصاص داده شده به آن کار می کند.

یک متغیر جاوا اسکریپت خود حاوی اطلاعاتی در مورد نوع مقادیری نیست که در آن ذخیره می شود. به این معنی که با نوشتن مثلاً یک رشته روی یک متغیر، بعداً می توانید یک عدد روی آن بنویسید. چنین عملیاتی باعث ایجاد خطا در برنامه نمی شود. به همین دلیل است که گاهی اوقات جاوا اسکریپت را یک زبان «تایپ نشده» می نامند.

قبل از استفاده از یک متغیر، باید آن را با استفاده از کلمه کلیدی var یا let اعلان کرد. اگر در مورد یک ثابت صحبت می کنیم، از کلمه کلیدی const استفاده می شود. شما می توانید بدون استفاده از این کلمات کلیدی یک متغیر را اعلام کرده و مقداری را به آن اختصاص دهید، اما انجام این کار توصیه نمی شود.

کلمه کلیدی var قبل از استاندارد ES2015، استفاده از کلمه کلیدی var بود تنها راهاعلامیه های متغیر

Var a = 0
اگر var را در این ساختار حذف کنید، مقدار به یک متغیر اعلام نشده اختصاص داده می شود. نتیجه این عملیات بستگی به حالتی دارد که برنامه در آن اجرا می شود.

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

تابع notVar() (bNotVar = 1 //بهتر است این کار را نکنید) notVar() console.log(bNotVar)
1 در کنسول ظاهر می شود؛ هیچ کس معمولاً چنین رفتاری را از یک برنامه انتظار ندارد؛ عبارت bNotVar = 1 شبیه تلاشی برای اعلام و مقداردهی اولیه یک متغیر نیست، بلکه مانند تلاشی برای دسترسی به متغیری است که در محدوده ای خارج از محدوده قرار دارد. عملکرد (این کاملا طبیعی است). در نتیجه، اعلان های متغیر ضمنی برای کسانی که کد را می خوانند گیج کننده است و می تواند منجر به رفتار غیرمنتظره برنامه شود. بعداً در مورد توابع و دامنه ها صحبت خواهیم کرد، اما در حال حاضر سعی کنید همیشه از کلمات کلیدی تخصصی استفاده کنید که معنای یک عبارت عبارت است از اعلان یک متغیر. اگر در این مثال بدنه تابع به صورت var bNotVar = 1 بازنویسی شود، تلاش برای اجرای قطعه کد بالا منجر به یک پیام خطا می شود (شما می توانید آن را در کنسول مرورگر مشاهده کنید).

به عنوان مثال، ممکن است به این صورت باشد: Uncaught ReferenceError: bNotVar تعریف نشده است. معنای آن به این واقعیت خلاصه می شود که برنامه نمی تواند با یک متغیر غیر موجود کار کند. دیدن چنین پیغام خطایی در اولین راه‌اندازی برنامه بسیار بهتر از نوشتن کد نامفهومی است که می‌تواند رفتار غیرمنتظره‌ای داشته باشد.

اگر هنگام اعلان یک متغیر، مقدار اولیه به آن داده نشود، به طور خودکار مقدار تعریف نشده به آن اختصاص داده می شود.

Var a //typeof a === "تعریف نشده"
متغیرهای اعلام شده با کلمه کلیدی var را می توان بارها اعلام کرد و مقادیر جدیدی به آنها اختصاص داد (اما این می تواند برای شخصی که کد را می خواند گیج کننده باشد).

Var a = 1 var a = 2
شما می توانید چندین متغیر را در یک عبارت اعلام کنید:

Var a = 1، b = 2
محدوده یک متغیر ناحیه ای از برنامه است که این متغیر در آن قابل دسترسی (قابل مشاهده) است.

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

اگر تابعی که از var استفاده می‌کند، متغیری را که نام آن با متغیری در محدوده جهانی یکسان است، اعلام کند، متغیر سراسری را «باید» می‌کند. یعنی هنگام دسترسی به چنین متغیری در داخل یک تابع، از نسخه محلی آن استفاده خواهد شد.

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

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

▍کلید واژه let کلمه کلیدی let در ES2015 معرفی شد و به روشی ساده می‌توان آن را نسخه «block» var نامید. متغیرهای اعلام شده با کلمه کلیدی let به بلوک، عبارت یا عبارتی که در آن اعلان شده است و به بلوک های تودرتو محدود می شوند.

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

با استفاده از کلمه کلیدی let، می توانید از ابهامات ناشی از کلمه کلیدی var اجتناب کنید (به عنوان مثال، نمی توانید با استفاده از let یک متغیر را دو بار اعلام کنید). استفاده از let در خارج از یک تابع، مثلاً هنگام راه اندازی حلقه ها، متغیرهای سراسری ایجاد نمی کند.

به عنوان مثال، این کد یک خطا ایجاد می کند:

برای (بگذارید i = 0؛ i< 5; i++) { console.log(i) } console.log(i)
اگر زمانی که حلقه اولیه می شود، شمارنده i با استفاده از کلمه کلیدی var اعلام شود، پس از اتمام کار، i خارج از حلقه در دسترس خواهد بود.

این روزها، هنگام توسعه برنامه های JS بر اساس استانداردهای مدرن، کاملاً ممکن است که var را کنار بگذاریم و فقط از کلمات کلیدی let و const استفاده کنیم.

▍کلید کلیدی const مقادیر متغیرهای اعلام شده با استفاده از کلمات کلیدی var یا let را می توان رونویسی کرد. اگر از const به جای این کلمات کلیدی استفاده شود، نمی توان به یک ثابت اعلام شده و مقداردهی اولیه با کمک آن، مقدار جدیدی نسبت داد.

Const a = "تست"
در این مثال نمی توان به ثابت a مقدار جدیدی نسبت داد. اما باید توجه داشت که اگر a یک مقدار اولیه مانند یک عدد نباشد، بلکه یک شی باشد، استفاده از کلمه کلیدی const این شی را از تغییرات محافظت نمی کند.

وقتی آنها می گویند که یک شی در یک متغیر ذخیره می شود، منظور آنها این است که متغیر یک مرجع به شی را ذخیره می کند. این پیوند را نمی توان تغییر داد، اما خود شیئی که پیوند به آن منتهی می شود را می توان تغییر داد.

کلمه کلیدی const اشیا را تغییرناپذیر نمی کند. به سادگی از ارجاعات به آنها که در ثابت های مربوطه نوشته شده اند از تغییرات محافظت می کند. این چیزی است که به نظر می رسد:

Const obj = () console.log(obj.a) obj.a = 1 //works console.log(obj.a) //obj = 5 //خطا ایجاد می کند
در طول مقداردهی اولیه، یک شی خالی جدید روی ثابت obj نوشته می شود. تلاش برای دسترسی به ویژگی a آن که وجود ندارد، باعث خطا نمی شود. کنسول تعریف نشده می شود. پس از آن، یک ویژگی جدید به شی اضافه می کنیم و سعی می کنیم دوباره به آن دسترسی پیدا کنیم. این بار مقدار این ویژگی در کنسول 1 است. اگر خط آخر مثال را لغو کامنت کنید، تلاش برای اجرای این کد منجر به خطا می شود.

کلمه کلیدی const بسیار شبیه به let است، به ویژه دارای محدوده بلوکی است.

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

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

برای تعیین نوع داده یک مقدار، می توانید از عملگر typeof استفاده کنید. رشته ای را برمی گرداند که نوع عملوند را نشان می دهد.

▍انواع داده اولیه در اینجا لیستی از انواع داده های اولیه جاوا اسکریپت آمده است:
  • عدد
  • رشته
  • بولی (مقدار بولی)
  • null (مقدار ویژه null)
  • تعریف نشده (مقدار ویژه تعریف نشده)
  • نماد (نماد، مورد استفاده در موارد خاص، معرفی شده در ES6)
در اینجا اسامی انواع داده ها به عنوان عملگر typeof برگردانده می شود.

بیایید در مورد پرکاربردترین انواع داده از این لیست صحبت کنیم.

نوع عدد مقادیر نوع شماره در جاوا اسکریپت به صورت اعداد ممیز شناور با دقت دوگانه ۶۴ بیتی نشان داده می شود.

در کد، لفظ های عددی به صورت اعداد صحیح و کسری در سیستم اعداد اعشاری نشان داده می شوند. برای نوشتن اعداد می توانید از روش های دیگری استفاده کنید. به عنوان مثال، اگر یک پیشوند 0x در ابتدای یک حرف عددی وجود داشته باشد، به عنوان یک عدد نوشته شده با نماد هگزادسیمال درک می شود. اعداد را می توان به صورت نمایی نیز نوشت (حرف e را می توان در چنین اعدادی یافت).

در اینجا نمونه هایی از نوشتن اعداد صحیح آورده شده است:

10 5354576767321 0xCC // عدد هگزادسیمال
در اینجا کسرها هستند.

3.14 .1234 5.2e4 //5.2 * 10^4
لفظ های عددی (این رفتار برای برخی از انواع اولیه دیگر نیز معمول است)، هنگامی که سعی می کنید به آنها به عنوان اشیا دسترسی پیدا کنید، به طور خودکار، در طول مدت عملیات، به اشیاء مربوطه تبدیل می شوند که به آنها "پوشش های شی" می گویند. در این مورد ما در مورد Wrapper شی Number صحبت می کنیم.

برای مثال، در اینجا تلاش برای دسترسی به متغیر a که حاوی یک کلمه ی عددی است، به عنوان یک شی در کنسول Google Chrome به نظر می رسد.

اشاره بسته بندی شیء شماره

برای مثال، اگر از متد toString() از یک شی از نوع Number استفاده کنید، نمایش رشته ای از عدد را برمی گرداند. دستور مربوطه به این شکل است که می تواند در کنسول مرورگر (و در کد معمولی) به صورت زیر اجرا شود:

A.toString()
به دو پرانتز بعد از نام متد توجه کنید. اگر آنها را تامین نکنید، سیستم خطایی ایجاد نمی کند، اما به جای خروجی مورد انتظار، چیزی را در کنسول خواهید دید که اصلا شبیه نمایش رشته ای عدد 5 نیست.

شیء شماره جهانی را می توان به عنوان سازنده استفاده کرد و با کمک آن اعداد جدیدی ایجاد کرد (اما تقریباً هرگز در این شکل استفاده نمی شود) همچنین می تواند به عنوان یک موجودیت مستقل بدون ایجاد نمونه های آن (یعنی اعداد خاص) استفاده شود. با کمک آن ارائه شده است). برای مثال، ویژگی Number.MAX_VALUE آن حاوی حداکثر مقدار عددی قابل نمایش در جاوا اسکریپت است.

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

"یک رشته" "رشته ای دیگر"
مقادیر رشته را می توان با استفاده از کاراکتر بک اسلش به چند قسمت تقسیم کرد.

"یک رشته"
این خط ممکن است حاوی توالی های به اصطلاح فرار باشد که وقتی خط به کنسول خروجی می شود تفسیر می شوند. به عنوان مثال، دنباله \n به معنای یک کاراکتر خط جدید است. کاراکتر بک اسلش همچنین می تواند برای اضافه کردن علامت نقل قول به رشته های محصور شده در همان علامت نقل قول استفاده شود. فرار از کاراکتر نقل قول با \ باعث می شود که سیستم آن را به عنوان یک کاراکتر خاص در نظر نگیرد.

"من یک توسعه دهنده هستم"
رشته ها را می توان با استفاده از عملگر + به هم متصل کرد.

"الف" + "رشته"

واژه‌های الگو در ES2015، به اصطلاح قالب‌های قالب یا رشته‌های الگو ظاهر شد. آن‌ها رشته‌هایی هستند که در پس‌کوتیشن (`) محصور شده‌اند و ویژگی‌های جالبی دارند.

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

یک رشته با $(something)` `یک رشته با $(something+somethingElse)`` یک رشته با $(obj.something())`
استفاده از بک نقل قول نوشتن لفظ رشته ای را در چند خط آسان تر می کند:

"رشته ای با $(چیزی)".

جاوا اسکریپت نوع بولی دارای یک جفت کلمه رزرو شده است که هنگام کار با مقادیر بولی استفاده می شود: true و false. عملگرهای مقایسه، مانند ==، ===،< , >، درست یا نادرست را برگردانید.

عبارات بولی در عباراتی مانند if و while برای کمک به کنترل جریان یک برنامه استفاده می شود.

لازم به ذکر است که در جایی که مقدار true یا false انتظار می رود، می توانید از مقادیر دیگری استفاده کنید که به طور خودکار توسط زبان به عنوان true (truth) یا false (falsy) ارزیابی می شوند.

به طور خاص، مقادیر زیر مقادیر نادرست هستند:

0 -0 NaN تعریف نشده تهی "" //رشته خالی
مقادیر باقیمانده درست هستند.

جاوا اسکریپت نوع null دارای یک مقدار خاص است، null که نشان دهنده عدم وجود یک مقدار است. مقادیر مشابه در زبان های دیگر استفاده می شود Type undefined مقدار undefined که روی یک متغیر خاص نوشته می شود نشان می دهد که این متغیر مقدار دهی اولیه نشده است و هیچ مقداری برای آن وجود ندارد.

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

برای بررسی مقدار undefined، می توانید از ساختار زیر استفاده کنید.

نوع متغیر === "تعریف نشده"

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

1/2 i++ i -= 2 i * 2

عبارات رشته ای نتیجه ارزیابی چنین عباراتی رشته ها هستند.

"A " + "string" "A " += "string"

عبارات اولیه کلمات، ثابت ها و ارجاع به شناسه ها در این دسته قرار می گیرند.

2 0.02 "something" true false this // زمینه اجرا، ارجاع به شی فعلی تعریف نشده i // که در آن i یک متغیر یا ثابت است
این شامل برخی از کلمات کلیدی و ساختارهای جاوا اسکریپت نیز می شود.

تابع کلاس تابع* //تولید مولد //فرمان توقف/ازسرگیری بازده مولد* //تخصیص به یک تابع غیرهمگام تکرارکننده یا مولد دیگر* //عبارات عملکردی ناهمزمان در انتظار //سازمان انتظار برای اجرای یک تابع ناهمزمان /الگو /من // عبارت منظم() //گروه بندی

عبارات مقداردهی اولیه برای آرایه ها و اشیا //array literal () //object literal (a: 1, b: 2) (a: (b: 1)) عبارات منطقی استفاده از عبارات منطقی عملگرهای منطقی، نتیجه محاسبه آنها مقادیر منطقی است.

A && b a || b!a

عبارات دسترسی به ویژگی این عبارات به شما امکان می دهد به ویژگی ها و روش های اشیا دسترسی داشته باشید.

Object.property // فراخوانی یک ویژگی (یا متد) یک شیء شیء["مشخصیت"]

عبارات ایجاد شیء new object() new a(1) new MyRectangle("name", 2, (a: 4)) عبارات اعلان تابع function() () function(a, b) ( return a * b ) (a, b) => a * b a => a * 2 () => ( بازگشت 2 ) عبارات فراخوانی چنین عباراتی برای فراخوانی توابع یا متدهای اشیا استفاده می شود.

A.x(2) window.resize()

کار با اشیاء قبلاً در بالا با اشیاء مواجه شده‌ایم که در مورد لفظ شیء صحبت می‌کنیم، متدهای آنها را فراخوانی می‌کنیم و به ویژگی‌های آنها دسترسی پیدا می‌کنیم. در اینجا ما در مورد اشیاء با جزئیات بیشتری صحبت خواهیم کرد، به ویژه، ما به مکانیسم وراثت اولیه و استفاده از کلمه کلیدی کلاس نگاه خواهیم کرد.▍وارثت نمونه اولیه جاوا اسکریپت در بین زبان های برنامه نویسی مدرن از آنجایی که از وراثت اولیه پشتیبانی می کند برجسته است. . بیشتر زبان های شی گرا از مدل ارث بری کلاس استفاده می کنند.

هر شی جاوا اسکریپت دارای یک ویژگی خاص (__proto__) است که به شی دیگری اشاره می کند که نمونه اولیه آن است. یک شی خواص و روش های نمونه اولیه را به ارث می برد.

فرض کنید یک شی داریم که با استفاده از یک شیء واقعی ایجاد شده است.

ماشین ثابت = ()
یا با استفاده از سازنده Object یک شی ایجاد کردیم.

Const car = New Object()
در هر یک از این موارد، نمونه اولیه شی خودرو Object.prototype خواهد بود.

اگر آرایه ای ایجاد کنید که یک شی نیز باشد، نمونه اولیه آن شی Array.prototype خواهد بود.

لیست Const = //یا لیست const = New Array()
می توانید این مورد را به صورت زیر بررسی کنید.

Car.__proto__ == Object.prototype //true car.__proto__ == new Object().__proto__ //true list.__proto__ == Object.prototype //false list.__proto__ == Array.prototype //true__ list.__to == new Array().__proto__ //true
در اینجا ما از ویژگی __proto__ استفاده کردیم؛ نیازی نیست که در دسترس توسعه دهنده باشد، اما معمولاً می توان به آن دسترسی داشت. لازم به ذکر است که بیشتر به روشی قابل اعتمادبرای بدست آوردن نمونه اولیه یک شی، استفاده از متد ()getPrototypeOf global است هدف - شی.

Object.getPrototypeOf(شیء جدید())
تمام ویژگی ها و روش های یک نمونه اولیه در دسترس شیئی است که آن نمونه اولیه را دارد. برای مثال، در اینجا لیست آنها برای یک آرایه به نظر می رسد.


اشاره آرایه

نمونه اولیه برای همه اشیا Object.prototype است.

Array.prototype.__proto__ == Object.prototype
Object.prototype نمونه اولیه ندارد.

آنچه در بالا دیدیم نمونه ای از یک زنجیره اولیه است.

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

علاوه بر ایجاد اشیاء با استفاده از عملگر جدید و استفاده از لفظ شی یا آرایه، می توانید نمونه ای از یک شی را با استفاده از متد Object.create() ایجاد کنید. اولین آرگومان ارسال شده به این متد یک شی است که نمونه اولیه شی ای است که ایجاد می کند.

Const car = Object.create(Object.Prototype)
با استفاده از متد isPrototypeOf() می توانید بررسی کنید که آیا یک شی بخشی از زنجیره نمونه اولیه یک شی دیگر است.

لیست Const = Array.prototype.isPrototypeOf(list)

توابع سازنده در بالا، ما اشیاء جدیدی را با استفاده از توابع سازنده از قبل موجود در زبان ایجاد کردیم (کلمه کلیدی new هنگام فراخوانی آنها استفاده می شود). شما می توانید چنین توابعی را خودتان ایجاد کنید. بیایید به یک مثال نگاه کنیم.

تابع Person(name) ( this.name = name ) Person.prototype.hello = function() ( console.log(this.name) ) let person = new Person("Flavio") person.hello() console.log( Person.prototype.isPrototypeOf(person))
در اینجا ما یک تابع سازنده ایجاد می کنیم. هنگام فراخوانی ایجاد می شود شی جدید، که با کلید نشان داده می شود این را بگودر بدنه سازنده یک ویژگی name به این شی اضافه می کنیم و آنچه را که به سازنده ارسال شده است روی آن می نویسیم. این شی به طور خودکار از سازنده برگردانده می شود. با استفاده از تابع سازنده، می‌توانید اشیاء زیادی ایجاد کنید که ویژگی‌های نام آن‌ها حاوی آن چیزی است که هنگام ایجاد به سازنده ارسال شده است.

پس از ایجاد سازنده، تابعی را به نمونه اولیه آن اضافه می کنیم که مقدار ویژگی نام شی ایجاد شده با استفاده از این تابع را در کنسول چاپ می کند. تمام اشیاء ایجاد شده با استفاده از این سازنده نمونه اولیه یکسانی دارند و بنابراین از تابع hello() یکسانی استفاده می کنند. این را می توان به راحتی با ایجاد یک شی دیگر از نوع Person و مقایسه تابع hello() آن با تابع شی از قبل موجود در مثال بررسی کرد (در این مورد، نام تابع بدون پرانتز نوشته می شود).

▍کلاس ها در استاندارد ES6، جاوا اسکریپت مفهوم "کلاس" را معرفی کرد.

پیش از این، جاوا اسکریپت فقط می توانست از مکانیزم وراثت اولیه که در بالا توضیح داده شد استفاده کند. این مکانیسم برای برنامه نویسانی که از زبان های دیگر به JS آمده بودند غیرمعمول به نظر می رسید. بنابراین، کلاس هایی در زبان ظاهر شدند که در اصل، "شکر نحوی" برای مکانیسم وراثت نمونه اولیه هستند. یعنی اشیاء ایجاد شده است روش سنتیو اشیاء ایجاد شده با استفاده از کلاس ها دارای نمونه اولیه هستند.

اعلان کلاس این چیزی است که یک اعلان کلاس به نظر می رسد.

Class Person ( constructor(name) ( this.name = name ) hello() ( return "Hello, I am " + this.name + "." ) )
یک کلاس دارای یک شناسه است که می تواند برای ایجاد اشیاء جدید با استفاده از ساختار ()ClassIdentifier جدید استفاده شود.

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

شما می توانید متدها را در یک کلاس اعلام کنید. در مورد ما، hello() متدی است که می تواند توسط تمام اشیاء ایجاد شده بر اساس کلاس فراخوانی شود. این چیزی است که ایجاد یک شی جدید با استفاده از کلاس Person به نظر می رسد.

Const flavio = شخص جدید ("Flavio") flavio.hello()

کلاس های وراثت مبتنی بر کلاس می توانند کلاس های دیگر را گسترش دهند. اشیاء ایجاد شده از چنین کلاس هایی هم متدهای کلاس اصلی و هم متدهای مشخص شده در کلاس توسعه یافته را به ارث می برند.

اگر کلاسی که کلاس دیگری را گسترش می دهد (یک زیر کلاس از آن کلاس) متدی داشته باشد که نام آن با کلاس والد یکی است، آن متد بر روش اصلی اولویت دارد.

برنامه نویس کلاس Person را گسترش می دهد ( hello() ( return super.hello() + "I am a programmer." ) ) const flavio = new programmer("Flavio") flavio.hello()
فراخوانی متد hello() در مثال بالا رشته Hello, I am Flavio را برمی گرداند. من یک برنامه نویس هستم.

کلاس ها وجود متغیرها (ویژگی ها) را فراهم نمی کنند؛ ویژگی های اشیاء ایجاد شده با استفاده از کلاس ها باید در سازنده پیکربندی شوند.

در یک کلاس، می توانید با استفاده از کلمه کلیدی super به کلاس والد دسترسی پیدا کنید.

روش‌های استاتیک روش‌های توصیف‌شده در یک کلاس را می‌توان با دسترسی به اشیاء ایجاد شده از کلاس فراخوانی کرد، اما نه با دسترسی به خود کلاس. متدهای استاتیک را می توان با دسترسی مستقیم به کلاس فراخوانی کرد.روش های خصوصی جاوا اسکریپت مکانیزم داخلی ندارد که به شما امکان می دهد متدهای خصوصی را اعلام کنید. این محدودیت را می توان به عنوان مثال با استفاده از closures غلبه کرد دریافت کننده ها و تنظیم کننده ها می توانید متدها را با پیشوند کردن آنها با کلمات کلیدی get یا set در یک کلاس تعریف کنید. این به شما اجازه می دهد تا به اصطلاح گیرنده ها و تنظیم کننده ها ایجاد کنید - توابعی که برای کنترل دسترسی به ویژگی های اشیاء ایجاد شده بر اساس کلاس استفاده می شوند. هنگامی که شما سعی می کنید مقدار یک ویژگی شبه را بخوانید، دریافت کننده فراخوانی می شود و زمانی که می خواهید مقدار جدیدی برای آن بنویسید، تنظیم کننده فراخوانی می شود.

Class Person ( سازنده (نام) ( this.userName = name ) set name (value) (this.userName = value ) get name() ( return this.userName ) )

خلاصه در این مطلب در مورد متغیرها، انواع داده ها، عبارات و کار با اشیاء در جاوا اسکریپت صحبت کردیم. موضوع مطالب بعدی ما توابع خواهد بود.

خوانندگان عزیز! اگر مدت زیادی است که در JS می نویسید، لطفاً احساس خود را در مورد ظاهر کلمه کلیدی کلاس در زبان به ما بگویید.

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

تایپ پویا

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

در جاوا اسکریپت، انواع داده ها را می توان به دو دسته تقسیم کرد: انواع ساده (همچنین ابتدایی) و ترکیبی (همچنین مرجع یا شیء نامیده می شود).

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

انواع داده ها

استاندارد ECMAScript انواع داده های زیر را تعریف می کند:

  • انواع ساده (که ابتدایی نیز نامیده می شود):
    • Boolean - می تواند دو مقدار ممکن را بگیرد که گاهی اوقات true و false نامیده می شود.
    • null - مقدار null نشان دهنده مرجعی است که معمولاً عمداً به یک شی یا آدرس ناموجود یا نادرست اشاره می کند.
    • undefined - نشان دهنده یک متغیر جهانی از پیش تعریف شده است که با مقداری تعریف نشده مقداردهی اولیه شده است.
    • عددی (شماره انگلیسی) - نوع داده عددی در قالب یک عدد ممیز شناور با دقت دوگانه 64 بیتی.
    • رشته (رشته انگلیسی) - دنباله ای از کاراکترهایی است که برای نمایش متن استفاده می شود.
    • نماد (eng. Symbol) نوع داده ای است که نمونه های آن منحصر به فرد و تغییرناپذیر هستند. (جدید در ECMAScript 6).
  • یک شی مجموعه ای از مقادیر نامگذاری شده است که معمولاً ویژگی های یک شی نامیده می شود.
تفاوت بین انواع اولیه و ترکیبی

قبل از اینکه به هر نوع داده نگاه کنیم، ابتدا با نوع عملگر آشنا می شویم. عملگر typeof رشته ای را برمی گرداند که نوع داده یک متغیر را توصیف می کند.
بیایید با استفاده از مثال زیر نشان دهیم که چگونه کار می کند:

اسکریپت مثال متغیرها را اعلام می کند، آنها را مقدار دهی اولیه می کند (مقادیر را اختصاص می دهد) و سپس نوع هر متغیر را چاپ می کند.

تفاوت بین انواع داده های اولیه و ترکیبی زمانی رخ می دهد که مقادیر آنها کپی شود.

وقتی به یک متغیر مقداری از نوع ساده اختصاص می‌یابد، خود مقدار (مثلاً یک عدد) روی متغیر نوشته می‌شود. وقتی یک متغیر از نوع ساده را به متغیر دیگری اختصاص می دهیم، مقدار را کپی می کند. در نتیجه، هر متغیر مقدار خاص خود را خواهد داشت و تغییرات در یکی از متغیرها به هیچ وجه بر مقدار متغیر دیگر تأثیری نخواهد داشت:

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

انواع ابتدایی

همه انواع داده ها در جاوا اسکریپت، به جز اشیا، تغییرناپذیر یا تغییرناپذیر هستند. این بدان معنی است که مقادیر آنها را نمی توان تغییر داد، بلکه فقط با یک مقدار جدید و متفاوت بازنویسی کرد. به عنوان مثال، رشته ها را نمی توان کاراکتر به کاراکتر تنظیم کرد - آنها فقط می توانند به طور کامل بازنویسی شوند. مقادیر چنین انواعی "ابتدایی" نامیده می شوند.

ساده ترین داده هایی که یک برنامه می تواند با آنها کار کند، Literals نامیده می شوند. Literal ها اعداد یا رشته هایی هستند که برای نشان دادن مقادیر در جاوا اسکریپت استفاده می شوند. اطلاعات ارائه شده می تواند بسیار متنوع باشد، و بنابراین معانی متفاوت است انواع مختلف. ساده ترین انواع داده در جاوا اسکریپت انواع داده های پایه نامیده می شوند: اعداد، رشته ها و بولی ها. همه آنها به عنوان "ابتدایی" طبقه بندی می شوند.

نوع بولی (منطقی) "بولی"

مقادیر منطقی یا بولی (پس از نام مخترع آنها - Boolean)، می تواند تنها یکی از دو مقدار را داشته باشد: true (true) یا false (false). ارزش ها درست استیا false معمولا در مقایسه یا عملیات منطقی ظاهر می شود.

برنامه زیر یک متغیر Boolean ایجاد می کند و سپس مقدار آن را با استفاده از دستور if/else آزمایش می کند:

هر عبارتی را می توان به عنوان یک عبارت مقایسه ای استفاده کرد. هر عبارتی که 0، null، undefined یا رشته خالی را برمی گرداند به عنوان false تفسیر می شود. عبارتی که هر مقدار دیگری را مشخص می کند به عنوان true تفسیر می شود.

توجه: هنگام نوشتن مقادیر بولی، آنها در گیومه قرار نمی گیرند: var myVar = true;
در همان زمان، اعلام var myVar = "true" یک متغیر رشته ایجاد می کند.

نوع داده شماره

در جاوا اسکریپت، هیچ تمایزی بین یک عدد صحیح و یک عدد ممیز شناور وجود ندارد - اساسا، جاوا اسکریپت همه اعداد را به عنوان یک مقدار ممیز شناور نشان می دهد.

جاوا اسکریپت از فرمت 64 بیتی تعریف شده توسط استاندارد IEEE-754 برای نمایش اعداد استفاده می کند. این فرمت قادر به نمایش اعداد در محدوده ± 1.7976931348623157 × 10308 تا ± 5 × 10 -324 است.

عددی که مستقیماً در کد برنامه یافت می شود، لفظ عددی نامیده می شود. علاوه بر اعداد صحیح اعشاری، جاوا اسکریپت مقادیر هگزادسیمال را تشخیص می دهد.
اعداد هگزادسیمال می توانند شامل هر دنباله ای از اعداد از 0 تا 9 و حروف از a تا f باشند که باید با دنباله کاراکتر "0x" شروع شود.

Var a = 255; var b = 0xFF; // شماره 255 در نماد هگزادسیمال

علاوه بر این، جاوا اسکریپت حاوی مقادیر عددی خاصی است:

  • NaN (عدد یا خطای محاسباتی نیست). نتیجه یک عملیات ریاضی نادرست روی داده های نامعتبر است، مانند رشته ها یا یک مقدار تعریف نشده.
  • بی نهایت (بی نهایت مثبت). زمانی استفاده می شود که عدد مثبت آنقدر بزرگ باشد که در جاوا اسکریپت نمایش داده نشود.
  • -بی نهایت (بی نهایت منفی). زمانی استفاده می شود که یک عدد منفی برای نمایش در جاوا اسکریپت خیلی بزرگ باشد.
  • ± 0 (مثبت و منفی 0). جاوا اسکریپت بین صفر مثبت و منفی تمایز قائل می شود.
نوع داده رشته ای

یک نوع رشته یک دنباله مرتب و تغییرناپذیر از مقادیر 16 بیتی است که هر یک نشان دهنده یک کاراکتر یونیکد (حروف، اعداد، علائم نگارشی، کاراکترهای خاص و فاصله) است. خطوط می توانند خالی یا شامل یک یا چند کاراکتر باشند. رشته ها با استفاده از نقل قول های دوتایی (") یا تک (") ایجاد می شوند. رشته‌ای که با یک جفت گیومه تکی محدود می‌شود، می‌تواند از گیومه‌های دوتایی استفاده کند، و برعکس، تک‌گیومه‌ها را می‌توان در یک رشته محصور شده توسط یک جفت گیومه دوگانه استفاده کرد:

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

var firstName = "حداکثر"; //خطای نحو - نقل قول های مختلف

توجه: جاوا اسکریپت نوع داده تک نویسه خاصی مانند char در C، C++ و جاوا ندارد. یک کاراکتر با یک رشته طول واحد نمایش داده می شود.

نوع داده تهی نوع تهی حاوی یک مقدار خاص است - null.

کلمه کلیدی null را نمی توان به عنوان یک تابع یا نام متغیر استفاده کرد. مقدار null ارجاع به یک شی "خالی" است و هدف خاصی دارد - معمولاً برای مقداردهی اولیه متغیری که بعداً مقداری به آن اختصاص داده می شود استفاده می شود.

عملگر typeof برای یک مقدار null رشته "object" را برمی گرداند، که نشان می دهد که مقدار null یک شی "خالی" ویژه است.

نوع داده تعریف نشده

یک نوع تعریف نشده نوع خود را تشکیل می دهد که حاوی یک مقدار خاص است - تعریف نشده. این مقدار متغیری است که با استفاده از عملگر var اعلام شده است، اما مقدار دهی اولیه نشده است:

مقدار undefined هنگام دسترسی به متغیری که هرگز یک مقدار، یک ویژگی شی ناموجود یا یک عنصر آرایه به آن اختصاص داده نشده است، برمی گردد.

لازم به ذکر است که متغیری با مقدار تعریف نشده با متغیری که اصلاً تعریف نشده است متفاوت است:

در این مثال، متد ()alert مقدار متغیر age را نمایش می دهد که تعریف نشده است. در حالت دوم، یک متغیر ماشین اعلام نشده به متد ()alert ارسال می‌شود که منجر به خطا می‌شود.

مثال زیر ممکن است برای برنامه نویسان تازه کار تا حدودی گیج کننده باشد، زیرا... عملگر typeof هم برای متغیرهای تعریف نشده و هم برای متغیرهای تعریف نشده تعریف نشده برمی گرداند:

در مثال بالا، متغیر age اعلام شده است، اما چیزی روی آن نوشته نشده است، بنابراین مقدار آن تعریف نشده است. متغیر ماشین اعلام نشده است - در واقع وجود ندارد. با این حال، typeof در هر دو مورد، رشته را تعریف نشده برمی‌گرداند. البته این امر تا حدودی منطقی است، زیرا انجام هیچ عملیاتی با هر یک از این متغیرها غیرممکن است، اگرچه از نظر فنی کاملاً متفاوت هستند.

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

مقدار undefined از null مشتق شده است، بنابراین در ECMA-262 عملگر معادل == آنها را به عنوان یکسان در نظر می گیرد:

اگرچه null و undefined مرتبط هستند، اما به طور متفاوتی استفاده می شوند. شما نباید به طور صریح مقدار تعریف نشده را به یک متغیر اختصاص دهید، اما این برای null صدق نمی کند. در صورتی که شی مورد نیاز در دسترس نباشد، باید به جای آن از null استفاده شود. این نشان می دهد که null به عنوان یک اشاره گر به یک شی خالی معرفی شده است و بر تفاوت آن با undefined تأکید می کند.

برای تمایز بین null و undefined در یک برنامه، می توانید از عملگر هویت === استفاده کنید:

نوع داده نماد

نماد از نسخه 6 ECMAScript افزوده جدیدی به جاوا اسکریپت است. نماد یک مقدار منحصر به فرد، تغییرناپذیر و ابتدایی است که برای ایجاد شناسه های منحصر به فرد استفاده می شود.

برای ایجاد یک نماد باید تابع Symbol را فراخوانی کنید:

var mySymbol = Symbol();

برای تعریف نماد، می توانید از عملگر typeof استفاده کنید؛ اگر مقدار یک نماد باشد، نماد رشته برگردانده می شود:

تابع Symbol یک پارامتر اختیاری دارد - رشته ای که برای توصیف نماد استفاده می شود:

نام ویژگی یک رشته است، بنابراین اشیاء می توانند رشته ها را با مقادیر مرتبط کنند. این قطعات اطلاعات با هم جفت های کلید-مقدار را تشکیل می دهند.

که در اشیاء جاوا اسکریپتمی توان با استفاده از یکی از دو نحو ایجاد کرد:

1. var obj = (); // با استفاده از آبجکت literal 2. var obj = new Object(); // با استفاده از روشی به نام سازنده

ایجاد یک شی با استفاده از یک شی به معنای واقعی کلمه با تعریف یک متغیر منظم شروع می شود. سمت راست این عبارت یک شی را به معنای واقعی کلمه می نویسد - این یک لیست جفت جدا شده با کاما است که در پرانتزهای فرفری محصور شده است (). "نام - ارزش"، محصور در بریس های فرفری. نام و ارزش دارایی با دو نقطه از هم جدا می شوند:

var cat = ("پاها": 4، "نام": "Murzik"، "رنگ": "قرمز")

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

  • وقتی یک متغیر (که مقدار آن حاوی ارجاع به مقدار ترکیبی است) را به متغیر دیگری اختصاص می دهیم، ارجاع به مقدار ترکیبی کپی می شود. در نتیجه، هر دو متغیر به یک مقدار ترکیبی اشاره دارند و تغییرات در مقدار یک متغیر بر متغیر دیگر تأثیر می‌گذارد.
  • هر عبارتی که 0، null، undefined یا رشته خالی را برمی گرداند به عنوان false تفسیر می شود.
  • رشته ها با استفاده از نقل قول های دوتایی (") یا تک (") ایجاد می شوند. رشته‌ای که با یک جفت گیومه تکی محدود می‌شود، می‌تواند از دو گیومه استفاده کند، و بالعکس، نقل‌قول‌های منفرد را می‌توان در رشته‌ای که توسط یک جفت گیومه دوتایی محصور شده است استفاده کرد.
  • مقدار null ارجاع به یک شی "خالی" است و هدف خاصی دارد - معمولاً برای مقداردهی اولیه متغیری که بعداً مقداری به آن اختصاص داده می شود استفاده می شود.
  • مقدار (تعریف نشده) متغیری است که با استفاده از عملگر var اعلام شده است، اما مقداردهی اولیه نشده است.
  • در جاوا اسکریپت، اشیاء را می توان به یکی از دو روش ایجاد کرد:
    • با استفاده از یک شیء تحت اللفظی
    • با استفاده از روشی به نام سازنده
  • یک شی شامل مجموعه ای نامرتب از خصوصیات است که هر کدام شامل یک نام و یک مقدار است. شما می توانید مقادیر نامگذاری شده جدیدی را در هر زمان به یک شی اضافه کنید یا مقادیر موجود را حذف کنید.