web-dev-qa-db-fra.com

TypeError: Impossible de lire la propriété "0" de non définie

Je reçois une très étrange erreur indéfinie:

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

en utilisant googlescript. Celui qui est indéfini est l'instruction while où while (name! = Data [i] [0]) prétend que vous ne pouvez pas lire la propriété "0" à partir de indéfini. Ce qui est étrange à ce sujet, si je supprime les données [i] [0] dans l’instruction while, cela fonctionne toujours dans le fichier logger.log. Et partout ailleurs. Que diable se passe t'il?

EDIT: Si je change le moment en une instruction if, cela fonctionne également.

11
IGratch

Le moment incrémente le i . Donc vous obtenez:

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

Il semble que name ne correspond à aucun des éléments de données. Ainsi, le moment incrémente toujours et vous atteignez la fin du tableau. Je vais suggérer d'utiliser pour loop.

4
Krasimir

On dirait que ce que vous essayez de faire est d'accéder à la propriété '0' d'une valeur non définie dans votre tableau 'data'. Si vous regardez votre déclaration while, il semble que cela se produise car vous incrémentez «i» de 1 pour chaque boucle. Ainsi, la première fois, vous accéderez à 'data [1]', mais à la boucle suivante, vous accéderez à 'data [2]' et ainsi de suite, indépendamment de la longueur du tableau. Cela vous fera éventuellement toucher un élément de tableau qui n'est pas défini, si vous ne trouvez jamais un élément dans votre tableau avec la propriété '0' qui est égale à 'nom'. 

Modifiez votre déclaration while à cette ... 

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

Vérifiez votre index de tableau pour voir s'il est accessible hors limites.

Une fois, j'ai accédé aux catégories [0]. Plus tard, j'ai changé le nom du tableau de catégories en catégories, mais j'ai oublié de changer le point d'accès - de catégories [0] à catégorie [0]. Par conséquent, j'obtiens également cette erreur.

JavaScript fait un mauvais message de débogage. Dans votre cas, j'estime que l'accès devient hors de portée.

1
Daniel C. Deng

Dans des circonstances normales, hors des limites du tableau lorsque vous rencontrez l'erreur .

0
Lee Ran