Firebug将"删除"运算符应用于不合格的名称

Fil*_*ski 4 javascript console firefox firebug

我正在阅读有关使用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);
Run Code Online (Sandbox Code Playgroud)

任何人都可以理解,为什么我的删除VARIABLE返回false(在Firefox中)和严格模式显示警告,如:

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

jfr*_*d00 9

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

关于消息的部分unqualified可能只是指的是指定一个属性必须不仅仅是一个像你一样的非限定名称.它必须有一个对象引用.

正如DCoder在评论中提到的,这是理解删除操作符的一个很好的参考.

  • @FilipGórczyński - 只是停止尝试在变量上使用delete.它不应该被完成. (3认同)
  • @starbeamrainbowlabs - 是的,您可以将其设置为任何其他值,如`undefined`或``"`(空字符串)或`0`和(只要没有其他对变量中的数据的引用) ,垃圾收集器将释放数据.我通常在这种情况下使用`null`并为尚未初始化的东西保留`undefined`,但这更像是编程风格问题,而不是一个比另一个更正确. (2认同)