JavaScript

Kiểu dữ liệu Number trong JavaScript

Kiểu dữ liệu Number trong JavaScript
Được viết bởi Minh Hoàng

Series lập trình JavaScript, ngôn ngữ lập trình linh động, thực thi phía client.

Kiểu dữ liệu Number trong JavaScript

Đối tượng (object) Number thể hiện dữ liệu số của số ngày, số nguyên hoặc số dấu phẩy động. Và bạn không cần phải lo lắng về các đối tượng Number bởi vì trình duyệt tự động chuyển đổi các chữ số (number literals) thành các thể hiện (instances) của lớp số (number class).

1. Kiểu số Number JavaScript

1. Kiểu số Number JavaScript

JavaScript chỉ có một loại số. Các số có thể được viết có, hoặc không có dấu thập phân:

Ví dụ:
[code language=”javascript”]8.6

2017[/code]

– Số cực lớn hoặc cực nhỏ có thể được viết bằng ký hiệu khoa học (theo cấp số nhân):

Ví dụ:
[code language=”javascript”]var y = 123e5; // 12300000
var z = 123e-5; // 0.00123[/code] Try it »

1.1. Số Number JavaScript luôn là dấu chấm động 64-bit (64-bit Floating Point)

– Không giống như nhiều ngôn ngữ lập trình khác, JavaScript không định nghĩa (define) các loại số khác nhau, như integer, short, long, floating-point,…

– JavaScript Numbers luôn được lưu trữ dưới dạng các số dấu chấm động chính xác gấp đôi, tuân theo chuẩn quốc tế IEEE 754. Định dạng (format) này lưu trữ các số trong 64 bit, trong đó:

  • Giá trị số (number) được lưu trong các bit từ 0 đến 51
  • Số mũ (exponent) trong các bit từ 52 đến 62
  • Bit dấu hiệu (sign) là 63
1.2. Precision – Độ chính xác

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

Ví dụ:
[code language=”javascript”]var x = 999999999999999; // x sẽ là 999999999999999
var y = 9999999999999999; // y sẽ là 10000000000000000[/code] Try it »

– Số thập phân tối đa là 17, nhưng số học dấu phẩy động không phải lúc nào cũng chính xác 100%:

Ví dụ:
[code language=”javascript”]var x = 0.2 + 0.1; // x sẽ là 0.30000000000000004[/code] Try it »

– Để giải quyết được vấn đề trên, chúng ta sẽ cho nó kết hợp với phép nhân và chia:

Ví dụ:
[code language=”javascript”]var x = (0.2 * 10 + 0.1 * 10) / 10; // x sẽ là 0.3[/code] Try it »
2. Một số lưu ý khi thao tác số với chuỗi

2. Một số lưu ý khi thao tác số với chuỗi

LƯU Ý:

  • JavaScript sử dụng toán tử + cho cả phép cộng và nối.
  • Các số thì được cộng thêm vào. Các chuỗi thì được nối lại với nhau.

– Bạn cần lưu ý trường hợp trong phép tính có cả số (Number) và chuỗi (String):

Ví dụ:
[code language=”javascript”]// Trường hợp cùng là số
x = 10;
y = 20;
result = x + y; // result = 30

// Trường hợp số và chuỗi
x = 10;
y = "20";
result = x + y; // result = 1020

// Trường hợp cùng là chuỗi
x = "10";
y = "20";
result = x + y; // result = 1020

// Trường hợp số ĐỨNG TRƯỚC chuỗi
x = 10;
y = 20;
z = "A"
result = x + y + z; // result = 30A

// Trường hợp chuỗi ĐỨNG TRƯỚC số
x = "A";
y = 10;
z = 20
result = x + y + z; // result = A1020[/code] Try it »

– Trong các ví dụ trên là thao tác với phép cộng, nhưng nếu chúng ta thao tác với các phép toán khác như trừ, nhân, chia thì kết quả không phải luôn luôn là những gì bạn mong đợi:

Ví dụ:
[code language=”javascript”]5 + null // return 5 vì null được convert thành 0
"5" + null // return "5null" vì null được convert thành "null"
"5" + 2 // return "52" vì 2 được convert thành "2"

"5" – 2 // return 3 vì "5" được convert thành 5
"5" * ‘2’ // return 10 vì "5" và ‘2’ được convert thành 5 và 2
"5" / "2" // return 2.5 vì "5" và "2" được convert thành 5 và 2[/code] Try it »

3. NaN - Not a Number

3. NaN – Không phải là số (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ệ.

Ví dụ:
[code language=”javascript”]var x = Number.NaN; // x = NaN[/code] Try it »

– Khi thực hiện các phép toán số học bằng cách sử dụng các chuỗi ký tự khác với các giá trị số, nó sẽ trở thành NaN (Không phải là một số).
Tuy nhiên, nếu chuỗi là một giá trị số thì kết quả sẽ là một số:

Ví dụ:
[code language=”javascript”]var x = 100 / "Apple"; // x sẽ là NaN (Not a Number)

var x = 100 / "10"; // x sẽ là 10[/code] Try it »

– Nếu bạn sử dụng NaN trong một phép toán hay một phép nối chuỗi, kết quả cũng sẽ là NaN.

Ví dụ:
[code language=”javascript”]var x = NaN;
var y = 5;
var z = x + y; // z sẽ là NaN

// Hoặc:

var x = NaN;
var y = "5";
var z = x + y; // z sẽ là NaN5[/code] Try it »

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

Ví dụ:
[code language=”javascript”]var x = 100 / "Apple";
isNaN(x); // return true, vì x không phải là một số (Not a Number)[/code]

– Khi chúng ta lấy typeof của NaN thì kết quả trả về là “number”:

Ví dụ:
[code language=”javascript”]typeof NaN; // return "number"[/code] Try it »
4. Infinity - Vô hạn

4. Infinity – Vô hạn

– Infinity (hoặc -Infinity) là giá trị JavaScript sẽ trả về (return) nếu bạn làm một phép tính có kết quả là một số vượt quá (outside) số lượng lớn nhất có thể.

Ví dụ:
[code language=”javascript”]var myNumber = 2;
while (myNumber != Infinity) { // Thực hiện cho đến khi Infinity
myNumber = myNumber * myNumber;
}[/code] Try it »

– Phép chia cho 0 (không) cũng tạo ra Infinity:

Ví dụ:
[code language=”javascript”]var x = 2 / 0; // x sẽ là Infinity
var y = -2 / 0; // y sẽ là -Infinity[/code]

– Khi chúng ta lấy typeof của Infinity thì kết quả trả về là “number”:

Ví dụ:
[code language=”javascript”]typeof Infinity; // return "number"[/code]
5. Hexadecimal - Hệ thập lục phân

5. Hexadecimal – Hệ thập lục phân

– JavaScript diễn giải các hằng số (numeric constants) bằng số thập lục phân nếu có 0x đứng trước.

Ví dụ:
[code language=”javascript”]var x = 0xFF; // x sẽ là 255[/code] Try it »

– Đừng bao giờ viết một số có số 0 đứng đầu (ví dụ như 07).
– Một số phiên bản JavaScript, các số được hiểu là số bát phân nếu các số được bắt đầu bằng số 0.

– Theo mặc định, JavaScript hiển thị số dưới dạng số thập phân (hệ cơ số 10).

– Hexadecimal là hệ cơ số 16 (base 16). Decimal là hệ cơ số 10 (base 10). Octal là hệ cơ số 8 (base 8). Binary là hệ cơ số 2 (base 2).

– Nhưng bạn có thể sử dụng phương thức toString() để output ra kết quả của một số từ cơ sở 2 (base 2) đến cơ số 36 (base 36):

Ví dụ:
[code language=”javascript”]var x = 32;
x.toString(10); // return 32
x.toString(32); // return 10
x.toString(16); // return 20
x.toString(8); // return 40
x.toString(2); // return 100000[/code] Try it »
6. Số Number có thể là Object

6. Số Number có thể là Object

– Thông thường các chuỗi JavaScript là các giá trị nguyên thủy và được tạo từ các literal:

var x = 123;

– Tuy nhiên, numbers cũng có thể được định nghĩa là các đối tượng (objects) với từ khóa new:

var y = new Number(123);

Ví dụ:
[code language=”javascript”]var x = "Minh";
var y = new String("Minh");

// typeof x sẽ trả về "number"
// typeof y sẽ trả về "object"[/code] Try it »

– Đừng bao giờ tạo Number objects. Nó làm chậm tốc độ thực thi.
– Hơn nữa, từ khóa new làm phức tạp code. Điều này có thể tạo ra một số kết quả không mong muốn như dưới đây:

● Khi sử dụng toán tử ==, các số bằng nhau sẽ bằng nhau (equal):

Ví dụ:
[code language=”javascript”]var x = 500;
var y = new Number(500);

// (x == y) là "true", vì x và y có giá trị bằng nhau.[/code]

● Khi sử dụng toán tử ===, các số bằng nhau cũng không bằng nhau, vì toán tử === mong đợi sự bằng nhau trong cả kiểu (type) và giá trị (value).

Ví dụ:
[code language=”javascript”]var x = 500;
var y = new Number(500);

// (x === y) là "false", vì x và y là khác kiểu (number vs object)[/code] Try it »

● Hay thậm chí các đối tượng cũng không thể so sánh được.

Ví dụ:
[code language=”javascript”]var x = new Number(500);
var y = new Number(500);

// (x == y) là "false", vì x và y là các đối tượng khác nhau.
// (x === y) là "false", vì x và y là các đối tượng khác nhau.[/code] Try it »

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 trả về “false”.

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

Translate »