扩展运算符的缺失值

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,并且to的第一个参数call 不是要传递给 的参数fun,所以它是this在调用期间使用的值。所以第一个值不会出现在参数funsees 中(this如果这是松散模式代码,它是 的值,包装在对象包装器中)。

没有理由fun.call在您的示例中使用,只是:

fun(...arr1, ...arr2);
fun(...arr1, ...arr2);

但是如果您call出于某种原因需要我们,您可以指定一个不同的第一个参数(this在通话期间使用):

fun.call(nullOrWhateverYouWantThisToBe, ...arr1, ...arr2);

(旁注:在现代 JavaScript 中,几乎没有任何理由使用arguments伪数组。改用 rest 参数,它会给你一个真正的数组。)

随着这些变化:


以上是扩展运算符的缺失值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>