2012-09-15 62 views
0

爲什麼這段代碼返回- null -時應該按照我的理解返回- - - 它似乎是像字符串一樣對待nullBizarre Javascript Result

var testvar = null; 
alert(" - "+testvar+" - "); 

那就是它。 undefined也是如此。我需要這個工作,因爲我有一個數組,我循環遍歷數組,並將每個項目添加到變量,這是一個字符串。

我有這樣的:

//'resp' variable is a JSON response, decoded with JSON.parse. This part works fine. 
var addOnEnd=null; 
for (item in resp) { 
    console.log(">"+item); 
    addOnEnd += item+"\n"; 
} 

的讀取的console.log我的期望 - 在響應中的所有項目的列表。但是,如果我在for循環後發出警告(addOnEnd),它會返回'undefined'(字面意思是字符串),然後返回數組的其餘部分。

我在做什麼錯?

回答

2

它改成這樣:

alert(" - " + (testvar || "") + " - ");

...這...

addOnEnd += (item || "") + "\n";

您還需要初始化addOnEnd爲空字符串,而不是空。

這樣,如果值是未定義的(當評估爲布爾值時返回false),它將使用空字符串的「默認」值。

+0

謝謝! alert()片段適用於第一個示例,但第二個不適用,這很奇怪,因爲它基本上是相同的代碼。 – Scott

+1

將'addOnEnd = null;'改爲'addOnEnd =';',更新了我的答案:) – greg84

+0

看起來像@Theodore發現了 - 我沒有:) – greg84

2

結果是正確的。您正在看到toString的值爲nullundefined

如果你想替換一個空字符串,那就這樣做。

var testvar = null; 
alert(" - "+ (testvar == null ? "" : testvar) +" - "); 

var addOnEnd=""; 
for (item in resp) { 
    item = item == null ? "" : item; 
    console.log(">"+item, resp[item]); 
    addOnEnd += item+"\n"; 
} 
1

空值被強制爲字符串 「null」 catentated時(添加)到一個字符串。 你想要的是這個。

var addOnEnd=""; 
for (item in resp) { 
    console.log(">"+item); 
    addOnEnd += item +"\n"; 
} 
0

我懷疑問題在於您的數據。

var testvar = null; 
alert(" - "+testvar+" - "); 
// RESULT "- null -" --> as expected. 

var addOnEnd=null; 
for (item in {key: "val1", key2: "val2"}) { 
    console.log(">"+item); 
    addOnEnd += item+"\n"; 
} 
alert(addOnEnd) 
//result (nullKey1\nKey2) 
+0

剛剛嘗試過,相同的結果很不幸。我嘗試了你的示例數據,腳本返回了'nullkeykey2'。 – Scott

+0

@Jaxo - 這就是它/應該/返回。根據你的問題,它返回**'undefined' **,後面跟着鍵值。我設置我的例子來顯示它應該返回'null'而不是'undefined'。如果你想擺脫'null',那麼做這個:'var addOnEnd =「」;'而不是。 –