函数中arguments的坑

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");




你可能感兴趣的:(函数中arguments的坑)