ES6 - Default Values

אם הייתם רוצים ליצור בג׳אווהסקריפט פונקציה אשר מקבלת פרמטר עם ערך ברירת מחדל, יכול להיות שהייתם כותבים משהו כזה:

function foo(x) {
  x = x || 2;
  console.log(x);
}

foo(5); // 5
foo(); // 2

הרעיון הוא שהסימן || בודק האם הערך הראשון מחזיר true - אם כן, הוא בוחר את הערך הזה ומציב אותו במשתנה. אם לא, הוא מציב את הערך השני במשתנה.

אבל מה קורה אם נקרא לפונקציה עם הערך 0?

foo(0); // 2

מאחר ש-0 בג׳אווהסקריפט נחשב לערך שמחזיר false, הערך שנבחר הוא 2. לכן, הדרך הנכונה לבדוק אם הפונקציה נקראה עם פרמטר היא כך:

x = x !== undefined ? x || 2;

כאן אנו בודקים אם יש ערך כלשהוא שהוצב ב- x. אם כן, זה הערך שנבחר. אם לא, נבחר את הערך השני.
נכון - זה לא ברור במיוחד. מזל שיש את ES6.

ערכי ברירת מחדל ב- ES6

עם ES6 הכל נהיה פשוט יותר. כך נכתוב פונקציה המקבלת פרמטר עם ערך ברירת מחדל:

function foo(x = 2) {
  console.log(x);
}

foo(5); // 5
foo(0); // 0
foo(); // 2

נוסף על כך, ישנה אפשרות לכתוב ביטוי (expression) בתור ערך ברירת מחדל לפרמטר. בצורה זו נוכל לקרוא לפונקציה אחרת ולהציב את הערך שהיא מחזירה לפרמטר:

function bar() {
  return "hola!";
}

function foo(x = bar()) {
  console.log(x);
}

foo("hello!"); // "hello!"
foo(); // "hola!"

איך אפשר להשתמש בזה פרקטית? דוגמה אחת יכולה להיות יצירת ID ייחודי למשתמש, אם לא העברנו לפונקציה את ה- ID כפרמטר:

function generateID() {
  // return random id number
}

function registerUser(id = generateID()) {
  // register user
}