Menu

ערכי Truthy ו-Falsy ב-JavaScript: הרשימה המלאה

מה נחשב truthy ומה falsy ב-JavaScript, הרשימה המלאה של ערכי falsy, ואיך המרה לבוליאני מתנהגת בקוד אמיתי.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

לכל ערך יש מצב רוח בוליאני

JavaScript מאפשרת לשים כל ערך במקום שבו מצופה בוליאני: בתוך if, כתנאי של while, ליד && או ||. כשעושים את זה, הערך מומר ל-true או ל-false. ערכים שמומרים ל-false נקראים falsy. כל השאר truthy.

בלי פונקציית המרה, בלי cast מפורש: JavaScript עושה את זה אוטומטית. החוקים קבועים וקצרים, כך שברגע שמכירים את רשימת ה-falsy, כל מקרה אחר נגזר ממנה.

רשימת ה-Falsy המלאה

בדיוק שבעה ערכים הם falsy. כל השאר בשפה truthy.

זהו. הרשימה:

  • false: הבוליאני עצמו.
  • 0 ו--0: שני האפסים.
  • 0n: אפס של BigInt.
  • "": המחרוזת הריקה (במרכאות בודדות, כפולות או backticks, הכול אותו דבר).
  • null: הערך של "כלום בכוונה".
  • undefined: הערך של "לא הוגדר".
  • NaN: התוצאה של חישוב לא חוקי כמו 0 / 0.

שננו את השבעה האלה. אחר כך, לגבי כל ערך שאתם לא בטוחים בו, שאלו: "האם הוא אחד מהשבעה?" אם לא, הוא truthy.

ההפתעות: "0", [] ו-{}

כאן מתחילים נכווים. הרבה ערכים נראים ריקים אבל הם truthy:

מחרוזות הן falsy רק כשאין בהן אף תו. ב-"0" יש תו אחד, ולכן היא truthy. מערכים ואובייקטים הם תמיד truthy, גם כשהם ריקים, כי JavaScript מתייחסת אליהם כאובייקטים, וכל האובייקטים הם truthy בלי קשר למה שבתוכם.

אם אתם מגיעים מ-Python, זה השינוי המחשבתי הגדול ביותר. ב-Python, [] ו-{} הם falsy. ב-JavaScript הם לא.

לבדוק "ריק" בדרך הנכונה

מכיוון ש-[] ו-{} הם truthy, אי אפשר להשתמש בהם ישירות בתוך if כדי לבדוק אם הם ריקים. היו מפורשים:

אותו דבר עם מחרוזות, אם רוצים להתייחס למחרוזת שיש בה רק רווחים כריקה:

Truthy/falsy הוא קיצור נוח, לא תחליף לחשיבה על המשמעות של "ריק" עבור הנתונים שלכם.

המרה לבוליאני אמיתי

לפעמים רוצים true או false אמיתי, לא רק ערך שהוא truthy בערך. שני ביטויים מקובלים:

Boolean(x) היא ההמרה המפורשת. !!x הוא אותו דבר בקיצור: ה-! הראשון ממיר לבוליאני והופך אותו, ה-! השני הופך אותו בחזרה. שניהם נפוצים. !! קצר יותר; Boolean() קריא יותר.

לעיתים קרובות תראו !! בהוראות return, כשפונקציה צריכה להחזיר בוליאני נקי:

Truthy/Falsy עם && ו-||

האופרטורים הלוגיים לא מחזירים true או false: הם מחזירים את אחד האופרנדים. איזה מהם, תלוי ב-truthiness:

זו הסיבה ש-value || defaultValue הוא דפוס כל כך נפוץ לערכי ברירת מחדל. אבל יש בו מלכודת: הוא מתייחס ל_כל_ ערכי ה-falsy באותה צורה, כולל 0 ו-"", שלעיתים קרובות הם קלט תקין:

אם אתם רוצים ליפול לברירת המחדל רק כשהערך הוא null או undefined, השתמשו במקום זאת באופרטור nullish coalescing ??. יש לו מסמך משלו.

טבלת עזר מהירה

הדפיסו, הדביקו על המסך, והמשיכו בחיים.

הבא בתור: Iterators ו-Generators

אחרי שתנאים ולולאות כבר בכיס, הפרק הבא בוחן איך JavaScript מאפשרת לערכים לייצר את עצמם לפי דרישה. Iterators ו-generators הם המנגנון שמאחורי for...of, spread והרבה APIs מודרניים, והם מגיעים עכשיו.

שאלות נפוצות

מה הם ערכי ה-falsy ב-JavaScript?

יש בדיוק שבעה: false, 0, -0, 0n (אפס של BigInt), '' (מחרוזת ריקה), null, undefined ו-NaN. כל השאר truthy, כולל '0', 'false', [] ו-{}. שננו את רשימת ה-falsy הקצרה ותדעו את התשובה לכל ערך אחר בדרך השלילה.

האם מערך ריק הוא truthy או falsy ב-JavaScript?

Truthy. if ([]) { ... } מריץ את הבלוק, מה שמפתיע אנשים שמגיעים מ-Python או מ-PHP. מערכים ואובייקטים הם אובייקטים, וכל האובייקטים הם truthy בלי קשר לתוכן שלהם. כדי לבדוק אם מערך ריק, השתמשו במפורש ב-arr.length === 0.

איך ממירים ערך לבוליאני ב-JavaScript?

יש שתי דרכים: Boolean(value) היא הצורה המפורשת, ו-!!value היא הקיצור (שלילה כפולה שממירה ואז הופכת בחזרה). שתיהן פועלות לפי אותם חוקי truthy/falsy. השתמשו בהן כשאתם רוצים true/false אמיתי, לא רק תוצאה שהיא truthy בערך.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל