2011-05-20 62 views
5

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中,因爲返回的對象稍後會被銷燬。因此,我需要做一個深拷貝

感謝

回答

11

從JavaScript摘自:好的部分:。

「if語句改變基於所述表達式的值的程序的流程如果表達式是truthy時,執行然後塊下面是falsy值:

  • 不確定

  • 空字符串 ''

  • 數0

  • 數爲NaN 「

所以基本上,如果你設置你的VAR任何這些值,你」將能夠做一個if(var){...}

0

將其設置爲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

1

您不必將其初始化爲任何內容。你可以這樣做:

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

5

我認爲你應該初始化 GLobal.names = []; 而不僅僅是檢查是否Global.names.length != 0。 如果您想重置它,只需再次將其設置爲空陣列即可。

3

我想你會更好,把它作爲初始化數組和測試作爲

if (Global.names.length) 

此外,如果你只是存儲在陣列中的字符串可以簡化功能

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