js将Arguments(伪数组)转化成数组方法

Arguments:
官网解释:是一个对应于传递给函数的参数的类数组对象(伪数组)。mdn解释
运行下面函数:

var fn = function(){
    console.log("arguments=>",arguments) //打印:Arguments(2) [1, 2, callee: ƒ): ƒ]
    console.log('函数第一个参数为=>',arguments[0]) //打印: 1
}
fn(1,2)

这样看能够理解arguments是个什么。我们为什么也称他为伪数组看下文。
伪数组:
在js中,数组是特殊的对象,凡是对象有的性质,数组都有,数组表示有序数据的集合,而对象表示无序数据的集合。
那伪数组是什么呢,当然它也是对象,伪数组一般具有以下特点:

  • 按索引方式存储数据;
  • 具有length属性;
  • 没有数组的push、shift、pop等方法;

伪数组大概长这样: {0:"你好",1:1000,length:2 }

常见的还有getElementsByTagName、ele.childNodes等返回的NodeList对象,或者自定义的某些对象,这些都可以是伪数组。可以运行下面代码,可以 看出arguments不是数组:

function fn() {
//检验是否是数组1
console.log(arguments instanceof Array);//false 
//检验是否是数组2
arguments.push(123); //arguments.push is not a function
}

fn(1,2);

将伪数组转成数组:
1.使用Array.prototype.slice.call();

//{0:"你好",1:1000,length:32 }该对象也是伪数组
Array.prototype.slice.call({0:"你好",1:1000,length:32 });  //["你好", 1000]

var fn = function(){
  console.log(
    Array.prototype.slice.call(arguments); //["你好", 1000]
  ); 
}
fn("你好",1000)

2、 使用[].slice.call()

//这个方法和方法1一样. 熟悉原型链的小伙伴可以理解  Array.prototype === [].__proto__ (true)
[].slice.call({0:"你好",1:1000,length:2 }) //["你好", 1000]

3.ES6中Array.from方法;

Array.from.call({0:"你好",1:1000,length:2 })//["你好", 1000]

溜了溜了~

你可能感兴趣的:(js将Arguments(伪数组)转化成数组方法)