Javascript Numbers

13/07/2019

Bài sau » « Bài trước

Javascript chỉ có duy nhất 1 loại number. Numbers có thể được viết có hoặc không có số thập phân.

var x = 3.14; // Có số thập phân var y = 3; // Không có số thập phân

Với các số quá lớn hoặc quá nhỏ ta có thể viết theo dạng chuẩn khoa học:

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

Không giống nhiều ngôn ngữ lập trình khác, Javascript không phân chia ra nhiều loại number như integer, short, long, float,...

Độ chính xác

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

var x = 999999999999999; // giá trị x sẽ là 999999999999999 var y = 9999999999999999; // giá trị y sẽ là 10000000000000000

Giá trị tối đa của số có số thập phân là 17 số, Nhưng số sau dấu phẩy không phải lúc nào cũng chính xác 100%.

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

Để giải quyết vấn đề trên, ta sử dụng phép nhân và chia:

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

Phép cộng Number và String

Chú ý:
Javascript dùng toán tử + cho phép cộng và nối chuỗi.
Number thì được cộng thêm. String thì nối chuỗi.

Nếu bạn cộng 2 số thì kết quả là 1 số.

var x = 10; var y = 20; var z = x + y; // z là 30 (number)

Nếu bạn cộng 2 chuỗi thì kết quả là 1 chuỗi dài hơn.

var x = "10"; var y = "20"; var z = x + y; // z là "1020" (string)

Nếu bạn cộng số với chuỗi, thì kết quả là chuỗi.

var x = 10; var y = "20"; var z = x + y; // z là "1020" (string)

Nếu bạn cộng chuỗi với số, thì kết quả là chuỗi.

var x = "10"; var y = 20; var z = x + y; // z là "1020" (string)

Một lỗi phổ biến nhất là mong đợi kết quả này là 30:

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

Numberic string - Chuỗi số

Javascript string có thể có nội dung là số.

var x = 100; // x là number var y = "100"; // y là string

JavaScript sẽ cố gắng chuyển đổi string thành number trong tất cả các toán tử số học:

var x = "100"; var y = "10"; var z = x / y; // kết quả z là 10 var a = x * y; // kết quả a là 1000 var b = x - y; // kết quả b là 90

Nhưng, trong phép cộng thì không như vậy:

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

Trong trường hợp trên, Javascript sử dụng toán tử + để nối chuỗi.

NaN - Not a Number

NaN là một từ dành riêng trong JavaScript cho biết một số không phải là số hợp pháp.

Khi sử dụng phép toán số học với một chuỗi (không phải là numberic strings ) thì kết quả trả về là NaN

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

Tuy nhiên, Nếu trong chuỗi là dạng numberic string thì vẫn có thể thực hiện được:

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

Bạn có thể sử dụng Global Javascript function isNaN() để kiểm tra giá trị có phải là số hay không ?

var x = 100 / "Apple"; isNaN(x); // Kết quả là true vì x không phải là số.

Nếu bạn sử dụng isNaN() trong phép toán số học. Kết quả sẽ là isNaN().

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

Hoặc kết quả sẽ là chuỗi :

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

isNaN() là number: typeof NaNnumber.

typeof NaN; // kết quả là "number"

Infinity - Số vô cực

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

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

Chia 1 số cho 0 thì kết quả cũng là Infinity

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

Infinity() là number: typeof Infinitynumber.

typeof Infinity; // kết quả là "number"

Hệ thập lục phân

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

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

Không bao giờ viết một số có số 0 đứng đầu (như 07).
Một số phiên bản JavaScript diễn giải các số là bát phân nếu chúng được viết bằng số 0 đứng đầu.

Number có thể là Object

Thông thường, Javascript Number là giá trị nguyên thủy được tạo từ chữ.

var x = 123;

Nhưng Number cũng có thể là một object với từ khóa new

var y = new Number(123);

var x = 123; var y = new Number(123); // typeof x là number // typeof y là object

Khi sử dụng toán tử == thì kết quả là bằng nhau.

var x = 123; var y = new Number(123); // (x == y) kết quả là true.

Nhưng, khi sử dụng toán tử === thì kết quả là false, vì chúng khác kiểu dữ liệu.

var x = 123; var y = new Number(123); // (x === y) kết quả là false, vì x và y khác kiểu dữ liệu (number với object).

Hoặc so sánh 2 object.

var x = new Number(123); var y = new Number(123); // (x == y) kết quả là false, vì x và y là 2 object khác nhau.

Hiểu được sự khác nhau giữa x == yx === y

So sánh 2 Javascript object thì kết quả luôn trả về là false.

Bài sau » « Bài trước
Back to top