[英]ES6 Spread operator (Rest Parameter) - syntax fails with Safari 9
更新: FelixKling正確地指出,我對術語“ spread operator
使用不正確,應為Rest Parameter
。 使用我鏈接到的兼容性表,它清楚地表明Safari 9不支持Rest Parameter
。闡明它是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;
}
使用參數對象
// call your timerTest function
timerTest(hasClass, 1000000, e, "x");
function timerTest(func, iterations) {
if (typeof iterations == "undefined"){
iterations = 1;
}
var start = performance.now();
//Get parameters from arguments
var args = Array.prototype.slice.call(arguments, 2);
for (var i = 0; i < iterations; i++){
func.apply(this, args);
}
var funcName = /function ([^\(]+)/.exec(func.toString())[0];
v("Time to run " + funcName + " for " + iterations + " time(s): " + (performance.now() - start));
return performance.now() - start;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.