Đối tượng Number trong JavaScript - Fedu

CHÀO MỪNG BẠN ĐẾN VỚI THƯ VIỆN HỌC TẬP & ĐÀO TẠO CƠ BẢN

Đối tượng Number trong JavaScript

JavaScript

Hướng dẫn JavaScript

Biểu mẫu JavaScript

Đối tượng JavaScript

Hàm JavaScript

DOM JavaScript

Trình duyệt BOM

JavaScript Ajax

JavaScript Json

JavaScript chỉ có một loại số. Số có thể được viết với hoặc không có số thập phân.

var x = 3.14;    // A number with decimals
var y = 3;       // A number without decimals

Số cực nhỏ hoặc cực đại có thể được viết bằng ký hiệu khoa học (hàm mũ):

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

Các số JavaScipt dạng 64 bit

Không giống 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, như số nguyên, ngắn, dài, floating-point…

Các số JavaScript luôn được lưu giữ dưới dạng các số dấu chấm động chính xác gấp đôi, theo tiêu chuẩn IEEE 754 quốc tế. Định dạng này lưu trữ các số trong 64 bit, trong đó số (phần) được lưu trữ trong các bit từ 0 đến 51, số mũ trong các bit từ 52 đến 62 và ký hiệu trong bit 63:

Giá trị Số mũ Ký hiệu
52 bits (0 – 51) 11 bits (52 – 62) 1 bit (63)

Độ chính xác

Các số nguyên (số không có dấu chấm hoặc ký hiệu số mũ) chính xác đến 15 chữ số.

var x = 999999999999999;   // x will be 999999999999999
var y = 9999999999999999;  // y will be 10000000000000000

Số thập phân tối đa là 17 nhưng số thực dấu phẩy động không hoàn toàn chính xác 100%:

var x = 0.2 + 0.1;         // x will be 0.30000000000000004

Để giải quyết vấn đề trên, nó giúp nhân và chia:

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3

Thêm Số và Chuỗi

JavaScript sử dụng toán tử + cho cả bổ sung và nối chuỗi. Số được cộng vào. Các chuỗi được ghép lại. Nếu bạn thêm hai số, kết quả sẽ là một số:

var x = 10;
var y = 20;
var z = x + y;           // z will be 30 (a number)

Nếu bạn thêm hai chuỗi, kết quả sẽ là một chuỗi:

var x = “10”;
var y = “20”;
var z = x + y;           // z will be 1020 (a string)

Nếu bạn thêm một số và một chuỗi, kết quả sẽ là một chuỗi:

var x = 10;
var y = “20”;
var z = x + y;           // z will be 1020 (a string)

Nếu bạn thêm một chuỗi và một số, kết quả sẽ là một chuỗi:

var x = “10”;
var y = 20;
var z = x + y;           // z will be 1020 (a string)

Một sai lầm phổ biến là mong đợi kết quả này ra 30:

var x = 10;
var y = 20;
var z = “The result is: ” + x + y;

Một sai lầm phổ biến là mong đợi kết quả ra 102030:

var x = 10;
var y = 20;
var z = “30”;
var result = x + y + z;

Trình biên dịch JavaScript hoạt động từ trái sang phải. Đầu tiên 10 + 20 được thêm vào bởi vì x và y là cả hai con số. Sau đó 30 + “30” được nối lại vì z là một chuỗi.

Chuỗi số

Các chuỗi JavaScript có thể có nội dung số:

var x = 100;         // x is a number

var y = “100”;       // y is a string

JavaScript sẽ cố gắng chuyển đổi chuỗi thành số trong tất cả các hoạt động số:

var x = “100”;
var y = “10”;
var z = x / y;       // z will be 10

hoặc

var x = “100”;
var y = “10”;
var z = x * y; // z will be 1000

var x = “100”;
var y = “10”;
var z = x – y;       // z will be 90

nhưng không hoạt động với trường hợp:

var x = “100”;
var y = “10”;
var z = x + y; // z will not be 110 (It will be 10010)

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

NaN – Not a Number

NaN là một từ dành riêng cho JavaScript cho biết một số không phải là số hợp lệ. Cố gắng thực hiện số học với một chuỗi không phải số sẽ cho kết quả trong N (không phải là một số):

var x = 100 / “Apple”;  // x will be NaN (Not a Number)

Tuy nhiên, nếu chuỗi chứa một giá trị số, kết quả sẽ là một số:

var x = 100 / “10”;     // x will be 10

Bạn có thể sử dụng hàm JavaScript là NaN() để tìm hiểu xem giá trị có phải là một số không:

var x = 100 / “Apple”;
isNaN(x); // returns true because x is Not a Number

Đối chiếu vào NaN. Nếu bạn sử dụng NaN trong một phép toán, thì kết quả sẽ là NaN:

var x = NaN;
var y = 5;
var z = x + y; // z will be NaN

hoặc kết quả có thể là một sự ghép nối:

var x = NaN;
var y = “5”;
var z = x + y; // z will be NaN5

NaN là một số: typeof NaN trả về số:

typeof NaN; // returns “number”

Infinity (vô hạn)

Infinity (hoặc -Infinity) là giá trị JavaScript sẽ trở lại nếu bạn tính một số nằm ngoài số lớn nhất có thể.

var myNumber = 2;
while (myNumber != Infinity) { // Execute until Infinity
myNumber = myNumber * myNumber;
}

Chia cho 0 (zero) cũng tạo ra vô hạn:

var x = 2 / 0; // x will be Infinity
var y = -2 / 0; // y will be -Infinity

Infinity là một số: typeof Infinity trả về số

typeof Infinity; // returns “number”

Số thập lục phân

JavaScript giải thích hằng số dưới dạng hệ thập lục phân nếu chúng được đứng trước bởi 0x.

var x = 0xFF; // x will be 255

Không bao giờ viết một số với số 0 đứng đầu (như số 07). Một số phiên bản JavaScript giải nghĩa các con số là bát phân nếu chúng được viết với số 0 đứng đầu. Theo mặc định, JavaScript hiển thị số dưới dạng thập phân 10 số.

Nhưng bạn có thể sử dụng phương thức toString() để xuất các số dưới dạng cơ sở 16 (hex), cơ sở 8 (bát phân), hoặc cơ sở 2 (nhị phân).

var myNumber = 128;
myNumber.toString(16); // returns 80
myNumber.toString(8); // returns 200
myNumber.toString(2); // returns 10000000

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

Thông thường các số JavaScript là các giá trị nguyên hàm được tạo từ các chữ cái:

var x = 123;

Nhưng số cũng có thể được định nghĩa là các đối tượng với từ khoá mới:

var y = new Number(123);

Ví dụ:

var x = 123;
var y = new Number(123);

// typeof x returns number
// typeof y returns object

Không tạo các đối tượng Number. Nó làm chậm tốc độ thực hiện. Từ khoá mới làm phức tạp mã. Đ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ử ==, số equal bằng nhau:

var x = 500;
var y = new Number(500);

// (x == y) is true because x and y have equal values

Khi sử dụng toán tử ===, các số equal không bằng, bởi vì toán tử === mong đợi sự tương đương trong cả kiểu và giá trị.

var x = 500;
var y = new Number(500);

// (x === y) is false because x and y have different types

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

var x = new Number(500);
var y = new Number(500);

// (x == y) is false because objects cannot be compared

Lưu ý sự khác biệt giữa (x == y) và (x === y). So sánh hai đối tượng JavaScript sẽ luôn luôn trả về false.