要删除的选项

Alternatives to delete?

本文关键字:选项 删除      更新时间:2023-09-26

我已经看了很多关于JavaScript严格模式的博客文章、文档等。

我注意到在delete关键字上有很多限制。我甚至不知道你是否能称之为限制。似乎delete不再工作了。

我喜欢使用严格模式。这是个好主意。但我也认为删除是个好主意。

是否有其他方法来删除"一个变量?

您不能使用delete变量

delete用于删除对象的属性。

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

为什么需要从作用域中删除局部变量?您可以将变量设置为undefined

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

另一种检查未定义的方法是执行foo === void 0,因为void是一个操作符,它运行其后的表达式并返回undefined

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

HTH .

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

正如其他人暗示的那样,您不应该真正需要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/

如何检查一个对象是否在JavaScript中有属性?