什么是arguments?

它是JS的一个内置对象 .函数内部的类数组对象。因为在js函数对象中传递的形参 可以传也可以不传,若方法里没有写参数却传入了参数,该如何拿到参数呢,答案就是arguments了

js语法不支持重载!但可用arguments对象模拟重载效果。

arguments对象:函数对象内,自动创建的专门接收所有参数值得类数组对象。

arguments[i]: 获得传入的下标为i的参数值

arguments.length: 获得传入的参数个数!

案例:

     // arguments并不能使用数组方法function str(a, b) {console.log(arguments);// 数据类型  objectconsole.log(typeof arguments);// 赋值   arguments[0] = "";// length长度属性console.log(arguments.length);// 只能通过length强制将数组拉长arguments.length = 15;for (var i = 0; i < arguments.length; i++) {console.log(arguments[i]);}}//赋值实参 str("sum", [1, 2, 3, 4, 5, 6, 7, 8, 9], {age: 15});

这里可以看出arguments可以把实参中的值打印出来 无论是字符串还是数组 还是k v键值队

而    arguments的数据类型是object  你遍历它以后它可以把每一项打印出来 当然   你也可以进行赋值 甚至拉长 arguments的差别长度 而拉长它的长度通过length赋值    没有定义的实参定义undefined

此外,我们可以看到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。

2. 第二个属性length,我们经常在数组或者类数组中看到,可以看到arguments的原型索引__proto__的值为Object,故此我们推测arguments不是数组,而是一个类数组对象。

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

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

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

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

 
let arr = ['a', 'b', 'c'];let iter = arr[Symbol.iterator]();iter.next() // { value: 'a', done: false }iter.next() // { value: 'b', done: false }iter.next() // { value: 'c', done: false }iter.next() // { value: undefined, done: true }

在arguments中有同样的效用。

js中arguments理解相关推荐

  1. 探究js中arguments

     类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做argume ...

  2. js中arguments的用法

    了解这个对象之前先来认识一下javascript的一些功能: 其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载.Javascrip中国每个函数都会有一个Argume ...

  3. js中arguments的使用

    参考: https://www.cnblogs.com/LMJBlogs/p/6024148.html /**** arguments :* 1. 此对象能够模拟重载(参数个数不同)* 2. 每个函数 ...

  4. js中arguments的理解

    一.在函数调用的时候,浏览器每次都会传递进来两个隐式参数 1.函数的上下文对象this 2.封装实参的对象arguments 二.arguments对象 1.arguments对象实际是所在函数的一个 ...

  5. JS中arguments对象的属性-callee详解

    callee则不是函数对象的属性,它是函数上下文中arguments对象的属性 function func() {alert(arguments.callee); } 它引用的是函数自身,在上面的代码 ...

  6. c语言中正数按位取反,js中怎么理解按位取反?

    第一位同学写的挺好的,但一开始我没太明白为什么这样计算?,以下是学习做的笔记. 首先我们先要明白有符号整数,有符号整数的最高位表示的是符号位,0 为正数,1 为负数,例如(为方便理解,使用八位二进制) ...

  7. 深入理解JS中this关键字

    为什么要使用this关键字 看个例子 function indetify() {retun this.name.toUpperCase()}var obj = {name: 'zz'}indetify ...

  8. Js中匿名函数的理解

    目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...

  9. 深入理解js中实现继承的原理和方法

    原型对象继承 原理:原型对象的属性可以经由对象实例访问 下面的例子,所含[对象继承]和[构造函数继承],用于理解[原型属性经由对象实例访问] //对象继承 var person = {name:&qu ...

最新文章

  1. 构造 ---- D. AB Graph(偶数和3远环的关系)
  2. Redis实现分布式锁1
  3. Servlet 的常见错误总结
  4. 还有多少时间可以用来读书
  5. Kubernetes 1.20 版本开始将弃用 Docker,是时候拥抱 Containerd 和 Podman 了!
  6. C语言小项目(画机器猫)
  7. 那些月薪过万的程序员都是从什么时间开始的?
  8. L1-003. 个位数统计-PAT团体程序设计天梯赛GPLT
  9. Jexl表达式引擎-根据字符串动态执行JAVA
  10. python pywinauto 单击鼠标_10分钟教你用 Python 控制键盘和鼠标
  11. python实验总结与分析_Python程序设计实验一报告
  12. java删除浏览器cookies_清除浏览器cookie
  13. JAVA SSO单点登录原理以及实现方案
  14. 出售计算机广告英文作文,英语四级作文参考范文:二手电脑广告
  15. Linux运维必须掌握的27道面试题
  16. excel 文件中新建的无法打开
  17. x射线 相衬成像 matlab模拟,X射线相衬成像系统与成像方法
  18. python表示分数_python分数怎么表示什么
  19. 《学雷锋日-志愿者服务行动》
  20. 基于GMapping的栅格地图的构建

热门文章

  1. 医院招护士要过计算机二级吗,一般医院护士招聘考试都考什么内容呀
  2. 马里兰大学计算机专业水平,马里兰大学帕克分校计算机工程本科专业.pdf
  3. 要不起对三队 冲刺集合
  4. [自己做个游戏服务器二] 游戏服务器的基石-Netty全解析,有例子,多图解释
  5. New Kingdom of Egypt(新国王时期)
  6. php 串口通讯,PHP使用RS232串口通讯传送文件的应用演示
  7. 小程序开发零门槛教程
  8. 老系统微服务改造经验谈
  9. The user specified as a definer does not exist
  10. JS运行原理与机制(乾坤未定,你我皆是黑马4-5)