当前位置: 代码迷 >> JavaScript >> arguments vs Array.prototype.slice.call(arguments,0)
  详细解决方案

arguments vs Array.prototype.slice.call(arguments,0)

热度:106   发布时间:2023-06-05 09:32:57.0

在函数中使用参数和Array.prototype.slice.call(arguments,0)有什么区别? 我看不到两者之间有什么太大的区别,所以我怎么知道何时应该使用哪一个呢?

 function arr(){ return arguments; // or return Array.prototype.slice.call(arguments,0); } arr([1,2,3],[4,5,6]); 

不同之处在于arguments“类似数组的”对象,而不是数组。

您可以通过切片将arguments对象转换为真实数组,如下所示

Array.prototype.slice.call(arguments, 0);

这为您提供了一个数组,具有诸如forEachpop等的数组属性,而像arguments这样的对象则没有(长度除外,而那些arguments确实具有)。

切片arguments对象通常(几乎)永远不是一个好主意, 会发出警告

您不应切入参数,因为它会阻止JavaScript引擎(例如V8)中的优化。 而是尝试通过遍历arguments对象构造一个新数组。

同样,没有真正必要将参数传递给函数,而只是返回它们。

arguments对象不是真正的数组。 它是一种特殊的对象,除“ length”外没有任何Array属性。

要从arguments对象创建数组,请使用Array.prototype.slice.call(arguments,0);

arguments变量是Object一种特殊类型,不是Array 因此,您不能.forEach使用.forEach.map ,'。 .forEach '和其他数组函数。

您必须将arguments转换为Array ,然后可以将值用作数组

 function test(){ console.log(arguments.forEach); // undefined var argsArray = Array.prototype.slice.call(arguments,0); console.log(argsArray.forEach); // function } test(); 

  相关解决方案