类数组对象 实参对象arguments

先看实参对象arguments

之前对argument有点印象,知道它不是真正的数组,但也可以arguments[0]和arguments.length。今天详细的记录一下。

js的默认行为:省略的实参是undefined,多余的实参自动忽略

function a(b,c){
   //把类数组对象转为数组
   console.log(Array.prototype.slice.call(arguments));
   console.log(arguments);
   console.log(‘b:‘+b+‘;c:‘+c);
  //arguments[0]可以改变b的值
   arguments[0] = ‘sfp‘;
   console.log(‘b:‘+b);
  //callee和caller调用方式不同
   console.log(‘callee:‘+arguments.callee);
   console.log(‘caller:‘+a.caller);
}
function test(){
  a(0);
  a(1,2,3);
}
test();

严格与非严格的区别

严格下,arguments是保留字;非严格下,arguments是标示符

callee和caller在严格下,读写错误;非严格下,callee 

类数组对象:犀牛书上没什么看的。

时间: 2024-10-09 09:14:50

类数组对象 实参对象arguments的相关文章

JavaScript服务器端开发(函数实参对象arguments使用的几个注意事项)

为什么引入实参对象arguments 在JS开发中,每一个函数都对应一个实参对象,称为arguments.这个对象引用的目的是为了解决如下问题: 当调用函数的时候传入的实参个数超过函数定义时的形参个数时,没有办法直接获得未命名值的引用. 因为JS函数定义与调用极其灵活,参数个数是不确定的,而且系统也不会作自动检测.这为开发带来灵活性的同时也带来相当的麻烦.下文将结合实际开发中使用到arguments时经常遇到的几个"麻烦"进行讨论,并给出对应的解决方案. 在函数体内,标识符argume

类数组转数组,对象转数组

1.类数组转数组 //类数组示例 //javascript中常见的类数组有arguments对象和DOM方法的返回结果.//比如 document.getElementsByTagName(). var a = {'1':'gg','2':'love','4':'meimei',length:5}; Array.prototype.join.call(a,'+');//'+gg+love++meimei' //非类数组示例 var c = {'1':2}; //没有length属性就不是类数组

JavaScript之jQuery-6 jQuery 类数组的操作

一.jQuery 类数组的操作 类数组简介 - jQuery 对象封装的多个 DOM 对象 - 类: 指的是类似 - 具备自己特有的操作方法 类数组的操作 - length属性 - each(fn)遍历类数组,fn用来处理DOM对象.在fn中this表示正在被遍历的那个DOM对象.fn函数正在被遍历的那个DOM对象.fn函数可以添加一个参数i用于表示正在被遍历的DOM对象的下标(从0开始) - eq(index):将下标等于index的DOM对象取出来 - get(): 返回一个DOM对象组成的

call(),apply()方法和类数组对象arguments

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 <script type="text/javascript"> 7 /* 8 call(),apply() 9 这两个方法都是函数对象的方法,需要通过函数对象来调用 10 当对函数调用call()和apply()都会调用函数

arguments类数组对象

------------   ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数. --------------------------JS函数没有真正意义上的重载. 在函数内部有两个特殊的对象 : arguments和this. 当函数被调用时,传入的参数将保存在arguments类数组对象中,通过arguments可以访问所有该函数被调用时传递给它的参数列表. arguments并不是一个真正的数组,而是一个“类似数组(array-like)”的对象,因为arguments

2、函数内部属性 arguments是类数组对象,主要用途是保存函数参数,但这个对象中有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

例如:(1).function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }//此时是递归算法 var trueFactorial=factorial;//将factorial复制给trueFactorial factorial=function(){ return 0; }//覆盖factorial函数 alert(trueFactorial(5));//0;因为辞职factorial

将一个类数组对象转化为数组的几种方法

1.slice 语法:slice(begin,end) 方法选择一个从开始到结束(不包括结束)的数组的一部分浅拷贝到一个新的数组对象,方法不会改变原数组.如果是对象则拷贝对象的引用到新数组,如果是基本类型则会拷贝这些值到新数组. 如果省略begin则会从0开始.如果end被省略则会抽取到最后一个元素,如果end数值大于数组长度则会抽取到最后一个元素. 使用Array.prototype.slice.call(arguments)可以将类数组转化为数组对象,[].slice.call(argume

观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的"入口",内部经过参数.类型

[Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bits.bitAt(4);//1 bits.bitAt(8);//1 bits.bitAt(9);//0 enable方法被重载了,可以传入一个索引或索引的数组.第二个类的API是字符串集合:无序的字符串集合 var set=new StringSet(); set.add('Hamlet'); se