JavaScript中的Arguments对象
arguments是一个对应于传递给函数的参数的类数组(array-like)对象。 arguments对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。
1.arguments 的基本使用
对arguments对象常见的操作有三种:
- 获取参数的长度
- 根据索引值获取某一个参数
- callee获取当前arguments所在的函数
示例代码如下:
function foo (num1, num2, num3) {
console.log(arguments)
console.log(arguments.length)
console.log(arguments[2])
console.log(arguments[3])
console.log(arguments[4])
console.log(arguments.callee)
}
foo(10, 20, 30, 40, 50)
console.log(arguments.callee) 打印结果:
2.arguments转array数组
arguments对象不是一个 Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。例如,它没有 pop 方法。但是它可以被转换为一个真正的Array:
function foo(num1, num2) {
var newArr2 = Array.prototype.slice.call(arguments)
console.log(newArr2)
var newArr3 = [].slice.call(arguments)
console.log(newArr3)
var newArr4 = Array.from(arguments)
console.log(newArr4)
var newArr5 = [...arguments]
console.log(newArr5)
}
foo(10, 20, 30, 40, 50)
3.箭头函数中没有arguments
之前在学习this的时候,就提到了 箭头函数没有this与arguments。接下来就用案例测试一下:
var foo1 = () => {
console.log(arguments)
}
foo1()
function foo2 () {
var bar = () => {
console.log(arguments)
}
return bar
}
var fn = foo2(123)
fn()
4.扩展 —— ES6 剩余参数
剩余参数语法允许我们将一个不定数量的参数表示为一个数组。 语法:
function(a, b, ...theArgs) {
// ...
}
描述:如果函数的最后一个命名参数以…为前缀,则它将成为一个由剩余参数组成的真数组,其中从0(包括)到theArgs.length(排除)的元素由传递给函数的实际参数提供。 示例代码如下:
function sum (num1, ...nums) {
console.log(nums)
}
sum(10)
sum(10, 20)
sum(10, 20, 30)
sum(10, 20, 30, 40, 50)
|