Numbers

Giá trị số được tạo thành từ một chuỗi ký tự số bất kỳ, ví dụ:

5

Loại dữ liệu số cũng bao gồm một vài thuộc tính chung đặc biệt biểu thị các khái niệm số, chẳng hạn như InfinityNaN – ý nghĩa giá trị "không phải là số" kết quả có thể xảy ra của việc cố gắng thực hiện phép toán các phép tính cho các giá trị không phải là số.

Đối tượng số

Khi một giá trị được truyền vào hàm Number(), giá trị đó sẽ được chuyển đổi thành số tương đương. Ví dụ: một chuỗi số dẫn đến kết quả tương đương số nguyên gốc:

Number( "10" );
> 10

Chuyển giá trị false hoặc null đến Number() sẽ trả về 0, còn true sẽ trả về 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Nếu không thể chuyển đổi một giá trị, như trong trường hợp undefined hoặc một chuỗi chứa ký tự không phải số, hàm Number sẽ trả về NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Như đã nêu chi tiết trong phần tính kế thừa nguyên mẫu, có thể bạn sẽ có ít hoặc không có lý do để sử dụng đối tượng Number làm một vì hàm này tạo ra một đối tượng Number thay vì một giá trị cố định dạng số.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Đối tượng này hoạt động như giá trị được chỉ định cho các phép toán, nhưng nó không thể so sánh đẳng thức nghiêm ngặt với giá trị cố định dạng số vì các loại dữ liệu không khớp mà không mang lại bất kỳ lợi ích thiết thực nào so với giá trị cố định.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Số thực và số nguyên

JavaScript chỉ có một loại số: 64 bit IEEE 754-1985 độ chính xác kép dấu phẩy động giữa -2^10242^1024. Trước khi JavaScript lưu trữ bất kỳ số nào trong bộ nhớ, chuyển đổi số đó thành số dấu phẩy động nhị phân, còn được gọi là số thực.

Bộ nhớ 64-bit này (một bit "dấu" dương hoặc âm, 11 bit cho một số mũ và 52 bit cho một phân số) có thể gây ra lỗi về độ chính xác với bất kỳ số nào không phù hợp trong phạm vi cho phép. Hạn chế này là vốn có vào kiểu dữ liệu số của JavaScript.

0.1 + 0.7
> 0.7999999999999999

Thay vào đó, giá trị số có thể được lưu trữ dưới dạng số nguyên (số thực dấu phẩy động) không có phân số từ -(2^53 − 1) đến 2^53 − 1. Vì số thực dấu phẩy động và số nguyên được lưu trữ theo cùng cách cơ bản, không có sự khác biệt thực tế về cách hoạt động của các số này. Tuy nhiên, bạn nên sử dụng số nguyên bất cứ khi nào để tránh các lỗi về độ chính xác.

Toán tử số

Khi bạn sử dụng các toán tử toán học chuẩn với số nguyên gốc, thứ tự phép toán toán học áp dụng: mọi biểu thức nằm trong dấu ngoặc đơn sẽ được đánh giá trước, sau đó là số mũ, nhân, chia, cộng và trừ.

Đơn vị tổ chức Tên Mô tả Cách sử dụng Kết quả
+ Phép cộng 2+2 4
- Phép trừ 4-2 2
* Phép Nhân 2*5 10
/ Bộ phận 10/5 2
++ Tăng dần Thêm một vào một số 2++ 3
-- Giảm dần Trừ một từ một số 3-- 2
** Số mũ Trả về kết quả tăng
đầu tiên toán hạng thành luỹ thừa của toán hạng thứ hai.
2**4 16
% Phần còn lại Trả về phần còn lại khi
toán hạng đầu tiên được chia cho toán hạng thứ hai.
12%5 2

Bạn cũng có thể sử dụng các toán tử bài tập để thực hiện một phép toán trên giá trị của một biến và chỉ định ngay biến đó giá trị mới được tính cho biến.

Đơn vị tổ chức Tên Cách sử dụng
+= Chỉ định thêm myValue += 2
-= Chỉ định trừ myValue -= 2
*= Phép nhân myValue *= 2
/= Chỉ định bộ phận myValue /= 2
**= Chỉ định số mũ myValue **= 2
%= Chỉ định còn lại myValue %= 2

Giá trị tượng trưng

Số nguyên gốc cũng áp dụng cho một số trường hợp đặc biệt: "không phải là số" giá trị (NaN) và một giá trị biểu thị vô hạn có thể là số dương (Infinity) hoặc âm (-Infinity).

Bạn có thể hiếm khi gặp Infinity là kết quả của phép chia cho 0, một trường hợp trong đó hầu hết các ngôn ngữ lập trình đều gửi lỗi:

10 / 0
> Infinity

Hãy nhớ rằng JavaScript có phân biệt chữ hoa chữ thường. Infinity là một loại dữ liệu số biểu thị khái niệm vô hạn, nhưng infinity không có ý nghĩa đặc biệt:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (có nghĩa là "Không phải là số") xuất hiện thường xuyên hơn, trong trường hợp kết quả của một phép tính số học không thể được biểu thị dưới dạng một số. Ví dụ: vì JavaScript cố gắng suy luận loại dữ liệu từ giá trị và ngữ cảnh, một giá trị cố định kiểu chuỗi chỉ chứa số có thể được sử dụng trong phép toán:

"2" * 2;
> 4

Tuy nhiên, nếu chuỗi đó không thể được phân tích cú pháp dưới dạng giá trị số, hàm kết quả không phải là số:

"two" * 2;
> NaN

NaN sẽ được trả về trong mọi trường hợp giá trị không hợp lệ được biểu thị dưới dạng số trong một phép toán. Một số ví dụ bao gồm:

  • Không thể chuyển đổi số điện thoại (ví dụ: parseInt( undefined ))
  • Các phép toán số học mà kết quả không phải là một số thực (ví dụ: 0 / 0, Math.sqrt( -10 ))
  • Một phép toán số học có kết quả không xác định (0 * Infinity)
  • Một phép toán số học bao gồm NaN (NaN + 2) hoặc một kết quả trên NaN (2 * "string" / 2)

Kiểm tra kiến thức

Kết quả của việc chuyển false đến Number() là gì?

1
NaN (Không phải số)
0
Sai

Kết quả của phép toán sau đây là gì?

"Six" * 3

Đúng
2
18
NaN (Không phải số)
0