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 מסתורי בקוד כלשהו – עכשיו תדעו מהיכן זה מגיע. הקוד הזה זמין בפיירפוקס ובכרום. משתמשים באדג'? ובכן… אתם עדיין בימי הביניים 🙂

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

פתרונות ומאמרים על פיתוח אינטרנט

רינדור של קליינט סייד עם SSR

הסבר קצר על SSR מול רינדור קלאסי ולא. לא תמיד זה טוב להשתמש בו. אין כדור כסף שיכול לפתור הכל.

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

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