אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » ES20XX » ES2019 – תוספות חשובות לתקן של ג׳אווהסקריפט

ES2019 – תוספות חשובות לתקן של ג׳אווהסקריפט

רן בר-זיק מרץ 31, 2019 7:07 am 5 תגובות

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

»ES2019 – יצירת אובייקטים ממערכים עם fromEntries
»ES2020 – globalThis
כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

בשני המאמרים האחרונים על התוספת של שנת 2019 לתקן החדש של ג׳אווהסקריםפט עסקתי בשני פיצ׳רים מעניינים: fromEntries ו flatMap. אך ישנם עוד כמה תוספות לשפה – הן קטנות ולא מצריכות מאמר שלם כל אחד אז במאמר הזה, שהוא המאמר האחרון על ES2019 – אני אפרט עליהן.

מתודות חדשות של מחיקת רווחים

הראשון הוא שתי מתודות חדשות של trim. למי שצריך רענון – פונקצית trim מאפשרת לנו להעיף רווחים מיותרים ממחרוזות טקסט. כך זה נראה:

const myString = '  Hello World!  ';
let result = myString.trim();
console.log(result); //"Hello World!"

שתי המתודות הנוספות, שבאות בחינם עם כל משתנה מסוג מחרוזת טקסט הן…

trimStart ו- trimEnd!

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

const myString = '  Hello World!  ';
let result = myString.trim();
console.log(result); //"Hello World!"
result = myString.trimStart();
console.log(result); //"Hello World!  "
result = myString.trimEnd();
console.log(result); //"  Hello World!"

ומי שממש רוצה לשחק עם זה – הנה ה codepen:

https://codepen.io/barzik/pen/XQrLdm

רגע! אני שומע אתכם צורחים שם ברקע – היה לנו את זה כבר! עם trimLeft ו-trimRight!!! אז נכון, זה היה – אבל זה אף פעם לא היה בתקן באופן רשמי. שתי המתודות החביבות שלעיל לא יעלמו אלא יישארו כ-alias. אושר גדול. וכמובן מתכנתי ה-node יוכלו להנות.

תיאור של משתנה מסוג Symbol

תוספת נוספת היא אפשרות לקבל את תיאור למשתנה פרימיטיבי מסוג Symbol. למי שלא זוכר מה זה – הנה המאמר שמספר על Symbol. כשאני יוצר אחד כזה, אני יכול ליצור תיאור שלו. עכשיו, ב-ES2019 אני יכול גם לגשת לתיאור הזה די בקלות באמצעות תכונת description. שימו לב:

const mySymbol = Symbol('This is a description'); 
console.log(mySymbol.description);  //"This is a description"

מעולה, לא?

רגע, אני שומע אתכם צועקים – עשינו את זה קודם עם המרה של Symbol ל-String! אז נכון, היה אפשר לעשות משהו כזה:

const mySymbol = Symbol('This is a description'); 
console.log(String(mySymbol)); // "Symbol(This is a description)"

אבל זה עקום. עדיף ככה. יאי!

https://codepen.io/barzik/pen/rbBEJL

try catch ללא הכרזה על ארגומנט

התוספת השלישית – לא חייבים להעביר ארגומנט ב-try catch. למה זה חשוב? בשביל ה-static code analysis. יש כלל נפוץ שאוסר להעביר משתנה בלי להשתמש בו. א-מ-מ-ה? אם הייתי עושה משהו בסגנון הזה:

try {
    ···
} catch {
    ···
}

זה לא היה עובד. ובכן – עכשיו זה עובד. אושר גדול!

try {
    throw(new Error('This is error'));
} catch {
    console.log('error occured'); // "error occured"
}
https://codepen.io/barzik/pen/OGLevd

מיון מערך יציב

שינוי משמעותי נוסף הוא שמיון במערך באמצעות פונקצית sort נדרש להיות מיון יציב – כלומר מיון שהסדר שבו נשמר גם אם הערכים זהים. מסובך? בואו ונדגים באמצעות דוגמה שמבוססת על מאמר אחר.

const people = [
  {name: 'Ann', age: 20},
  {name: 'Bob', age: 17},
  {name: 'Gary', age: 20},
  {name: 'Sam', age: 17},
  {name: 'Sue', age: 21},
];


// sort people by age
people.sort( (p1, p2) => {
  if (p1.age < p2.age) return -1;
  if (p1.age > p2.age) return 1;
  return 0;
});

console.log(people.map(p => p.name));
// We're expecting people sorted by age, then by the original order (here by name)
// ['Bob', 'Sam', 'Ann', 'Gary', 'Sue']

// But we might get any of these instead, depending on the browser:
// ['Sam', 'Bob', 'Ann', 'Gary', 'Sue']
// ['Bob', 'Sam', 'Gary', 'Ann', 'Sue']
// ['Sam', 'Bob', 'Gary', 'Ann', 'Sue']

מה קורה פה? יש לי מערך של אובייקטים שמכילים אנשים. המערך ממוין כבר לפי שמות. אם אני ממיין אותו לפי גיל באמצעות פונקצית sort ולשני אנשים יש גיל זהה? הייתי מצפה שהסדר המקורי יישמר (אם המערך ממוין כבר לפי שמות, אז אם יש שני ערכים עם גיל זהה – המיון ישמור על הערך המקורי). זה מה שמיון יציב עושה. עד עכשיו – בג׳אווהסקריפט לא בטוח שהיית מקבל מיון יציב – עכשיו זה בתקן וכל דפדפן וגם בצד השרת אמור לשמור על אותו sort.

ואם זה לא הפריע לכם עד עכשיו, אשריכם – כי זה לא יפריע בהמשך. יאי!

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
ES2019

5 תגובות

  1. אורן שלו הגב מרץ 31, 2019 בשעה 3:46 pm

    תודה רן!
    1. שאלה בקשר למיון יציב: התרגלנו להתאים את הקלט ולתת ל-sort פונקציית השוואה שתדאג שהמיון יהיה יציב. עכשיו **בחלק מהמנועים** אין צורך — אבל נשארה שאלת ה-feature detection: איך אפשר **לבדוק בזמן ריצה** האם ניתן להשתמש במיון הנייטיבי (ולהרוויח ביצועים) או שנגזר עלינו להריץ את ההתאמות הרגילות?
    2. אני חושב שהבחירה בשמות trimStart/End נועדה בחלקה כדי להיות מדויקים גם בקשר למחרוזות RTL.
    3. נדמה לי שחסר קישור למאמר על Symbol.
    4. בטופס התגובה, שדה רישום, האפשרות הראשונה היא ״א להירשם״ במקום ״לא …״ 🙂

  2. רוני שרר הגב מרץ 31, 2019 בשעה 6:41 pm

    השאלה היא האם ביצועי המיון לא נפגעו כתוצאה מהפיכתו ליציב?
    אני מניח שהוא נכתב ע"י שימוש ב-Timsort כמו בפייתון ובג'אווה.
    בממוצע Quick sort עדין יותר מהיר.

  3. מישהו הגב מרץ 31, 2019 בשעה 11:04 pm

    הנה המאמר שמספר על Symbol – לינק חסר.

    אני משער שהתכוונת לקשר לזה.

    https://internet-israel.com/%D7%9E%D7%93%D7%A8%D7%99%D7%9B%D7%99%D7%9D/es6/symbol/

    תודה על המאמר הזה וקודמיו

  4. ספלינטור הגב אפריל 2, 2019 בשעה 9:52 am

    @אורן שלו

    #1 – זו אכן בעייה…
    https://stackoverflow.com/questions/3026281/what-is-the-stability-of-the-array-sort-method-in-different-browsers

  5. אני הגב אפריל 11, 2019 בשעה 8:02 am

    "הנה המאמר שמספר על Symbol."

    אין קישור.

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

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