Toán tử so sánh

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 hay false. Ví dụ sau đây 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ị true:

2 + 2 === 4
> true

Kiểu ép buộc và bằng

2 trong số các toán tử so sánh được dùng thường xuyên nhất là == cho đẳng thức lỏng lẻo và === cho đẳng thức nghiêm ngặt. == thực hiện phép so sánh rời rạc giữa hai giá trị bằng cách ép buộc các toán hạng khớp với kiểu dữ liệu (nếu có thể). 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 đối với !=, hàm này chỉ trả về true nếu các toán hạng được so sánh không bằng nhau.

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 buộc loại. Để một phép so sánh nghiêm ngặt đánh giá theo true, các giá trị được so sánh phải có cùng một 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 điều không rõ ràng có thể xảy ra do lệnh tự động ép buộc, hãy sử dụng === bất cứ khi nào có thể.

Đơn vị tổ chức Nội dung mô tả Cách sử dụng Kết quả
=== Tương đối bằng nhau 2 = 2 đúng
!== Không hoàn toàn bằng nhau 2 !== "2" đúng
== Bằng (hoặc "bằng nhau") 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à giả tạo

Tất cả các giá trị trong JavaScript đều được ngầm định là true hoặc false, đồng thời có thể bị buộc thành giá trị boolean tương ứng, ví dụ: bằng cách sử dụng trình so sánh "tương đương một cách lỏng lẻo". Một tập hợp các giá trị giới hạn bắt buộc phải là false:

  • 0
  • null
  • undefined
  • NaN
  • Một chuỗi trống ("")

Mọi giá trị khác đều buộc phải dùng true, bao gồm cả mọi chuỗi chứa một hoặc nhiều ký tự và mọi số khác 0. Những giá trị này thường được gọi là giá trị "trung thực" và "giả tạo".

"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 một tập lệnh dựa trên việc đánh giá hai câu lệnh có điều kiện trở lê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ị thật hay giả của một toán hạng, đánh giá thành true nếu toán hạng có giá trị falsefalse nếu toán hạng có giá trị true:


true
> true

!true
> false

!false
> true

Việc sử dụng toán tử logic NOT (!) 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 giá trị boolean và đảo ngược giá trị trung thực hoặc giả của kết quả.

"string"
> "string"

!"string"
> false

0
> 0

!0
> true

Bạn nên sử dụng 2 toán tử NOT để nhanh chóng chuyển đổi dữ liệu thành giá trị boolean phù hợ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. Các phương thức này trả về giá trị của một trong hai toán hạng đang được đánh giá, với toán hạng đã chọn và được xác định bằng phép đánh giá đó.

Hàm logic AND (&&) chỉ trả về toán hạng đầu tiên trong hai toán hạng nếu toán hạng đó giá trị với false và toán hạng thứ hai nếu không. Khi so sánh nhằm đánh giá các giá trị boolean, đối số này chỉ trả về true nếu toán hạng ở cả hai vế của hàm logic AND được đánh giá là true. Nếu một trong hai bên được đánh giá là false, thì hàm sẽ trả về false.

true && false
> false

false && true
> false

false && false
> false

true && true
> true

Khi && được sử dụng với 2 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 buộc thành false. Nếu bạn có thể ép buộc toán hạng đầu tiên 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"

Hàm logic OR (||) chỉ trả về toán hạng đầu tiên trong hai toán hạng nếu toán hạng đó giá trị với true và toán hạng thứ hai nếu không. Trong các phép so sánh đánh giá với các giá trị boolean, phương pháp này có nghĩa là phương thức này sẽ trả về true nếu một trong hai toán hạng được đánh giá là true, và nếu không có bên nào đánh giá là true, thì giá trị 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, toán hạng này sẽ trả về toán hạng đầu tiên không thay đổi nếu có thể bị buộc nén thành true. Nếu bạn có thể ép buộc toán hạng đầu tiên 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ử kết hợp rỗng

Ra mắt trong ES2020, "toán tử liên kết rỗng" (??) chỉ trả về toán hạng đầu tiên nếu toán tử đó có bất kỳ giá trị nào khác với null hoặc undefined. Nếu không, toán tử 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 hạng logic OR, nhưng nghiêm ngặt hơn về 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ể bị buộc thành false, bao gồm cả undefinednull. ?? trả về toán hạng thứ hai và khi toán hạng đầu tiên không phải là null hoặc undefined, ngay cả khi toán hạng đó 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ử đầu tiên. Ví dụ phổ biến nhất về vấn đề này là dấu bằng (=), dùng để gán giá trị cho biến đã khai báo.

Sử dụng toán tử gán logic để chỉ định có điều kiện một giá trị cho một biến dựa trên giá trị trung thực hoặc giả của biến đó.

Toán tử logic AND (&&=) đá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 sẽ đánh giá thành true – một cách hiệu quả, "nếu toán hạng đầu tiên đú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ị trung thực hay giả của toán hạng đầu tiên xác định liệu một phép gán có được thực hiệ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 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ử logic HOẶC gán (||=) 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 đánh giá là false — một cách hiệu quả là "nếu toán hạng đầu tiên sai, hãy chỉ định giá trị của toán hạng thứ hai:"

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 "tuyệt đối bằng"?

===
==
=
!=