2011-04-14 100 views
6

我一直在浏览大量关于JavaScript严格模式的博客文章,文档等。替代品删除?

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

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

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

+0

介绍我们想要达到的目标?现在的问题看起来像是一个咆哮。 – Oded 2011-04-14 19:15:33

+2

听起来像hes寻找delete关键字的替代方法以删除javascript中的变量... – clamchoda 2011-04-14 19:23:56

回答

1

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

HTH。

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

+1

这样做会将值赋值为null,但变量实际上不会被销毁。 – clamchoda 2011-04-14 19:31:12

+0

@Chris - 将其设置为空将正常*(如果没有更多引用该变量)使其符合GC的条件。不幸的是,这并不适用于全局变量,根据http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection,但这个问题并没有启发我们,这是OP所指的事实一个全局变量。 – 2011-04-14 19:36:46

+0

这就是为什么我没有标记你:) – clamchoda 2011-04-14 19:39:21

3

你没有delete变量。

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

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

为什么你需要从范围中删除一个局部变量?你可以只设置变量为undefined

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

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

另一种方式来检查反对票不确定会做foo === void 0因为void是它运行后的表达式,并返回undefined操作。这是一个聪明的伎俩。

+0

不建议将变量设置为undefined,因为在非严格的JS版本中,undefined的值可以是操纵。 – Eli 2011-04-14 19:34:42

+1

@Eli但你会有一个本地价值的“未定义”的权利?此外,如果你发现一些代码操纵未定义的刻录,然后禁止作者使用javacript。 – Raynos 2011-04-14 19:38:12

+0

这不是本地的。这是一个名为'config'的全局变量。 – Kayla 2011-04-14 19:40:56

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?

+0

我有一个全局的'config'变量,用于配置JavaScript文件中的某些内容。我想在加载完成后删除它,但它只是抛出一个错误,并将其留在那里。该行是'delete global.config;'。 – Kayla 2011-04-14 19:27:35

+0

查看更新的答案。 – Eli 2011-04-14 19:33:14

+0

必须在脚本运行之前定义配置对象。 – Kayla 2011-04-14 19:36:32