为什么会出现" undefined"我的字符串开头的文字?

时间:2016-12-08 03:25:38

标签: javascript

我有一个函数将AJAX请求的结果连接在一起。

出于某种原因,我的最终字符串以" undefined"。

开头

以下是重现问题的简化示例:



    // In practice, fetched via AJAX from a server
    var vendors = [{ id_vendor: 'V0001' }, { id_vendor: 'V0002' }];

    var row_vendor;

    vendors.forEach(function (value) {
      row_vendor += value.id_vendor;
    });
	
    alert(row_vendor); // undefinedV0001V0002




为什么提醒值会显示前导"未定义"?

3 个答案:

答案 0 :(得分:3)

您没有初始化变量,因此其值为undefined。在连接之前连接字符串会将其强制转换为字符串"undefined"

考虑:

var x
alert(x + "test") // undefinedtest

而是在执行连接之前将变量初始化为空字符串:

var x = ""
alert(x + "test") // test

请注意,从功能上来说,首先提取您感兴趣的属性然后简单地join将它们组合起来会更清晰:

$.map(vendor, function (v) { return v.vendor_id }).join('')

答案 1 :(得分:2)

您的row_vendor变量未分配初始值,因此它开始undefined,然后使用+=运算符连接字符串,导致undefined成为"undefined"变量字符串"v0001"(加上var row_vendor = ""; )。只需在声明时将其设置为空字符串:

git checkout master

答案 2 :(得分:0)

问题出在这一行

$.each(vendor, function(i, value) {
  row_vendor += value.id_vendor;
});

为了使用row_vendor进行连接,首先必须为其分配默认值。所以你需要做的是:

var row_vendor = ""; // set it to empty string by default
$.each(vendor, function(i, value) {
   row_vendor += value.id_vendor;
});

在旁注中,您还可以使用数组连接字符串。我更喜欢这种方式,因为它更漂亮和可读。

var row_vendor = []; // empty array
$.each(vendor, function(i, value) {
   row_vendor.push(value.id_vendor);
});
console.log(row_vendor.join(",")); // this will separate each value with a comma