אמתיות ושקריות (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";
3// Since username is empty, "Guest" is assigned
4
5console.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(Incorrect)"); // Incorrectly treats 0 as NaN
 5}
 6
 7// Good Example
 8let value2 = parseInt("hello");
 9if (Number.isNaN(value2)) {
10    console.log("Value is NaN(Correct)"); // Correctly identifies NaN
11}

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

סיום

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

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

YouTube Video