ES6使用rest参数
如果你能使用ES6,你可以使用:
其他参数
函数sortArgs(…args) {
返回参数。排序(函数(a, b){返回a - b;});
}
document.body.innerHTML = sortArgs(12,4,6,8).toString();
你可以从链接中读到
rest形参语法允许我们将不确定数量的实参表示为数组。
如果你对…语法,它被称为扩散运算符,你可以在这里阅读更多。
ES6使用Array.from()
使用Array.from:
函数sortArgs() {
return Array.from(arguments).sort(function (a, b) {return a - b;});
}
document.body.innerHTML = sortArgs(12,4,6,8).toString();
from简单地将类数组或可迭代对象转换为数组实例。
ES5
你可以在arguments对象上使用Array的slice函数,它会把它转换成一个标准的JavaScript数组。你只需要通过Array的原型手动引用它:
function sortArgs() {
var args = Array.prototype.slice.call(arguments);
return args.sort();
}
为什么会这样?下面是ECMAScript 5文档本身的一段摘录:
注意:slice函数是有意通用的;它不要求它的this值是一个Array对象。因此,它可以转移到其他类型的对象中作为方法使用。slice函数能否成功应用于主机对象取决于实现。
因此,slice对任何具有length属性的东西都有效,而参数很方便地做到了这一点。
如果array .prototype.slice对你来说太拗口了,你可以使用数组字面量来略写它:
var args = [].slice.call(arguments);
然而,我倾向于认为前一个版本更明确,所以我更喜欢它。滥用数组文字符号会让人觉得很俗气,看起来很奇怪。