我刚开始修补Google Spreadsheet的脚本,我遇到了一个问题:
如何测试函数参数的类型是否是一系列单元格?
我想做这样的事情:
if(typeof intput != "range") {
throw "input must be a range";
}
来自Google的示例here(页面中间):
if (typeof inNum != "number") { // check to make sure input is a number
throw "input must be a number"; // throw an exception with the error message
}
所以这似乎是测试变量类型的正确方法。但我不知道如何测试该类型是否是一系列细胞。
如果我可以指定范围是一维还是二维,那就更好了。
答案 0 :(得分:6)
一系列单元格只是一个数组(多维数组) Javascript有这样的问题。数组被视为一个对象。 因此,首先检查您是否具有“对象”类型,然后您可以像这样进行测试。
if(typeof intput=="object"&&intput.length!=undefined) {
//input is a array
}else{
//Not a array
}
通过测试默认属性,您可以确定您有一个数组
答案 1 :(得分:1)
范围可以代表单个单元格(例如'A1'
)或一组单元格(例如'A1:A2'
)。
将范围作为自定义函数参数(例如=processRangeVal(A1:A2)
)传递时,范围将转换为范围值。
如果范围是单个单元格,则范围值就是该单元格中的数据。
如果范围是一组单元格,则范围值是二维数组。第一维是行,第二维是每一行中的列。
要测试代表一个单元格还是一组单元格的范围值:
function processRangeVal(rangeVal) {
if (Array.isArray(rangeVal[0])) {
// do 2d-array handling
} else {
// do cell data handling
}
}
如果范围是单个单元格并且单元格数据不支持索引,则 rangeVal[0]
解析为undefined
。在这种情况下,Array.isArray(undefined)
解析为false,这就是我们想要的。