Toán tử == và === trong javascript khác nhau như thế nào?

Nên sử dụng toán tử == hay === trong Javascript?

Thỉnh thoảng, mình hay đọc được mấy bài so sánh vui kiểu trên thế giới có 2 loại người ABC vs XYZ như thế này này

Toán tử == và === trong javascript khác nhau như thế nào?
Và hồi mới học Javascript mình cũng gặp 2 kiểu so sánh ba bằng "===" và hai bằng "==" trong khi đọc code của mấy anh em đồng dâm, à nhầm đồng trang lứa nhé (kiểu cùng là Beginner ngồi Review chéo Pull Request cho nhau í).

Thôi, bớt lan man, bài viết này mình sẽ đi vào tìm hiểu xem ba bằng và hai bằng khác nhau như thế nào? Và nên sử dụng kiểu so sánh nào?

if (x == y) { // Kiểu ngưới thứ nhất }

Hay là

if (x === y) { // Kiểu người thứ hai }

Toán tử == và === trong javascrip khác nhau như thế nào? nên sử dụng cái nào?

Trong một lần đi phỏng vấn Full-Stack Developer mình đã được đặt câu hỏi toán tử == và === trong javasrip khác nhau như thế nào và nên dùng toán tử nào. Và tất nhiên mình không trả lời được cuối cùng là bị tạch :v. Vậy nên mình đã về tìm hiểu và lên đây chia sẻ với ae, mong là đừng ae nào đi phỏng vấn rơi vào trường hợp như mình

Toán tử == và === trong javascript khác nhau như thế nào?
))). Bắt đầu luôn nhé !!!

Sự khác biệt giữa == và ===

Đầu tiên, ta hãy nói về thuật ngữ mà JavaScript định nghĩa:

Hai bằng (==) được gọi là toán tử so sánh trừu tượng
Ba bằng (===) được gọi là toán tử so sánh cân bằng nghiêm ngặt.

Sự khác biệt giữa chúng có thể được tổng kết như sau:

Toán tử so sánh trừu tượng sẽ cố gắng giải quyết các kiểu dữ liệu thông qua việc chuyển đổi kiểu dữ liệu trước khi so sánh. Còn toán tử so sánh nghiêm ngặt sẽ trả về false nếu các giá trị khác nhau. Cụ thể, hãy xem ví dụ dưới đây:

console.log(3 == "3"); // true console.log(3 === "3"); // false
Code language: JavaScript (javascript)

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

Nhìn vào ví dụ trên, thì toán tử == trả về true vì chuỗi “3” được chuyển thành số 3 trước khi việc so sánh được thực hiện. Trong khi === cho thấy rằng đây là 2 kiểu dữ liệu khác nhau nên trả về false. Khá dễ hiểu phải không, một ví dụ khác nhé:

console.log(true == '1'); // true console.log(true === '1'); // false
Code language: JavaScript (javascript)

Ta thấy, 1 lần nữa, việc so sánh trừu tượng đã thực hiện chuyển đổi kiểu dữ liệu. Cụ thể là kiểu Boolean true và chuỗi “1” được chuyển đổi thành số 1 và kết quả so sánh là true. Còn như bình thường thì so sánh nghiêm ngặt sẽ trả về false. Nhìn vào 2 ví dụ đơn giản trên thì chúng ta đã phần nào phân biệt được sự khác nhau giữa == và ===. Tuy nhiên, trong thực tế có 1 vài trường hợp mà hành vi của các toán tử này không trực quan. Chúng ta hãy xem xét 1 số ví dụ khác:

console.log(undefined == null); // true console.log(undefined === null); // false. Undefined and null are distinct types and are not interchangeable.
Code language: JavaScript (javascript)
console.log(true == 'true'); // false. A string will not be converted to a boolean and vice versa. console.log(true === 'true'); // false
Code language: JavaScript (javascript)

Nếu các bạn chưa hiểu rõ undefined là gì, hãy đọc bài viết Phân biệt Null, Undefined và NaN.

Chú ý chút nha, ví dụ dưới dây khá thú vị vì nó mình họa 1 chuỗi bình thường với các đối tượng chuỗi (String Object):

console.log("This is a string." == new String("This is a string.")); // true console.log("This is a string." === new String("This is a string.")); // false
Code language: PHP (php)

Và để biết tại sao việc sử dụng === lại trả về false, chúng ta console lên thử xem thế nào nhé:

console.log(typeof "This is a string."); // string console.log(typeof new String("This is a string.")); // object
Code language: JavaScript (javascript)

Có thể thấy toán tử new sẽ luôn trả về 1 đối tượng và bạn sẽ nhận được kết quả tương tự khi so sánh các số nguyên thủy và các phép toán logic với các hàm tương ứng.

Với các toán hạng tham chiếu

Mở rộng hơn 1 chút, so sánh các toán hạng tham chiếu (so sánh bắc cầu). Nói về các đối tượng, điều gì sẽ xảy ra nếu chúng ta muốn so sánh các kiểu tham chiếu? So sánh trừu tượng và nghiêm ngặt sẽ thực hiện khác nhau như thế nào khi chúng ta dùng với các đối tượng?

Ở đây có 1 quy tắc các bạn cần lưu ý: khi so sánh kiểu bắc cầu thì cả so sánh trừu tượng và so sánh nghiêm ngặt sẽ trả về false, trừ khi cả 2 toán hạng đề cập đến cùng 1 đối tượng chính xác, để làm rõ hơn chúng ta xem ví dụ dưới đây:

var a = []; var b = []; var c = a; console.log(a == b); // false console.log(a === b); // false console.log(a == c); // true console.log(a === c); // true
Code language: JavaScript (javascript)

Có thể thấy, mặc dù a và b là cùng loại và có giá trị như nhau nhưng kết quả trả về của cả 2 kiểu so sánh == và === đều là false.


Tham khảo: Khoá học Online nền tảng lập trình cho người mới bắt đầu bằng ngôn ngữ JavaScript

Sự khác biệt giữa == và === trong JavaScript

By
Minh Duc
-
13/08/2020
0
1500

Nếu bạn không chắc sự khác biệt giữa == và === trong JavaScript, bạn không đơn độc. Rất nhiều người phải vật lộn với việc bạn nên sử dụng toán tử JavaScript nào trong số hai toán tử JavaScript này, vì vậy đừng cảm thấy tệ khi bạn không biết sự khác biệt. Điều đầu tiên, chúng ta cần hiểu toán tử là gì, cũng như cách chúng hoạt động trong JavaScript.

Sự khác nhau giữa toán tử (== vs ===) sử dụng so sánh trong JavaScript?

Toán tử == và === trong javascript khác nhau như thế nào?
Lê An Nam · Lê An Nam 08:49 23/10/2015
14 giờ trước
Sự khác nhau giữa toán tử (== vs ===) sử dụng so sánh trong JavaScript?
  • javascript
  • toán tử
  • so sánh
2 hữu ích 0 bình luận 7.3k xem chia sẻ

Các toán tử gán trong Javascript

Toán tử gán được dùng để gán giá trị ở bên phải toán tử vào biến ở bên trái toán tử. Có các toán tử gán sau:

Toán tử Ví dụ Ý nghĩa
= x = y gán y vào x
+= x += y x = x + y
-= x -= y x = x - y
*= x *= y x = x * y
/= x /= y x = x / y
%= x %= y x = x % y

Các toán tử so sánh

Toán tử so sánh được sử dụng trong câu lệnh logic để xác định tính bằng nhau hoặc khác nhau giữa các biến hoặc giá trị.

Cho x giá trị là 5 (x = 5), bảng dưới đây giải thích các toán tử so sánh:

Toán tửMô tảSo sánhTrả về
==bằng nhaux == 8false
x == 5true
x == “5”true
===bằng về giá trị và kiểux === 5true
x === “5”false
!=không bằng nhaux != 8true
!==không bằng về giá trị hoặc không bằng về kiểux !== 5false
x !== “5”true
x !== 8true
>lớn hơnx > 8false
<nhỏ hơnx < 8true
>=lớn hơn hoặc bằngx >= 8false
<=nhỏ hơn hoặc bằngx <= 8true