ก่อนอื่นมาพูดถึงความแตกต่างระหว่าง NULL และ Undefined:
ดำเนินการ typeof บนตัวแปรที่ประกาศ แต่ไม่ได้กำหนดและไม่ได้ประกาศทั้งสองกลับ "undefined"
NULL หมายถึงตัวชี้วัตถุเปล่าและการดำเนินการ typeof จะส่งคืน "วัตถุ"
โดยทั่วไปค่าของตัวแปรจะไม่ถูกตั้งค่าอย่างชัดเจนเป็น undefined แต่เป็นโมฆะในทางตรงกันข้ามสำหรับตัวแปรที่กำลังจะบันทึกวัตถุตัวแปรควรได้รับอนุญาตให้บันทึกค่า NULL อย่างชัดเจน
var bj; Alert (BJ); // "undefined" bj = null; แจ้งเตือน (typeof bj); // การแจ้งเตือน "วัตถุ" (bj == null); // trueBj = {}; แจ้งเตือน (bj == null); //เท็จสองฟังก์ชั่นต่อไปนี้มอบให้ฉันโดย Deng พี่ชายขอบคุณ
/** ตรวจพบว่าวัตถุนั้นเป็นวัตถุที่ว่างเปล่าหรือไม่ (ไม่มีคุณสมบัติที่อ่านได้) * วิธีการตรวจจับคุณสมบัติทั้งสองของวัตถุเองและคุณสมบัติที่สืบทอดมาจากต้นแบบ (ดังนั้นจึงไม่ได้ทำ HasownProperty) */ฟังก์ชัน isempty (obj) {สำหรับ (ชื่อ var ใน obj) {return false;} return true;};วัตถุว่างที่กล่าวถึงที่นี่ {} หรือ null? ฉันเขียนกรณีทดสอบ
var a = {}; a.name = 'realwall'; console.log (isempty (a)); //falseconsole.log (isempty ({})); //trueconsole.log (isempty(null)); // true // โปรดทราบว่าไม่มีข้อผิดพลาดทางไวยากรณ์เมื่อพารามิเตอร์เป็นโมฆะนั่นคือแม้ว่าคุณจะไม่สามารถเพิ่มแอตทริบิวต์ลงในตัวชี้โมฆะได้ แต่คุณสามารถใช้คำสั่ง FOR ในคำสั่งหรือ ** เพื่อตรวจจับว่าวัตถุนั้นเป็นวัตถุที่ว่างเปล่า (ไม่มีแอตทริบิวต์ที่อ่านได้) * วิธีการตรวจจับคุณสมบัติของวัตถุเท่านั้นและไม่ตรวจจับคุณสมบัติที่สืบทอดมาจากต้นแบบ */ฟังก์ชั่น isownempty (obj) {สำหรับ (ชื่อ var ใน obj) {ถ้า (obj.hasownproperty (ชื่อ)) {return false;}} return true;};ความแตกต่างระหว่าง {} และ null:
สิ่งนี้สำคัญมาก
var a = {}; var b = null; a.name = 'realwall'; b.name = 'jim'; // จะมีการรายงานข้อผิดพลาดที่นี่ B เป็นตัวชี้โมฆะสำหรับภาพและไม่สามารถเพิ่มแอตทริบิวต์ได้โดยตรงเช่นวัตถุธรรมดา b = a; b.name = 'jim'; // a และ b ชี้ไปที่วัตถุเดียวกันในเวลานี้ A.Name, b.name คือ 'jam' ทั้งหมด