Chuyện xưa cũ: Nên dùng === hay == để so sánh trong Javascript?

Hôm nay tôi xin giới thiệu với các bạn một chuyên mục mới, chuyên mục này được gọi là Chuyện xưa cũ, đây sẽ là nơi tôi chia sẻ với các bạn những câu chuyện mà có thể các bạn đã từng biết, và đã từng quên, nói chung đây sẽ là những thứ xưa như trái đất, cứ ngỡ ai cũng biết nhưng thực tế chẳng phải vậy. Đâu đó sẽ giống với chuyên mục Java những điều có thể bạn đã biết trước đây, nhưng lần này những câu chuyện tôi kể sẽ rộng hơn, không chỉ đơn giản là về kỹ thuật nữa. Hy vọng các bạn sẽ thích thú với chủ đề này.

Nào cùng bắt đầu với câu chuyện đầu tiên.

Bạn đã biết sự khác biệt của hai toán tử so sánh bằng === và == trong Javascript. Bạn thấy cả hai đều được sử dụng nhưng bạn không chắc về việc bản thân nên sử dụng cái nào. Bạn muốn tìm ra một lý do để thuyết phục bản thân. Vâng bài viết này là dành cho bạn.

So sánh bằng và cùng loại với ===

x === y

Toán tử === chỉ trả về true nếu như cả hai toán hạng đều cùng một loại và có cùng giá trị. Nếu so sánh khác loại, kết quả sẽ trả về false.

Với định nghĩa như thế, hầu hết các trường hợp sẽ được giải quyết, chẳng hạn như chuỗi "0" và 0 khi so sánh kết quả sẽ là false.

Cá nhân tôi khuyên các bạn hãy nên sử dụng === khi lập trình với Javascript, và hãy bỏ qua hoàn toàn toán tử ==.

Cái quái gì diễn ra khi sử dụng ==?

x == y

Toán tử == sẽ cố gắng chuyển đổi kiểu của toán hạng nếu như hai toán hạng có kiểu khác nhau, và chỉ bắt đầu so sánh sự bằng nhau khi đã thực hiện đổi kiểu xong. Nếu kiểu khác nhau, một trong hai, hoặc cả hai toán hạng sẽ được chuyển về một kiểu chung, hay còn gọi là kiểu trung gian. Sự chuyển đổi này thì thật sự rất là phức tạp, để có một cái nhìn chi tiết hơn các bạn có thể xem chi tiết trên MDN hay ECMAScript specification.

Và vì lý do trên, khi bạn so sánh chuỗi "0" và số 0, thì toán hạng đầu tiên sẽ được chuyển đổi thành kiểu số, và thực hiện so sánh, kết quả sẽ trả về true.

"0" == 0

=> ToNumber("0") === 0

So sánh chuỗi và số thì còn có thể dễ hiểu, nhưng còn có những quy định phức tạp khác dẫn đến những kết quả cực kì vô lý, làm cho nhiều ngưỡi dễ phát khùng khi sử dụng Javascript như thanh niên Tôi đi code dạo đã từng. Ví dụ như khi so sánh null, undefined và false.

false == undefined // false

false == null // false

null == undefined // true

Giờ thì bạn đã biết, chỉ sử dụng === thôi nhé!

Tóm lại, khi so sánh bằng trong Javascript hãy sử dụng toán tử ===. Với toán tử này, khi bạn so sánh khác loại, kết quả sẽ luôn trả về false. Bạn sẽ nhận được kết quả đúng như mong đợi, mà không phải vắt óc suy nghĩ tại sao, hay cố gắng nhớ hết những quy tắc chuyển đổi.

Lưu ý rằng, toán tử so sánh là để dùng với những kiểu dữ liệu nguyên bản (primitive type). Để so sánh bằng giữa các đối tượng (object) hay mảng (array) thì chúng ta phải sử dụng cách tiếp cận khác.

Hy vọng qua bài viết ngắn gọn này các bạn đã tìm được chân lý của đời mình về việc sử dụng == hay ===. Mọi ý kiến đóng góp, đừng ngại mà hãy kéo xuống khung comment bên dưới nhé. Hẹn gặp lại các bạn trong các bài viết tiếp theo.

Bạn thấy bài viết này hay, chia sẻ với mọi người qua: