ตัวเลข JavaScript

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 ไม่สามารถเปรียบเทียบได้