当我突然意识到问题的根源可能是当前我所使用的Array.prototype.find()方法根本不受支持时,我一直试图调试我正在编写的脚本。版本的Google Apps脚本(截至2017年3月4日)。我怀疑这是因为我尝试在两个不同的环境中运行以下代码:
// ran this locally on Chrome version 56.0.2924.87 (64-bit)
// result is 3
var t = [1,2,3,4];
var x = t.find(function(v) {
return v == 3;
});
document.write(x);
==========
// ran this on Google Apps Script (whatever the version is as of March 4th, 2017)
// attempting to run this function produces the error: "TypeError: Cannot find function find in object 1,2,3,4."
var t = [1,2,3,4];
var x = t.find(function(v) {
return v == 3;
});
Logger.log(x);
我可以从这个实验中得出的唯一结论是,Google Apps脚本基于过时的JavaScript版本,这导致了我的主要问题:如何找到任何技术的版本(无论是JavaScript还是HTML) Chrome网络浏览器和Google Apps脚本支持或CSS等)?我怎样才能最好地了解任何重大变化?
答案 0 :(得分:2)
起初看起来似乎不是一个答案,但那是因为你提出了错误的问题。您不应该问“支持哪个版本的JavaScript”,而是“此 JavaScript环境中有哪些功能”,您可以在运行时进行测试。 (环境可能支持ES6的某些部分而不支持其他部分,因此这些环境既不是纯粹的ES5也不是ES6 - 没有简单的“Google Apps使用版本___”答案。)
功能测试是编写可移植JavaScript的规范方法,并且由于要求不存在的东西返回undefined
1 而不是抛出错误,您可以很容易地看到什么是你可以使用。
例如:
if (Array.prototype.find) {
// Arrays have find()
} else {
// Arrays do not... maybe polyfill an implementation?
}
1 一些所谓的“本机对象”(不是纯JavaScript对象,而是由嵌入环境提供的对象)可能不会以这种方式运行。众所周知,当您访问不存在的属性时,某些浏览器中的某些DOM对象会抛出。 (但是当我们有像jQuery这样的库时,你为什么要直接操作DOM?)
答案 1 :(得分:1)
我找到的最好的资源(这是一个很好的资源)是this link。
它不仅提供浏览器支持,还提供移动和转换器支持,您可以在JavaScript版本(甚至是未来版本)之间切换,以了解浏览器的进展情况。我不认为它涵盖了Google Apps脚本。
此网站包含各种功能。我最喜欢的一个是单击左侧的语言功能,并查看支持该功能所需的各个方面。它甚至提供验证一致性的代码示例。
我定期参考的一个惊人的资源。
如果您希望获得对特定环境中发生的事情的运行时感知,那么您可以考虑将此链接中提供的功能测试复制到您自己的测试脚本,并将其作为确定合规性的方式执行特别的功能。
例如,假设我们要测试ES6功能的基本支持 - 默认功能参数。如果我们点击'默认功能参数'然后点击小小的' c'在“基本功能”右侧的一个圆圈中我们得到这段代码:
return (function (a = 1, b = 2) { return a === 3 && b === 2; }(3));
所有代码片段都打算作为单元测试运行,如果支持则返回true,否则返回false。
所以如果你包含这样的代码:
function testDefaultParameters() {
return (function (a = 1, b = 2) { return a === 3 && b === 2; }(3));
};
if (!testDefaultParameters()) {
// log or polyfill or ...
}
这将告诉您运行的环境是否支持此功能。
我会在添加新语言构造到我的代码库时添加这些内容,以便您可以立即检测是否应该添加一些其他支持或者使用该构造。