ES2020 optional chaining

לא עוד הודעות שגיאה בגלל שחסרה תכונה באובייקט שאליו אתם מנסים לגשת.

אחד מהפיצ'רים החשובים והנדרשים ביותר הגיע אל ג'אווהסקריפט בתקן החדש של ES2020. שם הפיצ'ר הוא "שרשור אפשרי" או בשפת גויי הים Optional Chaining. הוא פיצ'ר אולטרא חשוב ושימושי.

הפיצ'ר הזה פותר את בעית שגיאת הסקריפט כאשר אני מנסה לגשת אל תכונה או מתודה שנמצאת עמוק בהיררכית האובייקט. למשל משהו כזה:

const myData = obj.prop1.prop2.prop3

זה מעולה, אבל מה קורה אם אני מקבל אובייקט שאין בו prop1? שגיאה מכוערת שמפילה את הסקריפט. נסו להריץ את הקוד הזה בעצמכם:

const myObject = {};

const myVar = myObject.prop1.prop2;

console.log('myVar', myVar); // Uncaught TypeError: Cannot read property 'prop2' of undefined

אני חושב שאין מתכנת ג'אווהסקריפט אחד שלא נתקל בזה. שגיאה מרגיזה שדורשת מאיתנו לעשות משהו כזה:

const myObject = {};

let myVar;

if (myObject.prop1) {
  myVar = myObject.prop1.prop2;
}

console.log('myVar', myVar); // myVar undefined

כדי להמנע משגיאות. או להשתמש ב-try catch בכל פעם שאני מנסה לגשת למשהו שנמצא עמוק בהיררכית האובייקט. מעצבן מאוד – כי הרבה פעמים אני מקבל אובייקט שאני לא סגור על זה שהוא שלם – או מצד השרת או ממקום אחר.

בדיוק כדי להמנע מהזוועה הזו ה-TC39 העניקו לנו ב-ES2020 את השרשור האופציונלי. איך זה עובד? פשוט מאוד – על ידי סימן שאלה – במידה ויש את התכונה/מתודה שאנו צריכים – נקבל אותה. במידה ולא, נקבל undefined. איך זה נראה? ככה:

const myObject = {};

const myVar = myObject.prop1?.prop2;

console.log('myVar', myVar); // myVar undefined

וזה בדיוק כמו הקוד עם משפט התנאי. וכמובן שאני יכול לעשות את זה באיזה רמת קינון שאני רוצה וגם עם מתודה. הנה:

const myObject = {};

const myVar = myObject.prop1?.prop2?.prop3?.prop4.?();

console.log('myVar', myVar); // myVar undefined

האם זה עובד כרגע בדפדפן? לא. עדיין לא הטמיעו את זה בכרום או בפיירפוקס אבל עם בייבל זה יעבוד מעולה. כמו כל הפיצ'רים החזקים. לא סגורים על בייבל? אחרי קריאה במדריך המהיר שלי עליו, גם אתם תראו איך אפשר להשתמש בכל פיצ'ר של ג'אווהסקריפט היום.

בינתיים, הנה Codepen שבו אפשר ללמוד ולבדוק את העניין:

See the Pen Optional chain by Ran Bar-Zik (@barzik-the-vuer) on CodePen.

תודה לשלומי בורוביץ׳ על התיקון 🙂

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

תמונת תצוגה של מנעול על מחשב
פתרונות ומאמרים על פיתוח אינטרנט

הגנה מפני XSS עם Trusted Types

תכונה ב-CSP שמאפשרת מניעה כמעט הרמטית להתקפות XSS שכל מפתח ווב צריך להכיר וכדאי שיכיר.

בינה מלאכותית

להריץ ממשק של open-webui על הרספברי פיי

להפעיל ממשק של צ׳אט ג׳יפיטי שאפשר לגשת אליו מכל מחשב ברשת הביתית על רספברי פיי עם מודל בשם tinydolphin שרץ על רספברי פיי.

גלילה לראש העמוד