2013-07-15 74 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); 

那麼,爲什麼不寫你的代碼它會被引擎解釋?

相關問題