מספרים

ערך של מספר מורכב מסדרה של תווים מספריים, לדוגמה:

5

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

האובייקט number

כשערך מועבר לפונקציה Number(), הערך מומר ל את המספר המקביל. לדוגמה, מחרוזת מספרית תוביל רכיב מספר:

Number( "10" );
> 10

העברת הערך של false או null אל Number() מחזירה 0, ו-true מוחזר 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

אם אי אפשר להמיר ערך, כמו במקרה של undefined או מחרוזת שמכיל תווים לא מספריים, הפונקציה Number מחזירה NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

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

let numObject = new Number( 15 );

numObject;
> Number { 15 }

האובייקט הזה מתנהג בתור הערך שהוקצה לו לפעולות מתמטיות, אבל נכשל בהשוואות שוויון מחמירות מול מילוליות של מספרים מפני שסוגי הנתונים לא תואמות, מבלי לספק שום יתרון מעשי על פני ערך מילולי.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

צפים ומספרים שלמים

ל-JavaScript יש רק סוג מספר אחד: 64 סיביות של IEEE 754-1985 דיוק כפול מספרי נקודה צפה (floating-point) בין -2^1024 וגם 2^1024. לפני ש-JavaScript שומר מספר כלשהו בזיכרון, הוא קודם ממירה את המספר למספר נקודה צפה (floating-point) בינארית, שנקרא גם float.

נפח האחסון הזה של 64 ביט (ביט אחד חיובי או שלילי, ו-11 ביטים עבור מעריך ו-52 ביטים לשבר) עלולים לגרום לשגיאות דיוק בכל מספר ספרות שלא מתאימות לטווח המותר. ההגבלה הזו מטבעה לסוג נתוני המספרים ב-JavaScript.

0.1 + 0.7
> 0.7999999999999999

אפשר במקום זאת לשמור ערך של מספר כמספר שלם, מספר נקודה צפה (floating-point) ללא שבר בין -(2^53 − 1) ל-2^53 − 1. כי צף ו מאוחסנים מספרים שלמים באותו אופן, אין הבדל מעשי באופן שבו המספרים האלה פועלים. עם זאת, מומלץ להשתמש במספרים שלמים בכל פעם כדי להימנע משגיאות דיוק.

אופרטורים של מספרים

כשמשתמשים באופרטורים מתמטיים רגילים עם פרימיטיביים של מספרים, סדר פעולות מתמטי חל: כל ביטוי מוקף בסוגריים מבוצע קודם לכן, ולאחר מכן מעריכים, כפל, חילוק, חיבור וחיסור.

מפעיל שם תיאור שימוש תוצאה
+ תוספת 2+2 4
- הפחתה 4-2 2
* הכפלה 2*5 10
/ חטיבה 10/5 2
++ תוספת הוספה של אחד למספר 2++ 3
-- הפחתה מחסירה אחד ממספר 3-- 2
** Exponent פונקציה זו מחזירה את התוצאה של העלאת הערך הראשון של
אופרנד לכוח של האופרנד השני.
2**4 16
% יתרה הפונקציה מחזירה את היתרה שנשארה כשהערך הוא
האופרנד הראשון מחולק באופרנד השני.
12%5 2

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

מפעיל שם שימוש
+= הקצאת הוספה myValue += 2
-= הקצאת חיסור myValue -= 2
*= הקצאת כפל myValue *= 2
/= הקצאת חטיבה myValue /= 2
**= הקצאת מעריך myValue **= 2
%= הקצאת שאריות myValue %= 2

ערכים סימבוליים

רכיב המספר חל גם על כמה מקרים מיוחדים: "לא מספר" (NaN) וערך שמייצג אינסוף שיכול להיות חיובי (Infinity) או שלילי (-Infinity).

יכול להיות שתראו Infinity לעיתים רחוקות בגלל חלוקה באפס, מקרה שבהן רוב שפות התכנות גורמות לשגיאה במקום זאת:

10 / 0
> Infinity

חשוב לזכור ש-JavaScript הוא תלוי אותיות רישיות. Infinity הוא סוג של נתוני מספר מייצג את מושג האינסוף, אבל לinfinity אין משמעות מיוחדת:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (כלומר, לא מספר) מופיעה בתדירות גבוהה יותר, במקרים שבהם תוצאה של פעולה אריתמטית אי אפשר לבטא את זה כמספר. לדוגמה, מכיוון ש-JavaScript מנסה להסיק של סוג הנתונים מהערך וההקשר, ליטרל מחרוזת שמכיל רק מספר יכול בפעולה מתמטית:

"2" * 2;
> 4

לעומת זאת, אם לא ניתן לנתח את המחרוזת הזו כערך של מספר, הפונקציה התוצאה של הפעולה היא ללא מספר:

"two" * 2;
> NaN

הערך NaN מוחזר בכל מקרה שבו ערך לא חוקי מיוצג כמספר בפעולה מתמטית. דוגמאות:

  • המרות מספר שנכשלו (למשל, parseInt( undefined ) )
  • פעולות חשבוניות שבהן התוצאה אינה מספר ממשי (לדוגמה, 0 / 0, Math.sqrt( -10 ))
  • פעולת אריתמטית עם תוצאה לא-מוגדרת (0 * Infinity)
  • פעולה אריתמטית שכוללת NaN מפורש (NaN + 2) או תוצאה אחת (NaN) (2 * "string" / 2)

בדיקת ההבנה

מהי התוצאה של העברת false אל Number()?

0
לא נכון
1
NaN

מהי התוצאה של הפעולה המתמטית הבאה?

"Six" * 3

2
NaN
18
0
נכון