אמתיות ושקריות (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):.
- המספר
0
""
(מחרוזת ריקה)
כל שאר הערכים נחשבים כ'אמתיים' (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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.