为何Google Apps Script中需将getFilter()置于createFilter()之前?
为什么Google Apps Script中必须先调用getFilter()再用createFilter()?
核心问题出在两个方法的错误行为差异上:
getRange().getFilter():目标范围有筛选器时返回Filter对象(真值),没有则返回null(假值),全程不会抛出错误。getRange().createFilter():目标范围无筛选器时会创建并返回Filter对象(真值);但如果已经存在筛选器,这个方法不会返回假值,而是直接抛出运行时错误。
逻辑或(
||)的短路求值前提是左侧表达式能正常返回结果:- 写成
myRange.getFilter() || myRange.createFilter()时:- 已有筛选器:
getFilter()返回真值,逻辑或直接取该值,不会执行右侧的createFilter(),避免了错误。 - 无筛选器:
getFilter()返回null(假值),逻辑或执行右侧createFilter()创建筛选器,流程正常。
- 已有筛选器:
- 写成
myRange.createFilter() || myRange.getFilter()时:
一旦已有筛选器,左侧createFilter()直接抛出错误,代码中断,根本没机会执行右侧的getFilter(),这就是报错的根源。
- 写成
简单总结:createFilter()遇到已存在的筛选器时不是返回假值,而是直接报错,逻辑或的短路规则根本没机会触发。
内容的提问来源于stack exchange,提问作者diehardfans
相关产品推荐
相关产品推荐

