ערך של מספר מורכב מסדרה של תווים מספריים, לדוגמה:
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()
?
מהי התוצאה של הפעולה המתמטית הבאה?
"Six" * 3