Sử dụng số trong JavaScript

JavaScript chỉ có một kiểu số.

Số có thể được viết kèm với hoặc không dấu chấm thập phân.

Số trong JavaScript

Số trong JavaScript có thể được viết kèm hoặc không kèm dấu chấm thập phân:

Ví dụ

var x = 87.00;    // Một số với dấu chấm thập phân
var y = 87;       // Một số không có dấu chấm thập phân

Các số rất lớn và rất nhỏ có thể được viết dưới dạng biểu thức khoa học:

Ví dụ

var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123

Các số trong JavaScript luôn là số thực dấu chấm động 64-bit

Không giống như các ngôn ngữ lập trình khác, JavaScript không định nghĩa các kiểu khác nhau về số như: số nguyên, số ngắn, số dài, số thực, vân vân.

Số trong JavaScript luôn luôn được lưu trữ như số thực dấu chấm động, theo tiêu chuẩn IEEE 754 quốc tế.

Định dạng này lưu trữ các số dưới dạng 64 bít, các số được lưu giữ từ bít 0 đến 51, số mũ từ bít 52 đến 62, và các ký hiệu trong bít 63:

Số Số mũ Ký hiệu
52 bít (0 – 51) 11 bít (52 – 62) 1 bít (63)

Độ chính xác

Số nguyên (số mà không có ký hiệu số mũ) được coi là chính xác lên đến 15 chữ số.

Ví dụ

var x = 999999999999999;   // x sẽ là 999999999999999
var y = 9999999999999999;  // y sẽ trả về kết quả 10000000000000000

Giá trị cực đại trong hệ thập phân của JavaScript là 17 con số, nhưng dấu chấm động không phải luôn luôn chính xác 100%:

Ví dụ

var x = 0.2 + 0.1;         // x sẽ có giá trị là 0.30000000000000004

Để giải quyết vấn đề trên, hãy nhân nó lên và chia ra:

Ví dụ

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x sẽ có giá trị 0.3

Hệ thập lục phân

JavaScript giải nghĩa hằng số thành hệ thập lục phân, nếu chúng đều bắt đầu bằng 0x.

Ví dụ

var x = 0xFF;             // x sẽ có giá trị 255 trong hệ thập phân

Không bao giờ viết một số với số 0 ở đầu (ví dụ 03).

Một số phiên bản JavaScript giải nghĩa các số thành hệ bát phân nếu nó được viết với số 0 ở đầu.

Theo mặc định, JavaScript hiển thị các con số trong hệ thập phân.

Nhưng bạn có thể sử dụng phương thức toString() để biến một số hệ thập phân thành hệ thập lục phân (16), bát phân (8) hoặc nhị phân (2).

Ví dụ

var myNumber = 128;
myNumber.toString(16);     // trả về kết quả 80 theo hệ thập lục phân (16)
myNumber.toString(8);      // trả về kết quả 200 theo hệ bát phân (8)
myNumber.toString(2);      // trả về kết quả  10000000 theo hệ nhị phân (2)

Vô cực

Dương vô cùng (hoặc âm vô cùng) là giá trị JavaScript sẽ trả về nếu bạn tính toán một số nằm ngoài con số lớn nhất có thể.

Ví dụ

var myNumber = 2;
while (myNumber != Infinity) {          // Tính toán cho đến khi vượt mốc số lớn nhất
myNumber = myNumber * myNumber;
}

Chia cho 0 (zero) cũng tạo ra các số vô cùng lớn:

Ví dụ

var x =  2 / 0;          // x là dương vô cùng
var y = -2 / 0;          // y là âm vô cùng

Vô cùng lớn là một số: kiểu của nó (typeOf) sẽ trả về là một số.

Ví dụ

typeof Infinity;        // kết quả trả về là “number”

NaN – Không phải là số

NaN là một từ JavaScript dành riêng để chỉ một giá trị không phải là một số.

Các phép toán với một chuỗi không phải là số sẽ cho ra kết quả NaN (Not a Number):

Ví dụ

var x = 100 / “Apple”;  // x sẽ có kết quả là NaN (Not a Number)

Dù sao, nếu chuỗi chỉ bao gồm các con số, kết qua sẽ vẫn là số, thí dụ:

Ví dụ

var x = 100 / “10”;     // x sẽ có giá trị là 10

Bạn có thể sử dụng hàm toàn cục trong JavaScript là isNaN() để biết xem một giá trị có phải là số hay là không.

Ví dụ

var x = 100 / “Apple”;
isNaN(x);               // sẽ trả về kết quả là true với vì x Không phải là một Số

Nếu bạn sử dụng NaN như một toán tử, kết quả sẽ cho ra NaN:

Ví dụ

var x = NaN;
var y = 7;
var z = x + y;         // z sẽ là NaN

Hoặc kết quả là một phép nối:

Ví dụ

var x = NaN;
var y = “7”;
var z = x + y;         // z sẽ là NaN7

Điều thú vị có phần kỳ lạ là JavaScript xếp kiểu là của NaN là một số. Khi sử dụng typeof ta sẽ thấy kết quả trả về là một số:

Ví dụ

typeof NaN;             // kết quả trả về là “số” (“number”)

Số có thể là đối tượng

Thông thường số trong JavaScript là giá trị thuần tuý được tạo ra từ các ký tự biểu thị số: var x = 876

Nhưng các con số cũng có thể được định nghĩa như là các đối tượng với từ khoá new: var y = new Number(876)

Ví dụ

var x = 876;
var y = new Number(876);// typeof x trả về là number (số)
// typeof y trả về là object (đối tượng)

Đừng tạo Số thành đối tượng. Điều này có thể làm chậm tốc độ xử lý. Từ khoá new làm code trở nên phức tạp. Điều này có thể tạo ra một số kết quả không mong muốn.

Khi sử dụng toán tử ==, các số bằng nhau trông có vẻ bằng:

Ví dụ

var x = 500;
var y = new Number(500);// (x == y) cho kết quả true vì x và y có cùng giá trị

Khi sử dụng toán tử bằng chặt (===), hai số trên không còn bằng nhau nữa, vì mặc dù giá trị thuần tuý giống nhau, nhưng kiểu của chúng thì khác nhau. Mà bằng chặt yêu cầu cả giá trị và kiểu phải như nhau.

Ví dụ

var x = 500;
var y = new Number(500);// (x === y) là false bởi vì hai kiểu là khác nhau

Các đối tượng không thể so sánh:

Ví dụ

var x = new Number(500);
var y = new Number(500);// (x == y) là false, bởi vì các đối tượng (object) không thể so sánh.

Leave a Comment