arguments
对象不是一个 Array
。它类似于Array
,但除了length属性和索引元素之外没有任何Array
属性。例如,它没有 pop,shfit等方法。但是它可以被转换为一个真正的Array
:
转换成数组的办法:
1:
var args = Array.prototype.slice.call(arguments);
2:
var args = [].slice.call(arguments);
// ES2015
3:
const args = Array.from(arguments);
4:
const args = [...arguments];
讲一个关于函数好玩的例子:
> function myConcat(separator) {
... return separator
... }
undefined
> myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
'; '
//对,你没有看错,她只返回第一个。。。。。
//也就是如果你使用函数的形参,而不是使用arguments的话。。
//它会默认返给你类数组对象的第一个值;
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 2);
//这里slice()函数只传入一个参数2,意味着,slice(2,end)
//args为['lion,'cheetah']转为数组格式
return args.join(separator);
//args.join(separator);相当于args.join(',');
//return 的结果为字符串类型:'lion,cheetah'
}
myConcat(", ", "red", "orange", "blue");