更新: FelixKling 正确地指出我对这个词的使用spread operator
是不正确的,应该是Rest Parameter
. 使用我链接到的兼容性表,它清楚地表明Rest Parameter
Safari 9 不支持。澄清它是Rest Parameter
这个问题的真正答案(尽管如何重写函数的示例非常好)。
我写了一个 javascript 函数性能测试器来测试一个函数需要多长时间运行。它使用 ES6 扩展运算符 (...),它在 Firefox 中运行良好,但在 Safari 中无法正常运行(直到版本 9.1.2)。根据此兼容性图表,Safari 9 的扩展运算符得分为 9/15,我认为这是 Safari 9 的一个缺点。是否有 ES6 方法来重写它以便它可以与 Safari 9 一起使用(如果没有,为什么 9/15 中的“9” - 我认为这意味着它必须在某些情况下起作用)?
function timerTest(func, iterations, ...someData) {
if (typeof iterations == "undefined") {
iterations = 1;
}
var start = performance.now();
for (var i = 0; i < iterations; i++) {
func.apply(this, someData);
}
var funcName = /function ([^\(]+)/.exec(func.toString())[0];
v("Time to run " + funcName + " for " + iterations + " time(s): " + (performance.now() - start));
return performance.now() - start;
}
如何使用它的示例(在这种情况下,确定 3 种方法中的哪一种更快地测试元素是否已分配类):
var e = document.getElementById("test");
timerTest(hasClass, 1000000, e, "x");
timerTest(hasClass2, 1000000, e, "x");
timerTest(hasClass3, 1000000, e, "x");
function hasClass(e, name) {
if (typeof e !== "undefined" && typeof e.className !== "undefined") {
return new RegExp('(\\s|^)' + name + '(\\s|$)').test(e.className);
}
return false;
}
function hasClass2(e, name) {
if (typeof e !== "undefined" && typeof e.className !== "undefined") {
return (' ' + e.className + ' ').indexOf(' ' + name + ' ') > -1;
}
return false;
}
function hasClass3(e, name) {
if (typeof e !== "undefined" && typeof e.classList !== "undefined") {
return e.classList.contains(name)
}
return false;
}