it-swarm.com.de

TypeError: Eigenschaft "0" kann nicht von undefined gelesen werden

Ich bekomme einen sehr seltsamen undefinierten Fehler:

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" : ""
      });
  }
}

mit googlescript. Undefiniert ist die while-Anweisung, bei der while (name! = Data [i] [0]) behauptet, dass Sie die Eigenschaft "0" nicht von undefined lesen können. Was ist komisch daran, wenn ich die Daten [i] [0] in der while-Anweisung entferne, funktioniert es immer noch in der Datei logger.log. Und überall sonst. Was zum Teufel ist hier los?

BEARBEITEN: Wenn ich die while-Anweisung in eine if-Anweisung ändere, funktioniert sie auch.

11
IGratch

Das while erhöht das i . So bekommst du:

data[1][0]
data[2][0]
data[3][0]
...

Es sieht so aus, als ob name mit keinem der Datenelemente übereinstimmt. Die while-Zeit wird also immer weiter erhöht und das Ende des Arrays erreicht. Ich schlage vor, for loop zu verwenden.

4
Krasimir

Anscheinend versuchen Sie, auf die Eigenschaft '0' eines undefinierten Werts in Ihrem Datenarray zuzugreifen. Wenn Sie sich Ihre while-Anweisung ansehen, scheint dies der Fall zu sein, da Sie 'i' für jede Schleife um 1 erhöhen. Beim ersten Durchlauf greifen Sie also auf 'data [1]' zu, aber in der nächsten Schleife greifen Sie unabhängig von der Länge des Arrays auf 'data [2]' usw. zu. Dies führt dazu, dass Sie ein Array-Element treffen, das nicht definiert ist, wenn Sie in Ihrem Array nie ein Element mit der Eigenschaft '0' finden, das gleich 'Name' ist. 

Bauen Sie Ihre while-Aussage dazu auf ... 

for(var iIndex = 1; iIndex <= data.length; iIndex++){
    if (data[iIndex][0] === name){
         break;
    };
    Logger.log(data[i][0]);
 };
2
Justin Russo

Überprüfen Sie Ihren Array-Index, um zu sehen, ob auf ihn zugegriffen wird.

Einmal habe ich auf Kategorien [0] zugegriffen. Später änderte ich den Arraynamen von Kategorien in Kategorien, vergaß jedoch, den Zugriffspunkt zu ändern - von Kategorien [0] in Kategorie [0], daher bekomme ich auch diesen Fehler.

JavaScript führt eine schlechte Debug-Nachricht aus. In Ihrem Fall glaube ich, dass der Zugriff außerhalb der Grenzen liegt.

1
Daniel C. Deng

Unter normalen Umständen ist der Array außerhalb des Bereichs, wenn der Fehler auftritt Überprüfen Sie also Ihren Array-Index.

0
Lee Ran