我想删除所有以“Nwxp”开头的全局变量。
因此我遍历所有全局变量。
检查开头是否与我的字符串相等,然后删除它们。
但是,delete 关键字不会删除我的变量。我究竟做错了什么?
这是我的代码:
var strNwxp = "Nwxp";
for (var variable in global){
var toCheck = variable.substring(0, 4);
if (strNwxp === toCheck) {
delete variable;
}
}
最佳答案
作为Yeldar Kurmangaliyev points out ,您正在删除错误的内容。但是即使你删对了,用var
创建的全局变量也删不掉。 delete
在这种情况下会导致 false
(如果变量是以可以删除的方式创建的,则为 true
,例如 global. foo = 42
).因此,如果您试图摆脱的全局变量是以这种方式创建的,它将无法工作。
另外,请注意,并非所有全局变量都不再是全局对象的属性,从 ES2015 开始就不是了。具体来说,全局范围内的 let
、const
和 class
创建的全局变量不是全局对象的属性。 (但是,如果您使用的是 Node.js,您可能不会在全局范围内使用它们。)
为确保您可以删除全局变量,请不要使用 var
,对 global
上的属性使用赋值:
global.Nwxplaskdflk = 42;
那个全局可以删除。
一些注意事项:
我假设
global
是对代码中全局对象的引用。例如,您正在使用 Node.js 或创建它的类似环境,或者您在自己的代码中的全局范围内有var global = this;
。一般来说,如果可以避免创建全局变量,就避免创建全局变量。 :-) 相反,在其他一些对象上使用属性。 (如果引用该对象的变量由于某种原因必须是全局的,那就这样吧,但是全局命名空间非常拥挤,最好避免添加它。)
<
关于javascript - 我可以在 JavaScript 中删除全局变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037743/