如何使用javascript取消设置变量? [复制]

Posted

技术标签:

【中文标题】如何使用javascript取消设置变量? [复制]【英文标题】:How to unset variable using javascript? [duplicate] 【发布时间】:2017-02-07 12:36:58 【问题描述】:

这是我迄今为止尝试过的。

var nxt = 'I am next';

window.onscroll = function()
    var scr = this.pageYOffset;

    if(scr > 400)
        console.log(nxt);
        delete(nxt); // unset here
        console.log(nxt); // expected undefined or null
    

我使用 delete() 期望删除变量内的引用值。不幸的是,它只是保持不变。有人可以给我一个关于如何实现这种场景的线索吗?

任何帮助将不胜感激。

【问题讨论】:

MDN 在其website 中解释了delete 运算符。变量无法使用delete 运算符将其删除。改为使用undefined 分配它。 您可以使用deleteunset,但您的变量不应声明为var 示例:window.onscroll = function() scr = this.pageYOffset; if(scr > 400) console.log(nxt);删除nxt; // 在此处取消设置 console.log(nxt); // 预期的未定义或 null 它将按预期工作。或者您可以设置为undefinednull nxt = undefined; (或) nxt = null; 【参考方案1】:

您不能取消声明变量。您可以将其值设置为undefined,但是:

nxt = undefined;

可以从对象中删除属性,通常取决于它是如何添加到对象中的。如果此代码在全局范围内,则您的 nxt 变量也是全局对象的属性(您可以在浏览器上通过 window 引用),但无法删除以这种方式添加的属性。所以你可以通过这样做而不是声明它来添加它:

window.nxt = 'I am next';

然后您可以使用delete 将其完全删除:

delete window.nxt;

(请注意,delete 不是函数,它是运算符;您不要将() 与它一起使用,尽管这样做是无害的。)

然而,全局变量是一个坏事™,所以我可能会建议将所有这些包装在一个作用域函数中,将 nxt 保留为变量,并将 nxt 设置为 undefined .

【讨论】:

谢谢。这是插件的全局变量,但不是整个 dom。它用 (function() /* code */ )();如果我做错了,请纠正我。谢啦。你是最棒的! @user111111:啊,那么完美,它已经确定了范围。不错。 var e = [1,2,3];e[2] = undefined;console.log(e); 将是 [1, 2, undefined] delete e[2] 会告诉你[1, 2, empty] @VasiliSuricov - 是的,两者都是正确的。我不确定它们与答案有何关系...?【参考方案2】:

您可以将变量显式设置为未定义:

nxt = undefined;

【讨论】:

谢谢。你的答案是对的,但我会选择 T.J 的答案,因为他解释得很好。 (+ 一个) var e = [1,2,3];e[2] = undefined;console.log(e); 将是 [1, 2, undefined]

以上是关于如何使用javascript取消设置变量? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 隐藏/取消隐藏 div? [复制]

如何更改我的代码以取消选中从 javascript 到 jQuery 的单选按钮? [复制]

如何使用JavaScript设置/取消设置cookie

如何使用JavaScript设置/取消设置cookie

如何取消设置鱼壳中的变量?

范围和传递 Express/JavaScript - 如何传递数据库变量? [复制]