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ư Infinity
và NaN
– ý 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^1024
và 2^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ênNaN
(2 * "string" / 2
)
Kiểm tra kiến thức
Kết quả của việc chuyển false
đến Number()
là gì?
Kết quả của phép toán sau đây là gì?
"Six" * 3