我是编程新手(已经在Codecademy上学过一些JS课程) . 我正在尝试创建一个简单的脚本来确定,如果给出一个包含扑克游戏结果的电子表格,谁应该付钱给谁 . 我打开了Google Apps脚本,并编写了以下内容以开始使用:
function addplayerstoArray(numplayers) {
var playerArray = [];
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
我们的想法是创建一个包含其中玩家总数的数组 . 运行代码时,我认为它会在控制台上打印“3” . 但什么都没发生 . 它说
“ReferenceError:”控制台“未定义 . ”
A)我不了解Google Apps脚本控制台如何处理打印,以便我可以看到我的代码是否完成了我想要的内容?
B)代码有问题吗?
5 回答
控制台不可用,因为代码在 Cloud 中运行,而不是在浏览器中运行 . 而是使用GAS提供的Logger类:
然后在视图>日志下的IDE中查看结果...
这是logging with GAS的一些文档 .
编辑:2017-07-20 Apps脚本现在还提供了Stackdriver Logging . 在View - Console Logs下的脚本编辑器中查看这些日志 .
只是为了构建上面的vinnief的hacky解决方案,我使用MsgBox如下:
它有点像断点,停止脚本并输出弹出框所需的任何字符串 . 我特别在Sheets中发现,我在Logger.log中遇到问题,这在大多数情况下提供了足够的解决方法 .
在google脚本项目中,您可以创建html文件(例如:index.html)或gs文件(例如:code.gs) . .gs文件在服务器上执行,您可以使用Logger.log作为@Peter Herrman描述 . 但是,如果函数是在.html文件中创建的,则它将在用户的浏览器上执行,您可以使用console.log . Chrome浏览器控制台可以通过Windows / Linux上的Ctrl Shift J或Mac上的Cmd Opt J进行viewed
如果要在html文件上使用Logger.log,可以使用scriptlet从html文件中调用Logger.log函数 . 为此,您将插入<? Logger.log(某事)?>用你要记录的东西替换东西 . 标准的scriptlet,使用语法<? ...?>,执行代码而不明确地向页面输出内容 .
尽管
Logger.log()
在技术上是向控制台输出内容的正确方法,但它有一些烦恼:输出可能是非结构化的混乱,很难快速消化 .
您必须首先运行脚本,然后单击“查看/日志”,这是两次额外的单击(如果您还记得Ctrl Enter键盘快捷键,则为一次) .
你必须插入
Logger.log(playerArray)
,然后在调试之后你可能想要删除Logger.log(playerArray)
,因此还需要1-2个步骤 .您必须单击“确定”关闭叠加层(还有一次额外点击) .
相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标) . 当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似 . 在这种情况下,我会通过输入“x”(x标记点!)强制中断条件以抛出运行时错误:
与查看日志比较:
调试控制台包含更多信息,比日志覆盖更容易阅读 . 这种方法的一个小好处是,如果保持干净的代码是你的事情,你永远不必担心用一堆日志记录命令污染你的代码 . 即使您输入“x”,您也不得不记得在调试过程中删除它,否则您的代码将无法运行(内置清理措施,yay) .
回答OP问题
Google Apps脚本项目的.gs文件上的代码在服务器上运行,而不是在Web浏览器上运行 . 记录消息的方法是使用Class Logger .
正如错误消息所说,问题是
console
没有定义但是现在相同的代码会抛出其他错误:那是因为playerArray被定义为局部变量 . 将该线移出该功能将解决此问题 .
现在代码执行时不会抛出错误,而是查看浏览器控制台,我们应该查看Stackdriver Logging . 在Google Apps脚本编辑器UI中,单击 View > Stackdriver Logging .
附录
2017年,谷歌发布了所有脚本Stackdriver Logging并添加了类控制台,因此包括类似
console.log('Hello world!')
之类的内容不会引发错误,但日志将在Google Cloud Platform Stackdriver日志服务而不是浏览器控制台上 .来自Google Apps Script Release Notes 2017
来自Logging > Stackdriver logging
//在DEBUG级别记录JSON对象 . 日志已标记
//使用日志查看器中的消息字符串和JSON内容
//显示在“structPayload”下的扩展日志结构中 .
var parameters = {
isValid:是的,
内容:'some string',
时间戳:新日期()
};
console.log({message:'Function Input',initialData:parameters});
var label ='myFunction()time'; //标记时间日志条目 .
console.time(标签); //启动计时器 .
尝试{
myFunction的(参数); //功能到时间 .
} catch(e){
//记录错误消息 .
console.error('myFunction()产生错误:'e);
}
console.timeEnd(标签); //停止计时器,记录执行持续时间 .
}