Toán tử so sánh

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 falsefalse 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ả undefinednull. ?? 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"?

===
==
=
!=