曾遇到一个题目如下:
函数中的 arguments 了解吗?它是数组吗?如果不是,如何把 arguments 转换为数组?至少两种方法。
首先,函数中的 arguments 是一个对象,不是一个数组,严格来说它是一个类数组对象。
1. 类数组对象不能调用数组原型上的方法,它本质上是一个对象。
var foo = function(a,b){
return Object.prototype.toString.call(arguments)
}
console.log(foo(1,2)) //[object Arguments]
2.调用数组的原型方法来转换
var foo = function(a,b){
var arr = Array.prototype.slice.call(arguments);
console.log(arr)
}
foo(1,2) //(2) [1, 2]
3.使用ES6的新语法 Array.from() 来转换
Array.from 方法用于将两类对象转为真正的数组:类似数组的对象和可遍历对象(包括Set和Map)。
var foo = function(a,b){
var arr = Array.from(arguments);
console.log(arr)
}
foo(1,2) // (2) [1, 2]