奇怪的Javascript结果

时间:2012-09-15 17:45:29

标签: javascript json parsing null undefined

为什么这段代码会在我的理解返回- 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循环后警告(addOnEnd),它会返回'undefined'(字面意思是字符串),然后返回数组的其余部分。

我做错了什么?

4 个答案:

答案 0 :(得分:2)

将其更改为:

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

......而这......

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

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

这样,如果值未定义(当评估为boolean返回false时),它将使用空字符串的'default'值。

答案 1 :(得分:2)

结果是正确的。您看到toStringnull的{​​{1}}值。

如果要替换空字符串,请执行此操作。

undefined

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

答案 2 :(得分:1)

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

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

答案 3 :(得分: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)