Google Apps Script中let/const/var及getValue()/getValues()使用疑问
在Google Apps Script中选择let、const、var的指南
核心选择原则
- 优先用const:如果变量声明后不需要被重新赋值(比如示例里的
sheet,后续不会把它改成别的Sheet实例),就用const。它是块级作用域,不会像var那样出现变量提升导致的意外问题,代码更安全。
示例:const sheet = range.getSheet(); - 用let处理需要修改的变量:当变量后续需要被重新赋值(比如循环计数器、动态切换的对象实例)时,用
let。同样是块级作用域,避免var的作用域泄露问题。
示例:let currentRow = 1; currentRow++; - 尽量避免var:
var是函数级作用域,存在变量提升特性,容易导致变量被意外覆盖(比如在if块里用var声明的变量会泄露到外部作用域)。ES6推出let和const后,var已经没有必要在新代码中使用。
三者能否互换?
语法上大部分场景可以强行替换,但逻辑上不行:
- 用
const的地方如果后续给变量赋值,会直接抛出错误; - 用
var替代let/const可能会引入作用域相关的隐藏bug;
所以绝对不能随意互换,必须根据变量是否需要修改、作用域需求来选择。
getValue()与getValues()的正确使用场景
基础区别
- getValue():仅适用于单个单元格的Range对象,返回该单元格的原始值(字符串、数字、日期等)。
- getValues():适用于任意大小的Range对象,返回一个二维数组:外层数组对应Range的行,内层数组对应每行的单元格值。
你遇到的错误分析
你碰到的Error sending email to function () { [native code] },原因是给多单元格Range调用了getValue()。Google Apps Script中,多单元格Range调用getValue()不会报错,但会返回一个内置函数而非单元格值,把这个函数当作邮箱地址传入邮件发送方法,自然会触发错误。
解决办法
- 如果目标是单个单元格,先把Range定位到单个单元格再用getValue():
const email = range.getCell(1, 1).getValue(); - 或者用getValues()获取二维数组后,提取对应位置的值:
const email = range.getValues()[0][0]; // 取第一行第一列的单元格值
内容的提问来源于stack exchange,提问作者darth_chaos
相关产品推荐
相关产品推荐

