ตัวเลขทั้งหมดในจาวาสคริปต์ไม่ว่าจะเป็นจำนวนเต็มหรือทศนิยมเป็นหมายเลขประเภท ภายในโปรแกรมสาระสำคัญของประเภทตัวเลขคือหมายเลขจุดลอยตัว 64 บิตซึ่งสอดคล้องกับจำนวนจุดลอยตัวของประเภทสองเท่าใน Java; ดังนั้นตัวเลขทั้งหมดในจาวาสคริปต์จึงเป็นหมายเลขจุดลอยตัว ตามมาตรฐาน IEEE 754 (มาตรฐานทางคณิตศาสตร์จุดลอยตัว) ช่วงของค่าที่ JavaScript สามารถเป็นตัวแทนได้คือบวกหรือลบ 1.7976931348623157 ครั้ง 10 ถึงกำลัง 308 และจำนวนทศนิยมที่สามารถเป็นตัวแทนได้ แอตทริบิวต์ของวัตถุตัวเลขตามลำดับ
สำหรับจำนวนเต็มตามข้อกำหนดของมาตรฐาน ECMASCRIPT (http://ecma262-5.com/els5_html.htm#section_8.5) ช่วงของจำนวนเต็มที่ JavaScript สามารถเป็นตัวแทนและดำเนินการทางคณิตศาสตร์ได้อย่างแม่นยำ -ไปจนถึงการดำเนินการทางคณิตศาสตร์ ค่าสูงสุด +9007199254740992; สำหรับจำนวนเต็มที่เกินช่วงนี้ JavaScript ยังสามารถดำเนินการได้ แต่ไม่รับประกันความถูกต้องของผลการคำนวณ เป็นที่น่าสังเกตว่าสำหรับการดำเนินการบิตจำนวนเต็ม (เช่นการเปลี่ยนและการดำเนินการอื่น ๆ ) JavaScript รองรับหมายเลขจำนวนเต็ม 32 บิตเท่านั้นนั่นคือจำนวนเต็มจาก -2147483648 ถึง +2147483647
การทดลอง
แสดงค่าสัมบูรณ์ของจำนวนสูงสุดและค่าสัมบูรณ์ของจำนวนทศนิยมขั้นต่ำใน JavaScript:
การคัดลอกรหัสมีดังนี้:
console.log (number.max_value);
console.log (number.min_value);
ผลลัพธ์คือ 1.7976931348623157E+308 และ 5E-324
JavaScript ไม่สามารถให้ผลการคำนวณที่แน่นอนสำหรับจำนวนเต็มนอกกำลัง 53 จากบวกหรือลบ 2:
การคัดลอกรหัสมีดังนี้:
var a = 9007199254740992;
console.log (a+3);
ผลการคำนวณที่ถูกต้องควรเป็น 9007199254740995 แต่ผลการคำนวณที่กำหนดโดย JavaScript คือ 9007199254740996 หลังจากพยายามเปลี่ยนสูตรการคำนวณคุณจะพบว่าตราบใดที่จำนวนเต็มสูงกว่า 9007192547409292 หากการเบี่ยงเบนในความแม่นยำในการคำนวณเป็นที่ยอมรับผลที่ตามมาของตัวอย่างต่อไปนี้จะร้ายแรงยิ่งขึ้น:
การคัดลอกรหัสมีดังนี้:
var max_int = 9007199254740992;
สำหรับ (var i = max_int; i <max_int +2; ++ i) {
// ลูปอนันต์
-
เนื่องจากปัญหาความแม่นยำในการคำนวณคำสั่งข้างต้นจะตกอยู่ในวงที่ตายแล้ว
สำหรับการดำเนินการบิต JavaScript รองรับหมายเลขจำนวนเต็ม 32 บิตเท่านั้น:
การคัดลอกรหัสมีดังนี้:
var smallint = 256;
var bigint = 2200000000;
console.log (smallint / 2);
console.log (smallint >> 1);
console.log (bigint / 2);
console.log (bigint >> 1);
จะเห็นได้ว่าสำหรับจำนวนเต็มภายใน 32 บิต (256) JavaScript สามารถดำเนินการบิตที่ถูกต้องและผลลัพธ์นั้นสอดคล้องกับผลลัพธ์ของการดำเนินการหาร (128) สำหรับจำนวนเต็มนอกเหนือจาก 32 บิต JavaScript สามารถดำเนินการหารที่ถูกต้อง (1100000000) แต่ผลลัพธ์ที่ได้หลังจากการดำเนินการบิตนั้นยังห่างไกลจากผลลัพธ์ที่ถูกต้อง (-1047483648)