JavaScript มีหลายวิธีในการระบุว่าไม่มีค่า หน้านี้จะอธิบายถึง 2 วิธีที่ใช้บ่อยที่สุด ได้แก่ ประเภทข้อมูล null
และ undefined
null
คีย์เวิร์ด null
แสดงถึงการไม่มีค่าที่กำหนดไว้โดยเจตนา null
เป็นค่าพื้นฐาน แต่โอเปอเรเตอร์ typeof
จะแสดงผลว่า null
เป็นออบเจ็กต์
ซึ่งเป็นข้อผิดพลาดที่พัฒนามาจาก JavaScript เวอร์ชันแรกและปล่อยไว้โดยตั้งใจไม่ให้มีการแก้ไขเพื่อหลีกเลี่ยงการละเมิดลักษณะการทำงานที่คาดไว้ทั่วทั้งเว็บ
typeof null
> object
คุณอาจกำหนดตัวแปรเป็น null
โดยคาดว่าจะแสดงถึงค่าที่กําหนดให้ ณ จุดใดจุดหนึ่งในสคริปต์ หรือเป็นค่าที่ไม่ได้ระบุอย่างชัดเจน คุณยังกำหนดค่า null
ให้กับการอ้างอิงที่มีอยู่เพื่อล้างค่าก่อนหน้าได้ด้วย
undefined
undefined
คือค่าพื้นฐานที่กำหนดให้กับตัวแปรที่เพิ่งประกาศ หรือให้กับค่าผลลัพธ์ของการดำเนินการที่ไม่ได้ส่งคืนค่าที่มีความหมาย เช่น กรณีนี้อาจเกิดขึ้นเมื่อคุณประกาศ
ฟังก์ชันใน Developer Console ของเบราว์เซอร์ ดังนี้
function myFunction() {}
> undefined
ฟังก์ชันจะแสดงผล undefined
อย่างชัดเจนเมื่อคำสั่ง return
ไม่แสดงผลค่าใดๆ
(function() {
return;
}());
> undefined
การเปรียบเทียบระหว่าง null
กับ undefined
แม้ว่า undefined
และ null
จะมีฟังก์ชันการทำงานทับซ้อนกัน แต่ก็มีจุดประสงค์ที่ต่างกัน ในทางตรงกันข้าม null
จะแทนค่าที่กำหนดไว้โดยเจตนาเป็น "ว่าง" และ undefined
หมายถึงการขาดค่าใดๆ ที่กำหนดไว้
null
และ undefined
เท่าๆ กัน แต่ไม่เท่ากันทุกประการ
โอเปอเรเตอร์ความเท่ากันแบบหลวมๆ จะบังคับให้ตัวถูกดำเนินการประเภทต่างๆ เป็นค่าบูลีน ซึ่งทำให้ null
และ undefined
เป็น false
ทั้งคู่ ตัวดำเนินการด้านความเท่าเทียมแบบเข้มงวด
จะพิจารณาตัวถูกดำเนินการของประเภทข้อมูลต่าง ๆ ว่าไม่เท่ากัน
null == undefined
> true
null === undefined
> false
undefined
เป็นพร็อพเพอร์ตี้ของออบเจ็กต์ส่วนกลาง ซึ่งต่างจากคีย์เวิร์ดที่สงวนไว้ null
ซึ่งเป็นการตัดสินใจด้านการออกแบบตั้งแต่ช่วงแรกๆ ของการพัฒนา JavaScript และให้เบราว์เซอร์เดิมเขียนทับ undefined
ได้โดยสมบูรณ์ ในเบราว์เซอร์สมัยใหม่ คุณยังใช้ undefined
เป็นตัวระบุในขอบเขตที่ไม่ใช่ขอบเขตรวมได้ โดยลบล้างค่าภายในขอบเขตของการประกาศนั้น ไม่ ใช้ undefined
เป็นตัวระบุ เนื่องจากอาจทำให้เกิดลักษณะการทำงานที่ไม่คาดคิดและอาจทำให้ผู้บำรุงรักษาโค้ดเบสของคุณสับสนในอนาคต
ทดสอบความเข้าใจ
typeof null
ส่งคืนอะไรบ้าง
object
undefined
primitive
string