ES2020 – מספרים גדולים בג'אווהסקריפט

סוג מידע פרימיטיבי חדש שמאפשר לכתוב מספרים גדולים במיוחד בג'אווהסקריפט

אחד הבשורות הגדולות שתקן ES2020 מביא עמו הוא BigInt אמיתי בג'אווהסקריפט שמאפשר, סוף סוף, עבודה תקינה עם מספרים גדולים.

בג'אווהסקריפט עד כה, סוג המספר היחידי שהיה לנו הוא Number והמספר המקסימלי האפשרי היה 9007199254740992. אי אפשר לעלות מעל זה. לא מאמינים? הריצו את הקוד הבא ותראו:

let myNumber = 9007199254740992;
myNumber++;
console.log('myNumber', myNumber); //9007199254740992

גישה לקבוע המספרי הזה היינו מקבלים עם Number.MAX_SAFE_INTEGER. למשל:

const max = Number.MAX_SAFE_INTEGER;
console.log(max); //9007199254740991

אחד פחות מ-9007199254740992 – כי עם 9007199254740991 עדיין אפשר לעשות את כל הפעולות הנומריות כולל להעלות.

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

let myNumber = BigInt(9007199254740992);
myNumber++;
console.log('myNumber', myNumber.toString()); //9007199254740993

או לחלופין, הצמדת האות "n" למספר הופכת אותו אוטומטית ל-BigInt.

let myNumber = 9007199254740992n;
myNumber++;
console.log('myNumber', myNumber.toString()); //9007199254740993
console.log(typeof myNumber); //bigint

חשוב להדגיש שמדובר בסוג מידע פרימיטיבי שונה לחלוטין, אם תנסו להשוות 42 ל-42n, יצא לכם false (ושוב תודה למגיבים שתקנו אותי). בדיוק כפי שיקרה אם תנסו להשוות מחרוזת טקסט למספר. רוצים לבצע השוואה? חייבים להמיר את הסוג. או את המספר ל-BigInt, או את ה-BigInt למספר:

console.log(42 == 42n); //true
console.log(42 === 42n); //false
console.log(42 === Number(42n)); //true
console.log(BigInt(42) === 42n); //true

אפשר לעשות פעולות אריתמטיות ב-BigInt וכל מה שרוצים. אם רוצים להוסיף מחרוזת טקסט או מספר – קודם להמיר כמובן. מבחינת שברים – אין לנו שברים ב-BigInt ואם יש – הם מעוגלים כלפי מטה (ותודה למגיבים שתקנו אותי).

const rounded = 5n / 2n;
console.log('rounded', rounded.toString()); //2

בת'כלס – שימושי מאוד כאשר מבצעים חישובי זמן מסובכים שמצריכים שימוש במספרים גדולים או כל חישוב אחר. אם אתם פתאום רואים n מסתורי בקוד כלשהו – עכשיו תדעו מהיכן זה מגיע. הקוד הזה זמין בפיירפוקס ובכרום. משתמשים באדג'? ובכן… אתם עדיין בימי הביניים 🙂

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

גלילה לראש העמוד