JavaScript初始化为未定义或为空或“

问题描述:

Java脚本在开始学习时有许多错误值。我有一个程序,会从一个服务和负载值到一个这样的数组:JavaScript初始化为未定义或为空或“

function loadNames() { 
    Global.names = // what should I use here? undefined, null, "", 0, {} or anything else 
    var lnames = getLNames(); // this is doing some magic 
     if (lnames.length !== 0) { 
      Global.names = new Array(); 
      for (var i = 0; i < lnames.length; ++i) 
       Global.names[i] = lnames[i]; 
    } 
} 

我想知道重置Global.names的正确方法。这里最适合什么?在代码中,我只想检查如if (Global.names)

PS:我不能只是将返回值放入Global.names中,因为返回的对象稍后会被销毁。因此,我需要做一个深拷贝

感谢

从JavaScript摘自:好的部分:。

“if语句改变基于所述表达式的值的程序的流程如果表达式是truthy时,执行然后块下面是falsy值:

  • 不确定

  • 空字符串 ''

  • 数0

  • 数为NaN “

所以基本上,如果你设置你的VAR任何这些值,你”将能够做一个if(var){...}

将其设置为null是好的,因为你知道,该变量存在,但尚未分配的值。通过这种方式,您可以轻松看到状态 - 如果是undefined,那么您已经忘记声明它,如果它已被声明但从未分配过值,并且如果是Array,则可以从那里测试长度。

+3

这是不正确的。如果该值为'null',那么它已被赋值('null'值)。如果你不分配任何东西,它将会是'undefined'。该语言不会隐含地分配给“null”。 – fearofawhackplanet 2011-05-20 12:59:59

+0

其实是的,你是对的 - 我真正的意思是它被赋予了一个'falsy'值,这个值不会被后面的'']等有效值所迷惑。 – 2011-05-20 13:02:58

+0

是的我同意你的方法 – fearofawhackplanet 2011-05-20 13:07:03

您不必将其初始化为任何内容。你可以这样做:

if (!Global.names) Global.names = []; 
// add members to Global.names 

这可能是一个在一个声明:

Global.names = Global.names : []; 

如果你想将其复位,则:

Global.names = []; 

delete Global.names; 
+0

虽然这是一个用三元语句初始化一个变量的好例子,但我不认为它完全回答了OP的问题,因为他明确地试图清除'Global.names'的值,而你的代码不会改变它的值。 – 2011-05-20 13:00:51

我认为你应该初始化 GLobal.names = []; 而不仅仅是检查是否Global.names.length != 0。 如果您想重置它,只需再次将其设置为空阵列即可。

我想你会更好,把它作为初始化数组和测试作为

if (Global.names.length) 

此外,如果你只是存储在阵列中的字符串可以简化功能

function loadNames() { 
    Global.names = getLNames().concat(); 
}