1. ตัวแปร
เมื่อพูดถึงตัวดำเนินการลบใน JavaScript เราควรทราบความสัมพันธ์ระหว่างตัวแปรและแอตทริบิวต์ใน JavaScript ก่อน
ใน JavaScript ความสัมพันธ์ระหว่างตัวแปรและแอตทริบิวต์วัตถุนั้นบอบบางมากและสามารถเทียบได้หลายครั้งเนื่องจาก JavaScript จะสร้างวัตถุส่วนกลางก่อนที่จะดำเนินการสคริปต์ซึ่งเป็นวัตถุหน้าต่างในเบราว์เซอร์ ตัวแปรทั่วโลกทั้งหมดเป็นคุณลักษณะของวัตถุทั่วโลกนี้ เมื่อดำเนินการฟังก์ชั่นวัตถุการเปิดใช้งานจะถูกสร้างขึ้น ตัวแปรท้องถิ่นทั้งหมดเป็นคุณลักษณะของวัตถุการเปิดใช้งานนี้ คุณสามารถเรียนรู้เกี่ยวกับขอบเขต JavaScript เหล่านี้และปิด
การคัดลอกรหัสมีดังนี้:
// แอตทริบิวต์ที่ประกาศในต้นแบบไม่สามารถลบได้
var global = 1;
this.global; // 1 คุณสามารถเข้าถึงวัตถุทั่วโลกผ่านสิ่งนี้
this.global2 = 2;
Global2; // 12
ฟังก์ชั่น foo () {
var local = 36;
// อย่างไรก็ตามการเปิดใช้งานไม่สามารถเข้าถึงได้โดยตรง
// ดังนั้นตัวแปรท้องถิ่นไม่สามารถเข้าถึงได้ผ่าน foo.local
-
ดูเหมือนว่าตัวแปรจะเทียบเท่ากับคุณสมบัติของวัตถุ แต่ในความเป็นจริงพวกมันไม่เหมือนกันอย่างน้อยก็สำหรับตัวดำเนินการลบ ความเข้าใจของฉันคือการประกาศตัวแปรจะต้องเสร็จสิ้นผ่านคำสั่ง VAR ตัวแปรทั่วโลกที่ไม่ได้ประกาศผ่านคำสั่ง VAR เป็นคุณสมบัติทั้งหมดของวัตถุหน้าต่าง สิ่งนี้ทำให้ง่ายต่อการเข้าใจความสัมพันธ์ระหว่างตัวแปรและคุณสมบัติของวัตถุ
2. ลบโอเปอเรเตอร์
ตัวดำเนินการลบใช้เพื่อลบคุณสมบัติของวัตถุ สำหรับค่าประเภทการอ้างอิงมันยังลบคุณสมบัติของวัตถุด้วยตัวเองและไม่ลบวัตถุที่ชี้ไปที่คุณสมบัติ หากคุณมีคำถามใด ๆ คุณสามารถดูค่าของประเภทพื้นฐานและประเภทอ้างอิงหรือทดสอบรหัสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
var o = {};
var a = {x: 10};
OA = A;
ลบ OA; // แอตทริบิวต์ OA ถูกลบ
console.log (OA); // ไม่ได้กำหนด
console.log (ขวาน); // 10 เนื่องจากวัตถุ {x: 10} ยังคงอ้างอิงโดย A ดังนั้นมันจะไม่ถูกรีไซเคิล
นอกจากนี้การลบวัวยังสามารถเขียนเป็นลบ o ["x"] และผลกระทบของทั้งคู่ก็เหมือนกัน
3. ตัวแปรไม่สามารถลบได้
ตัวแปรที่ประกาศโดย VAR และฟังก์ชั่นที่ประกาศโดยฟังก์ชั่นมีคุณสมบัติ DontDelete และไม่สามารถลบได้ ตัวแปรทั่วโลกที่ไม่ได้ประกาศผ่าน VAR (คุณสมบัติของวัตถุทั่วโลก)
การคัดลอกรหัสมีดังนี้:
var global = {
A: 123,
B: {
C: 1345
-
-
ลบทั่วโลก; //ไม่ถูกต้อง
console.log (ทั่วโลก)
obj = {
A: 123
-
ลบ obj; // ลบตัวแปร Global OBJ, แอตทริบิวต์ OBJ ของวัตถุหน้าต่าง
console.log (obj); // obj ไม่ได้กำหนดไว้
4. แอตทริบิวต์ที่ประกาศในต้นแบบและแอตทริบิวต์ที่มาพร้อมกับวัตถุไม่สามารถลบได้
คุณลักษณะที่ประกาศไว้ในต้นแบบต้นแบบและแอตทริบิวต์ที่มาพร้อมกับวัตถุ (ในความเป็นจริงคุณลักษณะเหล่านี้ยังอยู่ในต้นแบบต้นแบบ) สามารถพิจารณาว่ามีลักษณะของ dontdelete และไม่สามารถลบได้ ตัวอย่างเช่น
การคัดลอกรหัสมีดังนี้:
// แอตทริบิวต์ที่ประกาศในต้นแบบไม่สามารถลบได้
ฟังก์ชั่น obj () {
this.x = 1;
-
obj.prototype.x = 2;
var o = ใหม่ obj ();
console.log (ox); // 1, วัวที่กำหนดไว้ในตัวสร้าง
ลบวัว;
console.log (ox); // 2, OX ที่กำหนดไว้ในต้นแบบแม้ว่าจะลบ OX อีกครั้งมันจะไม่ถูกลบ
// คุณลักษณะที่มาพร้อมกับวัตถุไม่สามารถลบได้
var strings = "123456";
console.log (strings.length); // 6
ลบสตริงความยาว;
console.log (strings.length); // มันยังคงเป็น 6
5. ข้อยกเว้นหลายประการภายใต้คำสั่ง Eval
ในรหัสที่ดำเนินการโดย Eval แม้ว่าตัวแปรที่ประกาศโดย VAR เป็นของวัตถุส่วนกลางเป็นตัวแปรที่ประกาศ VAR ปกติ แต่ก็ไม่มีแอตทริบิวต์ DONTDELETE และสามารถลบได้ อย่างไรก็ตามตัวแปรที่กำหนดโดย VAR ในฟังก์ชั่นในรหัส eval มี dontdelete และไม่สามารถลบได้
การคัดลอกรหัสมีดังนี้: eval ("var x = 42;");
x; // => 42
ลบ x;
x; // => referenceRror: X ไม่ได้กำหนดไว้
eval ("function f () {return 12;}");
f (); // => 12
ลบ F;
f (); // => referenceRror: F ไม่ได้กำหนดไว้
// ในรหัสที่ดำเนินการโดย Eval แม้ว่าตัวแปรที่ประกาศโดย VAR เป็นของวัตถุส่วนกลางเป็น VAR ปกติที่ประกาศตัวแปร
// แต่พวกเขาไม่มีคุณสมบัติ DontDelete และสามารถลบได้
eval
"var x = 42;" -
"ลบ x;" -
"return x;" -
-
// => 42
// ตัวแปรที่กำหนดโดย VAR ในฟังก์ชั่นในรหัส eval มี dontdelete และไม่สามารถลบได้
6. ค่าผลตอบแทนของการลบ
DELETE เป็นตัวดำเนินการปกติและจะส่งคืนจริงหรือเท็จ ส่งคืนเท็จเมื่อคุณสมบัติของวัตถุที่ถูกลบมีอยู่และมี dondelete มิฉะนั้นจริง คุณลักษณะหนึ่งที่นี่คือเมื่อแอตทริบิวต์วัตถุไม่มีอยู่มันจะส่งคืนค่าจริงดังนั้นค่าส่งคืนจึงไม่เทียบเท่ากับการลบว่าสำเร็จหรือไม่
การคัดลอกรหัสมีดังนี้:
ฟังก์ชัน C () {
this.x = 42;
-
C.prototype.y = 12;
var o = ใหม่ c ();
ลบวัว; // จริง
วัว; // ไม่ได้กำหนด
"x" ใน o; // เท็จ
// ox มีอยู่และไม่มี dontdelete, ส่งคืนจริง
ลบ OY; // จริง
Oy; // 12
// o ตัวเองไม่มีแอตทริบิวต์ OY ดังนั้นจึงส่งคืนจริง
// จากที่นี่คุณสามารถเห็นการมีอยู่ของห่วงโซ่ต้นแบบ คุณลักษณะและแอตทริบิวต์ต้นแบบของวัตถุนั้นแตกต่างกัน
ลบ o; // เท็จ
// global.o มีคุณสมบัติ DontDelete ดังนั้นจึงส่งคืน FALSE
ลบ UndefinedProperty; // จริง
// Global ไม่มีทรัพย์สินที่ชื่อว่า UndefinedProperty ดังนั้นจึงส่งคืนจริง
ลบ 42; // จริง
// 42 ไม่ใช่คุณสมบัติดังนั้นจึงส่งคืนจริง การใช้งานบางอย่างจะทำให้เกิดข้อยกเว้น (ละเมิดมาตรฐาน ecmascript)
var x = 24;
ลบ x ++; // จริง
x; // 25
// สิ่งที่ถูกลบคือค่าส่งคืนของ x ++ (24) ไม่ใช่คุณสมบัติดังนั้นจึงส่งคืนจริง