it-swarm.com.ru

Ошибка типа: невозможно прочитать свойство "0" из неопределенного

Я получаю очень странную неопределенную ошибку:

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]) заявляет, что вы не можете прочитать свойство "0" из undefined. Что странно в этом: если я удаляю data [i] [0] в операторе while, он все равно работает в logger.log. И везде. Что, черт возьми, происходит?

Правка: Если я изменю время на утверждение if, это также работает.

11
IGratch

В то время как время увеличивает я . Итак, вы получите:

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

Похоже, name не соответствует ни одному из элементов данных. Таким образом, время все еще увеличивается, и вы достигаете конца массива. Я предложу использовать для цикл.

4
Krasimir

Похоже, вы пытаетесь получить доступ к свойству '0' неопределенного значения в вашем массиве 'data'. Если вы посмотрите на оператор while, то это происходит потому, что вы увеличиваете «i» на 1 для каждого цикла. Таким образом, в первый раз вы получите доступ к «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
Justin Russo

Проверьте индекс массива, чтобы увидеть, доступен ли он за пределами.

Однажды я получил доступ к категориям [0]. Позже я изменил имя массива с категории на категорию, но забыл изменить точку доступа - с категории [0] на категорию [0], поэтому я также получаю эту ошибку.

JavaScript делает плохое сообщение отладки. В вашем случае, я считаю, что доступ выходит из-под контроля.

1
Daniel C. Deng

При нормальных обстоятельствах, вне границы массива, когда вы сталкиваетесь с ошибкой . Итак, проверьте uo свой индекс массива.

0
Lee Ran