gpt4 book ai didi

javascript - 扩展运算符缺失值

转载 作者:行者123 更新时间:2023-12-02 02:21:23 26 4
gpt4 key购买 nike

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调用 funcall 的第一个参数不是传递给 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);

关于javascript - 扩展运算符缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66365785/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com