我收到一个非常奇怪的未定义错误:
function login(name,pass) {
var blob = Utilities.newBlob(pass);
var passwordencode = Utilities.base64Encode(blob.getBytes());
var ss = SpreadsheetApp.openById("");
var sheet = ss.getActiveSheet();
var data = sheet.getDataRange().getValues();
var i=1;
while (name != data[i][0]){
Logger.log(data[i][0]);
i++;
}
if (passwordencode == data[i][1]){
UserProperties.setProperties({
"name" :name,
"pass" : passwordencode
});
Logger.log("You are logged in");
}
else if (passwordencode != data[i][1]) {
Logger.log("You are not logged in");
UserProperties.setProperties({
"name" : "",
"pass" : ""
});
}
}
使用googlescript。未定义的是while语句,其中while(name!= data [i] [0])声称您无法从undefined中读取属性“0”。这有什么奇怪的,如果我删除了while语句中的数据[i] [0],它仍然可以在logger.log中运行。在其他地方。到底是怎么回事?
编辑:如果我将while更改为if语句,它也可以。
答案 0 :(得分:4)
while增加 i 。所以你得到:
data[1][0]
data[2][0]
data[3][0]
...
看起来 name 与任何数据元素都不匹配。因此,while仍会递增,并且您将到达数组的末尾。我建议使用进行循环。
答案 1 :(得分:2)
看起来你要做的是访问'data'数组中未定义值的属性'0'。如果你看一下你的while语句,看起来就会发生这种情况,因为你为每个循环增加了'i'。因此,第一次通过时,您将访问'data [1]',但在下一个循环中,您将访问'data [2]'等等,无论数组的长度如何。如果你从未在数组中找到属性为'0'且等于'name'的项,那么这将导致你最终命中一个未定义的数组元素。
向你提出你的声明......
for(var iIndex = 1; iIndex <= data.length; iIndex++){
if (data[iIndex][0] === name){
break;
};
Logger.log(data[i][0]);
};
答案 2 :(得分:1)
检查您的数组索引以查看它是否超出范围。
一旦我访问了类别[0]。后来我将数组名称从类别更改为类别但忘记更改访问点 - 从类别[0]到类别[0],因此我也收到此错误。
JavaScript执行的调试消息很糟糕。在你的情况下,我认为访问可能超出范围。
答案 3 :(得分:0)
对我来说,问题在于我使用的是package.json
中未包含或未安装的软件包。
import { ToastrService } from 'ngx-toastr';
因此,当编译器尝试对其进行编译时,它将引发错误。
(我在本地安装它,并且在外部服务器上运行构建时抛出了错误)
答案 4 :(得分:-1)
正常情况下,遇到错误时超出数组范围。 所以,检查你的数组下标。