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

JavaScript:Toán tử bình đẳng

Có bốn cách để so sánh sự bình đẳng trong JavaScript. Bài viết này nói về các toán tử duy nhất được sử dụng để xác định bình đẳng, kiểu ép buộc là gì và một số đặc điểm riêng gặp phải khi đánh giá giá trị trung thực hoặc sai trong ngôn ngữ JavaScript.

So sánh bình đẳng nghiêm ngặt

Toán tử bình đẳng nghiêm ngặt được biểu diễn bằng một dấu bằng ba (===). Mục đích của toán tử này là để so sánh không chỉ giá trị mà còn cả kiểu của nó.

const strictComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a === b;
}
 
strictComparison(8, '8'); //false

strictComparison hàm trong ví dụ trên nhận vào hai giá trị và trả về liệu hai giá trị có hoàn toàn bằng nhau hay không.

Thoạt nhìn, các giá trị trông giống nhau vì chúng đều có giá trị 8 . Tuy nhiên, nhà điều hành bình đẳng nghiêm ngặt cũng xem xét loại. Nếu chúng ta xem xét a trong trường hợp này và xem typeof a , nó sẽ trả về ‘number’ . Nếu chúng ta làm tương tự với b , với typeof b , nó sẽ trả về ‘string’ .

Bởi vì các loại không giống nhau, nó sẽ trả về false .

So sánh bất thường với ===

Có một số so sánh bất thường có thể được thực hiện với toán tử bình đẳng nghiêm ngặt trong JavaScript. Dưới đây là một số câu hỏi thường gặp trong các tình huống phỏng vấn:

đối tượng đối tượng đối tượng
Operand1 typeof Toán hạng1 Toán hạng2 typeof Toán hạng 2 Giá trị trả lại
null null đúng
không xác định không xác định không xác định không xác định đúng
null không xác định không xác định sai
NaN số NaN số sai
sai boolean “sai” chuỗi sai
sai boolean sai boolean đúng
“” chuỗi “” chuỗi đúng
“” chuỗi không xác định không xác định sai

Một điều khác cần lưu ý là điều này sẽ không thực hiện so sánh với cấu trúc dữ liệu. Bạn cần sử dụng một câu lệnh phức tạp hơn để so sánh các mảng hoặc đối tượng.

Hầu hết các mục nhập ở đây đều đánh giá cách chúng thực hiện vì các loại khớp nhau hoặc không khớp. Một ngoại lệ là NaN - giá trị này là false do thực tế là NaN về mặt lý thuyết có thể là bất cứ thứ gì - vì vậy không có dấu hiệu cho thấy nó có thể ngang bằng hay không, do đó đánh giá là sai.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

So sánh Bất bình đẳng Nghiêm ngặt

Toán tử bất đẳng thức nghiêm ngặt được biểu diễn bằng dấu chấm than và hai dấu bằng (! ==). Nó sẽ đánh giá xem có hay không hai giá trị KHÔNG bằng nhau về giá trị và kiểu.

const strictInequalityComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a !== b;
}
 
strictInequalityComparison("8", 8); //true

So sánh strictInequalityComparison hàm trong ví dụ trên nhận vào hai giá trị và trả về liệu hai giá trị có hoàn toàn không bằng nhau hay không.

Thoạt nhìn, các giá trị trông bằng nhau (và không bằng nhau) vì cả hai đều có cùng giá trị. Tuy nhiên, toán tử bất bình đẳng nghiêm ngặt, giống như toán tử bình đẳng nghiêm ngặt, cũng xem xét kiểu.

Nếu chúng ta xem xét a trong trường hợp này và xem typeof a , nó sẽ trả về ‘string’ . Nếu chúng ta làm tương tự với b , với typeof b , nó sẽ trả về ‘number’ . Vì các loại không giống nhau, nó sẽ trả về true .

So sánh Bất thường với! ==

Có một số so sánh bất thường có thể được thực hiện với toán tử bất bình đẳng nghiêm ngặt trong JavaScript. Dưới đây là một số câu hỏi thường gặp trong các tình huống phỏng vấn:

đối tượng đối tượng đối tượng
Operand1 typeof Toán hạng1 Toán hạng2 typeof Toán hạng 2 Giá trị trả lại
null null sai
không xác định không xác định không xác định không xác định sai
null không xác định không xác định đúng
NaN số NaN số đúng
sai boolean “sai” chuỗi đúng
sai boolean sai boolean sai
“” chuỗi “” chuỗi sai
“” chuỗi không xác định không xác định đúng

Cũng giống như với toán tử bình đẳng nghiêm ngặt, không thể thực hiện so sánh giữa các đối tượng hoặc mảng.

Một điều nữa…

Trong hầu hết các tình huống trong sự nghiệp phát triển JavaScript của bạn, hai toán tử này, ===và! ==, sẽ là các toán tử mà bạn sẽ viết logic có điều kiện của mình.

So sánh bình đẳng lỏng lẻo

Toán tử bình đẳng lỏng được biểu diễn bằng dấu bằng kép (==). Mục đích của toán tử này là ép buộc cả hai giá trị về một kiểu chung trước khi đánh giá xem nó có bằng nhau hay không. Đây được gọi là kiểu cưỡng chế hoặc chuyển đổi loại .

const looseComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a == b;
}
 
strictComparison(8, '8'); //true

looseComparison hàm trong ví dụ trên nhận vào hai giá trị và trả về liệu hai giá trị có bằng nhau một cách lỏng lẻo hay không.

Thoạt nhìn, các giá trị trông không giống nhau vì một là số và một là chuỗi. Tuy nhiên, toán tử bình đẳng lỏng lẻo không xem xét loại. Câu lệnh sẽ cố gắng ép buộc các kiểu giống nhau trước khi so sánh giá trị - vì vậy ví dụ sẽ trả về true vì toán hạng thứ hai được chuyển đổi thành một số và sau đó được so sánh.

So sánh bất thường với ==

Có một số so sánh bất thường có thể được thực hiện với toán tử bình đẳng nghiêm ngặt trong JavaScript. Dưới đây là một số câu hỏi thường gặp trong các tình huống phỏng vấn:

đối tượng đối tượng đối tượng
Operand1 typeof Toán hạng1 Toán hạng2 typeof Toán hạng 2 Giá trị trả lại
null null đúng
không xác định không xác định không xác định không xác định đúng
null không xác định không xác định đúng
NaN số NaN số sai
sai boolean “sai” chuỗi sai
sai boolean sai boolean đúng
“” chuỗi “” chuỗi đúng
“” chuỗi không xác định không xác định sai

Hầu hết các mục ở đây đều đánh giá giống như chúng đã làm trong phần đầu tiên về sự bình đẳng nghiêm ngặt. Ngoại lệ đáng chú ý là null không xác định so sánh lỏng lẻo đánh giá là đúng.

So sánh bất bình đẳng lỏng lẻo

Toán tử bất đẳng thức lỏng được biểu diễn bằng dấu chấm than và một dấu bằng (! =). Nó sẽ đánh giá xem hai giá trị KHÔNG bằng nhau chỉ về giá trị. Nó thực hiện điều này bằng cách cố gắng chuyển đổi cả hai đối số thành cùng một kiểu.

 const looseInequalityComparison = (a, b) => {
 console.log(typeof a);
 console.log(typeof b);
 return a != b;
}
 
looseInequalityComparison("8", 8); //false

looseInequalityComparison hàm trong ví dụ trên nhận vào hai giá trị và trả về liệu hai giá trị có phải là không bằng nhau hay không.

Thoạt nhìn, các giá trị trông bằng nhau vì cả hai đều có cùng giá trị. Tuy nhiên, toán tử bất đẳng thức lỏng, giống như toán tử bình đẳng lỏng, buộc loại phải giống nhau trên cả hai toán hạng trước khi so sánh. Vì các giá trị giống nhau sau khi ép buộc, nó sẽ trả về false .

So sánh Bất thường với! =

Có một số so sánh bất thường có thể được thực hiện với toán tử bất bình đẳng lỏng lẻo trong JavaScript. Dưới đây là một số câu hỏi thường gặp trong các tình huống phỏng vấn:

đối tượng đối tượng đối tượng
Operand1 typeof Toán hạng1 Toán hạng2 typeof Toán hạng 2 Giá trị trả lại
null null sai
không xác định không xác định không xác định không xác định sai
null không xác định không xác định sai
NaN số NaN số đúng
sai boolean “sai” chuỗi đúng
sai boolean sai boolean sai
“” chuỗi “” chuỗi sai
“” chuỗi không xác định không xác định đúng

Cũng giống như với toán tử bình đẳng nghiêm ngặt, không thể thực hiện so sánh giữa các đối tượng hoặc mảng.

Hầu hết các mục ở đây đều đánh giá giống như chúng đã làm trong phần thứ hai về bất bình đẳng nghiêm ngặt. Ngoại lệ đáng chú ý là null không xác định được so sánh lỏng lẻo sẽ đánh giá sai.

Kết luận

Bài viết này đã xem xét bốn cách để so sánh sự bình đẳng trong JavaScript. Điều chính cần nhớ là bộ ba bằng (===) và đôi bằng (==) không phải là cùng một toán tử. Một người đánh giá nghiêm ngặt về loại và giá trị và người kia chỉ đánh giá giá trị sau khi cố gắng ép buộc cả hai phải cùng loại.