Toán tử so sánh so sánh giá trị của hai toán hạng và đánh giá xem
câu lệnh mà chúng tạo thành là true
hoặc false
. Ví dụ sau đây sử dụng phương thức
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
. Bởi vì kết quả của biểu thức và số
giá trị 4
giống nhau, biểu thức này có giá trị là true
:
2 + 2 === 4
> true
Phép ép buộc loại 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 đẳng thức rời rạc
và ===
để lấy đẳng thức nghiêm ngặt. ==
thực hiện so sánh chung giữa
bằng cách buộc các toán hạng thành kiểu dữ liệu phù hợp (nếu có thể). Cho
ví dụ: 2 == "2"
trả về true
, mặc dù quá trình so sánh đang được thực hiện
giữa giá trị số và giá trị chuỗi.
2 == 2
> true
2 == "2"
> true
Điều này cũng đúng với !=
, phương thức này chỉ trả về true
nếu các toán hạng là
được so sánh không bằng nhau một chút.
2 != 3
> true
2 != "2"
> false
Việc so sánh nghiêm ngặt bằng ===
hoặc !==
sẽ không thực hiện thao tác ép buộc kiểu. Đối với
phép so sánh nghiêm ngặt để đánh giá với true
, các giá trị được so sánh phải có
cùng một kiểu dữ liệu. Do đó, 2 == "2"
sẽ trả về true
, nhưng trả về 2 === "2"
trả về false
:
2 === 3
> false
2 === "2"
> false
Để loại bỏ mọi chi tiết không rõ ràng có thể phát sinh từ quá trình tự động ép buộc, hãy sử dụng ===
bất cứ khi nào
nhất 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 nhau | 2 !== "2" | đúng |
== | Bằng (hoặc "bằng một chút") | 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 |
Trung thực và sai lệch
Tất cả các giá trị trong JavaScript đều ngầm ẩn là true
hoặc false
và có thể bị buộc thành
giá trị boolean tương ứng, ví dụ: bằng cách sử dụng giá trị "bằng nhau"
một công cụ so sánh. Một tập hợp giá trị giới hạn bị buộc thành false
:
0
null
undefined
NaN
- Một chuỗi trống (
""
)
Mọi giá trị khác đều buộc chuyển sang true
, bao gồm cả chuỗi bất kỳ chứa một hoặc nhiều
và mọi số khác 0. Những thông tin này thường được gọi là "sự thật" và
"giả" giá trị.
"My string" == true
> true
100 == true
> true
0 == true
> false
Toán tử logic
Sử dụng các toán tử logic AND (&&
), OR (||
) và NOT (!
) để kiểm soát luồng 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 logic NOT (!
) phủ định giá trị đúng hay sai của một toán hạng, đánh giá thành true
nếu toán hạng có giá trị false
và false
nếu toán hạng có giá trị true
:
true
> true
!true
> false
!false
> true
Sử dụng toán tử logic NOT (!
) trước một loại dữ liệu khác, chẳng hạn như một
số hoặc một chuỗi, ép buộc giá trị đó thành boolean và đảo ngược giá trị trung thực hoặc
giá trị không chính xác của kết quả.
"string"
> "string"
!"string"
> false
0
> 0
!0
> true
Một phương pháp thông dụng là sử dụng hai toán tử NOT để nhanh chóng chuyển đổi dữ liệu thành giá trị boolean khớp:
!!"string"
> true
!!0
> false
Các toán tử logic AND và OR không tự thực hiện bất kỳ thao tác ép buộc nào. Chúng trả về giá trị của một trong hai toán hạng đang được đánh giá, với giá trị đã chọn toán hạng được xác định bằng kết quả ước tính đó.
Logic AND (&&
) chỉ trả về giá trị đầu tiên trong hai toán hạng nếu toán hạng đó
có giá trị là false
và nếu không thì toán hạng thứ hai sẽ được tính. So với
ước lượng cho các giá trị boolean, phương thức này chỉ trả về true
nếu các toán hạng ở cả hai bên
của logic AND đánh giá thành true
. Nếu một trong hai bên đánh giá là false
, thì
sẽ trả về false
.
true && false
> false
false && true
> false
false && false
> false
true && true
> true
Khi 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 gán thành false
. Nếu có thể ép gán toán hạng đầu tiên
thành true
, 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"
Logic OR (||
) chỉ trả về giá trị đầu tiên trong hai toán hạng nếu toán hạng đó
có giá trị là true
và nếu không thì toán hạng thứ hai sẽ được tính. So với
ước lượng cho các giá trị boolean, tức là phương thức này sẽ trả về true
nếu một trong hai toán hạng
có giá trị là true
và nếu không bên nào đánh giá là 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 gán thành true
. Nếu có thể ép gán toán hạng đầu tiên
thành false
, 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ử liên kết rỗng
Ra mắt vào 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ó bất kỳ giá trị nào khác 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ử logic OR, nhưng chặt chẽ hơn về cách toán hạng đầu tiên
đánh giá. ||
trả về toán hạng thứ hai cho bất kỳ biểu thức nào có thể là
bị chuyển đổi thành false
, bao gồm undefined
và null
. ??
trả về giá trị thứ hai
toán hạng khi toán hạng đầu tiên là bất kỳ giá trị nào trừ null
hoặc undefined
, ngay cả khi
có thể bị buộc 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ử thứ nhất
toán tử. Ví dụ phổ biến nhất cho trường hợp này là một dấu bằng (=
), dùng để
gán một giá trị cho một biến đã khai báo.
Sử dụng các toán tử gán logic để gán giá trị cho biến theo cách có điều kiện dựa trên giá trị độ chính xác hay giá trị không chính xác của biến đó.
Toán tử logic AND gán (&&=
) đá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 sẽ cho kết quả là
true
– hiệu quả là "nếu toán hạng đầu tiên là đúng, hãy chỉ định giá trị của
toán hạng thứ hai:"
let myVariable = false;
myVariable &&= 2 + 2;
> false
myVariable = true;
myVariable &&= 2 + 2;
> 4
Giá trị đúng hay sai của toán hạng đầu tiên xác định liệu một phép gán
sẽ được thực hiện. Tuy nhiên, việc cố gắng đánh giá toán hạng đầu tiên bằng cách sử dụng phép so sánh
trả về kết quả trong boolean true
hoặc false
mà không thể chỉ định
giá trị:
let myVariable = 5;
myVariable > 2 &&= "My string"
> SyntaxError: Invalid left-hand side in assignment
Toán tử gán logic OR (||=
) sẽ đá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 có kết quả là false
—
hiệu quả là "nếu toán hạng đầu tiên là false, hãy chỉ định giá trị của toán hạng thứ hai
toán hạng thay thế:"
let myVariable = false;
myVariable ||= 2 + 2;
> 4
myVariable = true;
myVariable ||= 2 + 2;
> true
Kiểm tra kiến thức
Toán tử nào cho biết "nghiêm ngặt nghiêm ngặt"?
!=
=
==
===