Tôi có nên luôn sử dụng === trong javascript không?

Bạn biết có hai toán tử so sánh đẳng thức khác nhau trong JavaScript. các toán tử =====, hoặc bộ ba bằng và gấp đôi bằng như chúng được gọi. Bạn đã thấy cả hai được sử dụng nhưng không chắc nên chọn mã nào cho mã của mình. Bạn muốn biết một cách chắc chắn để quyết định cái này hay cái kia

Hóa ra, có một cách đơn giản để quyết định nên sử dụng cái nào. Và logic tương tự cũng áp dụng cho các toán tử so sánh bất đẳng thức !==!=

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

x === y

Toán tử ba bằng (===) trả về true nếu cả hai toán hạng có cùng kiểu và chứa cùng một giá trị. Nếu so sánh các loại khác nhau cho bằng nhau, kết quả là sai

Định nghĩa bình đẳng này là đủ cho hầu hết các trường hợp sử dụng. Khi so sánh chuỗi "0" và số

x == y
0 thì kết quả sai như mong muốn

Các nguồn như D. Crockford và cả hai đều khuyên rằng chỉ nên sử dụng toán tử bằng ba lần khi lập trình bằng JavaScript và bỏ qua hoàn toàn toán tử bằng hai lần

Chuyển đổi loại phức tạp diễn ra với ==

x == y

Toán tử bằng kép (==) cố gắng thực hiện chuyển đổi loại nếu các loại khác nhau và sau đó so sánh bằng nhau. Nếu các loại khác nhau, một hoặc cả hai toán hạng trước tiên được chuyển đổi thành một loại chung. Các quy tắc chuyển đổi rất phức tạp và phụ thuộc vào các loại đối số. Để có bảng so sánh đầy đủ, hãy xem ví dụ hoặc

Ví dụ: khi so sánh chuỗi "0" và số

x == y
0, trước tiên, đối số đầu tiên được chuyển thành số

"0" == 0 // becomes
ToNumber("0") === 0

Mặc dù việc so sánh chuỗi và số là dễ hiểu, nhưng các quy tắc phức tạp cho các loại khác dẫn đến kết quả phi logic. Ví dụ: xem phần so sánh giữa

x == y
4,
x == y
5 và
x == y
6

________số 8_______

Chỉ sử dụng ===

Sử dụng toán tử so sánh đẳng thức ba bằng (===). Khi cố gắng so sánh các loại khác nhau với ba bằng nhau, kết quả luôn sai. Bạn sẽ nhận được kết quả như mong đợi mà không phải tuân theo các quy tắc chuyển đổi khó ghi nhớ. So sánh táo với cam là sai như mong đợi

Lưu ý rằng các toán tử so sánh này dùng để so sánh các kiểu nguyên thủy. Để so sánh sự bình đẳng sâu sắc của các đối tượng hoặc mảng, cần có một cách tiếp cận khác để so sánh các toán hạng về mặt cấu trúc

Tôi có nên luôn sử dụng === trong javascript không?

Nút không đợi cuộc gọi cơ sở dữ liệu của bạn kết thúc?

Tìm hiểu cách cuộc gọi không đồng bộ hoạt động và làm cho ứng dụng của bạn chạy như bạn dự định. Nhận khóa học email ngắn về tính không đồng bộ và hai chương từ Hoàn thiện ứng dụng nút của bạn

“Việc xác định xem hai biến có tương đương hay không là một trong những thao tác quan trọng nhất trong lập trình. ” Đó là theo Nicholas Zakas trong cuốn sách JavaScript dành cho nhà phát triển web của anh ấy

Nói cách khác, trong suốt kịch bản của bạn, bạn có thể sẽ có những dòng giống như thế này

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

Hoặc, nếu bạn đang tuân thủ các phương pháp hay nhất, điều này

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

Sự khác biệt giữa hai ví dụ đó là ví dụ thứ hai sử dụng toán tử ba bằng, còn được gọi là “bằng nghiêm ngặt” hoặc “bằng giống hệt nhau”

Những người mới bắt đầu sử dụng JavaScript cố gắng tuân theo các phương pháp hay nhất có thể đang sử dụng dấu bằng ba chứ không phải dấu bằng hai lần, nhưng có thể không hiểu đầy đủ sự khác biệt là gì hoặc tại sao việc sử dụng dấu ba lần lại quan trọng

Có gì khác biệt?

Trong phép so sánh sử dụng toán tử hai dấu bằng, kết quả sẽ trả về true nếu hai đối tượng được so sánh bằng nhau. Nhưng có một lưu ý quan trọng. Nếu phép so sánh được thực hiện giữa hai “loại” giá trị khác nhau, thì việc ép kiểu sẽ xảy ra

Mỗi giá trị JavaScript thuộc về một "loại" cụ thể. Những loại này là. Số, chuỗi, Booleans, hàm và đối tượng. Vì vậy, nếu bạn thử so sánh (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ố, thì giá trị true hoặc false sẽ được chuyển đổi thành

if (x === y) {
  // do something here
}
2 hoặc
if (x === y) {
  // do something here
}
3 tương ứng

Điều này có thể mang lại kết quả không thể đoán trước. Đây là vài ví dụ

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

Mặc dù điều này thoạt đầu có thể là một điều tốt (vì trình duyệt dường như đang giúp ích cho bạn), nhưng nó có thể gây ra sự cố. Ví dụ

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

Vì lý do này, hầu hết các chuyên gia JavaScript khuyên bạn nên luôn sử dụng toán tử ba bằng và không bao giờ sử dụng hai bằng

Toán tử ba bằng, như bây giờ bạn có thể đã hình dung ra, không bao giờ ép kiểu. Vì vậy, bất cứ khi nào bạn sử dụng ba dấu bằng, bạn đang so sánh chính xác các giá trị thực. Bạn đang đảm bảo các giá trị là 'hoàn toàn bằng nhau' hoặc 'giống hệt nhau'

Điều này có nghĩa là, khi sử dụng ba dấu bằng, tất cả các ví dụ ở trên sẽ cho 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

Điều gì về sự bất bình đẳng?

Khi thực hiện một biểu thức không bằng, các quy tắc tương tự sẽ được áp dụng. Ngoại trừ lần này, thay vì ba bằng vs. nhân đôi bằng, bạn đang sử dụng nhân đôi bằng với. Độc thân

Dưới đây là các ví dụ tương tự ở trên, lần này được thể hiện bằng toán tử

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

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

Bây giờ hãy chú ý rằng kết quả mong muốn trong mỗi trường hợp phải là “true”. Thay vào đó, chúng sai — vì kiểu ép buộc

Nếu đổi thành dấu bằng kép ta được kết quả đúng

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

Phần kết luận

Như đã đề cập, có lẽ bạn đã sử dụng ba bằng khá độc quyền. Trong khi nghiên cứu bài viết này, bản thân tôi đã học được một vài điều về khái niệm này

Tôi nghĩ rằng bản tóm tắt tốt nhất lại đến từ Zakas, sau khi khuyến nghị luôn sử dụng bằng nghiêm ngặt, anh ấy nói. “Điều này giúp duy trì tính toàn vẹn của loại dữ liệu trong toàn bộ mã của bạn. ”

Tôi có nên luôn sử dụng ba giá trị bằng trong JavaScript không?

Vì lý do này, hầu hết các chuyên gia JavaScript khuyên bạn nên luôn sử dụng toán tử dấu bằng ba lần và không bao giờ sử dụng dấu bằng kép. Toán tử ba bằng, như bây giờ bạn có thể đã hình dung ra, không bao giờ gõ ép buộc. Vì vậy, bất cứ khi nào bạn sử dụng ba dấu bằng, bạn đang so sánh chính xác các giá trị thực tế.

Tôi có nên sử dụng == hoặc === trong JavaScript không?

= Vs == VS === trong JavaScript . == trong JavaScript được dùng để so sánh hai biến, nhưng nó bỏ qua kiểu dữ liệu của biến . === được dùng để so sánh hai biến, nhưng toán tử này cũng kiểm tra kiểu dữ liệu và so sánh hai giá trị.

Tại sao bạn lại sử dụng === thay vì ==?

Sự khác biệt giữa == và === là. == chuyển đổi các giá trị của biến thành cùng loại trước khi thực hiện so sánh . Điều này được gọi là ép buộc kiểu. === không thực hiện bất kỳ chuyển đổi loại nào (ép buộc) và chỉ trả về true nếu cả giá trị và loại giống hệt nhau đối với hai biến được so sánh.

Khi nào bạn sẽ sử dụng toán tử nhận dạng ===?

Toán tử so sánh được gọi là Toán tử giống hệt nhau là dấu bằng ba “===”. Toán tử này cho phép so sánh chặt chẽ hơn nhiều giữa các biến hoặc giá trị đã cho . Toán tử này trả về true nếu cả hai biến chứa cùng thông tin và cùng kiểu dữ liệu, ngược lại trả về false.