אמתיות ושקריות (truthy ו-falsy) ב-TypeScript

אמתיות ושקריות (truthy ו-falsy) ב-TypeScript

במאמר זה נסביר את המושגים 'אמתיות' (truthy) ו'שקריות' (falsy) ב-TypeScript.

YouTube Video

אמתיות ושקריות (truthy ו-falsy) ב-TypeScript

המושגים 'אמתיות' (truthy) ו'שקריות' (falsy) ב-TypeScript הם חשובים מאוד בהצהרות תנאי בתוכניות. כאן נסביר בפירוט את המושגים הללו וכיצד משתמשים בהם בפועל. בנוסף, נספק דוגמאות קוד ב-TypeScript להבנת אופן הטיפול בערכים 'אמתיים' ו'שקריים'.

מהם 'אמתיים' (truthy) ו'שקריים' (falsy)?

ב-JavaScript וב-TypeScript כל ערך מוערך כ-true (אמת) או false (שקר) בתוך ביטוי תנאי. ערכים אלו מסווגים לוגית כ'אמתיים' (truthy) או כ'שקריים' (falsy).

  • truthy מתייחס לערכים שמוערכים כ-true בביטויים מותנים.
  • falsy מתייחס לערכים שמוערכים כ-false בביטויים מותנים.

ב-TypeScript, הערכים הבאים נחשבים כ'שקריים' (falsy):.

  1. המספר 0
  2. "" (מחרוזת ריקה)

כל שאר הערכים נחשבים כ'אמתיים' (truthy).

דוגמאות ספציפיות של truthy ו־falsy

 1// Examples of falsy values
 2console.log("0 is", Boolean(0) ? "truthy" : "falsy");
 3console.log('"" is', Boolean("") ? "truthy" : "falsy");
 4console.log("null is", Boolean(null) ? "truthy" : "falsy");
 5console.log("undefined is", Boolean(undefined) ? "truthy" : "falsy");
 6console.log("NaN is", Boolean(NaN) ? "truthy" : "falsy");
 7
 8// Examples of truthy values
 9console.log("1 is", Boolean(1) ? "truthy" : "falsy");
10console.log('"hello" is', Boolean("hello") ? "truthy" : "falsy");
11console.log("[] is", Boolean([]) ? "truthy" : "falsy");
12console.log('" " (space) is', Boolean(" ") ? "truthy" : "falsy");

תנאים באמצעות truthy ו־falsy

המושגים 'אמתיים' (truthy) ו'שקריים' (falsy) משמשים לעיתים קרובות בתנאים או בלולאות. לדוגמה, בפקודות if או בלולאות while, ניתן להשתמש בערכים אלו ישירות לצורך הערכות תנאי פשוטות.

 1// Checking if the length of the array is 0
 2let items: string[] = [];
 3
 4if (items.length) {
 5    console.log("The array is not empty");
 6} else {
 7    console.log("The array is empty");
 8}
 9
10// Checking if the input value is empty
11let input = "";
12
13if (input) {
14    console.log("Input has value");
15} else {
16    console.log("Input is empty"); // This will be executed
17}

ניהול ערכים falsy עם ?? (איחוי Nullish) ו־|| (או לוגי)

ב-TypeScript קיימים מספר אופרטורים שימושיים לצורך טיפול בערכים 'שקריים' (falsy). במיוחד, מפעיל Nullish Coalescing (??) ומפעיל ההיגיון OR (||) נמצאים בשימוש נפוץ.

|| (או לוגי)

מפעיל ההיגיון OR משמש להחלפת ערכים מסוג falsy עם ערך ברירת מחדל. עם זאת, כל הערכים 'שקריים' (falsy) (לא רק null או undefined, אלא גם 0, "" וכו') נכללים.

1let username = "";
2let displayName = username || "Guest"; // Since username is empty, "Guest" is assigned
3
4console.log(displayName); // "Guest"

??(Nullish Coalescing)

מפעיל Nullish Coalescing מיישם ערך ברירת מחדל רק עבור null או undefined, ומשאיר ערכים מסוג falsy אחרים (כמו 0 או "") ללא שינוי.

1let username2 = "";
2let displayName2 = username2 ?? "Guest";
3// The empty string is retained
4// since username2 is not null or undefined
5
6console.log(displayName2); // ""

מוקשים הקשורים ל־truthy ו־falsy

נקודה חשובה להיזהר ממנה בהבנת truthy ו- falsy היא שערכים שלא נועדו לכך עשויים להתקבל כ- falsy. לדוגמה, 0 ומחרוזות ריקות "" הם ערכים תקינים, אך הם נחשבים כ- falsy במשפטי תנאי, מה שיכול להוביל להערכות שגויות.

1let score = 0;
2
3if (score) {
4    console.log("You have a score!"); // This will not be executed
5} else {
6    console.log("No score available"); // This will be executed
7}

במקרים כאלה, שימוש במפעילים להשוואה מחמירה מאפשר להבחין בדיוק בערכים כמו 0 ו-false.

1let score = 0;
2
3if (score === 0) {
4    console.log("Score is zero"); // Correctly evaluated
5}

מלכודות הקשורות ל-falsy ו-NaN

NaN דורש טיפול מיוחד מכיוון שהוא אינו שווה לשום ערך אחר, כולל לעצמו, כאשר משתמשים במפעילי השוואה.

1console.log("NaN === NaN:", NaN === NaN); // false

לכן, בטוח יותר להשתמש ב-Number.isNaN() כדי לזהות במדויק את NaN.

 1// Bad Example
 2let value = parseInt("0");
 3if (!value) {
 4    console.log("Value is NaN"); // Incorrectly treats 0 as NaN
 5}
 6
 7// Good Example
 8let value2 = parseInt("hello");
 9if (Number.isNaN(value2)) {
10    console.log("Value is NaN"); // Correctly identifies NaN
11}

ככזה, NaN אינו שווה אפילו לעצמו, ולכן השוואות ל-NaN תמיד מחזירות false. על ידי שימוש ב-Number.isNaN() במקום זאת, תוכלו לבצע בדיקות אמינות יותר.

סיום

הקונספטים של truthy ו- falsy ב-TypeScript הם נוחים מאוד, אך יש להיזהר עם ערכים מסוימים, במיוחד 0 ומחרוזות ריקות. כאשר משתמשים בערכים אלו בבדיקות מותנות, שימוש בהשוואה מחמירה (===) או במפעיל Nullish Coalescing (??) במקום השוואה רופפת (==) יכול לעזור להימנע מהתנהגות לא צפויה.

תוכלו לעקוב אחר המאמר שלמעלה באמצעות Visual Studio Code בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.

YouTube Video