美文网首页
【JS】arguments那些事

【JS】arguments那些事

作者: 匿于烟火中 | 来源:发表于2020-04-21 22:03 被阅读0次

arguments对象

arguments对象是function(非箭头函数)中一个特殊的局部变量。
ECMA262中对它是这么描述的:

其数组索引属性映射到其相关函数调用的形式参数绑定

我们可以看出它的内容,跟函数的形参有关,看下面的例子

function test(){
  console.log(arguments);
}
test(1,2);
test(1,2,3,4);
arguments

从arguments对象输出的内容我们可以看出

  • arguments内部的元素,跟函数实际传入参数的数值一致
  • 其index对应的数值,跟实际参数出传入的顺序也是一一对应的
  • 函数每次执行有自己的arguments对象
arrray实例
对比argumentsarray实例,我们可以看出来,首先它们相似的地方,就是都能够以这种index:value的实行保存值,但是他们的__proto__说明了他们不是同一个类型。
arguments的原型指向的是Object,而array的原型指向的是Array,所以arguments严格来说不是个数组,一般我们把它称作是伪数组或者类数组
arguments和array的异同点,我们可以简单总结为
同:
  • 都有内置的length属性,保存值的方式都是index:value形式
    异:
  • 原型不同,arguments原型是Object,因此不能调用Array原型上的各种操作方法
  • arguments有内置的Symbol(Symbol.iterator)属性

我们看到,arguments里面有Symbol(Symbol.iterator)属性,看到这个属性,如果我们了解Iterator的话,就知道,说明arguments是可以被for..of遍历的,所以,它可以被转换成一个数组对象。

arguments转为Array
Array.prototype.slice.call(arguments);
[].slice.call(arguments);

Array.prototype.slice方法不要求其this一定要是Array Object,只要当前this具有length属性以及形如index:value这种数据形式就可以转换为Array。
ECMA262-sec-array.prototype.slice
所以用callslice当前方法改为arguments,最后就可以返回一个由arguments转换而来的新数组。

MDN-arguments
JavaScript arguments 对象全面介绍

arguments的性能问题

Optimization killers

相关文章

网友评论

      本文标题:【JS】arguments那些事

      本文链接:https://www.haomeiwen.com/subject/apqmbhtx.html