سوابق و tuples انواع جدید داده های غیر قابل تغییر JavaScript هستند که در حال حاضر در آنها موجود است مرحله 2 در فرآیند تأیید استانداردهای TC39. آنها قابل تغییر هستند و در حال حاضر در هر مرورگر یا زمان اجرا در دسترس نیستند ، اما پیاده سازی های لازم باید تا سال آینده انجام شود. آنها به حل چند معمای گیج کننده که با رمزگذاران روبرو هستند کمک می کنند …
تغییرات مداوم
جاوا اسکریپت های حرفه ای به شما می گویند که متغیرها را با اختصاص دهید const
در صورت امکان بهترین تمرین است. متغیرها را ایجاد می کند تغییرناپذیر. مقادیر قابل تغییر نیستند ، بنابراین مشکلات کمتری برای حل و فصل دارید.
متاسفانه ، const
فقط مقادیر ابتدایی را غیر قابل تغییر می کند (رشته ، عدد ، BigInt ، بولی ، نماد و undefined
) شما نمی توانید یک آرایه یا یک شی re را مجدداً اختصاص دهید ، اما مقادیر و خصوصیاتی که در آنها وجود دارد می توان اصلاح شود مثلا:
// array constant
const myArray = [1, 2, 3];
// change array values
myArray[0] = 99;
myArray.push(42);
console.log(myArray); // [ 99, 2, 3, 42 ]
myArray = 'change'; // ERROR!
به طور مشابه برای اشیا:
// object constant
const myObj = { a: 1, b: 2, c: 3 }
// change object properties
myObj.a = 99;
myObj.d = 42;
console.log(myObj); // { a:99 ,b:2, ,c:3, ,d:42 }
myObj = 'change'; // ERROR!
Object.freeze()
این روش می تواند کمک کند ، اما فقط یخ زدگی کم عمق بر روی خصوصیات کودک بلافاصله یک جسم اعمال می شود:
const myObj = { a: 1, b: 2, c: { v: 3 } }
Object.freeze(myObj);
myObj.a = 99; // silently ignored
myObj.c.v = 99; // works fine
console.log(myObj); // { a: 1, b: 2, c: { v: 99 } }
بنابراین دشوار است تضمین کنید که یک عملکرد باعث تغییر عمدی یا تصادفی مقادیر نگهداری شده در یک آرایه یا شی نمی شود. توسعه دهندگان یا باید به بهترین ها امیدوار باشند یا یک نسخه شبیه سازی شده از یک متغیر را تصویب کنند – (که چالش های خاص خود را دارد).
نابرابری معادل
وقتی توسعه دهندگان سعی در مقایسه و مقایسه اشیا object به ظاهر معقول و منطقی دارند ، هرج و مرج بیشتری ایجاد می شود:
const str="my string";
console.log( str === 'mystring' ); // true
const num = 123;
console.log( num === 123 ); // true
const arr = [1, 2, 3];
console.log( arr === [1, 2, 3] ); // false
const obj = { a: 1 };
console.log( obj === { a: 1 } ); // false
فقط انواع بدوی را می توان از نظر مقدار مقایسه کرد. اشیا و آرایه ها رد می شوند و مقایسه می شوند با مرجع. دو متغیر فقط زمانی معادل خواهند بود که به همان مورد در حافظه اشاره کنند:
const a = [1, 2];
const b = a;
b.push(3);
console.log( a === b ); // true
// original array has changed
console.log( a ); // [1, 2, 3]
مقایسه عمیق دو شی یا آرایه برای ارزیابی هر مقدار به نوبه خود به یک تابع مقایسه بازگشتی احتیاج دارد. حتی در این صورت ، ممکن است با انواع مختلفی از جمله تاریخ یا توابع روبرو شوید که می تواند به روش های مختلف ذخیره شود.
ادامه خواندن انواع جدید داده غیر قابل تغییر JavaScript: سوابق و موارد موجود در SitePoint.