Back
Programmingไทย language flag ไทย

ความแตกต่างระหว่าง ==, ===, และการใช้ typeof ใน JavaScript

เรียนรู้ความแตกต่างระหว่างตัวดำเนินการ == (Double Equals), === (Triple Equals) และ typeof ใน JavaScript เพื่อเขียนโค้ดที่ปลอดภัยและแม่นยำมากขึ้น

Xaypanya Phongsa - Author profile picture

Xaypanya Phongsa

Software Engineer passionate about modern web technologies

ความแตกต่างระหว่าง ==, ===, และการใช้ typeof ใน JavaScript - Article header image

ความแตกต่างระหว่าง ==, ===, และการใช้ typeof ใน JavaScript

วันนี้เราจะมาเคลียร์ปมปัญหาที่หลายคนอาจจะงงกันอยู่ใน JavaScript นั่นก็คือความแตกต่างระหว่างตัวดำเนินการ == (Double Equals), === (Triple Equals) และ typeof ว่าแต่ละตัวต่างกันอย่างไร ไม่ว่าคุณจะเป็นมือใหม่ หรือเขียน JavaScript มาสักพักแล้ว ก็อาจจะยังไม่แน่ใจว่าใช้งานทั้งสามตัวนี้ต่างกันอย่างไร โดยเฉพาะความแตกต่างระหว่าง == และ === เอาล่ะ เรามาดูกันเลย!

ทำไม == ถึงเป็นปัญหาได้?

มาเริ่มกันที่ == ก่อนเลย บางคนเรียกว่า "weak equality" หรือการเปรียบเทียบค่าแบบหลวมๆ ทำไมถึงเรียกแบบนั้น? ก็เพราะว่าตัวดำเนินการ == มัน "ยืดหยุ่น" มากๆ จนบางครั้งก็อาจจะทำให้เราสับสนได้ มันจะพยายามแปลงค่าของทั้งสองฝั่งให้เป็นชนิดเดียวกันก่อนเปรียบเทียบ

เช่นตัวอย่างนี้:

5 == "5"; // ได้ true

ในตัวอย่างนี้ "5" ซึ่งเป็นสตริงจะถูกแปลงให้เป็นตัวเลข 5 ก่อน แล้วค่อยเปรียบเทียบกัน บางครั้งสิ่งนี้อาจจะดูเป็นข้อดี แต่ก็อาจนำมาซึ่งผลลัพธ์ที่คาดไม่ถึง

อีกหนึ่งตัวอย่างเช่น:

1 == true; // ได้ true เหมือนกัน เพราะ true ถูกแปลงเป็น 1

ถ้าเราต้องการเปรียบเทียบค่าคนละประเภทจริง ๆ การใช้ == อาจทำให้เราสับสนหรือเจอบั๊กได้ง่ายๆดังนั้นต้องระวัง

ทีนี้มาดูฮีโร่ของเรากัน === (triple equals)

ในขณะที่ == อาจจะมีการแปลงชนิดข้อมูล, === หรือ "strict equality" จะไม่ทำการแปลงชนิดข้อมูลใดๆเลยก่อนเปรียบเทียบ

ลองดูตัวอย่าง:

5 === "5"; // ได้ false, เพราะตัวหนึ่งเป็น number อีกตัวเป็น string

สังเกตว่า == อาจจะให้ผลลัพธ์เป็น true แต่พอใช้ === กลับเป็น false เพราะไม่มีการแปลงชนิดให้ตรงกันก่อน

อีกตัวอย่างหนึ่ง:

1 === true; // ได้ false, เพราะชนิดข้อมูลไม่เหมือนกัน

ดังนั้นเมื่อเราเขียนโค้ดแล้วต้องการเปรียบเทียบแบบตรงไปตรงมาไม่มีการแปลงชนิดให้ปวดหัวการใช้ === ถือเป็นตัวเลือกที่ปลอดภัยกว่าซึ่งโอกาสจะเจอบั๊กก็จะน้อยลงไปเยอะเลย

มาทำความรู้จักกับ typeof กันครับ!

typeof ไม่ใช่ตัวเปรียบเทียบเหมือนสองตัวแรก แต่เป็นเครื่องมือที่บอกเราว่าข้อมูลที่เรามีเป็นประเภทอะไรโดยมันจะ return ค่าออกมาเป็นข้อความ string

ลองดูตัวอย่าง:

typeof 42        // "number"
typeof "สวัสดี"    // "string"
typeof true      // "boolean"
typeof {}        // "object"

สิ่งนี้มีประโยชน์มากเวลาที่เราไม่แน่ใจว่าค่าที่ส่งเข้ามาใน function เป็นชนิดข้อมูลอะไรเราก็สามารถใช้ typeof ตรวจสอบก่อนได้!

สรุป

  • == (Double Equals) — Weak Equality: ยอมให้มีการแปลงชนิดข้อมูลก่อนเปรียบเทียบ, ระวังการใช้งานเพราะอาจได้ผลลัพธ์ไม่คาดคิด
  • === (Triple Equals) — Strict Equality: ไม่มีการแปลงชนิดข้อมูลทำให้เปรียบเทียบได้ตรงไปตรงมา, ปลอดภัยและควบคุมผลลัพธ์ได้ง่าย
  • typeof (typeof Operator): ใช้ตรวจสอบชนิดข้อมูลคืนค่าเป็น string เช่น number, string, boolean, object, array
#JavaScript #Coding #Web Development #Equality Operators #Type Checking