javascript - 我可以在 JavaScript 中删除全局变量吗

标签 javascript node.js

我想删除所有以“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 开始就不是了。具体来说,全局范围内的 letconstclass 创建的全局变量不是全局对象的属性。 (但是,如果您使用的是 Node.js,您可能不会在全局范围内使用它们。)

为确保您可以删除全局变量,请不要使用 var,对 global 上的属性使用赋值:

global.Nwxplaskdflk = 42;

那个全局可以删除。


一些注意事项:

  1. 我假设 global 是对代码中全局对象的引用。例如,您正在使用 Node.js 或创建它的类似环境,或者您在自己的代码中的全局范围内有 var global = this;

  2. 一般来说,如果可以避免创建全局变量,就避免创建全局变量。 :-) 相反,在其他一些对象上使用属性。 (如果引用该对象的变量由于某种原因必须是全局的,那就这样吧,但是全局命名空间非常拥挤,最好避免添加它。)

    <

关于javascript - 我可以在 JavaScript 中删除全局变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037743/

相关文章:

arrays - Sequelize - 存储过程的多个结果集合并到一个数组中

javascript - 如何更改点击类?

javascript - 如何使用 javascript 模糊输入字段或使用react?

javascript - 如何使用数组值向对象添加键?

node.js - Passport.js 多种反/序列化方法

node.js - 在代理后面安装 Bower 包

javascript - 按钮上的 ng-disabled,但当我更改值时它不会刷新

javascript - 如何从 cypress 项目中读取 JSON 文件?

node.js - Promise 已创建但未返回。膝关节/书架

javascript - Xregexp javascript 可选命名组,以空格分隔