我有一个函数将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

为什么提醒值会显示前导"未定义"?
答案 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