Tại sao sử dụng === trong javascript để so sánh?

Nội dung bài viết

Xác định xem hai biến có tương đương hay không là một trong những hoạt động quan trọng nhất trong lập trình.

Bài viết này chúng ta tập trung cho những bạn mới bắt đầu đi bước vào ngôn ngữ javascript. Đôi khi họ đã sử dụng Operator này để so sánh trong code nhưng sự thật đằng sau nó các developer javascipt vẫn còn chưa biết. Vì vậy chúng ta sẽ nói kỹ về vấn đề này và cùng thảo luận. 

Tham gia cùng chúng tôi:

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

Nói cách khác thì trong bài tập hay bất cứ một dự án nào bạn có thể có các dòng giống như thế này:

if (x == y) {
  // do something here
}

Hoặc nếu bạn đã biết cách tốt nhất, điều này:

if (x === y) {
  // do something here
}

Sự khác biệt ở hai ví dụ trên đó là sử dụng (===) (==) để so sánh. Câu hỏi tại sao lại dùng === và không dùng ==.

#What’s the Difference?

 Trong một so sánh sử dụng toán tử ==, kết quả sẽ trả về true nếu hai điều được so sánh bằng nhau. 

Nhưng có một nhược điểm quan trọng: Nếu việc so sánh được thực hiện là giữa hai loại giá trị khác nhau, các loại giá trị, thì sự ép buộc kiểu sẽ xảy ra. Mỗi giá trị JavaScript thuộc về một type cụ thể. Các loại này là: Numbers, strings, Booleans, functions, và objects. Vì vậy, nếu bạn thử so sánh (xem ví dụ) một chuỗi với một số, trình duyệt sẽ cố gắng chuyển đổi chuỗi thành một số trước khi thực hiện so sánh. Tương tự, nếu bạn so sánh true hoặc false với một số, giá trị true hoặc false sẽ được chuyển đổi thành 1 hoặc 0, tương ứng. 

Ví dụ để thấy dùng == thì khó có thể đoán trước điều gì đang chờ đợi chúng ta

console.log(99 == "99"); // true
console.log(0 == false); // true

console.log(' \n\n\n' == 0); // true
console.log(' ' == 0); // true

Với sự trợ giúp của browser thì những ví dụ trên đã đi lệch hướng của các bạn. 

Chính vì lẽ đó, trước điều này, hầu hết các chuyên gia JavaScript khuyên bạn luôn luôn sử dụng toán tử (===) và không bao giờ sử dụng (==). Tôi biết hiện tại hầu hết các devjs cũng đã sử dụng toán tử === để so sánh bởi vì nó không bao giờ thực hiện kiểu ép buộc, vì vậy khi so sánh thì thực hiện chính xác với các giá trị thực tế. 

Điều này có nghĩa là, bằng cách sử dụng ===, tất cả các ví dụ từ trên sẽ tạo ra kết quả chính xác:

console.log(99 === "99"); // false
console.log(0 === false); // false
console.log(' \n\n\n' === 0); // false
console.log(' ' === 0); // false

#What About Inequality?

Tương tự với == thì vẫn có kiểu so sánh !=. Nhưng điều đó cũng thật tệ và cũng không khác hơn ==.

console.log(99 != "99"); // false
console.log(0 != false); // false
console.log(' \n\n\n' != 0); // false
console.log(' ' != 0); // false

Nếu chúng ta chuyển qua !== thì ta sẽ nhận được một kết quả chính xác hơn.

console.log(99 !== "99"); // true
console.log(0 !== false); // true
console.log(' \n\n\n' !== 0); // true
console.log(' ' !== 0); // true

#Kết luận

Tham gia cùng chúng tôi:

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

Sau khi đọc bài viết này hẳn là các bạn không xa lạ với toán tử === nhưng giờ đây các bạn có thể giải thích với các nhà tuyển dụng về sự khác biệt này. Hãy nhớ rằng có thể ta làm được điều này nhưng không hẳn là giải thích được vì sao ta lại làm được điều này. 

Thanks for reading!