ค่าตัวเลขประกอบด้วยชุดอักขระที่เป็นตัวเลข เช่น
5
ประเภทข้อมูลจำนวนยังมีพร็อพเพอร์ตี้ส่วนกลางพิเศษบางส่วนที่
แสดงแนวคิดที่เป็นตัวเลข เช่น Infinity
และ NaN
ซึ่งเป็นความหมายของค่า
"ไม่ใช่ตัวเลข" ซึ่งเป็นผลลัพธ์ของการพยายามคำนวณ
การคำนวณค่าที่ไม่ใช่ตัวเลขได้
ออบเจ็กต์ตัวเลข
เมื่อมีการส่งค่าไปยังฟังก์ชัน 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 ความแม่นยำสองเท่า IEEE 754-1985
จำนวนทศนิยมระหว่าง
-2^1024
และ 2^1024
ก่อนที่ JavaScript จะจัดเก็บตัวเลขใดๆ ไว้ในหน่วยความจำ
จะแปลงจำนวนนั้นเป็นจำนวนจุดลอยตัวฐานสอง หรือที่เรียกว่าจำนวนลอย
พื้นที่เก็บข้อมูล 64 บิตนี้ (บิต "บวก" หรือ "ลบ" 1 บิตและ 11 บิตสำหรับ เลขชี้กำลัง และ 52 บิตสำหรับเศษส่วน) อาจทำให้เกิดข้อผิดพลาดด้านความแม่นยำกับตัวเลขใดก็ได้ ของตัวเลขที่ไม่อยู่ภายในช่วงที่อนุญาต ข้อจำกัดนี้เป็นลักษณะตามธรรมชาติ เป็นประเภทข้อมูลตัวเลขของ JavaScript
0.1 + 0.7
> 0.7999999999999999
คุณสามารถจัดเก็บค่าตัวเลขเป็นจำนวนเต็ม ซึ่งเป็นจำนวนทศนิยม
ที่ไม่มีเศษส่วนระหว่าง -(2^53 − 1)
ถึง 2^53 − 1
เพราะลอยและ
จำนวนเต็มจะได้รับการจัดเก็บในลักษณะพื้นฐานแบบเดียวกัน และไม่มีความแตกต่างในทางปฏิบัติ
การทำงานของหมายเลขเหล่านี้ แต่เราขอแนะนำให้ใช้จำนวนเต็มเมื่อใดก็ได้
เพื่อหลีกเลี่ยงข้อผิดพลาดด้านความแม่นยำได้
โอเปอเรเตอร์ของหมายเลข
เมื่อคุณใช้โอเปอเรเตอร์มาตรฐานทางคณิตศาสตร์กับตัวเลขพื้นฐาน ฟังก์ชัน ลำดับการคำนวณทางคณิตศาสตร์ ใช้: นิพจน์ใดๆ ที่อยู่ในวงเล็บจะได้รับการประเมินก่อน แล้วตามด้วย เลขชี้กำลัง การคูณ การหาร การบวก และการลบ
โอเปอเรเตอร์ | ชื่อ | คำอธิบาย | การใช้งาน | ผลลัพธ์ |
---|---|---|---|---|
+ |
เป็นการเพิ่มเติม | 2+2 |
4 |
|
- |
การลบ | 4-2 |
2 |
|
* |
การคูณ | 2*5 |
10 |
|
/ |
ดิวิชัน | 10/5 |
2 |
|
++ |
การเพิ่ม | บวกหนึ่งเป็นจำนวน | 2++ |
3 |
-- |
การลด | ลบ 1 ออกจากตัวเลข | 3-- |
2 |
** |
เลขยกกำลัง | แสดงผลลัพธ์ของการเพิ่ม แรก ถูกตัวถูกดำเนินการยกกำลังของตัวถูกดำเนินการที่สอง |
2**4 |
16 |
% |
อยู่ในอันดับเดิม | แสดงเศษที่เหลือเมื่อ ตัวถูกดำเนินการแรกหารด้วยตัวถูกดำเนินการที่สอง |
12%5 |
2 |
นอกจากนี้ คุณยังสามารถใช้ตัวดำเนินการกำหนดทางคณิตศาสตร์เพื่อการคำนวณ ดำเนินการกับค่าของตัวแปรแล้วกำหนดให้ทันที ค่าที่คำนวณใหม่ไปยังตัวแปร
โอเปอเรเตอร์ | ชื่อ | การใช้งาน |
---|---|---|
+= |
การมอบหมายการเพิ่ม | myValue += 2 |
-= |
การมอบหมายการลบ | myValue -= 2 |
*= |
การกำหนดการคูณ | myValue *= 2 |
/= |
การมอบหมายหน่วยงาน | myValue /= 2 |
**= |
การกำหนดเลขยกกำลัง | myValue **= 2 |
%= |
การมอบหมายส่วนที่เหลือ | myValue %= 2 |
ค่าสัญลักษณ์
จำนวนเบื้องต้นยังใช้ได้กับกรณีพิเศษ 2-3 กรณีด้วย นั่นคือ "ไม่ใช่ตัวเลข"
ค่า (NaN
) และค่าที่แสดงถึงค่าอนันต์ที่อาจเป็นบวกก็ได้
(Infinity
) หรือเชิงลบ (-Infinity
)
คุณอาจพบ Infinity
น้อยมากจากการหาร 0 หรือกรณี
ที่ภาษาโปรแกรมส่วนใหญ่แสดงข้อผิดพลาดแทน
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