首页 > 解决方案 > 为什么这个变量有时是未定义的?

问题描述

所以这个函数获取一个文件夹,获取子文件夹,将一些信息推送到一个数组,然后将数组粘贴到我的电子表格中。

它在大约 2-5% 的时间里会在一个奇怪的点上失败,而且我之前为错误捕获它所做的尝试只是不起作用。为什么/如何!

function getFileCount(gdrive,level,fullpath){
  var folder = DriveApp.getFolderById(gdrive);
  var fileCount = 0;


  //append the subfolders to the sheet 
  var folders = folder.getFolders();
  var result = [];
  while (folders.hasNext()){
    var folder = folders.next();
    var path = fullpath + " > " +folder.getName();
    result.push([(level+1),folder.getId(), path,"?"]);
  }
  if (result == []) return fileCount;
  if (result == undefined) {console.log("Why the hell is it undefined?"+folder.getName()); return fileCount;}
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName("FoldersPlusCounts");
  var end = ss.getLastRow()+1;  
  try{ss.getRange(end, 1,result.length, result[0].length).setValues(result);}catch(e){console.log(e+" "+gdrive+" ["+result+"]");return -1;}
  if (result.length > 0) SpreadsheetApp.flush();

  return fileCount;
}

try catch 语句失败的地方是:

类型错误:无法读取未定义的 1dmDV2qdnU2Qqrg6mr-sxD8JaQncTUNqn [] 的属性“长度”

我不认为每次文件夹没有文件或每次没有文件夹时都会发生这种情况。

那么为什么结果有时是未定义的,当它明确定义为result = []时,如果它未定义的,为什么它不被“if result == undefined”行捕获?

为了清楚起见,删除了一些行(只是文件计数的东西),无论如何我都没有在那个部分使用结果。

标签: google-apps-script

解决方案


在您的脚本中,result声明为var result = [];. 并result与 比较[]

在 Javascript 中,在这种情况下,将对象作为参考进行比较。以此,result == []永远是false。为了确认哪个result[]空的,下面的修改如何?

从:

result == []

至:

result.length == 0

或者

!result.length

参考:


推荐阅读