我是编程新手(已经在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)代码有问题吗?
答案 0 :(得分:102)
控制台不可用,因为代码在云中运行,而不是在浏览器中运行。相反,请使用GAS提供的Logger类:
Logger.log(playerArray[3])
然后在View&gt;下的IDE中查看结果日志...
以下是logging with GAS的一些文档。
编辑:2017-07-20 Apps脚本现在还提供Stackdriver Logging。在“查看 - 控制台日志”下的脚本编辑器中查看这些日志。
答案 1 :(得分:5)
在google脚本项目中,您可以创建html文件(例如:index.html)或gs文件(例如:code.gs)。 .gs文件在服务器上执行,您可以使用Logger.log作为@Peter Herrman描述。但是,如果该函数是在.html文件中创建的,则它将在用户的浏览器上执行,您可以使用console.log。 Chrome浏览器控制台可以是{/ 3}},可以是Windows / Linux上的Ctrl Shift J或Mac上的Cmd Opt J
如果要在html文件上使用Logger.log,可以使用viewed从html文件中调用Logger.log函数。为此,您需要插入&lt;? Logger.log(某事物)?&gt; 用您要记录的内容替换某些内容。标准scriptlet,使用语法&lt;? ...?&gt;,执行代码而不明确地向页面输出内容。
答案 2 :(得分:5)
即使Logger.log()
在技术上是向控制台输出内容的正确方法,但它有一些烦恼:
Logger.log(playerArray)
,然后在调试之后你可能想删除Logger.log(playerArray)
,因此还需要再增加1-2步。相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标)。当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似。在这种情况下,我会通过输入“x”(x标记点!)强制中断条件以抛出运行时错误:
与查看日志比较:
调试控制台包含更多信息,比日志覆盖更容易阅读。这种方法的一个小好处是,如果保持干净的代码是你的事情,你永远不必担心用一堆日志记录命令来污染你的代码。即使您输入“x”,您也不得不记得在调试过程中删除它,否则您的代码将无法运行(内置清理措施,yay)。
答案 3 :(得分:5)
A)我对Google Apps脚本控制台如何处理打印方式有什么不了解,以便我可以看到我的代码是否正在完成我喜欢的内容?
Google Apps脚本项目的.gs文件代码在服务器上运行,而不是在Web浏览器上运行。记录消息的方法是使用Class Logger。
B)代码有问题吗?
正如错误消息所说,问题是console
没有定义,但现在相同的代码会抛出其他错误:
ReferenceError:&#34; playerArray&#34;没有定义。 (第12行,文件&#34;代码&#34;)
这是因为playerArray被定义为局部变量。将该行移出该函数将解决此问题。
var playerArray = [];
function addplayerstoArray(numplayers) {
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
现在代码执行时没有抛出错误,而是查看浏览器控制台,我们应该查看Stackdriver Logging。在Google Apps脚本编辑器UI中,点击查看&gt;堆栈驱动程序记录。
2017年,Google向所有脚本发布了Stackdriver Logging并添加了Class Console,因此包括console.log('Hello world!')
之类的内容不会引发错误,但日志将在Google Cloud Platform Stackdriver日志服务而不是浏览器控制台上。
来自Google Apps Script Release Notes 2017
2017年6月23日
Stackdriver Logging已退出Early Access。所有脚本现在都可以访问Stackdriver日志记录。
来自Logging > Stackdriver logging
以下示例显示如何使用console服务在Stackdriver中记录信息。
function measuringExecutionTime() { // A simple INFO log message, using sprintf() formatting. console.info('Timing the %s function (%d arguments)', 'myFunction', 1); // Log a JSON object at a DEBUG level. The log is labeled // with the message string in the log viewer, and the JSON content // is displayed in the expanded log structure under "structPayload". var parameters = { isValid: true, content: 'some string', timestamp: new Date() }; console.log({message: 'Function Input', initialData: parameters}); var label = 'myFunction() time'; // Labels the timing log entry. console.time(label); // Starts the timer. try { myFunction(parameters); // Function to time. } catch (e) { // Logs an ERROR message. console.error('myFunction() yielded an error: ' + e); } console.timeEnd(label); // Stops the timer, logs execution duration. }
答案 4 :(得分:2)
2020年2月,Google宣布对内置Google Apps Script IDE major upgrade进行now supports console.log()。因此,您现在可以同时使用:
祝您编程愉快!
答案 5 :(得分:0)
确保您选择了需要执行的功能。看截图:
https://github.com/DenysKravets/japanese-srs/tree/heroku
答案 6 :(得分:-2)
Logger.log(您的消息),然后查看日志。