传播运算符的缺失值
missing values from spread operator
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun()
{
console.log(arguments)
}
const fun1 = (...n) =>{
console.log(n)
}
fun.call(...arr1, ...arr2)
输出:[对象参数] {
0: -2,
1:3,
2:4,
3:8,
4:3,
5:-8,
6:1
}
fun1.call(...arr1,...arr2)
输出:[-2、3、4、8、3、-8、1]
arr1 和 arr2 加起来有 8 个值,但输出只有 7 个值,为什么?
如何获取所有值?
因为您已经使用 Function.prototype.call
调用 fun
,并且 call
的第一个参数不是 传递的参数到 fun
,它是在调用期间用作 this
的值。所以第一个值不会出现在 fun
看到的参数中(它是 this
的值,如果这是松散模式代码,则包装在对象包装器中)。
没有理由在您的示例中使用 fun.call
,只是:
fun(...arr1, ...arr2);
但如果您出于某种原因需要我们 call
,您将指定一个不同的第一个参数(在调用期间用作 this
):
fun.call(nullOrWhateverYouWantThisToBe, ...arr1, ...arr2);
(旁注:在现代 JavaScript 中,几乎没有任何理由使用 arguments
伪数组。改为使用剩余参数,这会为您提供一个真正的数组。)
有了这些变化:
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun(...args) {
console.log(`args.length = ${args.length}`);
console.log(`args:`, args);
}
fun(...arr1, ...arr2);
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun()
{
console.log(arguments)
}
const fun1 = (...n) =>{
console.log(n)
}
fun.call(...arr1, ...arr2)
输出:[对象参数] { 0: -2, 1:3, 2:4, 3:8, 4:3, 5:-8, 6:1 }
fun1.call(...arr1,...arr2)
输出:[-2、3、4、8、3、-8、1]
arr1 和 arr2 加起来有 8 个值,但输出只有 7 个值,为什么? 如何获取所有值?
因为您已经使用 Function.prototype.call
调用 fun
,并且 call
的第一个参数不是 传递的参数到 fun
,它是在调用期间用作 this
的值。所以第一个值不会出现在 fun
看到的参数中(它是 this
的值,如果这是松散模式代码,则包装在对象包装器中)。
没有理由在您的示例中使用 fun.call
,只是:
fun(...arr1, ...arr2);
但如果您出于某种原因需要我们 call
,您将指定一个不同的第一个参数(在调用期间用作 this
):
fun.call(nullOrWhateverYouWantThisToBe, ...arr1, ...arr2);
(旁注:在现代 JavaScript 中,几乎没有任何理由使用 arguments
伪数组。改为使用剩余参数,这会为您提供一个真正的数组。)
有了这些变化:
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
function fun(...args) {
console.log(`args.length = ${args.length}`);
console.log(`args:`, args);
}
fun(...arr1, ...arr2);