Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

JavaScript Equality Operators: เปรียบเทียบความเท่ากัน 4 แบบ

ใน JavaScript มี 4 วิธีเปรียบเทียบความเท่ากัน บทความนี้อธิบาย operators แบบต่างๆ, type coercion, และกรณีพิเศษ (edge cases) ที่พบในสัมภาษณ์งาน

1. Strict Equality (===)

เปรียบเทียบ ทั้งค่าและ type

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

กรณีพิเศษกับ ===

Operand1typeofOperand2typeofResult
nullobjectnullobjecttrue
undefinedundefinedundefinedundefinedtrue
nullobjectundefinedundefinedfalse
NaNnumberNaNnumberfalse
falseboolean"false"stringfalse
falsebooleanfalsebooleantrue
""string""stringtrue
""stringundefinedundefinedfalse

NaN === NaN เป็น false เพราะ NaN อาจเป็นค่าอะไรก็ได้ ไม่มีการบ่งชี้ว่าเท่ากัน

ไม่เปรียบเทียบ data structures (arrays, objects) ได้ด้วย ===

2. Strict Inequality (!==)

ตรวจสอบว่า ไม่เท่ากันทั้งค่าและ type

const strictInequalityComparison = (a, b) => a !== b;
strictInequalityComparison("8", 8); // true (type ต่างกัน)

กรณีพิเศษกับ !==

Operand1typeofOperand2typeofResult
nullobjectnullobjectfalse
undefinedundefinedundefinedundefinedfalse
nullobjectundefinedundefinedtrue
NaNnumberNaNnumbertrue
falseboolean"false"stringtrue
falsebooleanfalsebooleanfalse
""string""stringfalse
""stringundefinedundefinedtrue

3. Loose Equality (==)

ทำ Type Coercion (แปลง type ให้เหมือนกัน) ก่อนเปรียบเทียบค่า

const looseComparison = (a, b) => a == b;
looseComparison(8, '8'); // true (string '8' ถูกแปลงเป็น number)

กรณีพิเศษกับ ==

Operand1typeofOperand2typeofResult
nullobjectnullobjecttrue
undefinedundefinedundefinedundefinedtrue
nullobjectundefinedundefinedtrue
NaNnumberNaNnumberfalse
falseboolean"false"stringfalse
falsebooleanfalsebooleantrue
""string""stringtrue
""stringundefinedundefinedfalse

จุดสำคัญ: null == undefined เป็น true (ต่างจาก strict equality)

4. Loose Inequality (!=)

ตรวจสอบ ไม่เท่ากันแค่ค่า (coerce type ก่อน)

const looseInequalityComparison = (a, b) => a != b;
looseInequalityComparison("8", 8); // false (ค่าเท่ากันหลัง coerce)

กรณีพิเศษกับ !=

Operand1typeofOperand2typeofResult
nullobjectnullobjectfalse
undefinedundefinedundefinedundefinedfalse
nullobjectundefinedundefinedfalse
NaNnumberNaNnumbertrue
falseboolean"false"stringtrue
falsebooleanfalsebooleanfalse
""string""stringfalse
""stringundefinedundefinedtrue

null != undefined เป็น false (ต่างจาก strict inequality)

สรุป

จำหลัก: === และ !== ตรวจสอบทั้ง type และค่า (แนะนำใช้ส่วนใหญ่) == และ != ทำ type coercion ก่อนเปรียบเทียบค่า null == undefined เป็น true แตกต่างจาก strict