Javascript 如何重置变量值(删除-未定义-空)

Javascript 如何重置变量值(删除-未定义-空),javascript,variables,undefined,Javascript,Variables,Undefined,我读到如果你声明了一个变量,你就不能删除它。 如果您不申报,您可以。 我还了解到,如果不声明变量,可能会导致以后出现问题 我使用的某些lint指出了我写的一些东西中已声明和未声明的问题,为了停止报告这些问题,根据我迄今为止阅读的所有信息,我选择声明我的所有变量 这就是我感到困惑的地方 我正在尝试构建一个随机名称生成器,它利用了一个Math.random例程,当我尝试循环使用它添加到前一个例程中的这个例程时,我尝试设置var undefined/null(它本身可以是定义的变量),它仍然只是将新结

我读到如果你声明了一个变量,你就不能删除它。
如果您不申报,您可以。
我还了解到,如果不声明变量,可能会导致以后出现问题

我使用的某些lint指出了我写的一些东西中已声明和未声明的问题,为了停止报告这些问题,根据我迄今为止阅读的所有信息,我选择声明我的所有变量

这就是我感到困惑的地方

我正在尝试构建一个随机名称生成器,它利用了一个
Math.random
例程,当我尝试循环使用它添加到前一个例程中的这个例程时,我尝试设置var undefined/null(它本身可以是定义的变量),它仍然只是将新结果添加到旧结果中,这使得如果你不喜欢旧名字,那么重新生成新名字的功能变得毫无用处

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

  • 如何从var中删除值并重新启动
  • 声明变量真的那么重要吗
我还没有找到任何关于声明和未声明之间差异的可靠信息,只是它改变了变量的固有属性(主要是变量是否可以删除)

var nameLength=Math.floor(Math.random()*(13-3)+3);/*最少3个最多13个*/
testValue=Math.floor(Math.random()*(13-3)+3);
var compareLetter=0;
var-letter=“”;
var randomName=“”;
var capitolLetter=“”;
var checkLetter=0;
var nametTitle=“XXX”;/*标题在标题和名称之间添加*/
变量名称字母=[
[“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”]
];
如果(nameTitle!==“”){/*如果超过13,我尝试从名称长度中减去标题长度+1*/
nameLength=nameLength+(nameTitle.length+1);
如果(名称长度>13){
nameLength=nameLength-(nameLength-13);
}
}
对于(i=0;i-1){/*我的版本,防止consanants和元音重叠*/
比较器=2;
}否则{
比较器=1;
}
如果(randomName.length<1){/*我的版本保持首字母大写*/
capitolLetter=randomLetter.toUpperCase();
randomName=randomName+capitolLetter;
}否则{
随机名称=随机名称+随机字母;
}
}
如果(名称标题!==“”){
警报(名称标题+随机名称);
}否则{
警报(随机名称);
}
警报(“这是nameLength”+nameLength);
警报(“这是testValue”+testValue);
删除名称长度;
删除测试值;
警报(“这是nameLength”+nameLength);
警报(“这是testValue”+testValue);/*请注意,这并没有显示*/
http://jsfiddle.net/OldGuyGamer/PJsZ3/4/
这就是我正在使用的,请记住,每次运行之后,fiddle似乎都是GC,我在其中设置它的环境不会这样做

如何从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,在执行任何代码之前,都会创建变量并将其初始化为未定义。如果没有var,变量在执行分配给它们的代码之前不存在(如果分配是有条件的,则可能永远不存在)

我读到如果你声明了一个变量,你就不能删除它

对。例如 var-foo=1; 删除foo; console.log(foo);//一,

但要走的路是。。不要删除变量

只删除成员。e、 g.
删除食品条


与其删除变量,不如将其重新初始化为空状态,即
foo=undefined

,向我们展示一个代码的实例可能会很有用,因为现在您的问题非常模糊和混乱。你应该总是声明你的变量…你说的删除到底是什么意思?你说的重新启动又是什么意思?好吧,让我把小提琴复制一下over@user3742773您可以在问题中使用类似的内容:@user3742773。请注意,
nameLength
是如何在JSFiddle包装代码的
onLoad
函数的范围之外定义的?我不想删除变量,除非我没有其他选择,我真的只想删除is value,clean
var globalObj = this;
varOne = varTwo = varThree = void 0;

delete globalObj.varOne;