ผู้ประกอบการลบไม่ได้ใช้กันทั่วไปใน JavaScript แต่ลักษณะของมันแปลกมาก
1. ลบคุณสมบัติของวัตถุรหัส:
การคัดลอกรหัสมีดังนี้:
var o = {
A: 1,
B: 2
-
ลบ OA;
การแจ้งเตือน (OA); // ไม่ได้กำหนด
ดังนั้นลบแอตทริบิวต์ของวัตถุหรือค่าแอตทริบิวต์ของวัตถุหรือไม่? ฉันเริ่มคิดว่าการลบควรเป็นค่าเพราะผลลัพธ์ไม่ได้กำหนดและไม่มีข้อผิดพลาด แต่ในความเป็นจริงความคิดเห็นของฉันผิดยกตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
var o = {};
var a = {
Pro: "Zhenn"
-
oc = a;
ลบ OC; // ลบคุณสมบัติ A ของวัตถุ o
console.log (OC); // ไม่ได้กำหนด
console.log (a.pro); // Zhenn
ผ่านรหัสข้างต้นมันไม่ยากที่จะเห็นว่าหลังจากลบ OC ค่าที่ชี้ไปที่ OC จะไม่ถูกลบนั่นคือวัตถุยังคงอยู่มิฉะนั้น a.pro ไม่ควรผ่านระดับการรวบรวม เมื่อพูดถึงสิ่งนี้สามารถเข้าใจได้ว่าการลบลบแอตทริบิวต์ของวัตถุด้วยวิธีนี้ซึ่งจริง ๆ แล้วเทียบเท่ากับการลบการอ้างอิงถึงค่าแอตทริบิวต์ในวัตถุ แต่ค่านี้ยังคงอยู่ในสแต็กวัตถุ!
2. สำหรับการทำงานของอาร์เรย์ให้ดูที่รหัสก่อน:
การคัดลอกรหัสมีดังนี้:
var arr = [1,2,3];
ลบ arr [2];
console.log (arr.length); // 3
console.log (arr); // [1,2, ไม่ได้กำหนด]
มันได้รับการพิสูจน์อีกครั้งว่าการลบไม่ได้ลบองค์ประกอบจริง ๆ แต่เพียงแค่ลบค่าคีย์ที่สอดคล้องกับองค์ประกอบ เพื่อให้เข้าใจถึงสาระสำคัญของการลบให้เปรียบเทียบกับวิธีการป๊อปในอาร์เรย์ ดังนี้:
การคัดลอกรหัสมีดังนี้:
var arr = [1,2,3];
arr.pop ();
console.log (arr); // [1,2]
console.log (arr.length) // 2
ความจริงควรเปิดเผยในขณะนี้
3. การดำเนินการด้านบนของวัตถุและอาร์เรย์ นั้นง่ายต่อการเข้าใจ แต่การดำเนินการของตัวแปรนั้นยากที่จะเข้าใจอย่างหลีกเลี่ยงไม่ได้ รหัสมีดังนี้:
การคัดลอกรหัสมีดังนี้:
var a = 1;
ลบ a;
การแจ้งเตือน (a); // 1
ฟังก์ชั่น fn () {return 42; -
ลบ fn;
การแจ้งเตือน (fn ()); // 42
b = 2;
ลบ B;
การแจ้งเตือน (b); // b ไม่ได้กำหนด;
เป็นการยากที่จะอธิบาย นอกจากนี้ยังเป็นตัวแปรทั่วโลก แต่ตัวแปร B ที่ประกาศด้วย VAR ไม่สามารถลบได้ เป็นไปไม่ได้ที่จะบอกว่าการลบนั้นแปลกมาก ในคำอธิบายที่กำหนดโดย ECMA มันหมายความว่าตัวแปรที่ประกาศผ่าน VAR และฟังก์ชั่นที่ประกาศผ่านฟังก์ชั่นมีคุณสมบัติ DontDelete และไม่สามารถลบได้