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

ควรใช้ == หรือ === ใน JavaScript (Equality Operators)

JavaScript มี 2 ออเปอเรเตอร์เปรียบเทียบ: Loose Equality (==) และ Strict Equality (===) ควรใช้ === (Strict) เป็นหลัก

== (Abstract Equality / Loose Equality)

ทำ Type Coercion (แปลงชนิดข้อมูล) ก่อนเปรียบเทียบ

5 == 5        // true
'5' == 5       // true (string → number)
5 == '5'       // true
0 == false     // true (false → 0)
'' == false    // true ('' → 0, false → 0)
null == undefined // true (special case)
'0' == []      // true ([] → '' → 0)

=== (Strict Equality)

ไม่แปลงชนิดข้อมูล ต้องเป็นชนิดเดียวกันและค่าเท่ากัน

5 === 5        // true
5 === '5'      // false (number !== string)
'5' === '5'    // true
0 === false    // false (number !== boolean)
null === undefined // false
[] === []      // false (reference ต่างกัน)
{} === {}      // false (reference ต่างกัน)

ตัวอย่างจากบทความ

// == examples
4 == 4       // true
'4' == 4     // true
4 == '4'     // true
0 == false   // true

// === examples
4 === 4      // true
4 === '4'    // false
var v1 = {'value':'key'};
var v2 = {'value': 'key'};
v1 === v2    // false (object reference ต่างกัน)

ตาราง Type Coercion ของ ==

ABResultReason
nullundefinedtrueSpecial rule
numberstringstring→number'5' == 5
booleananyboolean→numberfalse==0, true==1
objectprimitiveobject→primitive[1] == '1'

ทำไมควรใช้ ===

  • Predictable: ไม่มี surprise type conversion
  • Performance: เร็วกว่า (ไม่ต้อง coerce)
  • Debugging: ง่ายกว่า ไม่ต้องคิดว่าแปลงชนิดยังไง
  • Best Practice: Airbnb, Google, StandardJS style guides แนะนำ ===

กรณีที่ == ยอมรับได้

// ตรวจสอบ null/undefined พร้อมกัน (common pattern)
if (value == null) {
  // value คือ null หรือ undefined
}

// เทียบเท่า:
if (value === null || value === undefined) { }

Object.is() (ES6) - Strict ตัวสุด

Object.is(5, 5);        // true
Object.is(5, '5');      // false
Object.is(NaN, NaN);    // true  (=== ให้ false!)
Object.is(0, -0);       // false (=== ให้ true!)
Object.is(+0, -0);      // false

สรุป

Default to === - ใช้ === ทุกครั้ง ยกเว้นกรณีตรวจสอบ null/undefined พร้อมกัน (== null)
ใช้ Object.is() เมื่อต้องแยก NaN, +0/-0