为什么这个变量有时未定义?
2019-10-30
303
因此,此函数获取一个文件夹,获取子文件夹,将一些信息推送到数组,然后将该数组粘贴到我的电子表格中。
它大约有 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 语句是它失败的地方,说:
TypeError: Cannot read property 'length' of undefined 1dmDV2qdnU2Qqrg6mr-sxD8JaQncTUNqn []
我不认为每次文件夹没有文件时都会发生这种情况,或者每次文件夹没有文件夹时都不会发生这种情况。
那么,当 result 明确定义为 result = [] 时,为什么有时它是未定义的,如果它 是 未定义的,为什么它没有被“if result == undefined”行捕获?
为了清楚起见,删除了一些行(仅文件计数内容),无论如何我在那部分都没有使用 result。
2个回答
在您的脚本中,
result
被声明为
var result = [];
。并且
result
与
[]
进行比较。
在 Javascript 中,在这种情况下,对象作为引用进行比较。因此,
result == []
始终为
false
。为了确认
result
是否为
[]
且为空,如何进行以下修改?
来自:
result == []
至:
result.length == 0
或
!result.length
参考:
- Array.length
-
如何在 JavaScript 中比较数组?
- 我认为这个线程也可能有助于理解这一点情况。
Tanaike
2019-10-30
这对我有用:
function getFolderCount(){
var fldr=DriveApp.getFolderById('folderId');
var subfldrCount=0;
var subfolders=fldr.getFolders();
var result=[];
while (subfolders.hasNext()){
var subfolder=subfolders.next();
result.push([++subfldrCount,subfolder.getName(),subfolder.getId()]);
}
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName("FoldersPlusCounts");
sh.getRange(sh.getLastRow()+1, 1,result.length, result[0].length).setValues(result);
}
Cooper
2019-10-30