אמתיות ושקריות (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";
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 בערוץ היוטיוב שלנו. נא לבדוק גם את ערוץ היוטיוב.