Toán tử tương đương ECMAScript

Khuyến nghị khóa học:

So sánh hai biến có bằng nhau hay không là một phép toán rất quan trọng trong thiết kế chương trình. Khi xử lý giá trị nguyên thuỷ, phép toán này rất đơn giản, nhưng khi涉及到 đối tượng, nhiệm vụ lại trở nên phức tạp hơn.

ECMAScript cung cấp hai bộ toán tử bằng: dấu bằng và dấu không bằng được sử dụng để xử lý giá trị nguyên thuỷ, dấu bằng toàn phần và dấu không bằng toàn phần được sử dụng để xử lý đối tượng.

Dấu bằng và dấu không bằng

Trong ECMAScript, dấu bằng được biểu thị bằng dấu bằng kép (==), nó trả về true khi và chỉ khi hai toán tử bằng nhau. Dấu không bằng được biểu thị bằng dấu chấm hỏi cộng dấu bằng (!=), nó trả về true khi và chỉ khi hai toán tử không bằng nhau. Để xác định hai toán tử có bằng nhau hay không, hai toán tử này đều thực hiện việc chuyển đổi loại.

  • Quy tắc thực hiện việc chuyển đổi loại như sau:
  • Nếu một toán tử là giá trị Boolean, trước khi kiểm tra tính bằng, hãy chuyển đổi nó thành giá trị số. false chuyển đổi thành 0, true thành 1.
  • Nếu một toán tử là chuỗi, toán tử khác là số, trước khi kiểm tra tính bằng, hãy thử chuyển đổi chuỗi thành số.
  • Nếu một toán tử là đối tượng, toán tử khác là chuỗi, trước khi kiểm tra tính bằng, hãy thử chuyển đổi đối tượng thành chuỗi.

Nếu một toán tử là đối tượng, toán tử khác là số, trước khi kiểm tra tính bằng, hãy thử chuyển đổi đối tượng thành số.

  • Bộ phận toán tử tuân theo các quy tắc sau:
  • Giá trị null và undefined bằng nhau.
  • Khi kiểm tra tính bằng, không thể chuyển đổi null và undefined thành giá trị khác.
  • Nếu một toán tử là NaN, dấu bằng sẽ trả về false, dấu không bằng sẽ trả về true.

Nếu hai toán tử đều là đối tượng, thì việc so sánh là tham chiếu của chúng. Nếu hai toán tử trỏ đến cùng một đối tượng, dấu bằng trả về true, ngược lại hai toán tử không bằng.Lưu ý quan trọng:

Mặc dù cả hai số đều là NaN, dấu bằng vẫn trả về false vì theo quy tắc, NaN không bằng NaN.

Bảng hiện thị một số trường hợp đặc biệt và kết quả của chúng: Giá trị
null == undefined true
"NaN" == NaN false
5 == NaN false
NaN == NaN false
NaN != NaN true
false == 0 true
true == 1 true
true == 2 false
undefined == 0 false
null == 0 false
"5" == 5 true

Bằng dấu đầy đủ và không bằng dấu đầy đủ

Bằng dấu và không bằng dấu tương tự như bằng dấu đầy đủ và không bằng dấu đầy đủ. Cả hai toán tử này làm điều tương tự như bằng dấu và không bằng dấu, nhưng chúng không thực hiện chuyển đổi loại trước khi kiểm tra tính bằng nhau.

Bằng dấu đầy đủ được biểu thị bởi ba dấu bằng (===), chỉ trả về true khi không cần chuyển đổi loại运算 số bằng nhau.

Ví dụ:

var sNum = "66";
var iNum = 66;
alert(sNum == iNum);	//Đầu ra "true"
alert(sNum === iNum);	//Đầu ra "false"

Trong đoạn mã này, alert đầu tiên sử dụng dấu bằng để so sánh chuỗi "66" và số 66, đầu ra "true". Như đã nói, điều này vì chuỗi "66" sẽ được chuyển đổi thành số 66, sau đó mới so sánh với số 66 khác. Alert thứ hai sử dụng bằng dấu đầy đủ mà không cần chuyển đổi loại để so sánh chuỗi và số,当然, chuỗi không bằng số, vì vậy đầu ra "false".

Không bằng dấu được biểu thị bởi dấu số và hai dấu bằng (!==), chỉ trả về true khi không cần chuyển đổi loại运算 số không bằng nhau.

Ví dụ:

var sNum = "66";
var iNum = 66;
alert(sNum != iNum);	//Đầu ra "false"
alert(sNum !== iNum);	//Đầu ra "true"

Ở đây, alert đầu tiên sử dụng không bằng dấu, chuyển đổi chuỗi "66" thành số 66, để nó bằng với số thứ hai 66. Do đó, kết quả tính toán là "false", vì hai số thứ tự bằng nhau. Alert thứ hai sử dụng không bằng dấu đầy đủ. Việc này hỏi: "sNum" và "iNum" khác nhau không? Câu trả lời của vấn đề này là: có (true), vì sNum là chuỗi, còn iNum là số, chúng当然 khác nhau.