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
จะส่งคืนอะไร
primitive
object
string
undefined