Toán tử so sánh so sánh các giá trị của hai toán hạng và đánh giá xem câu lệnh mà chúng tạo ra là true
hay false
. Ví dụ sau sử dụng toán tử đẳng thức nghiêm ngặt (===
) để so sánh hai toán hạng: biểu thức 2 + 2
và giá trị 4
. Vì kết quả của biểu thức và giá trị số 4
giống nhau, nên biểu thức này có giá trị là true
:
2 + 2 === 4
> true
Buộc kiểu và đẳng thức
Hai trong số các toán tử so sánh được sử dụng thường xuyên nhất là ==
cho phép so sánh không chặt chẽ và ===
cho phép so sánh chặt chẽ. ==
thực hiện so sánh không chặt chẽ giữa hai giá trị bằng cách buộc các toán hạng khớp với loại dữ liệu, nếu có thể. Ví dụ: 2 == "2"
trả về true
, mặc dù việc so sánh đang được thực hiện giữa một giá trị số và một giá trị chuỗi.
2 == 2
> true
2 == "2"
> true
Điều này cũng đúng với !=
, chỉ trả về true
nếu các toán hạng đang được so sánh không bằng nhau một cách lỏng lẻo.
2 != 3
> true
2 != "2"
> false
Các phép so sánh nghiêm ngặt sử dụng ===
hoặc !==
không thực hiện việc ép kiểu. Để một phép so sánh nghiêm ngặt đánh giá thành true
, các giá trị được so sánh phải có cùng loại dữ liệu. Do đó, 2 == "2"
trả về true
, nhưng 2 === "2"
trả về false
:
2 === 3
> false
2 === "2"
> false
Để loại bỏ mọi sự mơ hồ có thể xảy ra do tính năng tự động ép buộc, hãy sử dụng ===
bất cứ khi nào có thể.
Đơn vị tổ chức | Mô tả | Cách sử dụng | Kết quả |
---|---|---|---|
=== | Hoàn toàn bằng nhau | 2 === 2 | đúng |
!== | Không hoàn toàn bằng | 2 !== "2" | đúng |
== | Bằng (hoặc "bằng một cách lỏng lẻo") | 2 == "2" | đúng |
!= | Không bằng | 2 != "3" | đúng |
> | Lớn hơn | 3 > 2 | đúng |
>= | Lớn hơn hoặc bằng | 2 >= 2 | đúng |
< | Nhỏ hơn | 2 < 3 | đúng |
<= | Ít hơn hoặc bằng | 2 <= 3 | đúng |
Đúng và sai
Tất cả giá trị trong JavaScript đều ngầm ẩn là true
hoặc false
và có thể được ép thành giá trị boolean tương ứng, ví dụ: bằng cách sử dụng trình so sánh "bằng nhau một cách lỏng lẻo". Một tập hợp giá trị hạn chế buộc phải chuyển sang false
:
0
null
undefined
NaN
- Chuỗi trống (
""
)
Tất cả các giá trị khác đều buộc phải chuyển sang true
, bao gồm mọi chuỗi chứa một hoặc nhiều ký tự và tất cả các số khác 0. Các giá trị này thường được gọi là giá trị "đúng" và "sai".
"My string" == true
> true
100 == true
> true
0 == true
> false
Toán tử logic
Sử dụng toán tử logic AND (&&
), OR (||
) và NOT (!
) để kiểm soát luồng của tập lệnh dựa trên việc đánh giá hai hoặc nhiều câu lệnh có điều kiện:
2 === 3 || 5 === 5;
> true
2 === 2 && 2 === "2"
> false
2 === 2 && !"My string."
> false
Biểu thức NOT (!
) logic phủ định giá trị đúng hoặc sai của một toán hạng, đánh giá thành true
nếu toán hạng đánh giá thành false
và false
nếu toán hạng đánh giá thành true
:
true
> true
!true
> false
!false
> true
Việc sử dụng toán tử NOT logic (!
) ở phía trước một loại dữ liệu khác, chẳng hạn như số hoặc chuỗi, sẽ buộc giá trị đó thành boolean và đảo ngược giá trị đúng hoặc sai của kết quả.
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
Thông thường, bạn nên sử dụng hai toán tử KHÔNG để nhanh chóng ép dữ liệu thành giá trị boolean khớp:
!!"string"
> true
!!0
> false
Toán tử logic AND và OR không tự thực hiện bất kỳ hành động ép buộc nào. Hàm này trả về giá trị của một trong hai toán hạng đang được đánh giá, trong đó toán hạng được chọn được xác định bằng kết quả đánh giá đó.
Toán tử logic AND (&&
) chỉ trả về toán hạng đầu tiên trong số hai toán hạng nếu toán hạng đó có giá trị là false
, còn nếu không thì trả về toán hạng thứ hai. Trong các phép so sánh đánh giá thành giá trị boolean, hàm này chỉ trả về true
nếu các toán hạng ở cả hai bên của toán tử logic AND đánh giá thành true
. Nếu một bên đánh giá là false
, thì bên còn lại sẽ trả về false
.
true && false
> false
false && true
> false
false && false
> false
true && true
> true
Khi &&
được sử dụng với hai toán hạng không phải boolean, toán hạng đầu tiên sẽ được trả về không thay đổi nếu có thể ép thành false
. Nếu toán hạng đầu tiên có thể được ép thành true
, thì toán hạng thứ hai sẽ được trả về không thay đổi:
false && "My string"
> false
null && "My string"
> null
"My string" && false
> false
"My string" && "My second string"
> "My second string"
2 === 2 && "My string"
> "My string"
Toán tử OR logic (||
) chỉ trả về toán hạng đầu tiên trong số hai toán hạng nếu toán hạng đó có giá trị là true
, còn nếu không thì trả về toán hạng thứ hai. Trong các phép so sánh đánh giá thành giá trị boolean, điều này có nghĩa là hàm này sẽ trả về true
nếu một trong hai toán hạng đánh giá thành true
và nếu không bên nào đánh giá thành true
thì hàm này sẽ trả về false
:
true || false
> true
false || true
> true
true || true
> true
false || false
> false
Khi sử dụng ||
với hai toán hạng không phải boolean, hàm này sẽ trả về toán hạng đầu tiên không thay đổi nếu có thể ép thành true
. Nếu toán hạng đầu tiên có thể được ép thành false
, thì toán hạng thứ hai sẽ được trả về không thay đổi:
false || "My string"
> "My string"
null || "My string"
> "My string"
"My string" || false
> "My string"
"My string" || "My second string"
> "My string"
2 === 2 || "My string"
> true
Toán tử hợp nhất rỗng
Được giới thiệu trong ES2020, "toán tử hợp nhất rỗng" (??
) chỉ trả về toán hạng đầu tiên nếu toán hạng đó có giá trị khác với null
hoặc undefined
. Nếu không, hàm này sẽ trả về toán hạng thứ hai.
null ?? "My string"
> "My string"
undefined ?? "My string"
> "My string"
true ?? "My string";
> true
??
tương tự như toán tử OR logic, nhưng nghiêm ngặt hơn trong cách đánh giá toán hạng đầu tiên. ||
trả về toán hạng thứ hai cho bất kỳ biểu thức nào có thể được buộc thành false
, bao gồm cả undefined
và null
. ??
chỉ trả về toán hạng thứ hai khi toán hạng đầu tiên hoàn toàn bằng null
hoặc undefined
, ngay cả khi toán hạng này có thể bị ép thành false
:
0 ?? "My string";
> 0
false ?? "My string";
> false
undefined ?? "My string";
> "My string"
Toán tử gán logic
Sử dụng toán tử gán để gán giá trị của toán tử thứ hai cho toán tử đầu tiên. Ví dụ phổ biến nhất về điều này là dấu bằng đơn (=
), dùng để gán giá trị cho một biến đã khai báo.
Sử dụng toán tử gán logic để gán giá trị cho một biến theo điều kiện dựa trên giá trị đúng hoặc sai của biến đó.
Toán tử gán AND logic (&&=
) đánh giá toán hạng thứ hai và gán cho toán hạng đầu tiên nếu chỉ khi toán hạng đầu tiên đánh giá thành true
– hiệu quả là "nếu toán hạng đầu tiên là đúng, hãy gán giá trị của toán hạng thứ hai cho toán hạng đó:"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
Giá trị đúng hoặc sai của toán hạng đầu tiên xác định liệu có thực hiện việc gán hay không. Tuy nhiên, việc cố gắng đánh giá toán hạng đầu tiên bằng toán tử so sánh sẽ dẫn đến một giá trị boolean true
hoặc false
không thể gán giá trị:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
Toán tử gán OR logic (||=
) đánh giá toán hạng thứ hai và gán cho toán hạng đầu tiên nếu toán hạng đầu tiên đánh giá là false
– hiệu quả là "nếu toán hạng đầu tiên là sai, hãy gán giá trị của toán hạng thứ hai cho toán hạng đó:"
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
Kiểm tra mức độ hiểu biết
Toán tử nào cho biết "bằng nhau một cách nghiêm ngặt"?
===
==
=
!=