如何使用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
分配它。
您可以使用delete
到unset
,但您的变量不应声明为var
示例:window.onscroll = function() scr = this.pageYOffset; if(scr > 400) console.log(nxt);删除nxt; // 在此处取消设置 console.log(nxt); // 预期的未定义或 null 它将按预期工作。或者您可以设置为undefined
或null
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? [复制]