ตัวเลข JavaScript
- หน้าก่อนหน้า JS แบบแฟรมแบบเชิงธรรมชาติ
- หน้าต่อไป JS BigInt
JavaScript มีรูปแบบตัวเลขเพียงชนิดเดียว
สามารถเขียนตัวเลขทั้งที่มีจุดเลขเล็กหรือไม่มีจุดเลขเล็กก็ได้
JavaScript ตัวเลข
การเขียนตัวเลขของ JavaScript สามารถมีจำนวนเศษหรือไม่มีจำนวนเศษ:
ตัวอย่าง
var x = 3.14; // ตัวเลขที่มีจำนวนเศษ var y = 3; // ตัวเลขที่ไม่มีจำนวนเศษ
ตัวเลขที่ใหญ่หรือเล็กมากหรือเล็กมากโดยไม่มีจำนวนเศษสามารถเขียนด้วยระบบคณิตศาสตร์ทางวิทยาศาสตร์:
ตัวอย่าง
var x = 123e5; // 12300000 var y = 123e-5; // 0.00123
ตัวเลขของ JavaScript จะเป็นตัวเลขจำนวนเศษ 64 บิตตลอดเวลา
ต่างจากภาษาการเขียนโปรแกรมอื่นๆ หลายภาษา JavaScript จะไม่ได้กำหนดชนิดตัวเลขต่าง ๆ อย่างเช่น ตัวเลขเต็ม ตัวเลขเล็ก ตัวเลขยาว ตัวเลขจำนวนเศษ และอื่นๆ:
ตัวเลขของ JavaScript จะเก็บเป็นตัวเลขเป็นกลุ่มของความแม่นยำสองทศนิยมตามมาตรฐาน IEEE 754:
รูปแบบนี้ใช้ 64 บิตเก็บค่าตัวเลข ที่ 0 ถึง 51 บิตเก็บตัวเลข (ส่วน), 52 ถึง 62 บิตเก็บอิทธิพล และ 63 บิตเก็บสัญญาณ:
ค่า (หรือ Fraction/Mantissa) | อิทธิพล | สัญญาณ |
---|---|---|
52 bits(0 - 51) | 11 bits (52 - 62) | 1 bit (63) |
ความแม่นยำ
ตัวเลขเต็ม (ไม่ใช้ค่าทศนิยมหรือการนับเลขทางวิทยาศาสตร์) จะมีความแม่นยำถึง 15 ตำแหน่ง:
ตัวอย่าง
var x = 999999999999999; // x จะเป็น 999999999999999 var y = 9999999999999999; // y จะเป็น 10000000000000000
ตัวเลขเล็กที่สุดมี 17 ตำแหน่ง แต่การคำนวณจากจำนวนเศษไม่เหมือนจะแม่นยำ 100%:
ตัวอย่าง
var x = 0.2 + 0.1; // x จะเป็น 0.30000000000000004
การใช้การคูณและการแบ่งช่วยแก้ปัญหาดังกล่าว:
ตัวอย่าง
var x = (0.2 * 10 + 0.1 * 10) / 10; // x จะเป็น 0.3
การเพิ่มตัวเลขและตัวอักษร
คำเตือน!!
การเพิ่มและเส้นทางของ JavaScript ต่างใช้สัญญาณ +
ตัวเลขใช้การเพิ่ม ตัวอักษรใช้เส้นทาง
หากคุณเพิ่มตัวเลขกัน ผลที่ได้จะเป็นตัวเลข:
ตัวอย่าง
var x = 10; var y = 20; var z = x + y; // z จะเป็น 30 (ตัวเลข)
หากเพิ่มตัวอักษรกัน ผลที่ได้จะเป็นเส้นทางตัวอักษร:
ตัวอย่าง
var x = "10"; var y = "20"; var z = x + y; // z จะเป็น 1020 (ตัวอักษร)
หากคุณเพิ่มตัวเลขและตัวอักษร ผลที่ได้จะเป็นเส้นทางตัวอักษร:
ตัวอย่าง
var x = 10; var y = "20"; var z = x + y; // z จะเป็น 1020 (ตัวอักษร)
หากคุณเพิ่มตัวอักษรกับตัวเลข ผลลัพธ์จะเป็นประกอบตัวอักษรด้วย:
ตัวอย่าง
var x = "10"; var y = 20; var z = x + y; // z จะเป็น 1020 (ตัวอักษร)
ความผิดพลาดที่ตั้งใจว่าผลลัพธ์จะเป็น 30:
ตัวอย่าง
var x = 10; var y = 20; var z = "The result is: " + x + y;
ความผิดพลาดที่ตั้งใจว่าผลลัพธ์จะเป็น 102030:
ตัวอย่าง
var x = 10; var y = 20; var z = "30"; var result = x + y + z;
JavaScript ทำการประกอบรหัสจากฝั่งซ้ายไปฝั่งขวา
เพราะ x และ y คือตัวเลข 10 + 20 จะถูกบวนเข้ากัน
เพราะ z คือตัวอักษร 30 + "30" จะถูกประกอบ
ตัวอักษรเลข
ตัวอักษร JavaScript สามารถมีเนื้อหาเป็นตัวเลข:
var x = 100; // x คือตัวเลข var y = "100"; // y คือตัวอักษร
ในการคำนวณเลขทั้งหมด JavaScript จะพยายามเปลี่ยนตัวอักษรเป็นตัวเลข:
ตัวอย่างนี้ทำงานเช่นนี้:
var x = "100"; var y = "10"; var z = x / y; // z จะเป็น 10
ตัวอย่างนี้จะทำงานเหมือนนี้:
var x = "100"; var y = "10"; var z = x * y; // z จะเป็น 1000
ตัวอย่างนี้ทำงานเช่นนี้:
var x = "100"; var y = "10"; var z = x - y; // z จะเป็น 90
แต่ตัวอย่างนี้จะไม่ทำงานเหมือนตัวอย่างก่อน:
var x = "100"; var y = "10"; var z = x + y; // z จะไม่เป็น 110 (แต่ 10010)
ในตัวอย่างหลังสุด JavaScript ทำการประกอบตัวอักษรด้วยสัญญาณ +
NaN - ไม่ใช่ตัวเลข
NaN
เป็นคำที่รักษาไว้ของ JavaScript แสดงว่าตัวเลขไม่ถูกต้อง
การแบ่งใช้ตัวอักษรที่ไม่ใช่ตัวเลข จะได้ค่า NaN (Not a Number):
ตัวอย่าง
var x = 100 / "Apple"; // x จะเป็น NaN (Not a Number)
แต่ถ้าตัวอักษรประกอบด้วยตัวเลข ผลลัพธ์จะเป็นตัวเลข:
ตัวอย่าง
var x = 100 / "10"; // x จะเป็น 10
คุณสามารถใช้ฟังก์ชัน JavaScript ทั่วไป isNaN()
ในการกำหนดว่าค่าใดคือตัวเลข:
ตัวอย่าง
var x = 100 / "Apple"; isNaN(x); // กลับค่า true ครับ เพราะ x ไม่ใช่ตัวเลข
ต้องระมัดระวัง NaN
。หากคุณใช้คำนวณทาง matematical NaN
แล้วผลก็จะเป็น NaN
:
ตัวอย่าง
var x = NaN; var y = 5; var z = x + y; // z จะเป็น NaN
ผลอาจจะเป็นการเชื่อมต่อตัวอักษร:
ตัวอย่าง
var x = NaN; var y = "5"; var z = x + y; // z จะเป็น NaN5
NaN
เป็นตัวเลข,typeof NaN
กลับค่า number
:
ตัวอย่าง
typeof NaN; // กลับค่า "number"
Infinity
Infinity
(หรือ -Infinity
) คือค่าที่ JavaScript จะกลับค่าเมื่อหากคำนวณของเราเกินระยะที่สามารถคำนวณได้
ตัวอย่าง
var myNumber = 2; while (myNumber != Infinity) { // ทำงานจนถึง Infinity myNumber = myNumber * myNumber; }
การแบ่งเป็น 0 (ศูนย์) ก็จะสร้าง Infinity
:
ตัวอย่าง
var x = 2 / 0; // x จะเป็น Infinity var y = -2 / 0; // y จะเป็น -Infinity
Infinity
เป็นตัวเลข:typeOf Infinity
กลับค่า number
。
ตัวอย่าง
typeof Infinity; // กลับค่า "number"
สิบหกตัวอักษร
JavaScript จะแปลค่าที่มีหน้าตัวเลขเป็น 0x
ค่าตัวเลขคงที่ในรูปแบบสิบหก
ตัวอย่าง
var x = 0xFF; // x จะเป็น 255
ไม่ควรเขียนตัวเลขด้วยหน้าตัวเลข (เช่น 07)
บางส่วนของ JavaScript จะแปลตัวเลขที่มีหน้าตัวเลขเป็นหนึ่งหรือหลายตัวเป็นตัวเลขแปดตัว
โดยเริ่มต้น Javascript จะแสดงตัวเลขในรูปแบบเลขเล็กสิบ
แต่คุณสามารถใช้ toString()
วิธีนี้ส่งผลค่าเป็นสิบหกตัวอักษร หรือเป็นตัวเลขตัวเล็ก หรือตัวเลขสองตัว
ตัวอย่าง
var myNumber = 128; myNumber.toString(16); // กลับค่า 80 myNumber.toString(8); // กลับค่า 200 myNumber.toString(2); // กลับค่า 10000000
ตัวเลขสามารถเป็นวัตถุ
ตัวเลข JavaScript ทั่วไปถูกสร้างด้วยค่าตรง: var x = 123
แต่ก็สามารถใช้คำสั่งทางเลือกด้วย new
ถูกกำหนดเป็นสิ่งประกอบ: var y = new Number(123)
ตัวอย่าง
var x = 123; var y = new Number(123); // typeof x คือ number // typeof y คือ object
โปรดไม่ทำสิ่งประกอบตัวเลข. การกระทำนี้อาจทำให้เร็วขึ้น
new
ใช้คำสั่งทางเลือกทำให้โค้ดละเอียดขึ้น และก่อให้เกิดผลที่ยังไม่รู้ได้
เมื่อใช้ ==
เมื่อใช้คำสั่งประมวลผลเท่ากัน ตัวเลขที่เท่ากันดูเหมือนว่าจะเท่ากัน:
ตัวอย่าง
var x = 500; var y = new Number(500); // (x == y) คือ true เพราะ x และ y มีค่าที่เท่ากัน
เมื่อใช้ ====
หลังจากคำสั่งประมวลผลเท่ากัน ตัวเลขที่เท่ากันก็จะมีความเท่ากันที่แตกต่างเพราะ ====
การประมวลผลต้องมีชนิดและค่าที่เท่ากัน
ตัวอย่าง
var x = 500; var y = new Number(500); // (x === y) คือ false เพราะ x และ y มีชนิดที่แตกต่าง
แม้ว่าจะแย่ยิ่งขึ้นเช่นนี้. สิ่งประกอบไม่สามารถเปรียบเทียบได้:
ตัวอย่าง
var x = new Number(500); var y = new Number(500); // (x == y) คือ false เพราะสิ่งประกอบไม่สามารถเปรียบเทียบ
สิ่งประกอบ JavaScript ไม่สามารถเปรียบเทียบได้
- หน้าก่อนหน้า JS แบบแฟรมแบบเชิงธรรมชาติ
- หน้าต่อไป JS BigInt