Google Apps Script中无法在执行日志查看Map对象求助
Google Apps Script中Map对象控制台输出异常问题
问题详情
我在Google Apps Script(已启用Chrome V8运行时)中遇到Map对象控制台显示异常的问题,测试代码如下:
function test() { var a = new Map([['foo','bar']]); console.log(a); var b = new Map(); b.set('foo', 'bar'); console.log(b); }
执行后日志仅输出:
{} {}
补充情况:
- 可通过
map.get(key)正常获取值,map.size也能正确显示Map的大小 - 直接打印
map.keys()、map.values()、map.entries()时控制台无输出,但用Array.from(map.entries())可正常返回条目数组
原因分析
这是因为GAS的内置日志系统对ES6迭代器对象的支持有限:
- 直接打印Map对象:GAS日志的序列化逻辑不会遍历Map的键值对,只会输出空对象
{},但Map本身的存储是正常的——get()和size能正常工作就证明了这一点。 - keys/values/entries无输出:这三个方法返回的是迭代器对象,而GAS日志无法直接解析并展示迭代器的内容。
Array.from()会将迭代器转换为数组,数组是GAS日志能正常序列化显示的类型,所以能看到结果。
解决方法
如果需要在控制台查看Map的完整内容,可使用以下几种方式:
- 转换为数组后打印:
console.log(Array.from(map.entries())); // 或者用扩展运算符 console.log([...map]); - 转换为普通对象后打印(仅适用于键为字符串或Symbol的场景):
console.log(Object.fromEntries(map.entries())); - 手动遍历打印键值对:
map.forEach((value, key) => { console.log(`${key}: ${value}`); });
内容的提问来源于stack exchange,提问作者Nathan Tew
相关产品推荐
相关产品推荐

