JavaScript初始化为undefined、null或""

10

我开始学习时,发现Java script有许多假值。我有一个从服务获取值并加载到数组中的程序,像这样:

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中,因为返回的对象稍后会被销毁。因此,我需要进行深度复制。

谢谢

5个回答

16

摘自《JavaScript权威指南》:

"if语句会根据表达式的值改变程序的流程。如果表达式是真值,那么then块将被执行。下面列出了假值:

  • false

  • null

  • undefined

  • 空字符串''

  • 数字0

  • 数字NaN

所以基本上,如果你将变量设置为上述任何值,就可以使用if(var){...}语句。


7

我认为你应该初始化GLobal.names = [];,然后只需检查Global.names.length != 0即可。

如果您想重新设置它,只需将其再次变为空数组即可。


5

我认为你最好将其初始化为数组,并按以下方式进行测试:

if ( Global.names.length )

此外,如果您只是在数组中存储字符串,您可以简化该函数如下:
function loadNames() {
  Global.names = getLNames().concat();
}

3

您不需要将其初始化为任何值。您可以这样做:

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

这可以用一句话来表述:
Global.names = Global.names : [];

如果你想重置它:

Global.names = [];

或者
delete Global.names;

虽然这是一个使用三元语句初始化变量的好例子,但我认为它并没有完全回答OP的问题,因为他明确地尝试清除Global.names的值,而你的代码不会改变它的值。 - chrisfrancis27

1
将其设置为null是很好的,因为您知道变量存在但尚未分配值。这样,您可以轻松地查看状态-如果它是undefined,则表示您已经忘记声明它,如果它是null,则已经声明但从未分配值,如果它是一个Array,那么您可以从那里测试长度。

3
这不正确。如果值为 null,那么它已被分配了一个值(即 null 值)。如果您没有分配任何值,它将是 undefined。语言从不隐式地分配给 null - fearofawhackplanet
其实是的,你说得对 - 我真正想表达的是它被赋予了一个“假值”,这个值不太可能被后来的有效值(如[])所混淆。 - chrisfrancis27
是的,我同意你的方法。 - fearofawhackplanet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接