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

!=
=
==
===