טיפ לקיץ - אוביקטים קפואים ב JavaScript
הקיץ שהגיע מספק הזדמנות לטיפ קצר שיצנן את תוכניות ה JavaScript שלכם, ואם עדיין לא הבנתם אני מדבר על הפקודה Object.freeze.
הפקודה Object.freeze וחברתה Object.isFrozen מאפשרות להקפיא אוביקט וכך למנוע שינויים בו: לאחר ההקפאה אי אפשר להוסיף או למחוק מפתחות, ואי אפשר לשנות את הערכים שמפתחות מצביעים עליהם. במצב strict תיזרק שגיאה ובמצב רגיל הפעולה פשוט לא תעשה כלום. ככה זה עובד:
> const x = { foo: 10 };
> Object.freeze(x);
> x.foo = 20
> x.bar = 30
> console.log(x);
{ foo: 10 }
> Object.isFrozen(x)
true
כל השינויים שהפעלתי על האוביקט פשוט לא נשמרו.
שני דברים שכדאי לשים לב אליהם עכשיו שאתם מכירים את freeze - הראשון הוא שההקפאה אינה רקורסיבית ולכן אפשר עדיין לשנות את האוביקטים הפנימיים או המערכים הפנימיים באוביקט מוקפא. שימו לב לקוד הבא:
> const x = { foo: [] }
> Object.freeze(x)
> x.foo.push(10)
> console.log(x)
{ foo: [ 10 ] }
והדבר השני הוא שיש אוביקטים שמגיעים קפואים - לדוגמא מספרים, מחרוזות ובוליאנים:
> const x = 'hello'
> Object.isFrozen(x)
true
> x.foo = 10
> console.log(x.foo)
undefined
הגנה משינויים באמצעות freeze יכולה לעזור לכם להעביר טוב יותר את הכוונות שלכם בעת כתיבת פרויקט גדול ולמנוע שינויים בטעות.