null และไม่ได้กำหนด

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