Computer >> Máy Tính >  >> Lập trình >> Javascript

Sự khác biệt giữa các toán tử bình đẳng nghiêm ngặt so với các toán tử bình đẳng lỏng lẻo trong JavaScript là gì?

Tìm hiểu về sự khác biệt giữa toán tử bình đẳng nghiêm ngặt và bình đẳng lỏng lẻo trong JavaScript và tại sao điều này lại quan trọng.

Trong JavaScript, bạn có thể sử dụng hai toán tử bình đẳng để so sánh các giá trị, toán tử bình đẳng lỏng lẻo == (dấu bằng kép) và toán tử bình đẳng nghiêm ngặt === (ba bằng nhau). Bề ngoài chúng có vẻ giống nhau, nhưng không phải vậy và điều quan trọng là phải hiểu sự khác biệt vì nếu không, bạn có thể gặp phải lỗi.

Hãy thử chạy mã sau trong bảng điều khiển của bạn:

let a = 4 // number
let b = "4" // string

console.log(a == b) // output: true

Tại sao JavaScript nói rằng điều trên là đúng khi nào thì không? Chúng tôi có một giá trị thuộc loại số được so sánh với một giá trị của loại chuỗi - vậy làm thế nào chúng có thể có giá trị bằng nhau?

Đó là bởi vì khi bạn sử dụng toán tử bình đẳng lỏng lẻo == nó chuyển đổi các toán hạng thành giống nhau nhập (nếu chúng chưa có), rồi so sánh các giá trị của chúng.

Quá trình này được gọi là kiểu cưỡng chế (khi hai giá trị được so sánh sau đang cố gắng chuyển đổi chúng thành một loại thông thường).

Vì vậy, trong ví dụ trên, kết quả của true là đúng, vì trước khi các giá trị được so sánh, các loại giá trị của chúng được chuyển đổi để giống nhau.

Chà, thật ngu ngốc!

Tôi đồng ý, nhưng đó là cách nó được. Điều quan trọng là bạn nhận thức được “điều kỳ quặc” bất tiện này của JavaScript.

Và đó là nơi nhà điều hành bình đẳng nghiêm ngặt === đến và tiết kiệm trong ngày vì nó không chuyển đổi loại giá trị, điều đó hoàn toàn so sánh các loại giá trị và sau đó kiểm tra sự bình đẳng:

let a = 4
let b = "4"

console.log(a === b)
// output: false

Bây giờ chúng ta nhận được false , bởi vì mặc dù cả hai biến (a &b) đều chứa giá trị “4”, các toán hạng là các kiểu giá trị khác nhau (a là giá trị số, b là giá trị chuỗi).

Không giống như == không nghiêm ngặt toán tử, === nghiêm ngặt toán tử cung cấp cho bạn kết quả đầu ra có thể dự đoán được, đó là lý do tại sao hầu hết các nhà phát triển khuyên không nên sử dụng == .

Có bao giờ là một lý do chính đáng không để sử dụng toán tử so sánh không nghiêm ngặt trong JavaScript?

Hiếm khi, nhưng tôi chắc rằng bạn có thể tìm thấy một số ví dụ. Theo quy tắc chung, hãy mặc định sử dụng === nghiêm ngặt toán tử bình đẳng, trừ khi có một hiển nhiên lý do để sử dụng == không nghiêm ngặt toán tử bình đẳng. Bằng cách này, bạn có thể loại trừ các lỗi trong mã của mình do sử dụng sai toán tử bình đẳng và đó luôn là phần thưởng.