arguments的理解?

╰半橙微兮° 2022-12-28 11:12 340阅读 0赞

arguments是一个内置对象,伪数组,看似数组但是不能用数组的方法

  1. function fun(){
  2. console.log(arguments);
  3. }
  4. fun('tom',[1,2,3],{name:'Janny'});

可以看到下面打印出来的结果,arguments是有值的,它的值就是我们传递进去的参数,虽然我们没有给fun函数定义形参,但是我们还是可以通过arguments来调用传递给函数fun的实参。

70

此外,我们可以看到arguments还有属性callee,length和迭代器Symbol。

  1. 我们发现callee的值是函数fun,是不是说callee指向函数fun,我们来测试一下

    function fun(){

    // console.log(arguments);

    console.log(‘arguments.callee === fun的值:’,arguments.callee === fun);

    }

    fun(‘tom’,[1,2,3],{name:’Janny’});

结果如我们想的一样,callee就是指向函数fun。

70 1

  1. 第二个属性length,我们经常在数组或者类数组中看到,可以看到arguments的原型索引__proto__的值为Object,故此我们推测arguments不是数组,而是一个类数组对象。
  1. function fun(){
  2. console.log(arguments instanceof Array);
  3. console.log(Array.isArray(arguments));
  4. }
  5. fun('tom',[1,2,3],{name:'Janny'});

结果打印出来的值都是false,说明arguments不是数组,而是一个类数组对象。

70 2

  1. 第三个属性是个Symbol类型的键,该类型的值都是独一无二的,该键指向的值是一个values函数,

该值是一个生成迭代器的函数,下面是ES6入门的部分文档。

  1. let arr = ['a', 'b', 'c'];
  2. let iter = arr[Symbol.iterator]();
  3. iter.next() // { value: 'a', done: false }
  4. iter.next() // { value: 'b', done: false }
  5. iter.next() // { value: 'c', done: false }
  6. iter.next() // { value: undefined, done: true }
  7. //在arguments中有同样的效用。
  8. function fun(){
  9. console.log(arguments[Symbol.iterator]);
  10. let iterator = arguments[Symbol.iterator]();
  11. console.log('iterator:',iterator);
  12. console.log(iterator.next());
  13. console.log(iterator.next());
  14. console.log(iterator.next());
  15. console.log(iterator.next());
  16. }
  17. fun('tom',[1,2,3],{name:'Janny'});
  18. 下面是arguments的迭代器枚举的值:

70 3

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读