0

为什么这段代码在我的理解- null -应该返回时返回- -- 它似乎null像一个字符串一样对待。

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 循环之后使用 alert( addOnEnd),它会返回“未定义”(字面意思是字符串),然后返回数组的其余部分。

我究竟做错了什么?

4

4 回答 4

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";
}
于 2012-09-15T17:51:04.337 回答
2

将其更改为:

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

...和这个...

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

您还需要将 addOnEnd 初始化为空字符串而不是 null。

这样,如果该值未定义(当评估为布尔值时返回 false),它将使用空字符串的“默认”值。

于 2012-09-15T17:49:25.930 回答
1

当连接(添加)到字符串时,null 值被强制转换为字符串“null”。你要的是这个。

var addOnEnd="";
for (item in resp) {
    console.log(">"+item);
    addOnEnd += item +"\n";
}
于 2012-09-15T17:51:49.747 回答
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)
于 2012-09-15T17:52:19.663 回答