2013-07-15 108 views
1

如果我知道这个变量将后面的对象,我用:在JS中初始化空变量的最佳方法是什么?

var obj; 

,但如果我初始化为null或undefined其实并不重要:

var obj = null; 

var obj = undefined; 
对于我个人使用的琴弦:

因为后来我能做

str += 'some text'; 

,如果我使用空例如我得到“nullsome文本”。

null, undefined, empty string or 0都是falsy的值,以检查它们是否被定义。这是初始化变量的正确方法,如果我的变量将被用作object, dom node, etc ..?如果你想连接到一个字符串,使用'',对于柜台使用0

var obj; 

回答

5

它的默认初始化为undefined,只要使用的是,你没有写出来。 ..只是使用常识。

+0

谢谢。我总是使用这种表示法,可能会继续使用 –

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'},或将其初始化为{},并添加属性obj.as = 'you'; obj[foo] = 'go';。如果您要分配DOM元素的引用,请将其保存为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 

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

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

相关问题