Google Apps Script库与本地脚本isObject函数行为差异问题
问题根源
Google Apps Script(GAS)的独立库与调用它的业务脚本,运行在完全隔离的全局执行上下文环境中:
- 调用侧脚本中用对象字面量
{test: 1}创建的对象,其constructor属性指向的是调用侧上下文的全局Object构造函数 - 当该对象传入库的
isObject方法时,代码中value.constructor === Object里的Object,是库上下文的全局Object构造函数
两个Object虽然功能实现、打印输出完全一致,但属于不同上下文下的独立函数实例,因此===全等判断返回false,这就是两次运行结果不一致的核心原因。
修复方案
如果需要兼容跨库调用的普通对象判断,替换掉依赖当前上下文全局构造函数的判断逻辑,改用不受上下文影响的toString标签判断即可,修改后的参考代码:
function isObject(value) { return value && typeof value === 'object' && Object.prototype.toString.call(value) === '[object Object]'; }
内容的提问来源于stack exchange,提问作者Adam Orczyk
相关产品推荐
相关产品推荐

