Nếu bạn đang ngầm khai báo biến mà không có var
, cách thích hợp sẽ là sử dụng delete foo
.
Tuy nhiên, sau khi bạn xóa nó, nếu bạn cố gắng sử dụng điều này trong một thao tác, chẳng hạn như thêm ReferenceError
sẽ bị ném vì bạn không thể thêm một chuỗi vào một định danh không xác định, không xác định. Thí dụ:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
Trong một số trường hợp, có thể an toàn hơn khi gán nó thành false, null hoặc không xác định để nó được khai báo và sẽ không ném loại lỗi này.
foo = false
Lưu ý rằng trong ECMAScript null
, false
, undefined
, 0
, NaN
, hoặc ''
tất cả sẽ đánh giá để false
. Chỉ cần chắc chắn rằng bạn không sử dụng các !==
toán tử mà thay vào đó !=
khi kiểm tra kiểu cho boolean và bạn không muốn kiểm tra danh tính (vì vậy null
sẽ == false
và false == undefined
).
Cũng lưu ý rằng delete
không "xóa" các tham chiếu mà chỉ là các thuộc tính trực tiếp trên đối tượng, ví dụ:
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)
Nếu bạn đã khai báo một biến với var
bạn không thể xóa nó:
(function() {
var x = 5;
alert(delete x)
// false
})();
Trong tê giác:
js> var x
js> delete x
false
Bạn cũng không thể xóa một số thuộc tính được xác định trước như Math.PI
:
js> delete Math.PI
false
Có một số trường hợp ngoại lệ kỳ lạ delete
như với bất kỳ ngôn ngữ nào, nếu bạn quan tâm đầy đủ, bạn nên đọc:
var
bên ngoài hàm) là các thuộc tính của "đối tượng toàn cầu", trong trình duyệt web làwindow
. Vì vậy -var a = 1; delete window.a; console.log(a);
sẽ xóa thành công biến và khiến dòng cuối cùng phát sinh lỗi tham chiếu.