หากคุณกำลังปริยายประกาศตัวแปรโดยไม่ได้var
, delete foo
วิธีการที่เหมาะสมที่จะใช้
อย่างไรก็ตามหลังจากที่คุณลบหากคุณพยายามใช้สิ่งนี้ในการดำเนินการเช่นการเพิ่มReferenceError
จะถูกโยนเพราะคุณไม่สามารถเพิ่มสตริงลงในตัวระบุที่ไม่ได้ประกาศและไม่ได้กำหนด ตัวอย่าง:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
อาจปลอดภัยกว่าในบางสถานการณ์เพื่อกำหนดให้เป็นเท็จโมฆะหรือไม่ได้กำหนดดังนั้นจึงมีการประกาศและจะไม่ทิ้งข้อผิดพลาดประเภทนี้
foo = false
ทราบว่าใน ECMAScript null
, false
, undefined
, 0
, NaN
หรือทุกคนจะประเมิน''
false
ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้!==
โอเปอเรเตอร์ แต่!=
เมื่อพิมพ์การตรวจสอบบูลีนและคุณไม่ต้องการการตรวจสอบตัวตน (เช่นnull
นั้น== false
และfalse == undefined
)
นอกจากนี้โปรดทราบdelete
ว่าไม่ได้อ้างอิง "ลบ" แต่เป็นเพียงคุณสมบัติโดยตรงบนวัตถุเช่น:
bah = {}, foo = {}; bah.ref = foo;
delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)
หากคุณประกาศตัวแปรด้วยvar
คุณไม่สามารถลบได้:
(function() {
var x = 5;
alert(delete x)
// false
})();
ในแรด:
js> var x
js> delete x
false
คุณไม่สามารถลบคุณสมบัติที่กำหนดไว้ล่วงหน้าได้เช่นMath.PI
:
js> delete Math.PI
false
มีข้อยกเว้นแปลก ๆdelete
เช่นเดียวกับภาษาใด ๆ ถ้าคุณสนใจพอที่คุณควรอ่าน:
var
นอกฟังก์ชั่น) เป็นคุณสมบัติของวัตถุ "ทั่วโลก"window
ซึ่งในเว็บเบราเซอร์เป็น ดังนั้น -var a = 1; delete window.a; console.log(a);
จะประสบความสำเร็จในการลบตัวแปรและทำให้บรรทัดสุดท้ายออกข้อผิดพลาดในการอ้างอิง