19 votes

TypeError: Impossible de lire la propriété "0" à partir de undefined

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

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("Vous êtes connecté");
  }
  else if (passwordencode != data[i][1]) {
    Logger.log("Vous n'êtes pas connecté");
    UserProperties.setProperties({
      "name" : "",
      "pass" : ""
      });
  }
}

Utilisation de Google Apps Script. Ce qui est indéfini est l'instruction while(name != data[i][0]) affirmant que vous ne pouvez pas lire la propriété "0" depuis indéfini. Ce qui est étrange à ce sujet, si je supprime data[i][0] dans l'instruction while, cela fonctionne encore dans logger.log. Et partout ailleurs. Qu'est-ce qui se passe ?

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

4voto

Krasimir Points 6061

La boucle while 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 data. Ainsi, la boucle while continue d'incrémenter et vous atteignez la fin du tableau. Je suggère d'utiliser la boucle for.

4voto

Justin Russo Points 685

Il semble 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 instruction while, il semble que cela se produit parce que vous incrémentez 'i' de 1 à 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, quelle que soit la longueur du tableau. Cela vous amènera éventuellement à atteindre un élément du tableau qui est indéfini, si vous ne trouvez jamais un élément dans votre tableau avec '0' égal à 'name'.

Modifiez votre instruction while comme suit...

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

2voto

Daniel C. Deng Points 431

Vérifiez l'index de votre tableau pour voir s'il est accédé en dehors des limites.

Une fois j'ai accédé à categories[0]. Plus tard, j'ai changé le nom du tableau de categories à category mais j'ai oublié de changer le point d'accès--de categories[0] à category[0], c'est pourquoi j'ai aussi obtenu cette erreur.

JavaScript affiche un message de débogage médiocre. Dans votre cas, je suppose que l'accès dépasse les limites.

-1voto

Erez.S Points 575

Pour moi, le problème était que j'utilisais un package qui n'est pas inclus dans package.json ni installé.

import { ToastrService } from 'ngx-toastr';

Alors lorsque le compilateur a essayé de compiler cela, une erreur a été levée.

(Je l'ai installé localement, et lors de l'exécution d'une compilation sur un serveur externe, l'erreur a été levée)

-5voto

Lee Ran Points 11

En temps normal, en dehors de la limite du tableau lorsque vous rencontrez l'erreur. Donc, vérifiez votre indice de tableau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X