TypeError:无法从 null 读取属性“length”
2012-10-18
10644
我对 javascript 还很陌生,想尝试使用 Google 电子表格和邮件中的邮件合并功能。我复制了教程脚本并做了一些必要的更改(至少我能想到的)。但是当我尝试运行脚本时,出现了 TypeError:无法从 null 读取属性“length”。(第 43 行)
上面提到的第 43 行是下面的 for 循环。有人能帮我告诉我需要修复什么才能运行脚本吗?
// Replaces markers in a template string with values define in a JavaScript data object.
// Arguments:
// - template: string containing markers, for instance ${"Column name"}
// - data: JavaScript object with values to that will replace markers. For instance
// data.columnName will replace marker ${"Column name"}
// Returns a string without markers. If no data is found to replace a marker, it is
// simply removed.
function fillInTemplateFromObject(template, data) {
var email = template;
// Search for all the variables to be replaced, for instance ${"Column name"}
var templateVars = template.match(/\$\{\"[^\"]+\"\}/g);
// Replace variables from the template with the actual values from the data object.
// If no value is available, replace with the empty string.
for (var i = 0; i < templateVars.length; ++i) {
// normalizeHeader ignores ${"} so we can call it directly here.
var variableData = data[normalizeHeader(templateVars[i])];
email = email.replace(templateVars[i], variableData || "");
}
return email;
}
2个回答
如果正则表达式没有匹配项,则
templateVars
将为空。您需要在循环之前检查这一点。
更新:
if (templateVars !== null) {
for (var i = 0; i < templateVars.length; i++) {
...
}
}
Barmar
2012-10-18
我刚刚遇到了同样的问题,但我认为 OP 遇到的问题与代码无关。
这是 Google 在其教程中提供的电子邮件模板的格式。
占位符是
${"First Name">
,但是根据您如何编辑这些占位符,您可以获得
${“First Name”>
,这是完全不同的
区别在于
"
与
“
一个是垂直的(有效),另一个是“斜体”(无效)
了解计算机如何格式化数据的人将能够解释这一点的重要性,但它会破坏代码。
mrax
2014-11-30