删除的替代方案?

时间:2011-04-14 19:12:12

标签: javascript

我一直在浏览很多关于JavaScript严格模式的博客文章,文档等。

我注意到delete关键字有很多限制。我甚至不知道你是否可以称他们为限制。好像delete似乎不再适用。

我很想使用严格的模式。这是一个好主意。但我也认为删除是一个好主意。

有没有其他方法可以“删除”变量,或者我只是搞砸了?

3 个答案:

答案 0 :(得分:4)

您没有delete个变数。

delete用于从对象中删除属性。

delete foo.a会从对象"a"移除属性foo

为什么需要从范围中删除局部变量?您只需将变量设置为undefined

即可
(function(undefined) {
    // undefined is undefined.
})();

(function() {
    var undefined; // undefined is undefined
})();

检查未定义的againts的另一种方法是执行foo === void 0,因为void是一个运算符,它在其后面运行表达式并返回undefined。这是一个聪明的伎俩。

答案 1 :(得分:1)

如何将变量设置为null?将变量设置为null后,JavaScript垃圾收集器将在下次运行时删除所有未引用的变量。

HTH。

编辑:正如@chris Buckler在评论中提到的那样,这不可能在全球范围内完成,因为全局变量永远不会被垃圾收集。

答案 2 :(得分:1)

正如其他人所暗示的那样,你永远不应该真正需要delete变量。这听起来更像是一个没有正确控制范围的问题。如果将变量保存在函数范围内,则一旦它们不再被引用,它们将从内存中释放出来。

除了全局window命名空间之外,您还有另一个全局命名空间吗?对于这种情况,你可能会有这样的事情:

(function(global) {

    var Application = {};

    Application.config = { /* config stuff */ };

    global.Application = Application;

})(window);

// if you need to remove config, you can remove it from
// your object and not the window object:
delete Application.config;

要真正深入理解JS中的删除和未定义:

http://perfectionkills.com/understanding-delete/

http://scottdowne.wordpress.com/2010/11/28/javascript-typeof-undefined-vs-undefined/

How do I check if an object has a property in JavaScript?