برنامه نویسی

تماس/عبور از طریق ارزش و تماس/عبور از طریق مرجع در JS

این مورد برای متغیرهای JS است. وجود دارد دو نوع متغیر در JS

  1. بدوی
  2. غیر حساس/مرجع

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

بدوی داده های غیر تیمی
شماره مجموعه
رشته اعتراض
بولی عمل
تهی
تعریف نشده
با ابله
نماد

داده های اولیه

در JS ، بدوی ها به عنوان انواع داده های تغییر ناپذیر شناخته می شوند.

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

let name = 'Mustanjid';
console.log(name[1]) // output: u
//try to change the second letter of the name
name[1] = 'a' // not changed
console.log(name) // output: Mustanjid
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

let nameWithUpperCase = name.toUpperCase();
console.log(nameWithUpperCase); // Output: MUSTANJID
console.log(name) // Output: Mustanjid
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فراخوانی/عبور با مقدار در نوع داده بدوی

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

let prevValue = 1;
let currValue = prevValue;
console.log(prevValue); // Output: 1
console.log(currValue); // Output: 1
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مقایسه انواع داده های بدوی

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

let name1 = 'Arif'
let name2 = 'Arif'
console.log(name1 === name2) // Output: true
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

انواع داده های غیر حساس

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

غیر حساس قابل تغییر است

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

let arr = ['Js', 'React', 'Vue'];
let copyArr = arr;
console.log(arr); //Output: [ "Js", "React", "Vue" ]
console.log(copyArr); //Output: [ "Js", "React", "Vue" ]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

فراخوانی/عبور از طریق مرجع در انواع داده های غیر حساس

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

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

بیایید مثالی را برای پاک کردن این موضوع در ذهن خود ببینیم.

    let arr = ['Js', 'React', 'Vue'];
    let copyArr = arr;
    console.log(arr); //Output: [ "Js", "React", "Vue" ]
    console.log(copyArr); //Output: [ "Js", "React", "Vue" ]

    //now let's change in the copy array and see what happens
    copyArr[1] = 'Angular';
    //it will also change in the main array
    console.log(arr); //Output: [ "Js", "Angular", "Vue" ]
    console.log(copyArr); //Output: [ "Js", "Angular", "Vue" ]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مقایسه انواع داده های غیردولتی

فرض کنید ، ما می خواهیم مقادیر دو آرایه یا اشیاء را با هم مقایسه کنیم. آیا ما همانطور که در انواع بدوی انجام می دهیم مقایسه می کنیم؟ هرگز

::: توجه داشته باشید
ما گاهی اوقات وقتی آرایه ها یا اشیاء کپی می شوند ، مثال زیر را مشاهده می کنیم
:::

! ما از طریق هر شاخص یا خاصیت مقایسه می کنیم. بنابراین ، داشتن همان مقدار به معنای این نیست که مقایسه یکسان است.

let obj1 = {
  player: 'A'
}

let obj2 = {
  player: 'A'
}
console.log(obj1 === obj2) //output: false
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اما مقایسه اشیاء کپی شده یا آرایه ها درست باز می گردند. مثال زیر را مشاهده کنید.

let anObj = {
  name: 'Mustanjid'
}
let copyObj = anObj; //copied obj
console.log(anObj === copyObj) // Output: true
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

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

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

function passNonPrimitiveByRef (product) {
    product.name = 'Pen';
}

var aProductObj = {
  name: 'Book'
}
console.log(aProductObj.name) // Output: 
passNonPrimitiveByRef(aProductObj)
console.log(aProductObj.name) // Output:
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Happy coding!!!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا