如何重置变量值(delete - undefined - null)

时间:2014-06-16 12:19:50

标签: javascript variables undefined

如果您声明了一个无法删除的变量,我会阅读 如果你未提出申报,你可以 我还读过,如果你没有声明一个变量,它可能会在以后引起问题。

我使用过的某些lints指出了我写过的一些内容中的声明和未申报的问题,为了停止报告这些问题,并根据我迄今为止阅读的所有信息,我选择宣布所有我的变数。

现在这就是让我感到困惑的地方。

我正在尝试构建一个使用Math.random例程的随机名称生成器,当我尝试回收它添加到前一个例程的例程时,我试图设置var undefined / null(这本身就是可以是已定义的变量)并且它仍然只是将新结果添加到旧结果中,如果您不喜欢旧名称,则会产生重新生成新名称的功能。

写完这篇文章后,我意识到我的问题是两部分:

  • 如何从var中删除值并重新启动?
  • 声明你的变量真的那么重要吗?

除了改变变量的固有属性(主要是否可以删除变量)之外,我还没有找到有关声明和未声明之间差异的任何可靠信息。

var nameLength = Math.floor(Math.random() * (13 - 3) + 3); /* min 3 max 13*/
testValue = Math.floor(Math.random() * (13 - 3) + 3);
var compareLetter = 0;
var randomLetter = "";
var randomName = "";
var capitolLetter = "";
var checkLetter = 0;
var nameTitle = "XXX"; /* titles add _ between title and name*/
var nameLetters = [
    ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"],
    ["a", "e", "i", "o", "u"],
    ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z"]
];
if (nameTitle !== "") { /* my attempt to subtract title length +1 from name length if over 13*/
    nameLength = nameLength + (nameTitle.length + 1);
    if (nameLength > 13) {
        nameLength = nameLength - (nameLength - 13);
    }
}
for (i = 0; i < nameLength; i++) {
    randomLetter = nameLetters[compareLetter][Math.floor(Math.random() * nameLetters[compareLetter].length)];
    checkLetter = nameLetters[1].indexOf(randomLetter);
    if (checkLetter > -1) { /* my version of keeping consanants and vowels from stacking up */
        compareLetter = 2;
    } else {
        compareLetter = 1;
    }
    if (randomName.length < 1) { /* my version to keep first letter capitolized*/
        capitolLetter = randomLetter.toUpperCase();
        randomName = randomName + capitolLetter;
    } else {
        randomName = randomName + randomLetter;
    }
}
if (nameTitle !== "") {
    alert(nameTitle + "_" + randomName);
} else {
    alert(randomName);
}
alert("this is nameLength" + nameLength);
alert("this is testValue " + testValue);
delete nameLength;
delete testValue;
alert("this is nameLength" + nameLength);
alert("this is testValue " + testValue); /* notice this was not displayed*/
http://jsfiddle.net/OldGuyGamer/PJsZ3/4/

这是我正在使用的内容,请记住,每次运行后,小提琴似乎都是GC,我设置的环境不会这样做。

2 个答案:

答案 0 :(得分:2)

  

如果您声明了一个无法删除的变量,我会阅读。

是肯定的。例如 var foo = 1; 删除foo; 的console.log(FOO); // 1

但要采取的方法是...... 不删除变量

仅删除成员。例如delete foo.bar

您可以将其重新初始化为空状态,即foo = undefined

,而不是删除变量

答案 1 :(得分:1)

  

如何从var中删除值并重新启动?

您无法删除已声明的全局变量,因为ECMA-262表示它们必须被初始化为不可删除。您无法删除声明的函数变量,因为您无法访问它们所附加的“变量对象”。

  

声明你的变量真的那么重要

声明变量将其范围限制为当前执行上下文。不声明变量意味着当执行赋值的代码时,它变为全局对象的属性。如果所有变量都是全局变量,则会开始遇到名称冲突的问题,例如: for循环中的每个计数器在每个函数的每个循环中都必须不同。

因此,如果您想要“删除变量”,那么将它们作为某些全局对象的属性,您可以将它们或多或少地视为变量并删除它们,例如。

var u = void 0;
var globalObj = {varOne:u, varTwo:u, varThree:u};

delete globalObj.varOne;

您可以使用全局对象执行类似的操作,例如:

var globalObj = this;
varOne = varTwo = varThree = void 0;

delete globalObj.varOne;

我认为第一种方法是首选方法,但是您没有提供足够的细节来提供更适合您案例的客观分析。

修改

  

我还没有找到关于它们之间差异的任何可靠信息   声明和未声明,而不是改变固有属性   变量(主要是否可以删除变量)

变量初始化时是否声明变量:使用 var ,在执行任何代码之前,会创建变量并初始化为 undefined 。如果没有 var ,则在执行分配给它们的代码之前,变量不存在(如果赋值是有条件的,则可能永远不会存在)。