在JS中初始化空变量的最佳方法是什么?

时间:2013-07-15 11:03:16

标签: javascript coding-style

如果我知道变量稍后会成为对象,我会使用:

var obj;

但是如果我将它初始化为null或undefined则无关紧要:

var obj = null;

var obj = undefined;

对于我个人使用的字符串:

var str = '';

稍后我可以做

str += 'some text';

如果我使用null,例如我得到“nullsome text”。

null, undefined, empty string or 0都是falsy值,以便检查它们是否已定义。如果我的变量将用作object, dom node, etc,那么这是初始化变量的正确方法。?

2 个答案:

答案 0 :(得分:5)

默认情况下它被初始化为undefined,只需使用它,你不必写出来:

var obj;

如果要连接到字符串,请使用'',对于计数器使用0 ...只需使用常识。

答案 1 :(得分:1)

在理想情况下,您只需将变量声明在范围的顶部,如下所示:

var foo, bar, obj, domNode;

所有这些变量都是undefined,就像中的值undefined 一样。如果您知道其中一个变量将在循环中用作字符串,例如,而不是写foo = (foo === undefined ? '' : foo) + 'add this';,只需写:

var foo = '', bar, obj, domNode;

如果您要将obj var用作对象文字,请在时间到来时分配{my: 'objec', vals: 'here'},或将其初始化为{},然后添加属性{{ 1}}。如果您要分配对DOM元素的引用,请保留obj.as = 'you'; obj[foo] = 'go';,因为任何赋值都只会产生无意义的开销。
任何类型的引用(函数对象,数组,对象......)也是如此。只是推迟分配,因为它只会覆盖任何以前的任务。

对于数字,undefined将评估为undefined + 123,因此在这种情况下,初始化为NaN是有意义的。但是,在循环计数器的情况下:

0

相当于:

var foo, i, obj, arr = [1,2,3];
for (i=0;i<arr.length;i++)
{
    console.log(arr[i]);
}

只有后者几乎看起来非常复杂。只要运用你的常识,你就会没事。

只要知道变量声明被提升到范围的顶部,但分配不是:

var foo, i= 0, arr = [1,2,3];
for (;i<arr.length;i++)
{
    console.log(arr[i]);
}

因为它被翻译成:

console.log(foo);//undefined
var foo = 123;
console.log(foo);//123

那么为什么不写代码,因为它会被引擎解释?