Số trong JavaScript

JavaScript chỉ có một loại số trị.

Viết số trị có thể có hoặc không có dấu chấm.

JavaScript số trị

Viết giá trị số trong JavaScript có thể có dấu chấm hoặc không có dấu chấm:

Mô hình

var x = 3.14;    // Số có dấu chấm
var y = 3;       // Số không có dấu chấm

Thử ngay

Số lớn hoặc nhỏ siêu có thể được viết dưới dạng số học:

Mô hình

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

Thử ngay

Giá trị số trong JavaScript luôn là số thập phân 64 bit

Khác với nhiều ngôn ngữ lập trình khác, JavaScript không định nghĩa các loại số khác nhau, chẳng hạn như số nguyên, ngắn, dài, số thập phân, v.v.

Giá trị số trong JavaScript luôn được lưu trữ dưới dạng số thập phân kép, theo tiêu chuẩn quốc tế IEEE 754.

Định dạng này sử dụng 64 bit để lưu trữ giá trị, trong đó từ 0 đến 51 lưu trữ số (mảnh), từ 52 đến 62 lưu trữ指数, và 63 bit lưu trữ dấu:

Giá trị (gọi là Phân số/Mantissa) C指数 Dấu
52 bits(0 - 51) 11 bits (52 - 62) 1 bit (63)

Độ chính xác

Số nguyên (không sử dụng hệ số hoặc biểu thức số học) sẽ chính xác đến 15 chữ số.

Mô hình

var x = 999999999999999;   // x sẽ là 999999999999999
var y = 9999999999999999;  // y sẽ là 10000000000000000

Thử ngay

Số thập phân lớn nhất là 17 chữ số, nhưng toán học phân số không luôn luôn chính xác 100%:

Mô hình

var x = 0.2 + 0.1;         // x sẽ là 0.30000000000000004

Thử ngay

Sử dụng phép nhân chia giúp giải quyết vấn đề trên:

Mô hình

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x sẽ là 0.3

Thử ngay

Cộng số và chuỗi

Cảnh báo !!

Cộng và nối chuỗi trong JavaScript đều sử dụng toán tử +.

Số sử dụng phép cộng. Chuỗi sử dụng nối chuỗi.

Nếu cộng hai số, kết quả sẽ là một số:

Mô hình

var x = 10;
var y = 20;
var z = x + y;           // z sẽ là 30 (một số)

Thử ngay

Nếu cộng hai chuỗi, kết quả sẽ là nối chuỗi của chuỗi:

Mô hình

var x = "10";
var y = "20";
var z = x + y;           // z sẽ là 1020 (chuỗi)

Thử ngay

Nếu bạn cộng một số với một chuỗi, kết quả cũng là nối chuỗi:

Mô hình

var x = 10;
var y = "20";
var z = x + y;           // z sẽ là 1020 (một chuỗi)

Thử ngay

Nếu bạn cộng một chuỗi với một số, kết quả cũng sẽ là nối chuỗi:

Mô hình

var x = "10";
var y = 20;
var z = x + y;           // z sẽ là 1020 (chuỗi)

Thử ngay

Lỗi phổ biến là cho rằng kết quả nên là 30:

Mô hình

var x = 10;
var y = 20;
var z = "Kết quả là: " + x + y;

Thử ngay

Lỗi phổ biến là cho rằng kết quả nên là 102030:

Mô hình

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

Thử ngay

JavaScript dịch từ trái sang phải.

Vì x và y đều là số, 10 + 20 sẽ được cộng.

Vì z là chuỗi, 30 + "30" sẽ được nối.

Chuỗi số

Chuỗi của JavaScript có thể chứa nội dung số:

var x = 100;         // x là số
var y = "100";       // y là chuỗi

Trong tất cả các phép toán số, JavaScript sẽ cố gắng chuyển đổi chuỗi thành số:

Ví dụ này sẽ chạy như sau:

var x = "100";
var y = "10";
var z = x / y;       // z sẽ là 10

Thử ngay

Ví dụ này cũng sẽ chạy như sau:

var x = "100";
var y = "10";
var z = x * y;       // z sẽ là 1000

Thử ngay

Ví dụ này sẽ chạy như sau:

var x = "100";
var y = "10";
var z = x - y;      // z sẽ là 90

Thử ngay

Nhưng ví dụ này sẽ không chạy như trên:

var x = "100";
var y = "10";
var z = x + y;       // z sẽ không phải là 110 (mà là 10010)

Thử ngay

Trong ví dụ cuối cùng, JavaScript đã nối chuỗi bằng toán tử +.

NaN - Không phải số

NaN Là từ khóa bảo vệ của JavaScript, chỉ ra rằng một số không phải là số hợp lệ.

Thử chia bằng một chuỗi không phải số sẽ nhận được NaN (Not a Number):

Mô hình

var x = 100 / "Apple";  // x sẽ là NaN (Not a Number)

Thử ngay

Nhưng nếu chuỗi chứa giá trị số, kết quả sẽ là số:

Mô hình

var x = 100 / "10";     // x sẽ là 10

Thử ngay

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

Mô hình

var x = 100 / "Apple";
isNaN(x);               // Trả về true vì x không phải là số

Thử ngay

hãy cẩn thận NaN。Nếu bạn sử dụng trong toán học NaNthì kết quả cũng sẽ là NaN

Mô hình

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

Thử ngay

Kết quả có thể là chuỗi nối:

Mô hình

var x = NaN;
var y = "5";
var z = x + y;         // z sẽ là NaN5

Thử ngay

NaN là số,typeof NaN trả về number

Mô hình

typeof NaN;             // Trả về "number"

Thử ngay

Infinity

Infinity hoặc -Infinity) là giá trị mà JavaScript trả về khi tính toán số vượt quá phạm vi số có thể.

Mô hình

var myNumber = 2;
while (myNumber != Infinity) {          // Thực hiện đến Infinity
    myNumber = myNumber * myNumber;
}

Thử ngay

cộng với 0 (không) cũng sẽ tạo ra Infinity

Mô hình

var x =  2 / 0;          // x sẽ là Infinity
var y = -2 / 0;          // y sẽ là -Infinity

Thử ngay

Infinity là số:typeOf Infinity trả về number

Mô hình

typeof Infinity;        // Trả về "number"

Thử ngay

mười sáu phân

JavaScript sẽ giải thích số có tiền tố 0x giá trị thường số được giải thích là mười sáu phân.

Mô hình

var x = 0xFF;             // x sẽ là 255.

Thử ngay

Không bao giờ viết số với số lẻ đầu (ví dụ: 07).

Một số phiên bản JavaScript sẽ giải thích số có số lẻ đầu là tám phân.

Mặc định, Javascript sẽ hiển thị số dưới dạng số thập phân.

Nhưng bạn có thể sử dụng toString() Phương pháp này sẽ xuất ra số dưới dạng nhị phân, tám phân hoặc mười sáu phân.

Mô hình

var myNumber = 128;
myNumber.toString(16);     // Trả về 80
myNumber.toString(8);      // Trả về 200
myNumber.toString(2);      // Trả về 10000000

Thử ngay

Giá trị số có thể là đối tượng

Thường thì các giá trị số trong JavaScript được tạo thành từ các giá trị nguyên thủy: var x = 123

Nhưng cũng có thể thông qua từ khóa new Được định nghĩa là đối tượng: var y = new Number(123)

Mô hình

var x = 123;
var y = new Number(123);
// typeof x trả về number
// typeof y trả về object

Thử ngay

Hãy không tạo đối tượng số. Điều này sẽ làm chậm tốc độ thực thi.

new Từ khóa làm cho mã phức tạp hơn và gây ra một số kết quả không mong đợi:

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

Mô hình

var x = 500;             
var y = new Number(500);
// (x == y) là true vì x và y có giá trị bằng nhau

Thử ngay

Khi sử dụng === Sau khi sử dụng toán tử bằng, số bằng nhau trở thành không bằng nhau vì === Điều kiện cần thiết là cả loại và giá trị phải bằng nhau.

Mô hình

var x = 500;             
var y = new Number(500);
// (x === y) là false vì x và y có loại khác nhau

Thử ngay

Thậm chí còn tệ hơn. Đối tượng không thể so sánh:

Mô hình

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

Thử ngay

JavaScript đối tượng không thể so sánh.