ES6使用rest参数
如果您能够使用ES6,则可以使用:
100
function sortArgs(...args) {
return args.sort(function (a, b) { return a - b; });
}
document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();
就像你可以在link里读到的
rest参数语法允许我们将不确定数量的参数表示为一个array.
如果你对...
语法感到好奇,它被称为Spread Operator,你可以阅读更多的here.
ES6使用array.from()
使用100:
function sortArgs() {
return Array.from(arguments).sort(function (a, b) { return a - b; });
}
document.body.innerHTML = sortArgs(12, 4, 6, 8).toString();
Array.from
只需将类似数组或可编辑对象转换为数组实例.
ES5
实际上,您只需在Arguments对象上使用Array
的slice
函数,它就会将其转换为标准的JavaScriptarray.您只需通过Array的原型手动引用它:
function sortArgs() {
var args = Array.prototype.slice.call(arguments);
return args.sort();
}
为什么会这样?下面是ECMAScript 5 documentation itself人名单的一个节选:
NOTE:slice
函数是有意通用的;它不要求其this值是数组对象.因此,它可以被转移到其他类型的对象中用作一种方法.slice
函数能否成功应用于主机对象取决于实现.
因此,slice
适用于任何具有length
属性的对象,而arguments
可以方便地使用.
如果Array.prototype.slice
对您来说太长了,可以使用数组文字稍微缩写一下:
var args = [].slice.call(arguments);
然而,我倾向于认为前一个版本更明确,所以我更喜欢它.滥用数组文字符号会让人感觉不舒服,而且看起来很奇怪.