gpt4 book ai didi

javascript - 对参数和其他对象进行切片

转载 作者:行者123 更新时间:2023-12-01 02:54:08 25 4
gpt4 key购买 nike

我知道这是一种反模式:

var args = Array.prototype.slice.call(arguments, 0);

但是我的问题只是关于这行代码。我不知道为什么它有效。例如,当我打印出参数对象时

function test(){
console.log(arguments);
}

test(1,2)
//Outputs: { '0': 1, '1': 2 }

如果我对参数对象进行切片

function test(){
console.log(Array.prototype.slice.call(arguments));
}
test (1,2)
//Outputs: [1,2]

我会在数组中获取参数。即使我向参数对象附加一些内容,切片仍然会产生数组中的参数:

function test(){
arguments['2'] = 3;
console.log(arguments)
console.log(Array.prototype.slice.call(arguments));
}

test (1,2)
//Outputs: { '0': 1, '1': 2, '2': 3 }
//[ 1, 2 ]

如果它将一个对象作为对象放入 slice.call

Array.prototype.slice.call({'0':1, '1':2}, 0)

我会得到一个空数组。知道为什么切片适用于参数对象吗?

最佳答案

因为它是 array like objectlength 属性。如果您将 length 添加到带有数字键的对象(非数字键将被忽略),则生成的数组将包含这些值。

console.log([].slice.call({'0':1, '1':3, a: '5', length: 2}, 0));

注释:

  1. [].sliceArray.prototype.slice 的简写。

  2. Slicing arguments to array 在 ES5 中被广泛使用。不幸的是,它会导致内存泄漏(请参阅 optimisation killers )。

  3. 在 ES6 中,您可以使用 rest parameter function x(...args) 和 args 将是一个数组。

关于javascript - 对参数和其他对象进行切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46819108/

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