Firebug 不推荐将“delete”运算符应用于非限定名称

Firebug gives applying the 'delete' operator to an unqualified name is deprecated

本文关键字:应用于 运算符 定名称 delete Firebug      更新时间:2023-09-26

我正在阅读有关JavaScript中的OO编程的书,并得到了一些奇怪的行为:

function f1() {
    var a = 1;
    console.log('a in f1 function ', a);
    console.log('f2() called ', f2());
    return 'f1 return value';
}
function f2() {
    console.log('a value in f2() ', a);
    return a;
}
var a = 5;
a = 55;
var foo = 'bar';
console.log('delete a: ', delete a);
console.log(a);
console.log(f1());
console.log('delete window.f2: ', delete window.f2);
console.log(f1());
console.log('delete foo: ', delete foo);

谁能理解,为什么我的删除变量返回 false(在 Firefox 中)和严格模式显示警告,例如:

SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
console.log('delete foo: ', delete foo);

你不能删除 javascript 中的普通变量。 可以删除对象上的属性,但不能删除变量。 因此,您尝试做的事情是不允许的。 如果要释放该变量的内容(假设没有对它指向的数据的其他引用),则可以将变量设置为 null

消息中关于unqualified的部分可能只是指这样一个事实,即指定属性必须不仅仅是像您那样的非限定名称。 它必须有一个对象引用。

正如DCoder在评论中提到的,这是理解删除运算符的良好参考。